数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

ORACLE备份策略(ORACLEBACKUPSTRATEGY)


发布日期:2019年04月04日
 
ORACLE备份策略(ORACLEBACKUPSTRATEGY)
了解备份的重要性

可以说从计算机系统出世的那天起就有了备份这个概念计算机以其强大的速度处理能力取代了很多人为的工作但是往往很多时候它又是那么弱不禁风主板上的芯片主板电路内存电源等任何一项不能正常工作都会导致计算机系统不能正常工作当然这些损坏可以修复不会导致应用和数据的损坏但是如果计算机的硬盘损坏将会导致数据丢失此时必须用备份恢复数据

其实在我们的现实世界中已经就存在很多备份策略如RAID技术双机热备集群技术发展的不就是计算机系统的备份和高可用性吗?有很多时候系统的备份的确就能解决数据库备份的问题如磁盘介质的损坏往往从镜相上面做简单的恢复或简单的切换机器就可以了但是上面所说的系统备份策略是从硬件的角度来考虑备份与恢复的问题这是需要代价的我们所能选择备份策略的依据是丢是数据的代价与确保数据不丢失的代价之比还有的时候硬件的备份有时根本满足不了现实需要假如你误删了一个表但是你又想恢复的时候数据库的备份就变的重要了ORACLE本身就提供了强大的备份与恢复策略这里我们只讨论ORACLE备份策略以下的备份都是指ORACLE数据库备份恢复将放到下一讲中

所谓备份就是把数据库复制到转储设备的过程其中转储设备是指用于放置数据库拷贝的磁带或磁盘能够进行什么样的恢复依赖于有什么样的备份作为 DBA有责任从以下三个方面维护数据库的可恢复性

·使数据库的失效次数减到最少从而使数据库保持最大的可用性

·当数据库不可避免地失效后要使恢复时间减到最少从而使恢复的效率达到最高

·当数据库失效后要确保尽量少的数据丢失或根本不丢失从而使数据具有最大的可恢复性

灾难恢复的最重要的工作是设计充足频率的硬盘备份过程备份过程应该满足系统要求的可恢复性例如如果数据库可有较长的关机时间则可以每周进行一次冷备份并归档重做日志对于*的系统或许我们考虑的只能是热备份 如果每天都能备份当然会很理想但要考虑其现实性企业都在想办法降低维护成本现实的方案才可能被采用只要仔细计划并想办法达到数据库可用性的底线花少量的钱进行成功的备份与恢复也是可能的

了解ORACLE的运行方式

ORACLE数据库有两种运行方式一是归档方式(ARCHIVELOG)归档方式的目的是当数据库发生故障时最大限度恢复数据库可以保证不丢失任何已提交的数据二是不归档方式(NOARCHIVELOG)只能恢复数据库到最近的回收点(冷备份或是逻辑备份)我们根据数据库的高可用性和用户可承受丢失的工作量的多少对于生产数据库强烈要求采用为归档方式那些正在开发和调试的数据库可以采用不归档方式

如何改变数据库的运行方式在创建数据库时作为创建数据库的一部分就决定了数据库初始的存档方式一般情况下为NOARCHIVELOG方式当数据库创建好以后根据我们的需要把需要运行在归档方式的数据库改成ARCHIVELOG方式

改变不归档方式为为归档方式

a关闭数据库备份已有的数据改变数据库的运行方式是对数据库的重要改动所以要对数据库做备份对可能出现的问题作出保护

b 修改初试化参数使能自动存档修改(添加)初始化文件init[SID]ora参数

log_archive_start=true   #启动自动归档

log_archive_format=ARC%T%Sarc #归档文件格式

log_archive_dest=/arch/arch  #归档路径

i中可以最多有五个归档路径并可以归档到其它服务器如备用数据库(standby database)服务器

c启动Instance到Mount状态即加载数据库但不打开数据库

$>SVRMGRL

SVRMGRL >connect internal

SVRMGRL >startup mount

  

d发出修改命令

SVRMGRL >alter database archivelog;

SVRMGRL>alter database open;

改变归档状态为不归档状态

  

与以上步骤相同但有些操作不一样主要是在以上的b操作中现在为删除或注释该参数在d操作中命令为SVRMGRL >alter database noarchivelog;注意从归档方式转换到非归档方式后一定要做一次数据库的全冷备份防止意外事件的发生

