博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RMAN深入解析之--SYS数据包
阅读量:7192 次
发布时间:2019-06-29

本文共 5343 字,大约阅读时间需要 17 分钟。

   RMAN服务器进程在协调信道工作时主要访问两个SYS数据包:DBMS_RCVMAN数据包和DBMS_BACKUP_RESTORE数据包,这两个数据包包含了目标库中RMAN的所有功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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)和磁盘共性的其他信息。

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数据包就会在控制文件的表中写入备份开始的时间、备份时间、备份大小和备份名等信息。


附注: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的一些库文件中的.

由此可见,我们可以在数据库 nomount 情况下调用这些package ,来达到我们的恢复目的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
1
、启动数据库到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
2
、恢复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.
3
、恢复数据文件
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.
4
、启动数据库
SQL> alter database mount;
SQL> alter database recover until cancel using backup controlfile;
SQL> alter database open resetlogs;
5
、特别说明
在oracle 10g及其以后版本中,因为rman中有catalog 
with 
start命令,可以实现rman备份的加载,所以不需要使用dbms_backup_restore包处理,在oracle 9i及其以前版本中,可能因为没有catalog库,控制文件中又没有了备份集信息,需要采用这种方法处理数据文件还原,然后根据实际情况,使用ALTER DATABASE REGISTER LOGFILE 添加日志,进行恢复。
本文转自 客居天涯 51CTO博客,原文链接:http://blog.51cto.com/tiany/1427840,如需转载请自行联系原作者
你可能感兴趣的文章
python学习笔记-(一)初识python
查看>>
前端的事件流以及事件处理程序
查看>>
react中create-react-app详情配置文档
查看>>
TLD单目标跟踪算法程序详解--OpenTLD Code 详解
查看>>
PDO基础知识
查看>>
汉诺塔问题(C++版)
查看>>
Basler和Matrox的配置及调试
查看>>
VirtualBOX 不能mount优盘,移动硬盘解决方案
查看>>
漫画:全面理解java.lang.IllegalArgumentException及其可用性设计
查看>>
[解题报告] 100 - The 3n + 1 problem
查看>>
SpringMVC HelloWorld实例开发及部署
查看>>
从最小割角度解决最大权闭合图问题及其在二分图形式下的优化
查看>>
sencha-touch2.0控件nestlist的简单用法
查看>>
python学习之控制语句
查看>>
Android Activity和Intent机制学习笔记
查看>>
装饰器复习
查看>>
pymysql数据库操作
查看>>
elasticsearch问题解决之分片副本UNASSIGNED
查看>>
|"|&|<|>等html字符转义
查看>>
ORACLE参数max_shared_servers空值与零的区别
查看>>