RMAN備份之備份多個備份集到帶庫(一)

yangtingkun發表於2007-07-19

使用RMAN備份到帶庫時,同時備份多個備份集,需要注意一些問題。


首先是Oracle的初始化引數BACKUP_TAPE_IO_SLAVES必須設定為TRUE,否則備份會報錯:

RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> backup copies 2 tablespace users;
5> }

使用目標資料庫控制檔案替代恢復目錄
分配的通道: c1
通道 c1: sid=293 例項=testrac2 devtype=SBT_TAPE
通道c1: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)

啟動 backup 於 12-6月 -07
通道 c1: 啟動全部資料檔案備份集
通道 c1: 正在指定備份集中的資料檔案
輸入資料檔案 fno=00005 name=+DISK/testrac/datafile/users.267.618591279
釋放的通道: c1
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: backup 命令 (c1 通道上, 在 06/12/2007 18:20:51 上) 失敗
ORA-19565: 對順序裝置進行雙工時 BACKUP_TAPE_IO_SLAVES 禁用

這個引數設定只對資料檔案和歸檔檔案等資料庫檔案有效,對已經備份到磁碟的結果集不需要進行設定:

RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> backup copies 2 backupset all;
5> }

分配的通道: c1
通道 c1: sid=293 例項=testrac2 devtype=SBT_TAPE
通道c1: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)

啟動 backup 於 12-6月 -07
輸入備份集 count==483 stamp=625076895 creation_time=12-6月 -07
通道 c1: 正在啟動段 1 於 12-6月 -07
通道 c1: 備份段 /data1/backup/f3ik3qkv_1_1
段 handle=f3ik3qkv_1_5 comment=API Version 2.0,MMS Version 5.0.0.0
通道 c1: 備份段 /data1/backup/f3ik3qkv_1_1
段 handle=f3ik3qkv_1_6 comment=API Version 2.0,MMS Version 5.0.0.0
通道 c1: 已完成段 1 於 12-6月 -07, 有 2 個副本
通道 c1: 備份集已完成, 經過時間:00:01:35
輸入備份集 count==484 stamp=625076911 creation_time=12-6月 -07
通道 c1: 正在啟動段 1 於 12-6月 -07
通道 c1: 備份段 /data1/backup/f4ik3qlf_1_1
段 handle=f4ik3qlf_1_5 comment=API Version 2.0,MMS Version 5.0.0.0
通道 c1: 備份段 /data1/backup/f4ik3qlf_1_1
段 handle=f4ik3qlf_1_6 comment=API Version 2.0,MMS Version 5.0.0.0
通道 c1: 已完成段 1 於 12-6月 -07, 有 2 個副本
通道 c1: 備份集已完成, 經過時間:00:01:05
完成 backup 於 12-6月 -07
釋放的通道: c1

下面設定初始化引數,並重啟資料庫:

RMAN> exit


恢復管理器完成。
$ sqlplus "/ as sysdba"

SQL*Plus: Release 10.2.0.3.0 - Production on 星期三 6月 13 10:11:40 2007

Copyright (c) 1982, 2006, Oracle. All Rights Reserved.


連線到:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options

SQL> show parameter backup_tape_io_slaves

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
backup_tape_io_slaves boolean FALSE
SQL> alter system set backup_tape_io_slaves = true scope = spfile;

系統已更改。

SQL> exit
從 Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options 斷開
$ srvctl stop db -d testrac
$ srvctl start db -d testrac

但是修改了這個初始化引數並不意味著解決了問題:

$ rman target /

恢復管理器: Release 10.2.0.3.0 - Production on 星期三 6月 13 10:15:43 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

連線到目標資料庫: TESTRAC (DBID=4291216984)

RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> backup copies 2 tablespace users;
5> }

使用目標資料庫控制檔案替代恢復目錄
分配的通道: c1
通道 c1: sid=291 例項=testrac2 devtype=SBT_TAPE
通道c1: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)