ORACLE备份的分类

简单的按照备份进行的方式可以分为逻辑备份冷备份(脱机备份)热备份(联机备份)其实冷备份与热备份又可以合称为物理备份按照备份的工具可以分为EXP/IMP备份OS拷贝RMAN第三方工具如VERITAS 以下我们将从多个角度来说明以上的各种备份方式

EXP/IMP逻辑备份

导入/导出是ORACLE幸存的最古老的两个命令行工具了其实我从来不认为Exp/Imp是一种好的备份方式正确的说法是Exp/Imp只能是一个好的转储工具特别是在小型数据库的转储表空间的迁移表的抽取检测逻辑和物理沖突等中有不小的功劳当然我们也可以把它作为小型数据库的物理备份后的一个逻辑辅助备份也是不错的建议对于越来越大的数据库特别是TB级数据库和越来越多数据仓库的出现EXP/IMP越来越力不从心了这个时候数据库的备份都转向了RMAN和第三方工具下面我们还是简要介绍一下EXP/IMP的使用

i使用方法

Exp parameter_name=value

Or Exp parameter_name=(valuevalue……)

只要输入参数help=y就可以看到所有帮助

C:\>set nls_lang=simplified chinese_chinazhsgbk

C:\>exp help

Export: Release Production on 星期四 ::

(c) Copyright Oracle CorporationAll rights reserved

通过输入 EXP 命令和用户名/口令您可以在用户 / 口令之后的命令:

实例: EXP SCOTT/TIGER

或者您也可以通过输入跟有各种参数的 EXP 命令来控制导出 的运行方式要指定参数您可以使用关键字:

格式: EXP KEYWORD=value 或 KEYWORD=(valuevaluevalueN)

实例: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMPDEPTMGR) 或 TABLES=(T: PT: P)如果 T 是分区表USERID 必须是命令行中的第一个参数关键字说明(默认)  关键字  说明(默认)

USERID 用户名/口令    FULL   导出整个文件 (N)

BUFFER 数据缓沖区的大小    OWNER  所有者用户名列表

FILE 输出文件 (EXPDATDMP)  TABLES   表名列表

COMPRESS 导入一个范围 (Y) RECORDLENGTHIO 记录的长度

GRANTS导出权限 (Y)    INCTYPE  增量导出类型

INDEXES 导出索引 (Y)   RECORD   跟蹤增量导出 (Y)

ROWS  导出数据行 (Y)   PARFILE  参数文件名

CONSTRAINTS 导出限制 (Y)  CONSISTENT 交叉表一致性

LOG  屏幕输出的日志文件  STATISTICS分析对象 (ESTIMATE)

DIRECT 直接路径 (N)    TRIGGERS 导出触发器 (Y)

FEEDBACK 显示每 x 行 () 的进度

FILESIZE 各转储文件的最大尺寸

QUERY  选定导出表子集的子句

下列关键字仅用于可传输的表空间TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N) TABLESPACES 将传输的表空间列表

在没有警告的情况下成功终止导出

C:\>

帮助已经很详细的说明了参数的意义和使用方法并列举了几个简单的例子注意的是i开始已经开始支持数据子集的方法就是可以指定自己的Where条件可以从表中导出一行或多行数据注意上面的set nls_lang=simplified chinese_chinazhsgbk通过设置环境变量可以让exp的帮助以中文显示如果set nls_lang=American_america字符集那么你的帮助就是英文的了增量和累计导出必须在全库方式下才有效而且大多数情况下增量和累计导出并没有想象中的那么有效ORACLE从i开始不再支持增量导出和累计导出

ii表空间传输

表空间传输是i新增加的一种快速在数据库间移动数据的一种办法是把一个数据库上的格式数据文件附加到另外一个数据库中而不是把数据导出成Dmp文件这在有些时候是非常管用的因为传输表空间移动数据就象复制文件一样快关于传输表空间有一些规则

·源数据库和目标数据库必须运行在相同的平台上

·源数据库与目标数据库必须使用相同的字符集

·源数据库与目标数据库一定要有相同大小的数据块(i已经不用)

·目标数据库不能有与迁移表空间同名的表空间

·SYS的对象不能迁移

·必须传输自包含的对象集

·有一些对象如物化视图基于函数的索引等不能被传输

可以用以下的方法来检测一个表空间或一套表空间是否符合传输标准

