技术开发 频道

ORCLE 数据库备份与恢复之四:RMAN(备份与恢复管理器)

4.7 高级主题

 4.7.1  使RMAN份集恢复DB到其他机器  (1规方法)
 
用途
利用生产 DB的备份集建立测试环境或备用数据库
 设置成相同的 DBID,不需要连接原始 DB,只需要利用 Catalog)
步骤
 
1备工作置目标DB环境
 
?      在目标 DB上设置 ORACLE相关的环境变量:记下生产 DB的 ORACLE_SID
DBID
$set ORACLE_SID=ming
?      在目标 DB创建与生产 DB相同的目录,将生产 DB pfile 文件 FTP到目标
DB,或者,在第二步中可以从备份集中进行恢复得到 PFILE。
?      在目标  DB  上创建生产  DB   RMAN  份集存放的目录,没有使用  catalog
情况时这点必然保持一样
?      移植备份集(确定包含控制文件,数据文件,归档文件)到目标  DB
?      配置网络连接
 
2目标DBnomount状态下恢复pfile controlfile
 
接恢复目录和目标数据库
$ RMAN target / catalog rman/rman@rcdb
RMAN > set DBID= 3324789823
RMAN > startup nomount
RMAN> restore spfile to pfile ‘/home/oracle/pfile’ [from ‘backupset name’]; RMAN> restore controlfile [to    'xx '] from '/xx/ ORADB_ctl_20070111_c-xx';
(控制文件的恢复可以参考 4.4.4.6  中其他方法)
 
3动目标DB    mount目标DBRestore Recover
 
RMAN> alter database mount; --可能会提示找不到密码文件,不用理 如果备份集的位置改变了,需要先进行交叉校验
RMAN> catalog start with '/newdir'; RMAN> crosscheck backup; RMAN> report schema;
然后 restore / recover  
RMAN> run {
allocate channel ch_disk_db_1 device type disk;
restore database;
recover database until sequence=2412 thread=1;
--最后一个 arachivelog的 sequence release channel ch_disk_db_1;
 
}
 
4Resetlogs  开目标  DB
 
联机日志文件并没有恢复,所以需要  resetlogs
SQL> alter database open resetlogs;
 
5.重建临时表空间,重建密码文件,立即备份数据库
 
重建临时表空间:
为备份时不备份临时文件,v$tempfile 中查询为空,所以可以增加一个文件即
可:
SQL>  alter  tablespace  temp  add  tempfile  '/u05/oracle/oradata/crm/temp01.dbf'  size
10M;
重建密码文件
可以通过 orapwd命令重建密码文件
 
备注:恢复时有时遇到的一个问题
RMAN-03002    ORA-27064 错误
解决办法 数据文件 resize 到 oracle 的 block size 的整数倍
SQL> alter database datafile 'xxx' resize n MB;
 
 
4.7.2  使RMAN份集恢复DB到其他机器  (2制方法)
 
 
使用  RMAN  DUPLICATE  命令可 以在保 留目 标数 据库 的基础上 依靠目标 数 据库
(Target  Database)备份创建一个副本数据库(Duplicate  Database)  。该副本即可与目标数库完全相同,也可仅包含目标数据库表空间的一部子集。目标站点(Target  Site)以及站点(Duplicate Site)甚至可以在同一台机器上。
 生成新的唯一的 DBID,如果控制文件中仍保存有备份信息,可以不连接 Catalog  
骤:
 
1.准备工作,配置副本DB环境
 
1.  备份主数据库(包括据文件、控制文件以及所有归档),并把该备份集拷贝到副本据库机器同样的目录下。
2.  拷贝主数据库的初始化参数文件 pfile 到副本数据库机器上,并根据需要作相应修改,
建密码文件。
3.  配置主数据库到副本数据库的连接。
 
2动副本数据库到  nomount目录数据库必须MOUNT (OPEN)
 
$ sqlplus /nolog
SQL> conn / as sysdba
SQL> startup nomount
 
3.运行RMAN分别连接主数据库与副本数据库实例
 
控制文件中保存有备份信息,可以不连接 Catalog
 
在副本数据库上:
$ rman target sys/change_on_install@MING auxiliary /
 
4.运行复制命令
 