啟動 backup 於 13-6月 -07
通道 c1: 啟動全部資料檔案備份集
通道 c1: 正在指定備份集中的資料檔案
輸入資料檔案 fno=00005 name=+DISK/testrac/datafile/users.267.618591279
通道 c1: 正在啟動段 1 於 13-6月 -07
釋放的通道: c1
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: backup 命令 (c1 通道上, 在 06/13/2007 10:16:30 上) 失敗
ORA-19506: 無法建立順序檔案, 名稱 = "f6ik5p7q_1_1", 引數 = ""
ORA-27028: skgfqcre: sbtbackup 返回錯誤
ORA-19511: 從介質管理器層接收到錯誤, 錯誤文字為:
No policy or schedule name is explicitly specified for copy number <1>.

備份多個備份集到帶庫,還要受到netbackup的策略制約。

利用root在圖形化介面下啟動jnbSA:

# jnbSA

然後在NetBackup Management的Policies中找到當前客戶端的策略,雙擊開啟,並定位到Schedules標籤頁,選擇目前的策略,並點選修改,選擇Multiple copies,並確定。

但是發現設定這個引數後,不指定COPIES,Oracle也會備份多個備份集,如果指定COPIES仍然會報錯。

無奈查詢METALINK,發現Oracle在這裡還需要進行額外的設定,只有使用下面的備份方法才可以成功:

RMAN> run
2> {
3> set duplex=2;
4> allocate channel c1 device type sbt;
5> allocate channel c2 device type sbt;
6> send 'NB_ORA_CLIENT=backup,CPF1_POLICY=testoracle,CPF1_SCHED=Default-Application-Backup';
7> send 'NB_ORA_CLIENT=backup,CPF2_POLICY=testoracle,CPF2_SCHED=test_multi_copy';
8> backup tablespace users;
9> }

正在執行命令: SET BACKUP COPIES

分配的通道: c1
通道 c1: sid=308 例項=testrac2 devtype=SBT_TAPE
通道c1: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)

分配的通道: c2
通道 c2: sid=285 例項=testrac2 devtype=SBT_TAPE
通道c2: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)

向通道發命令: c1
向通道發命令: c2

向通道發命令: c1
向通道發命令: c2

啟動 backup 於 14-6月 -07
通道 c1: 啟動全部資料檔案備份集
通道 c1: 正在指定備份集中的資料檔案
輸入資料檔案 fno=00005 name=+DISK/testrac/datafile/users.267.618591279
通道 c1: 正在啟動段 1 於 14-6月 -07
通道 c1: 已完成段 1 於 14-6月 -07, 有 2 個副本和標記 TAG20070614T110417
段 handle=ggik8gdh_1_1 comment=API Version 2.0,MMS Version 5.0.0.0
段 handle=ggik8gdh_1_2 comment=API Version 2.0,MMS Version 5.0.0.0
通道 c1: 備份集已完成, 經過時間:00:04:15
完成 backup 於 14-6月 -07
釋放的通道: c1
釋放的通道: c2

為了使用這種方法進行備份,必須建立兩個SCHEDULE,每個CHANNEL指定一個SCHEDULE。而且需要注意的是,這種方式對BACKUP COPIES 2這種語句無效,只對SET BACKUP COPIES,這種方式有效,而且SET BACKUP COPIES必須在ALLOCATE CHANNEL命令之前發出,否則會出錯。

RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> send 'NB_ORA_CLIENT=backup,CPF1_POLICY=testoracle,CPF1_SCHED=Default-Application-Backup';
6> send 'NB_ORA_CLIENT=backup,CPF2_POLICY=testoracle,CPF2_SCHED=test_multi_copy';
7> backup copies 2 tablespace users;
8> }

分配的通道: c1
通道 c1: sid=308 例項=testrac2 devtype=SBT_TAPE
通道c1: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)

分配的通道: c2
通道 c2: sid=285 例項=testrac2 devtype=SBT_TAPE
通道c2: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)

向通道發命令: c1
向通道發命令: c2

向通道發命令: c1
向通道發命令: c2