exec sysdbms_ttstransport_set_check(tablespace_nametrue);

select * from systransport_set_violation;

如果没有行选择表示该表空间只包含表数据并且是自包含的对于有些非自包含的表空间如数据表空间和索引表空间可以一起传输以下为简要使用步骤如果想参考详细使用方法也可以参考ORACLE联机帮助

a设置表空间为只读(假定表空间名字为APP_Data 和APP_Index)

alter tablespace app_data read only;

alter tablespace app_index read only;

b发出EXP命令

SQL>host exp userid=sys/password as sysdba

transport_tablespace=y tablespace=(app_data app_index)

以上需要注意的是

·为了在SQL中执行EXPUSERID必须用三个引号在UNIX中也必须注意避免/的使用

·在和以后必须使用sysdba才能操作

·这个命令在SQL中必须放置在一行(这里是因为显示问题放在了两行)

c拷贝数据文件到另一个地点即目标数据库可以是cp(unix)或copy(windows)或通过ftp传输文件(一定要在bin方式)

  

d把本地的表空间设置为读写

  

e在目标数据库附加该数据文件

imp file=expdatdmp userid=sys/password as sysdba

  transport_tablespace=y

  datafile=(c:\temp\app_datac:\temp\app_index)

f设置目标数据库表空间为读写

alter tablespace app_data read write;

alter tablespace app_index read write;

iii导出/导入与字符集

明白ORACLE的多国语言设置ORACLE多国语言设置是为了支持世界范围的语言与字符集一般对语言提示货币形式排序方式和CHARVARCHARCLOBLONG字段的数据的显示等有效ORACLE的多国语言设置最主要的两个特性就是国家语言设置与字符集设置国家语言设置决定了界面或提示使用的语言种类字符集决定了数据库保存与字符集有关数据(如文本)时候的编码规则正如刚才上面的一个小例子环境变量NLS_LANG的不同导致EXP帮助发生变化这就是多国语言设置的作用(NLS_LANG包含国家语言设置与字符集设置这里起作用的是国家语言设置而不是字符集)

ORACLE字符集设定分为数据库字符集和客户端字符集环境设置在数据库端字符集在创建数据库的时候设定并保存在数据库props$表中对于i以上产品已经可以采用Alter database character set 字符集来修改数据库的字符集但也仅仅是从子集到超集不要通过update props$来修改字符集如果是不支持的转换可能会失去所有与字符集有关的数据就是支持的转换也可能导致数据库的不正常工作字符集分为单字节字符集与多字节字符集USASCII就是典型的单字节字符集在这种字符集中length=lengthb而ZHSGBK就是常用的双字节字符集在这里lengthb=*length

在客户端的字符集环境比较简单主要就是环境变量或注册表项NLS_LANG注意NLS_LANG的优先级别为参数文件à注册表à环境变量àalter sessionNLS_LANG的组成为国家语言设置字符集如nls_lang=simplified chinese_chinazhsgbk客户端的字符集最好与数据库端一样(国家语言设置可以不一样如zhsgbk的字符集客户端可以是nls_lang =simplified chinese_chinazhsgbk或Ameircan_Americazhsgbk都不影响数据库字符的正常显示)如果字符集不一样而且字符集的转换也不兼容那么客户端的数据显示与导出/导入的与字符集有关的数据将都是乱码

使用一点点技巧就可以使导出/导入在不同的字符集的数据库上转换数据这里需要一个进制文件编辑工具即可如uedit用编辑方式打开导出的dmp文件获取字节的内容 先把它转换为进制数使用函数NLS_CHARSET_NAME即可获得该字符集

SQL> select nls_charset_name() from dual;

NLS_CHARSET_NAME()

USASCII

可以知道该dmp文件的字符集为USASCII如果需要把该dmp文件的字符集换成ZHSGBK则需要用NLS_CHARSET_ID获取该字符集的编号

SQL> select nls_charset_id(zhsgbk) from dual;

NLS_CHARSET_ID(ZHSGBK)

换成进制数字节的 换成 即完成了把该dmp文件字符集从usascii到zhsgbk的转化这样再把该dmp文件导入到zhsgbk字符集的数据库就可以了(注意十进制数与十六进制之间的转换想明白其中的道理)

Iv跨版本使用Exp/Imp

Exp/Imp很多时候可以跨版本使用如在版本与版本之间导出导入数据但这样做必须选择正确的版本规则为

