RMAN深刻解析之--SYS數據包

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,感謝!)負載均衡


使用dbms_backup_restore包恢復數據庫


    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 添加日誌,進行恢復。
相關文章
相關標籤/搜索