果没有配置自动分配通道的话,需要手工指定至少  1  条辅助通道。
DUPLICATE命令将自动完成:将还原所有数据文件,重新创建控制文件,并利 用新的参数文件启动恢复数据库到一致状态,最后用  resetlog  方式打开数据库,并 重建  redolog
 
RMAN> RUN
{
ALLOCATE AUXILIARY CHANNEL aux1 DEVICE TYPE DISK;
duplicate target database tocrmnofilenamecheck; RELEASE CHANNEL aux1;
}
 
5.重建临时表空间,立即备份数据库
 
SQL>  alter  tablespace  temp  add  tempfile  '/u05/oracle/oradata/crm/temp01.dbf'  size
10M;
 
Duplicate 制命令的一些高级用法
 
1NOFILENAMECHECK
异机恢复需要指定  NOFILENAMECHECK,可以跳过文件名检测,避免  oracle  错 误的领会你的操作意图。
2指定PFILE
果辅助实例不是用 SPFILE启,需要指定  PFILE  ,PFILE文件必须放
在运行  RMAN  客户端上。
3过不需要复制的表空间
要跳过只读表空间,在执行 duplicate 命令时指定  SKIP READONLY 子句即可。
要跳过离线表空间,在执行 duplicate 命令之前将其置为  OFFLINE NORMAL 状态
即可RMAN  复制时会跳过只读或离线表空间的数据文件。
要跳过正常的表空间,指定 SKIP TABLESPACE ts_name, …
4复到以前的时间点
要恢复到以前的时间点,在 duplicate 命令中指定  UNTIL TIME 'SYSDATE-1'
5建过程中重命名控制文件
可以使用 restore controlfile from …;或者 dbms_backup_restore 恢复出控件文件
后在初始化参数文件 PFILE 中进行正确的设置。
6建过程中重命名在线日志文件
1.执行  duplicate 命名时指定 LOGFILE子,手工设置 redo logs 文件名 例:    
LOGFILE
GROUP 1 ('?/oradata/newdb/redo01_1.log',
 
'?/oradata/newdb/redo01_2. log') SIZE 200K,
2.副本数据库初始化参数文件 PFILE中设置 LOG_FILE_NAME_CONVERT LOG_FILE_NAME_CONVERT = 'string1' , 'string2' , 'string3' , 'string4' , ...;
 strin1 替换为 string2,string3 替换为 string4
7建过程中重命名数据文件或改变数据库文件的新的路径
1.在初始化参数中重命名:
DB_FILE_NAME_CONVERT=’xxxx’,’yyyy’
2.在 Duplicate Duplicate Duplicate 令中重命名数据文件duplicate target database to newdb DB_FILE_NAME_CONVERT=('xxxx', 'yyyyy ');
3.使用 SET NEWNAME  命令重命名数据文件
SET NEWNAME FOR DATAFILE 1 TO '/xxx/xxx.dbf';
4.使用  CONFIGURE AUXNAME  令重命名数据文件
CONFIGURE AUXNAME FOR DATAFILE 1 TO '/xxxx/xxx.dbf';
5.重命名临时文件路径
SET NEWNAME FOR TEMPFILE '/xxx/xxx.dbf' TO '/yyy/xxx.dbf';
 
比较复杂的复制命令如下
 