·总是使用IMP的版本匹配数据库的版本如果要导入到则使用的导入工具

·总是使用EXP的版本匹配两个数据库中低的那个版本如在之间互导则使用的EXP工具

OS备份

操作系统备份有两类冷备份(Cold backup)与热备份(Hot backup)操作系统备份与以上的逻辑备份有本质的区别逻辑备份提取数据库的数据内容而不备份物理数据块而操作系统备份则是拷贝整个的数据文件

i冷备份

在文件级备份开始前数据库必须彻底关闭关闭操作必须用带有normalimmediatetransaction选项的shutdown来执行 数据库使用的每个文件都被备份下来这些文件包括

☆所有数据文件

☆所有控制文件

☆所有联机REDO LOG 文件

☆INITORA文件(可选)

作冷备份一般步骤是

  a正常关闭要备份的实例(instance);

  b备份整个数据库到一个目录

c启动数据库

     SVRMGRL>connect internal

     SVRMGRL >shutdown immediate

     SVRMGRL >! cp <file> <backup directory>

     或

     SVRMGRL >!tar cvf /dev/rmt/ /u/oradata/prod

     SVRMGRL >startup

  

注意如果利用脚本对数据库进行冷备份必须对关闭数据库的命令进行逻辑检查如果发生关闭数据库的命令不能正常执行而导致数据库没有正常关闭那么所有的冷备份将回是无效的

ii热备份

热备份是当数据库打开并对用户有效是的OS级的数据备份热备份只能用于ARCHIVELOG方式的数据库在数据文件备份之前对应的表空间必须通过使用ALTER TABLESPACE …… BEGIN BACKUP以备份方式放置然后组成表空间的数据文件可以使用类似冷备份的操作系统命令进行拷贝在数据文件用操作系统命令拷贝后应使用ALTER TABLESPACE …… END BACKUP命令使表空间脱离热备份方式

热备份没有必要备份联机日志但必须是归档状态在实例恢复的时候可能需要用到归档日志当前联机日志一定要保护好或是处于镜相状态当前联机日志的损坏对于数据库的损坏是巨大的只能以数据的丢失来进行数据库的恢复工作

对于临时表空间存放的是临时信息在热备份是也可以考虑不用备份如果临时文件发生故障可以删除该数据文件与表空间重建一个临时表空间热备份的优点是显而易见的

a.可在表空间或数据文件级备份备份时间短

b.备份时数据库仍可使用

c.可达到秒级恢复(恢复到某一时间点上)

d.可对几乎所有数据库实体作恢复

e.恢复是快速的在大多数情况下在数据库仍工作时恢复

操作系统作热备份的一般步骤为

①连接数据库 SVRMGRL>connect internal;

②将需要备份的表空间(如User)设置为备份方式 SVRMGRL>Alter tablespace User begin backup;

③拷贝数据文件 SVRMGRL>!cp /u/oradata/prod/userora /backup/prod/userora Or $cp cp /u/oradata/prod/userora /backup/prod/userora

④在数据文件拷贝完成后将表空间拖体备份方式 SVRMGRL>Alter tablespace User end backup;

⑤对所有需要备份的表空间重复

⑥使用如下的命令备份控制文件ALTER DATABSE …… BACKUP CONTROLFILE

如备份成二进制文件 alter database backup controlfile to new fielname;

备份成文本文件 alter database backup controlfile to trace;

因为热备份的时候用户还在操作数据库所以最好是每个表空间处于备份状态的时间最短这样就要求一个表空间一个表空间的备份不要一起使表空间处于备份状态而同时拷贝数据文件

  

注意如果在热备份的时候如果数据库中断(如断电)那么在重新启动数据库的时候数据库将提示有数据文件需要恢复你需要把正在断电时候的处于备份状态的数据文件通过ALTER TABLESPACE …… END BACKUP结束备份方式具体哪个数据文件或表空间处于备份状态可以通过v$backup与v$datafile来获得

RMAN(备份与恢复管理器)

i使用RMAN进行备份

Recovery manager(RMAN)是ORACLE提供的DBA工具用语管理备份和恢复操作RMAN只能用于ORACLE或更高的版本中它能够备份整个数据库或数据库部件其中包括表空间数据文件控制文件和归档文件RMAN可以按要求存取和执行备份和恢复

