oracle實驗-RMAN的PIPE介面

逍遙三人發表於2012-02-19
轉載:http://www.**e.com/bbs/thread-16668-1-1.html

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/21584437/viewspace-716744/,如需轉載,請註明出處,否則將追究法律責任。

相關文章