| RMAN的PIPE接口 RMAN除了支持交互式和批处理式,还支持一种PIPE的接口,通过这种PIPE接口,可以在ORACLE中将各种命令发送给RMAN。 首先,以PIPE方式启动RMAN,其中P1是管道的名称: F:>RMAN PIPE P1 TARGET /@TEST NOCATALOG 恢复管理器: 版本9.2.0.4.0 - Production Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. 以PIPE方式启动RMAN,RMAN一直处于运行状态,并等待从管道中发送来的命令。而且,RMAN的输出也不会打印到屏幕上,而是在管道上发送。 然后就可以通过DBMS_PIPE包给RMAN发送命令,并接收返回消息了。和RMAN进行交互的管道名称为ORA$RMAN_pipename_IN和ORA$RMAN_pipename_OUT。其中pipename就是RMAN命令里包含的管道名称。 SQL> SET SERVEROUT ON SIZE 1000000 SQL> DECLARE V_INPUT VARCHAR2(32767) := 'SHOW ALL;'; V_OUT NUMBER; BEGIN DBMS_PIPE.PACK_MESSAGE(V_INPUT); V_OUT := DBMS_PIPE.SEND_MESSAGE('ORA$RMAN_P1_IN'); DBMS_OUTPUT.PUT_LINE(V_OUT); COMMIT; END; / 0 PL/SQL 过程已成功完成。 SQL> DECLARE V_OUTPUT VARCHAR2(32767); V_OUT NUMBER := 0; BEGIN WHILE (V_OUT = 0) LOOP V_OUT := DBMS_PIPE.RECEIVE_MESSAGE('ORA$RMAN_P1_OUT', 5); IF V_OUT = 0 THEN DBMS_PIPE.UNPACK_MESSAGE(V_OUTPUT); DBMS_OUTPUT.PUT_LINE(V_OUTPUT); END IF; END LOOP; COMMIT; END; / RMAN 配置参数为: CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default CONFIGURE BACKUP OPTIMIZATION OFF; # default CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # default CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE MAXSETSIZE TO UNLIMITED; # default CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'F:ORACLEORACLE920DATABASESNCFTEST.ORA'; # default RMAN-00572: waiting for dbms_pipe input PL/SQL 过程已成功完成。 通过DBMS_PIPE包就可以RMAN进行交互了,下面让RMAN执行数据库的全备: SQL> DECLARE V_INPUT VARCHAR2(32767) := 'BACKUP tablespace users;'; V_OUT NUMBER; BEGIN DBMS_PIPE.PACK_MESSAGE(V_INPUT); V_OUT := DBMS_PIPE.SEND_MESSAGE('ORA$RMAN_P1_IN'); DBMS_OUTPUT.PUT_LINE(V_OUT); COMMIT; END; / 0 PL/SQL 过程已成功完成。 SQL> DECLARE V_OUTPUT VARCHAR2(32767); V_OUT NUMBER := 0; BEGIN WHILE (V_OUT = 0) LOOP V_OUT := DBMS_PIPE.RECEIVE_MESSAGE('ORA$RMAN_P1_OUT', 5); IF V_OUT = 0 THEN DBMS_PIPE.UNPACK_MESSAGE(V_OUTPUT); DBMS_OUTPUT.PUT_LINE(V_OUTPUT); END IF; END LOOP; COMMIT; END; / 启动 backup 于 02-4月 -06 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=16 devtype=DISK 通道 ORA_DISK_1: 正在启动 full 数据文件备份集 通道 ORA_DISK_1: 正在指定备份集中的数据文件 在备份集中包含当前的 SPFILE 备份集中包括当前控制文件 输入数据文件 fno=00001 name=F:ORACLEORADATATESTSYSTEM01.DBF 输入数据文件 fno=00002 name=F:ORACLEORADATATESTUNDOTBS01.DBF 输入数据文件 fno=00006 name=F:ORACLEORADATATESTYANGTK01.DBF 输入数据文件 fno=00003 name=F:ORACLEORADATATESTINDX01.DBF 输入数据文件 fno=00005 name=F:ORACLEORADATATESTUSERS01.DBF 输入数据文件 fno=00004 name=F:ORACLEORADATATESTTOOLS01.DBF 通道 ORA_DISK_1: 正在启动段 1 于 02-4月 -06 通道 ORA_DISK_1: 已完成段 1 于 02-4月 -06 段 handle=F:ORACLEORACLE920DATABASEIHFHTAE_1_1 comment=NONE 通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:47 完成 backup 于 02-4月 -06 RMAN-00572: waiting for dbms_pipe input PL/SQL 过程已成功完成。 当备份结束后,可以通过DBMS_PIPE包结束RMAN命令: SQL> DECLARE V_INPUT VARCHAR2(32767) := 'EXIT;'; V_OUT NUMBER; BEGIN DBMS_PIPE.PACK_MESSAGE(V_INPUT); V_OUT := DBMS_PIPE.SEND_MESSAGE('ORA$RMAN_P1_IN'); DBMS_OUTPUT.PUT_LINE(V_OUT); END; / 0 PL/SQL 过程已成功完成。 SQL> DECLARE V_OUTPUT VARCHAR2(32767); V_OUT NUMBER := 0; BEGIN WHILE (V_OUT = 0) LOOP V_OUT := DBMS_PIPE.RECEIVE_MESSAGE('ORA$RMAN_P1_OUT', 5); IF V_OUT = 0 THEN DBMS_PIPE.UNPACK_MESSAGE(V_OUTPUT); DBMS_OUTPUT.PUT_LINE(V_OUTPUT); END IF; END LOOP; COMMIT; END; / 恢复管理器完成。 PL/SQL 过程已成功完成。 |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24558279/viewspace-746150/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24558279/viewspace-746150/
269

被折叠的 条评论
为什么被折叠?