RMAN备份有如下优点

☆支持在线热备份

☆支持多级增量备份

☆支持并行备份恢复

☆减少所需要备份量

☆备份恢复使用简单

  

重要的是使用恢复管理器允许您进行增量数据块级的备份(这个与导出/导入的增量截然不同)增量RMAN备份是时间和空间有效的因为他们只备份自上次备份以来有变化的那些数据块另一个空间有效的RMAN特性是它只备份数据文件中使用的数据块忽略空的未用的数据块这个对于预分配空间的表空间有很大的好处i开始还增加了RMAN的数据块级别的恢复可以进一步减少数据库恢复时间

RMAN支持以下不同类型的备份

FULL数据库全备份包括所有的数据块

INCREMENTAL增量备份只备份自上次增量备份以来修改过的数据块需要一个级的增量作为增量的基础可以支持级增量

OPEN在数据库打开的时候使用

CLOSED在数据库安装(MOUNT)但不打开的时候备份关闭备份可以是CONSISTENT或IN CONSISTENT类型的

CONSISTENT在数据库安装单不打开并且在安装之前数据库被彻底关闭(而不是被破坏或异常退出)时使用CONSISTENT备份可以简单的进行复原(RESTORE)而不是恢复(RECOVER)

INCONSISTENT在数据库打开或安装(但不打开)时使用在该数据库正常关闭或崩溃后INCONSISTENT备份需要恢复

理解BACKUPRESTORERECOVER命令这是RMAN最基本的三个命令可以进行数据库的备份复原以及恢复操作理解恢复目录RMAN可以在没有恢复目录(NOCATALOG)下运行这个时候备份信息保存在控制文件保存在控制文件的备份信息是很危险的如果控制文件的破坏将导致备份信息的丢失与恢复的失败而且没有恢复目录很多RMAN的命令将不被支持所以对于重要的数据库建议创建恢复目录恢复目录也是一个数据库只不过这个数据库用来保存备份信息一个恢复目录可以用来备份多个数据库

创建RMAN目录以下步骤说明了在一个数据库中尽力RMAN目录的过程

a为目录创建一个单独的表空间SQL>Create tablespace tools datafile fielname size m;

b创建RMAN用户SQL>Create user RMAN identified by RMAN default tablespace tools temporary tablespace temp;

c给RMAN授予权限SQL>Grant connect resource recovery_catalog_owner to rman;

d打开RMAN $>RMAN

e连接数据库RMAN>connect catalog rman/rman

f创建恢复目录RMAN>Create catalog tablespace rman

注册目标数据库恢复目录创建成功后就可以注册目标数据库了目标数据库就是需要备份的数据库一个恢复目录可以注册多个目标数据库注册目标数据库的命令为$>RMAN target internal/password catalog rman/rman@rcdb; RMAN>Register database; 数据库注册完成就可以用RMAN来进行备份了更多命令请参考ORACLE联机手册或《ORACLEi备份与恢复手册》

RMAN使用脚本来备份数据库以下是RMAN进行备份的几个例子

a备份整个数据库 backup full tag basicdb format /bak/oradata/full_%u_%s_%p database;

b备份一个表空间backup tag tsuser format /bak/oradata/tsuser_%u_%s_%p tablespace users;

c备份归档日志 backup tag alog format /bak/archivebak/arcbak_%u_%s_%p archivelog all delete input;

ii维护RMAN

RMAN的维护主要分为几个方面

查看RMAN的信息

    检查现有备份

    RMAN>list backup

    列出过期备份

    RMAN>report obsolete

    删除过期的备份

    RMAN>allocate channel for maintenance type disk;

    RMAN>change backupset id delete;

    RMAN>release channel;

同步或重置RMAN 如果目标数据库物理对象发生了变化如添加了一个数据文件需要用如下命令同步 RMAN>resync catalog; 如果目标数据库reset了数据库需要用如下命令同步RMAN>reset database; 当手工删除了数据库的归档文件后要执行以下脚本同步RMAN>allocate channel for maintenance type disk;

RMAN> change archivelog all crosscheck; RMAN>release channel;当手工删除了数据库的RMAN备份后要执行以下脚本来同步RMAN>allocate channel for maintenance type disk; RMAN>crosscheck backup; RMAN>delete expired backup;

RMAN>release channel;

定制恰当的备份策略

i定制正确的策略

