RMAN深刻解析之--SYS数据包html
RMAN服务器进程在协调信道工做时主要访问两个SYS数据包:DBMS_RCVMAN数据包和DBMS_BACKUP_RESTORE数据包,这两个数据包包含了目标库中RMAN的全部功能。
node
sql>desc dbms_backup_restore ...... PROCEDURE AUTOBACKUPFLAG Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- FLAG BOOLEAN IN PROCEDURE BACKUPARCHIVEDLOG Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- ARCH_RECID NUMBER IN ARCH_STAMP NUMBER IN PROCEDURE BACKUPARCHIVEDLOG Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- ARCH_RECID NUMBER IN ARCH_STAMP NUMBER IN DUPLICATE BOOLEAN OUT PROCEDURE BACKUPBACKUPPIECE Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- BPNAME VARCHAR2 IN FNAME VARCHAR2 IN HANDLE VARCHAR2 OUT COMMENT VARCHAR2 OUT MEDIA VARCHAR2 OUT CONCUR BOOLEAN OUT RECID NUMBER OUT STAMP NUMBER OUT TAG VARCHAR2 IN DEFAULT PARAMS VARCHAR2 IN DEFAULT MEDIA_POOL BINARY_INTEGER IN DEFAULT REUSE BOOLEAN IN DEFAULT PROCEDURE BACKUPBACKUPPIECE Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- BPNAME VARCHAR2 IN FNAME VARCHAR2 IN HANDLE VARCHAR2 OUT COMMENT VARCHAR2 OUT MEDIA VARCHAR2 OUT CONCUR BOOLEAN OUT RECID NUMBER OUT STAMP NUMBER OUT TAG VARCHAR2 IN DEFAULT PARAMS VARCHAR2 IN DEFAULT MEDIA_POOL BINARY_INTEGER IN DEFAULT REUSE BOOLEAN IN DEFAULT CHECK_LOGICAL BOOLEAN IN PROCEDURE BACKUPBACKUPPIECE Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- BPNAME VARCHAR2 IN FNAME VARCHAR2 IN HANDLE VARCHAR2 OUT COMMENT VARCHAR2 OUT MEDIA VARCHAR2 OUT CONCUR BOOLEAN OUT RECID NUMBER OUT ......
SYS.DBMS_RCVMAN :算法
DBMS_RCVMAN 数据包用来访问控制文件中的表并将此信息传递给RMAN,使RMAN能够构建准确反映数据库结构的备份和还原操做。DBMS_RCVMAN数据包负责在执行任何操做前设置time运算符和校验数据文件头部中检查点的信息,并检查文件位置和大小以及有关node的共性(RAC)和磁盘共性的其余信息。sql
SYS.DBMS_BACKUP_RESTORE :数据库
DBMS_BACKUP_RESTORE数据包访问控制文件并校验全部必需的信息。这些信息被传递回RMAN服务器进程,RMAN服务器进程随后会基于recover.bsq文件中的代码建立一些PL/SQL块,这些PL/SQL块包含对DBMS_BACKUP_RESTORE数据包的调用,实际上RMAN中是由DBMS_BACKUP_RESTORE数据包来建立系统调用以备份数据文件、控制文件和归档日志。RMAN接受从DBMS_BACKUP_RESTORE返回的信息,并在信道间基于负载均衡算法分配工做,而后建立一系列DBMS_BACKUP_RESTORE数据包调用。服务器
DBMS_BACKUP_RESTORE数据包访问控制文件来备份文件,在备份完成后写入备份信息。一旦完成一个备份集,DBMS_BACKUP_RESTORE数据包就会在控制文件的表中写入备份开始的时间、备份时间、备份大小和备份名等信息。oracle
附注:http://www.xifenfei.com/2214.html(转自惜分飞blog,感谢!)负载均衡
Oracle提供了一个包:DBMS_BACKUP_RESTORE.DBMS_BACKUP_RESTORE 包是由dbmsbkrs.sql 和 prvtbkrs.plb 这两个脚本建立的.catproc.sql 脚本运行后会调用这两个包.因此是每一个数据库都有的这个包是Oracle服务器和操做系统之间IO操做的接口.由恢复管理器直接调用。并且听说这两个脚本的功能是内建到Oracle的一些库文件中的.ide
因而可知,咱们能够在数据库 nomount 状况下调用这些package ,来达到咱们的恢复目的spa
一、启动数据库到nomount状态 [oracle@node1 ora11g]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.3.0 Production on Mon Dec 19 13:34:22 2011 Copyright (c) 1982, 2011, Oracle. All rights reserved. Connected to an idle instance. SQL> startup nomount ORACLE instance started. Total System Global Area 2137886720 bytes Fixed Size 2230072 bytes Variable Size 1493174472 bytes Database Buffers 637534208 bytes Redo Buffers 4947968 bytes 二、恢复controlfile SQL> DECLARE 2 devtype varchar2(256); 3 done boolean; 4 BEGIN 5 devtype:=sys.dbms_backup_restore.deviceAllocate (type=>'',ident=>'t1'); 6 sys.dbms_backup_restore.restoreSetDatafile; 7 sys.dbms_backup_restore.restoreControlfileTo(cfname=>'/opt/oracle/oradata/ora11g/control01.ctl'); 8 sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'/tmp/ora11g_02mu1avd_1_1.rman', params=>null); 9 sys.dbms_backup_restore.deviceDeallocate; 10 END; 11 / PL/SQL procedure successfully completed. 三、恢复数据文件 SQL> DECLARE 2 devtype varchar2(256); 3 done boolean; 4 BEGIN 5 devtype:=sys.dbms_backup_restore.deviceAllocate (type=>'',ident=>'t1'); 6 sys.dbms_backup_restore.restoreSetDatafile; 7 sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>1,toname=>'/opt/oracle/oradata/ora11g/system01.dbf'); sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>2,toname=>'/opt/oracle/oradata/ora11g/sysaux01.dbf'); sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>3,toname=>'/opt/oracle/oradata/ora11g/undotbs01.dbf'); 8 9 10 sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>4,toname=>'/opt/oracle/oradata/ora11g/users01.dbf'); 11 sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>5,toname=>'/opt/oracle/oradata/ora11g/example01.dbf'); 12 sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'/tmp/ora11g_01mu1aqq_1_1.rman', params=>null); 13 sys.dbms_backup_restore.deviceDeallocate; 14 END; 15 / PL/SQL procedure successfully completed. 四、启动数据库 SQL> alter database mount; SQL> alter database recover until cancel using backup controlfile; SQL> alter database open resetlogs; 五、特别说明 在oracle 10g及其之后版本中,由于rman中有catalog with start命令,能够实现rman备份的加载,因此不须要使用dbms_backup_restore包处理,在oracle 9i及其之前版本中,可能由于没有catalog库,控制文件中又没有了备份集信息,须要采用这种方法处理数据文件还原,而后根据实际状况,使用ALTER DATABASE REGISTER LOGFILE 添加日志,进行恢复。