RMAN> RUN
{
allocate auxiliary channel newdb1 device type sbt;
duplicate target database to newdb
DB_FILE_NAME_CONVERT=('/h1/oracle/dbs/trgt/','/h2/oracle/oradata/newdb/')
UNTIL TIME 'SYSDATE-1'       # specifies incomplete recovery
SKIP TABLESPACE cmwlite, drsys, example        # skip desired tablespaces
PFILE = ?/dbs/initNEWDB.ora
LOGFILE
GROUP 1 ('?/oradata/newdb/redo01_1.log',
'?/oradata/newdb/redo01_2. log') SIZE 200K,
GROUP 2 ('?/oradata/newdb/redo02_1. log'',
'?/oradata/newdb/redo02_2. log'') SIZE 200K
GROUP 3 ('?/oradata/newdb/redo03_1. log'',
'?/oradata/newdb/redo03_2. log'') SIZE 200K REUSE;
}
 
4.7.3  空间时间点恢复(TSPITR)
 
户可能错误的删除了几个表,而且还截断了几个表,如果进行整库恢复可能代价比较
 
高,这时,我们可以执行表空间时间点恢复(tablespace point-in-time recovery TSPITR)。
了掌握如何执行 TSPITR,应该理解下面这些术语:
助实例(auxiliary  instance)  是我们创建的临时实例,RMAN  使用这个实例执行
TSPITR。完成 TSPITR  后,这个实例可以删除。
助集(auxiliary  set)  助实例上的文件集。包括控制文件、回滚段或者重做段的表间、系统表空间、联机日志文件等,还可以选择辅助实例的临时表空间。
复集(recovery set)    要执行 TSPITR  表空间/数据文件集
标数据库    实际执行 TSPITR  数据库
 
 
TSPITR  的本质是,RMAN  将要进行时间点恢复的表空间按照设定的条件恢复到辅助例上,然后再从辅助实例将表空间传到目标数据库,从而避免整个数据库的恢复,减少恢时间,而且这期间其他表空间仍然可用。(  户管理的备份与恢复也可以使用 TSPITR)
检查TSPITR之后丢失的对象,被丢失对象信息的获取:
SQL> Select owner, name
From TS_PITR_OBJECTS_TO_BE_DROPPED
Where tablespace_name = 'USER01' And creation_time >
to_date( '2004-09-27 11:25:21', 'yyyy-mm-dd hh24:mi:ss' );
进行TSPITR  基本步骤是(与有些书上的步骤略有不同):
(0)  查需要恢复的表空间的数据文件备份和控制文件备份是否存在
(1)  证表空间的可传输性
(2)  备辅助实例
(3)  行实际的 TSPITR
(4)  目标数据库上执行 TSPITR  后的操作。
 
1.验证表空间的可传输性
 
RMAN  使用 Oracle  可传送的表空间特性来执行 TSPITR,因此表空间本身必须是可传送
。许多因素都导致表空间不可传送。
TSPITR  限制
不能还原包含  SYS  用户对象
不能执行 TSPITR  恢复具有复制主表的表空间 不支持使用快照日志的表空间 不能还原含有回滚段的表空间
不能还原含有分区对象(该对象的分区跨越多个表空间)的表空间 表空间中不能含有 VARRAY、嵌套表、外部表对象
TSPITR  不能用于恢复删除的表空间。
以通过  TS_PITR_CHECK  视图来判断表空间是否可传送。如果表空间不可传送,那执行  TSPITR    时就会失败。下面是查询 USERS  表空间是否可传送的语句:
SQL> SELECT OBJ1_NAME "Object Owner",obj1_name "Object Name", obj1_type "Object Type",ts1_name "Tablespace Name",reason
FROM TS_PITR_CHECK   WHERE ts1_name='USERS';
如果未选定行,说明 USERS  表空间可传输。
 
2准备TSPITR  辅助实例  (AUXILIARY INSTANCE)
 
启动 TSPITR 之前,需要准备辅助实例。这是一个不需要  RMAN  参与的手工过程。执
下面的步骤来创建辅助实例:
u    创建口令文件
u    创建辅助实例的参数文件: 编辑辅助实例参数文件的一个简单方法是把目标数据库的参数文件改一下即 可。如果目标数据库用的是 SPFILE,那么在  SQLPLUS  执行 CREATE PFILE FROM SPFILE  就可以生成参数文件。
control_files  设置为辅助实例上的文件名
db_name目标实
lock_name_space 如果辅助实例与目标数据库同一主机,必须设置 instance_name service_names    一新名,如 AUX db_file_name_convert    据文件名的转换
log_file_name_convert    日志文件名的转换
注释掉 log_archive_start  参数
u    如果在 Windows NT  上运行 Oracle,需要使用 oradim  来添加数据库服务
u    启动辅助实例,如有必要,配置 tnsnames.ora测试是否连通。
 
3.执行实际的TSPITR
 
例子: 恢复用户误删除的某个重要的表。将实例 MING  的 USERS  表空间恢复到 SCN
是 3818161  的时候。
动辅助实例:
C:\>SET ORACLE_SID=AUX1
C:\>SQLPLUS /NOLOG
SQL> CONNECT / AS SYSDBA SQL> STARTUP NOMOUNT;
注意,SET ORACLE_SID=AUX1  重要,这样就可以不用配置 TNSNAMES.ORA
行实际的TSPITR 首先要连到目标数据库和辅助实例。可以联到恢复目录,也可以不连到恢复目录: C:\> SET ORACLE_SID=AUX1
C:\> RMAN TARGET /@MING CATALOG RMAN/RMAN@RECO AUXILIARY /
RMAN> RECOVER TAB LESPACE USERS UNTIL SCN 233646;
等待完成表空间的恢复。当然也可以用 UNTIL TIME  或者 UNTIL SEQUENCE 子 句,例:
RMAN> run {
allocate auxiliary channel c1 device type disk;
recover tablespace user02 until logseq 9;
}
 
(  这里有些版本有一个 ORACLE的 BUG,执行到最后可能会报错,需要打补丁  ?? )
 
 
以改变辅助集/恢复集数据文件的位置和名称:
set newname for datafile 5 to 'c:\demo\user01.dbf';
configure auxname for datafile 1 to '/backup/xxx.dbf’;
在初始化参数文件中用 DB_FILE_NAME_CONVERT 行转换
 
10g  中增加了auxiliary destination    方便
RMAN> recover tablespace user01 until logseq 19 auxiliary destination 'd:\auxiliary';
 
4.执行TSPITR  的操作
先应该重新连接 RMAN与目标数据库,并且备份刚恢复的表空间。完成备份后,要将表空间联机(RMAN   TSPITR  后使表空间脱机)。最后,我们还要关闭或删除辅数据库。
4.7.4  媒体恢复  Block Media Recovery (BMR)
 
生块损坏的原因一般是间断或随机的  I/O  误或者是内存的块错误。要恢复的坏块息可以从报警与跟踪文件,表与索引的分析,DBV  工具或第三方媒体管理工具以及具体查询语句中获得。
1. DBV 工具    dbv file=EYGLE.DBF blocksize=8192
2. RMAN> backup validatedatafile 4;    --  或者 BACKUP VALIDATE DATABASE
备份的 坏 块 信息 保存 在  V$BACKUP_CORRUPTION 、 V$COPY_CORRUPTION  
V$DATABASE_BLOCK_CORRUPTION 视图中
V$BACKUP_CORRUPTION                           显示历误的视图 V$DATABASE_BLOCK_CORRUPTION    数据块讹误的视图。旦修正了数据库的块讹误,就需要重新运行  BACKUP VALIDATE DATABASE  命令,
后确认 V$DATABASE_BLOCK_CORRUPTION 中没有其他讹误。
RMAN  可以备份包含损坏数据块的数据文件,通过设置  set maxcorrupt  以跳过指定
数的坏块来避免备份失败。
RMAN> set maxcorrupt for datafile 1 to 0;
Oracle9i可以用  RMAN来执行块级的恢复,而且恢复期间数据文件可以是联机状RMAN通过  Block Media Recovery(简称 BMR)来执行块级恢复操作。假设我们在查一个  Oracle  表的时候接收到下面的错误:
ERROR  位于第  1    行:
ORA-01578: ORACLE  据块损坏(文件号  5,块号  97
ORA-01110:    据文件  5:    'E:\xxxx.dbf'
么我们就可以在  RMAN中用  BLOCKRECOVER 命令来修复
RMAN> BLOCKRECOVER DATAFILE 5 BLOCK97; 启动  blockrecover   03-9 -06 正在启动全部恢复目录的  resync
完成全部  resync
使用通道  ORA_DISK_1
通道  ORA_DISK_1:    正在从数据文件副本 E:\xxxx.bak 恢复块
 
正在开始介质的恢复
完成介质的恢复
完成  blockrecover   03-9 -06
 
 
恢复V$DATABASE_BLOCK_CORRUPTION 视图中列出的坏块
RMAN> blockrecover corruption list [ restore until time 'sysdate - 10' ];
恢复指定坏块
RMAN> blockrecover datafile 2 block 12,13 datafile 9 block 19;
RMAN> blockrecover tablespace system dba 44404,44405 from tag "weekly_backup"; RMAN> blockrecover tablespace system dba 44404,44405 restore until time 'sysdate-2';
 
4.7.5  使用恢复目录恢复前一个对应物
 
不完全恢复完成之后,通常需要使用  resetlogs  选项来打开数据库。resetlogs  表示 一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始。数据库的逻辑生存期被称为一个对应物(incarnation)。每次使用  resetlogs  选项来打开数据库后都会创建一个的数据库对应物。
使用 RMAN可以进行穿越  resetlogs 的恢复,即可以恢复到前一个对应物。10g 版本 增强了这方面的功能。
(1)  使用恢复目录的情况使用恢复目录的情况下,恢复前一个对应物是非常简单的。 首先list    incarnation;来显示有哪些对应物
RMAN> list incarnation;
数据库    Incarnations  列表
DB    关键字    Inc                键字                               DB            DB ID CUR          重置 SCN    重置时间

1
2
MING
2600315304
NO
1
20-4  
-06

 

1
854
MING
2600315304
NO
3407561
19-8  
-06
1
4368
MING
2600315304
NO
3794049
29-8  
-06
1
4437
MING
2600315304
NO
3794728
29-8  
-06
1
4639
MING
2600315304
YES
3794935
29-8  
-06

 
下来,决定恢复到哪个对应物
比如,决定恢复到上面的 4437,
方法:在 NOMOUNT 状态下用下面的命令
RMAN> reset database to incarnation 4437; 面是具体的恢复步骤的一个演示(输出略去): RMAN> shutdown immediate;
RMAN> startup nomount;
RMAN> reset database to incarnation 4437; RMAN> restore controlfile;
RMAN> alter database mount;
RMAN> restore database until scn 3794934;
RMAN> recover database until scn 3794934;
RMAN> alter database open resetlogs;
上面的例子中,我们最大可恢复到的  SCN  就是 3794934,因为 4437  的下一个对
物的重置  SCN  是 3794935。
(2)  使用恢复目录的情况
不使用恢复目录的情况下,要恢复前一个对应物就必须要能恢复到前一对应物的控文件。不使用恢复目录,我们就无法使用  RESET DATABASE TO incarnation_num  命 令。
首先看看有哪些对应物:
RMAN> list incarnation;
数据库    Incarnations    列表
DB    关键字    Inc                                   键字    DB                                      DB ID CUR    重置 SCN 重置时
------- ------- -------- ---------------- --- ---------- ----------
1         1               MING             2600315304                NO         3501920        20-8     -06

2
2
MING
2600315304
NO
3785052
29-8  
-06
3
3
MING
2600315304
NO
3794049
29-8  
-06
4
4
MING
2600315304
NO
3794728
29-8  
-06
5
5
MING
2600315304
NO
3794935
29-8  
-06

 
6         6               MING             2600315304                YES       3976301             03-9      -06
假设我们要恢复到 5,6之间,那么就要看看有没有控制文件的备份的  SCN   3794935
到 3976301。我们使用下面的命令:
RMAN> LIST BACKUP OF CONTROLFILE BY FILE;
制文件备份列表
===========================
CF Ckp SCN Ckp      时间           BS Key      S  段数  本数  
---------- ---------- ------- - -------    ------- ---

3976095
03-9  
-06 34
A 2
1
TAG20060903T170136
3959239
03-9  
-06 30
A 1
1
 
3959170
03-9  
-06 29
A 1
1
 
3958983
03-9  
-06 28
A 1
1
 
3958937
03-9  
-06 27
A 1
1
 

 

3816575
30-8  
-06 11
A 2
1
TAG20060830T064447

以看出,上面的列表中,控制文件都是可以用的。接下来找到一个具体的含有控制文
的备份
RMAN> LIST BACKUP OF CONTROLFILE;
份集列表
===================
……
:E:\TEST\C-2600315304-20060830-07
控制文件包: Ckp SCN: 3818213                            Ckp    时间:30-8      -06
……
假 设 我 们 使 用  E:\TEST\C-2600315304-20060830-07 , 那 么 接 下 来 我 们 需 要 用
DBMS_BACKUP_RESTORE  包来从这个文件中恢复控制文件。(在 SQLPLUS  运行
 
 
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP NOMOUNT;
SQL>DECLARE
DEVTYPE VARCHAR2(256);
DONE BOOLEAN;
BEGIN
DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL);
DBMS_BACKUP_RESTORE.restoresetdatafile;
DBMS_BACKUP_RESTORE.restorecontrolfileto('/xxx/CONTROL01.CTL');
DBMS_BACKUP_RESTORE.restorebackuppiece('/xxx/C-2600315304-20060830-07',D
ONE=>done);
DBMS_BACKUP_RESTORE.restoresetdatafile;
DBMS_BACKUP_RESTORE.restorecontrolfileto('/xxx/CONTROL02.CTL');
DBMS_BACKUP_RESTORE.restorebackuppiece('/xxx/C-2600315304-20060830-07',D
ONE=>done);
DBMS_BACKUP_RESTORE.restoresetdatafile;
DBMS_BACKUP_RESTORE.restorecontrolfileto('/xxx/CONTROL03.CTL');
DBMS_BACKUP_RESTORE.restorebackuppiece('/xxx/C-2600315304-20060830-07',D
ONE=>done);
DBMS_BACKUP_RESTORE.devicedeallocate(NULL);
END;
/
SQL>ALTER DATABASE MOUNT;
 
新联到 RMAN      再来运行一下 LIST INCARNATION;
$ RMAN TARGET /@MING NOCATALOG; RMAN> LIST INCARNATION;
据库     Incarnations  列表
DB    关键字     Inc         关键字    DB               DB  ID                              CUR     重置    SCN
置时间
------- ------- -------- ---------------- --- ---------- ----------

1
1
MING
2600315304
NO
3501920
20-8  
-06
2
2
MING
2600315304
NO
3785052
29-8  
-06
3
3
MING
2600315304
NO
3794049
29-8  
-06
4
4
MING
2600315304
NO
3794728
29-8  
-06
5
5
MING
2600315304
YES
3794935
29-8  
-06

 
以看出来,我们已经恢复到想要的对应物上了。接下来:
RMAN> RESTORE DATABASE; RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;
 
4.7.6 RMAN量备份
 
 
过增量备份,RMAN  允许用户只备份上次增量备份操作以来被修改过的数据块。
N  别增量备份备份从最近的  N  别或者更小级别以来的所有更改过的数据块内容。0 级备份与全备份的不同就是  0  备份可以作为其它增量备份的基础备份而全备份是不可的。
量备份的优点:  节约备份时间省备份磁带或者磁盘空间    降低网络带宽要求
量备份的缺点:  恢复时间可能要长。
 
 
量备份分为两种,一种是累积增量备份,一种是非累积增量备份。
异增量备份(Differential Incremental Backup)
差异备份是默认的增量备份类型,备份上一次在同级或者更低级别进行备份以来所
有变化的数据块。
RMAN>backup incremental level n (incremental) database;
积增量备份(Cumulative Incremental Backup)
包括上一次低级备份以来所有有变化的数据块。累计增量备份增加了备份的时间,是因为恢复的时候,需要从更少的备份集中恢复数据,所以,为了减少恢复的时候,计增量备份将比差异增量备份更有效。
RMAN>backup incremental level n (cumulative) database;
 
9i    管怎么样增量备份,还是需要比较数据库中全部的数据块,这个过程其实是一个漫的过程,而且由于增量备份形成多个不同的备份集,使得恢复变的更加不可靠而且速度慢,以增量备份在版本 9中仍然是鸡肋,除非是很大型的数据仓库系统,没有必要选择增量备 份。
10g    增量备份上做了很大的改进,可以使增量备份变成真正意义的增量,因为通过特
的增量日志,使得 RMAN  没有必要去比较数据库的每一个数据块,当然,代价就是日志
的 IO与磁盘空间付出。另外,10g 通过备份的合并,使增量备份的结果可以合并在一起,
完全的减少了恢复时间。
 
1  本备份(0  备份)
Level  0  增量备份策略的基础(注意与 Full备份区)。执行增量备份操作时,首先需的是基本备份(incremental base backup)增量备份必须有一个基本备份。基本备份的增量别是  0,如果没有  0  级备份,那么其它级别的备份会自动转成基本备份。
0  备份举例
 
RMAN> run {
2> allocate channel dev1 type disk;
3> backup
4> incremental level 0
5> filesperset 4    #义每个 backupset  最大文件数
6> format "/oracle/backups/sunday_level0_%t"
7> (database);
8> release channel dev1;
 
 
使用 LIST语句查看,数据库备份集的列表显示中"type"  将显示  "Incremental","LV"
将显示"0"  
2  N  级备份
 
RMAN> run {
2> allocate channel dev1 type disk;
3> backup
4> incremental level 1/2/3/4
5> filesperset 4    #义每个 backupset  最大文件数
6> format "/oracle/backups/sunday_level0_%t"
7> (database);
8> release channel dev1;
9> }
 
3  N  级备份的规划
根据业务需求、数据量、恢复所需要的时间等方面考虑,制定合理的备份计划。 例:  一个典型的增量备份案例如下:
星期天晚上  - level 0 backup performed 星期一晚上  - level 2 backup performed 星期二晚上  - level 2 backup performed 星期三晚上  - level 1 backup performed 星期四晚上  - level 2 backup performed 星期五晚上  - level 1 backup performed 星期六晚上  - level 2 backup performed 星期天晚上  - level 0 backup performed
4  量备份的恢复
普通的完全恢复 restore    recover
RMAN自动确定和使用需要的备份集。
 
4.7.7 RMAN份的优化
 
以在 RMAN配置中设置备份的优化,如
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
果优化设置打开,将对备份的数据文件、归档日志或备份集运行一个优化算法。
 
RMAN备份操作主要是完成以下三个步骤
1、从磁盘上读取数据
2、在内存中处理数据块
3、写入数据到磁盘或磁带
上的读写操作可以同步或异步的完成,在同步 I/O操作中,一个时间只允许有一个 IO 操作,但是在异步 I/O操作中,一个时间允许有多个 IO操作。因此,备份与恢复的调优主集中在以下几个方面:
1、  高同步或异步 I/O操作能力
在     持  异  步  操  作  的  操  作     统         可  以  通         置  TAPE_AYSNCH_IO,DISK_ASYNCH_IO 和 BACKUP_TYPE_IO_SLAVES 支持异步操 作,提高写的能力。
2、  高磁盘读能力
可以在  backup命令后通过设置  DISKRATIO来保证从多个磁盘上读取数据,保证续的数据流。
3、  确设置缓冲区与参数值
设置  LARGE_POOL_SIZE , 使 备 份 可 以 使 用 连 续 的 缓冲 池 , 通 过 设 置
DB_FIL_DIRECT_IO_COUNT  可以提高缓冲区的利用。如果使用磁带备份,还可以设 置 BACKUP_TYPE_IO_SLAVES 来提高磁带的写能力。
4、  用并行备份
开辟多个通道,可以实现并行备份与恢复
 
4.7.8 DBMS_BACKUP_RESTORE 
 
个包是  RMAN  份与恢复的核心,在调试模式下,RMAN  会输出它调用的每一条命 令:
C:\> rman debug target /@tlgaxz catalog rman/rman@reco trace=debug.txt
用命令
restoreSetDataFile               指示还原操作的开始(但是不会执行实际的还原操作) restoreSetDataFileTo     定义要还原的数据文件和该文件的还原位置 restoreControlFileTo 定义控制文件的还原位置
restoreSpfileTo                     定义要还原的  spfile 的位
restorebackuppiece             执行实际的还原操作,这个函数的一个参数是备份文件名
devicedeallocate                  释放  deviceallocate 函数所分配的设备 deviceallocate          分配用于连续  I/O的设备 applySetDataFile      指示增量还原操作的开始 applyDataFileTo    定义数据文件的增量还原位置 applybackuppiece        执行实际的还原操作 resetoreSetArchivelog    指示归档日志还原操作的开始
restoreArchivelog                 定义要还原的归档的重做日志序列和线程
 
 
使用  dbms_backup_restore 包恢复服务器参数文件
一些不常见的情况下,我们可能需要直接使用  dbms_backup_restore  包来恢复 spfile。 当然这个包也可以用来恢复其它数据,是常规办法都没有用的时候的一个利器。这个包可以 在 数  据 库    NOMOUNT    状 态   使  用 。   设 我   有 一  个 自    份 文   
C-2600315304-20060829-02,我们需要从这里恢复数据,那么可以通过执行下面的脚本来完
成:
 
SQL>DECLARE
DEVTYPE VARCHAR2(256);
DONE BOOLEAN;
BEGIN
DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL);
DBMS_BACKUP_RESTORE.restoresetdatafile;
DBMS_BACKUP_RESTORE.restorespfileto('d:\spfile.ora');
DBMS_BACKUP_RESTORE.restorebackuppiece('d:\C-2600315304-20060829-00',
DONE=>done);
DBMS_BACKUP_RESTORE.devicedeallocate(NULL);
END;
/
0
相关文章