正确的备份策略不仅能保证数据库服务器的*的高性能的运行还能保证备份与恢复的快速性与可靠性我们将以RMAN的多级增量备份作为一个备份策略的例子来讨论采用多级备份就是为了减少每天备份所需要的时间而又保证系统有良好的恢复性恢复时间与备份时间要有一个权衡比如只要进行一个数据库的全备份然后就只备份归档也可以保证能把数据库恢复到最新的状态但是这样的恢复时间将是不可容忍的多级备份也正是 为了解决这种问题以下就是一个多级备份的例子

每半年做一个数据库的全备份(包括所有的数据和只读表空间)

每一个月做一次零级备份(不包含只读表空间)

每个星期做一次一级备份

每天做一次二级备份

任何数据库的更改需要重新同步CATALOG目录并重新备份(如添加数据文件)或重新备份(如修改表空间为只读)每次备份后都可以备份归档日志或定期备份归档日志如果可能可以直接备份到磁带上数据库全备份的脚本

run{

allocate channel c type disk;

allocate channel c type disk;

allocate channel c type disk;

backup full tag dbfull format /u/oradata/backup/full%u_%s_%p database

include current controlfile;

sql alter system archive log current;

backup fileaperset format /u/oradata/backup/arch%u_%s_%p

archivelog all delete input; #备份归档可选可以单独定期备份

release channel c;

release channel c;

release channel c;

}

零级备份的脚本

run{

allocate channel c type disk;

allocate channel c type disk;

allocate channel c type disk;

backup incremental level tag db format /u/oradata/backup/db%u_%s_%p

database skip readonly;

sql alter system archive log current;

backup fileaperset format /u/oradata/backup/arch%u_%s_%p

archivelog all delete input; #备份归档可选可以单独定期备份

release channel c;

release channel c;

release channel c;

}

同理我们可以得到一级备份二级备份的脚本如一级备份的脚本

run{

allocate channel c type disk;

allocate channel c type disk;

allocate channel c type disk;

backup incremental level tag db format /u/oradata/backup/db%u_%s_%p

database skip readonly;

sql alter system archive log current;

backup fileaperset format /u/oradata/backup/arch%u_%s_%p

archivelog all delete input; #备份归档可选可以单独定期备份

release channel c;

release channel c;

release channel c;

}

如果按照以上备份策略则每天的所需要备份的数据量只有一天的改变量而做恢复时最多要恢复当月的一个零级备份+三个一级备份+个二级备份+当天的归档文件如果不能接受这样的恢复时间可以减少零级备份之间的时间间隔

在每次备份后原则上在该备份点之前的归档日志就可以删除掉了但是为了进一步的安全以及日后需要(如使用LOGMNR查找所需信息)建议有条件的话归档日志保存一年可以保存在磁带等廉价存取设备上

ii与RMAN备份有关的优化

备份操作主要是完成以下三个步骤

从磁盘上读取数据

在内存中处理数据块

写入数据到磁盘或磁带

以上的读写操作可以同步或异步的完成在同步I/O操作中一个时间只允许有一个IO操作但是在异步I/O操作中一个时间允许有多个IO操作因此备份与恢复的调优主要集中在以下几个方面

提高同步或异步I/O操作能力在支持异步操作的操作系统上可以通过设置TAPE_AYSNCH_IODISK_ASYNCH_IO和BACKUP_TYPE_IO_SLAVES来支持异步操作提高写的能力

提高磁盘读能力可以在backup命令后通过设置DISKRATIO来保证从多个磁盘上读取数据保证连续的数据流

正确设置缓沖区与参数值设置LARGE_POOL_SIZE使备份可以使用连续的缓沖池通过设置DB_FIL_DIRECT_IO_COUNT可以提高缓沖区的利用如果使用磁带备份还可以设置BACKUP_TYPE_IO_SLAVES来提高磁带的写能力

采用并行备份开辟多个通道可以实现并行备份与恢复

iii备份RMAN数据库

RMAN自己的数据库也需要备份但是本身很小而且不是经常发生变化所以在每次RMAN备份完成后都可以用如下脚本对RMAN数据库备份

EXP pafile =exprmansql

exprmansql为

USERID=RMAN/RMAN

BUFFER=

OWNER=RMAN

FILE=RMANDMP

ROWS=Y

GRANTS=Y

COMPRESS=Y

CONSISTENT=Y

