RMAN的PIPE介面(二)

yangtingkun發表於2007-06-02

RMAN除了支援互動式和批處理式,還支援一種PIPE的介面,透過這種PIPE介面,可以在ORACLE中將各種命令傳送給RMAN。

這篇討論一下RMAN的PIPE介面的第二種使用方法。

RMAN的PIPE介面:http://yangtingkun.itpub.net/post/468/65127


如果先啟動PIPE方式工作的RMAN,那麼RMAN會一直處於等待命令的方式。直到RMAN接收到退出的命令。

這種方式是由RMAN來建立管道。這種方式就是前面文章介紹的。

這裡還可以透過PL/SQL方式顯示建立一個管道,併發出相應的命令。RMAN以PIPE方式啟動時可以指定TIMEOUT為0,這樣讀取管道中的命令並執行完所有的命令後,自動退出。

SQL> SET SERVEROUT ON SIZE 1000000
SQL> DECLARE
2 V_INPUT VARCHAR2(32767) := 'SHOW ALL;';
3 V_OUT NUMBER;
4 BEGIN
5 V_OUT := DBMS_PIPE.CREATE_PIPE('ORA$RMAN_P1_IN', 32767, TRUE);
6 DBMS_OUTPUT.PUT_LINE(V_OUT);
7 DBMS_PIPE.PACK_MESSAGE(V_INPUT);
8 V_OUT := DBMS_PIPE.SEND_MESSAGE('ORA$RMAN_P1_IN');
9 DBMS_OUTPUT.PUT_LINE(V_OUT);
10 V_INPUT := 'BACKUP DATABASE;';
11 DBMS_PIPE.PACK_MESSAGE(V_INPUT);
12 V_OUT := DBMS_PIPE.SEND_MESSAGE('ORA$RMAN_P1_IN');
13 DBMS_OUTPUT.PUT_LINE(V_OUT);
14 COMMIT;
15 END;
16 /
0
0
0

PL/SQL 過程已成功完成。

下面以PIPE方式啟動RMAN:

F:>RMAN PIPE P1 TARGET /@TEST1 TIMEOUT = 0

恢復管理器: 版本9.2.0.4.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.


F:>

RMAN操作結束後,可以透過管道檢視RMAN的輸出資訊:

SQL> DECLARE
2 V_OUTPUT VARCHAR2(32767);
3 V_OUT NUMBER := 0;
4 BEGIN
5 WHILE (V_OUT = 0) LOOP
6 V_OUT := DBMS_PIPE.RECEIVE_MESSAGE('ORA$RMAN_P1_OUT', 5);
7 IF V_OUT = 0 THEN
8 DBMS_PIPE.UNPACK_MESSAGE(V_OUTPUT);
9 DBMS_OUTPUT.PUT_LINE(V_OUTPUT);
10 END IF;
11 END LOOP;
12 COMMIT;
13 END;
14 /
連線到目標資料庫: TEST1 (DBID=974710760)
RMAN-00572: waiting for dbms_pipe input
正在使用目標資料庫控制檔案替代恢復目錄
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:ORACLEORACLE920DATABASESNCFTEST1.ORA'; # default
RMAN-00572: waiting for dbms_pipe input
啟動 backup 於 03-6月 -07
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=13 devtype=DISK
通道 ORA_DISK_1: 正在啟動 full 資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集中的資料檔案
在備份集中包含當前的 SPFILE
備份集中包括當前控制檔案
輸入資料檔案 fno=00001 name=F:ORACLEORADATATEST1SYSTEM01.DBF
輸入資料檔案 fno=00002 name=F:ORACLEORADATATEST1UNDOTBS01.DBF
輸入資料檔案 fno=00008 name=F:ORACLEORADATATEST1YANGTK01.DBF
輸入資料檔案 fno=00007 name=F:ORACLEORADATATEST1XDB01.DBF
輸入資料檔案 fno=00004 name=F:ORACLEORADATATEST1INDX01.DBF
輸入資料檔案 fno=00006 name=F:ORACLEORADATATEST1USERS01.DBF
輸入資料檔案 fno=00003 name=F:ORACLEORADATATEST1DRSYS01.DBF
輸入資料檔案 fno=00005 name=F:ORACLEORADATATEST1TOOLS01.DBF
通道 ORA_DISK_1: 正在啟動段 1 於 03-6月 -07
通道 ORA_DISK_1: 已完成段 1 於 03-6月 -07
段 handle=F:ORACLEORACLE920DATABASE3IJABGR_1_1 comment=NONE
通道 ORA_DISK_1: 備份集已完成, 經過時間:00:02:06
完成 backup 於 03-6月 -07
RMAN-00572: waiting for dbms_pipe input
恢復管理器完成。

PL/SQL 過程已成功完成。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-69297/,如需轉載,請註明出處,否則將追究法律責任。

相關文章