啟動 backup 於 13-6月 -07
通道 c1: 啟動全部資料檔案備份集
通道 c1: 正在指定備份集中的資料檔案
輸入資料檔案 fno=00005 name=+DISK/testrac/datafile/users.267.618591279
通道 c1: 正在啟動段 1 於 13-6月 -07
MAN-03009: backup 命令 (c1 通道上, 在 06/13/2007 17:19:10 上) 失敗
ORA-19506: 無法建立順序檔案, 名稱 = "g6ik6huc_1_2", 引數 = ""
ORA-27028: skgfqcre: sbtbackup 返回錯誤
ORA-19511: 從介質管理器層接收到錯誤, 錯誤文字為:
No policy or schedule name is explicitly specified for copy number <2>.
通道 c1 已禁用, 將在另一個通道上執行該通道上失敗的作業
通道 c2: 啟動全部資料檔案備份集
通道 c2: 正在指定備份集中的資料檔案
輸入資料檔案 fno=00005 name=+DISK/testrac/datafile/users.267.618591279
通道 c2: 正在啟動段 1 於 13-6月 -07
釋放的通道: c1
釋放的通道: c2
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: backup 命令 (c2 通道上, 在 06/13/2007 17:20:15 上) 失敗
ORA-19506: 無法建立順序檔案, 名稱 = "g7ik6i0e_1_2", 引數 = ""
ORA-27028: skgfqcre: sbtbackup 返回錯誤
ORA-19511: 從介質管理器層接收到錯誤, 錯誤文字為:
No policy or schedule name is explicitly specified for copy number <2>.

同樣的設定對於SET BACKUP COPIES 2有效,但是由於BACKUP COPIES 2 TABLESPACE USERS語句就會報錯。

RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> send 'NB_ORA_CLIENT=backup,CPF1_POLICY=testoracle,CPF1_SCHED=Default-Application-Backup';
6> send 'NB_ORA_CLIENT=backup,CPF2_POLICY=testoracle,CPF2_SCHED=test_multi_copy';
7> set backup copies 2;
8> backup archivelog all;
9> }

分配的通道: c1
通道 c1: sid=308 例項=testrac2 devtype=SBT_TAPE
通道c1: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)

分配的通道: c2
通道 c2: sid=285 例項=testrac2 devtype=SBT_TAPE
通道c2: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)

向通道發命令: c1
向通道發命令: c2

向通道發命令: c1
向通道發命令: c2

正在執行命令: SET BACKUP COPIES

啟動 backup 於 14-6月 -07
當前日誌已存檔
通道 c1: 正在啟動存檔日誌備份集
通道 c1: 正在指定備份集中的存檔日誌
輸入存檔日誌執行緒 =1 序列 =330 記錄 ID=853 時間戳=625244218
輸入存檔日誌執行緒 =1 序列 =331 記錄 ID=855 時間戳=625244420
通道 c1: 正在啟動段 1 於 14-6月 -07
通道 c2: 正在啟動存檔日誌備份集
通道 c2: 正在指定備份集中的存檔日誌
輸入存檔日誌執行緒 =2 序列 =245 記錄 ID=851 時間戳=625244214
輸入存檔日誌執行緒 =2 序列 =246 記錄 ID=856 時間戳=625244419
通道 c2: 正在啟動段 1 於 14-6月 -07
MAN-03009: backup 命令 (c2 通道上, 在 06/14/2007 15:03:16 上) 失敗
ORA-19506: 無法建立順序檔案, 名稱 = "heik8u84_1_2", 引數 = ""
ORA-27028: skgfqcre: sbtbackup 返回錯誤
ORA-19511: 從介質管理器層接收到錯誤, 錯誤文字為:
No policy or schedule name is explicitly specified for copy number <2>.
通道 c2 已禁用, 將在另一個通道上執行該通道上失敗的作業
釋放的通道: c1
釋放的通道: c2
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: backup 命令 (c1 通道上, 在 06/14/2007 15:03:41 上) 失敗
ORA-19506: 無法建立順序檔案, 名稱 = "hdik8u84_1_2", 引數 = ""
ORA-27028: skgfqcre: sbtbackup 返回錯誤
ORA-19511: 從介質管理器層接收到錯誤, 錯誤文字為:
No policy or schedule name is explicitly specified for copy number <2>.

SET BACKUP COPIES 2放到ALLOCATE CHANNEL命令之後,也會報錯。

最後注意一下,前面提到的修改POLICY中的MULTIPLE COPIES是不需要修改的,這個設定對所有的備份都是生效的。也就是說,即使不指定SET BACKUP COPIES或者BACKUP COPIES N,備份也會自動備份多個備份集。這顯然不是預期的結果。

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

相關文章