iv使自动备份数据库

自动备份数据库不外乎以下三种方式

WINDOWS下的任务计划(At命令)

UNIX下的Crontab

第三方工具如Viritas

在以上三种方式中Viritas属于第三方工具很多人可能都没有接触主要说一下windows的任务计划与unix的cron

生成脚本文件如backuprcv 假定文件内容如下

$>cat backuprcv

connect target sys/password rcvcat rman/rman@localname;

run{

allocate channel c type disk;

allocate channel c type disk;

allocate channel c type disk;

backup fileaperset format /u/oradata/backup/arch%u_%s_%p

archivelog all delete input;  

release channel c;

release channel c;

release channel c;

}

生成执行文件在windows上生成backup_archivebat内容包括rman cmdfile = backuprcv 在unix下生成 backup_archivesh内容包括oracle/ramn/rman cmdfile = backuprcv

加入调度在windows中用任务计划向导即可或使用at命令在unix中在目标机器上编写一个文件用以启动自动备份进程假定文件名为ORACLE文件将放在/var/spool/cron/crontabs目录下

$>cat oracle

* * backup_archivesh

#表示星期天点对数据库备份

* * * backup_archivesh

#表示每天点备份

Crontab文件的每一行由六个域(minuteshoursday of monthmonthday of weekcommand)组成域之间用空格或Tab分隔开来

常见误区

使用EXP/IMP备份

EXP/IMP不是一个良好的备份工具在以后的发展之中ORACLE对EXP/IMP用于备份的支持会越来越低ORACLE只是把EXP/IMP当作一个好的工具而不是备份工具在对于大型数据库如TB级数据库或数据仓库EXP/IMP肯定会力不从心

在应用程序中备份数据库

在论坛上有很多这样的要求我怎么在程序中备份与恢复数据库?首先说这个并不是不可以实现但是实现的过程会很复杂而且意外会很多就我的感觉提出这样问题的人首先一点就是对ORACLE或DBA的不了解如果ORACLE可以这么轻松的实现备份与恢复那么我可以说就不需要DBA了

冷备份比热备份更容易效果会更好

有人认为冷备份是关闭数据库进行的一致性备份肯定比热备份要好使用也容易其实不尽然在热备份中一样可以实现数据库的全备份而且不会影响到数据库的运行建议所有的生产机都运行在归档方式下采用热备份方式

常见问题

我导出的数据为什么不能导入提示不支持的字符集转换

参考上面的字符集原则导出数据时客户端与数据库字符集一致导入时修改为与目标数据库字符集一致

我的归档日志越来越多我什么时候可以删除归档日志?

在每一次全备份(如OS全冷备份或全热备份)或基于全备份的增量备份(如RMAN基于级备份上的增量备份)后都可以删除该备份点之前的归档日志建议在磁带上保留一年

全备份时一定需要备份所有数据文件吗?

不需要起码有两类数据文件可以不备份一类就是临时数据文件如果丢失可以删除后重建一类是只读表空间数据文件如果上次备份以来没有修改过表空间的只读属性就可以不需要备份

联机日志需要备份吗?

如果是归档方式热备份就没有必要备份联机日志但是对于冷备份可以备份联机日志特别是不归档状态备份过联机日志后的冷备份因为数据库是一致的可以恢复到该备份点

小结

什么是数据库备份数据库备份就是把数据库复制到转储设备的过程

数据库的运行方式可以分为归档方式和非归档方式建议运行在归档方式下运行热备份

了解了数据库的备份方式逻辑备份冷备份热备份

了解数据库的备份工具EXP/IMP执行逻辑备份OS脚本可以执行冷备份或热备份RMAN也可以执行冷备份或热备份

了解ORACLE的备份策略并怎样选择最佳的备份策略

知道怎么样启动自动备份了解Windows的at命令与unix的cron进程

参考文献

Expert Oneonone Oracle[美] Thomas Kyte 着 清华大学出版社

Oracle i Web开发指南 [美] Dan Hotkaet al 着 清华大学出版社

Oracle i DBA Architecture & Administration and backup & Recovery Study Guide

[美] Dong Stuns Biju Thomas着 电子工业出版社

Oracle 数据库管理员技术指南 [美] Sumit Sarin着 机械工业出版社

               

上一篇:oracle---Trigger触发器的使用

下一篇:Oracle初始参数与当前用户