Oracle RMAN-06023 和ORA-19693錯誤
在將一個0級備份的資料庫還原到其它機器上時,首先遇到了RMAN-06023然後遇到ORA-19693錯誤,錯誤發生的環境和內容大致如下:
資料庫版本:
開始還原資料庫:
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for 64-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
startup nomount;
RMAN> restore controlfile from 'I:\backup\C-2711934557-20150401-02_NSOA_CONTROLFILE_20150401';
啟動 restore 於 2015-04-10 15:09:01
使用目標資料庫控制檔案替代恢複目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=129 裝置類型=DISK
通道 ORA_DISK_1: 正在還原控制檔案
通道 ORA_DISK_1: 還原完成, 用時: 00:00:08
輸出檔案名=I:\NSOADP\CONTROL01.CTL
完成 restore 於 2015-04-10 15:09:10
RMAN> alter database mount;
RMAN>run
{
allocate channel dev type disk;
allocate channel dev1 type disk;
set newname for datafile 1 to 'd:\nsoadp\SYSTEM01.DBF';
set newname for datafile 2 to 'd:\nsoadp\SYSAUX01.DBF';
set newname for datafile 4 to 'd:\nsoadp\USERS01.DBF';
……………
restore database;
switch datafile all;
recover database;
release channel dev;
release channel dev1;
}
正在執行命令: SET NEWNAME
正在執行命令: SET NEWNAME
………
啟動 restore 於 2015-04-10 15:30:19
通道 dev: 正在開始還原資料檔案備份組
通道 dev: 正在指定從備份組還原的資料檔案
RMAN-06026: 有些目標沒有找到 - 終止還原
RMAN-06023: 沒有找到資料檔案4的副本來還原
RMAN-06023: 沒有找到資料檔案2的副本來還原
RMAN-06023: 沒有找到資料檔案1的副本來還原
但實際在0級備份中是包含這些資料檔案的:
RMAN> list backup of datafile 4,2,1;
備份組列表
===================
BS 關鍵字 類型 LV 大小 裝置類型 經過時間 完成時間
------- ---- -- ---------- ----------- ------------ -------------------
10071 Incr 0 30.29G DISK 02:46:53 2015-04-01 13:29:12
BP 關鍵字: 10071 狀態: AVAILABLE 已壓縮: YES 標記: NSOA_BACKUP_INCR0
段名:I:\BACKUP\B_NSOA_10193_UHQ39J0B_20150401
備份組 10071 中的資料檔案列表
檔案 LV 類型 Ckp SCN Ckp 時間 名稱
---- -- ---- ---------- ------------------- ----
4 0 Incr 13625590769939 2015-04-01 10:42:20 G:\U09\ORADATA\NSOA\USERS01.DBF
BS 關鍵字 類型 LV 大小 裝置類型 經過時間 完成時間
------- ---- -- ---------- ----------- ------------ -------------------
10072 Incr 0 29.04G DISK 02:47:11 2015-04-01 13:29:30
BP 關鍵字: 10072 狀態: AVAILABLE 已壓縮: YES 標記: NSOA_BACKUP_INCR0
段名:I:\BACKUP\B_NSOA_10192_UGQ39J0B_20150401
備份組 10072 中的資料檔案列表
檔案 LV 類型 Ckp SCN Ckp 時間 名稱
---- -- ---- ---------- ------------------- ----
1 0 Incr 13625590769907 2015-04-01 10:42:19 G:\U07\ORADATA\NSOA\SYSTEM01.DBF
2 0 Incr 13625590769907 2015-04-01 10:42:19 G:\U08\ORADATA\NSOA\SYSAUX01.DBF
因此可以確定,備份檔案本身是沒有問題的,問題出在
If we start a RESTORE database with a BACKUP controlfile and Flash Recovery Area is defined, RMAN execute and implicit crosscheck and catalog of all the objects in the Flash Recovery Area.
RMAN will catalog any objects in the Flash Recovery Area that will not be registered in the controlfile and if any of this files belongs to an incarnation different from CURRENT incarnation in the controlfile then changes controlfile CURRENT incarnation to the one found in the file that is being cataloged.
This prevents database from restoring backups that belong to old CURRENT incarnation.
RMAN considers backup availble for being restored if the backup incarnation and CURRENT incarnation in controlfile are the same.
根據文檔說明,我設定了db_recovery_file_dest和 db_recovery_file_dest_size參數並重新還原了控制檔案,然後在還原時將catalog 指向我的備份檔案所在目錄:
RMAN> restore controlfile from 'I:\backup\C-2711934557-20150401-02_NSOA_CONTROLFILE_20150401';
RMAN> alter database mount;
RMAN> catalog start with 'I:\backup';
啟動 implicit crosscheck backup 於 2015-04-10 15:09:40
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=129 裝置類型=DISK
已交叉檢驗的 29 對象
完成 implicit crosscheck backup 於 2015-04-10 15:10:37
啟動 implicit crosscheck copy 於 2015-04-10 15:10:37
使用通道 ORA_DISK_1
完成 implicit crosscheck copy 於 2015-04-10 15:10:37
搜尋恢複區中的所有檔案
正在編製檔案目錄...
沒有為檔案編製目錄
搜尋與樣式 I:\backup 匹配的所有檔案
資料庫未知檔案的列表
=====================================
檔案名稱: I:\backup\ARC_NSOA_10197_ULQ3A10I_20150401
檔案名稱: I:\backup\ARC_NSOA_10198_UMQ3A10I_20150401
………
是否確實要將上述檔案列入目錄 (輸入 YES 或 NO)? yes
正在編製檔案目錄...
目錄編製完畢
目錄編製完畢後我驗證了還原, RMAN-06023 錯誤不在報了,但出現了另一個隱含的錯誤:
RMAN> restore database preview;
啟動 restore 於 2015-04-10 15:45:41
使用通道 ORA_DISK_1
備份組列表
===================
BS 關鍵字 類型 LV 大小
------- ---- -- ----------
10072 Incr 0 29.04G
備份組 10072 中的資料檔案列表
檔案 LV 類型 Ckp SCN Ckp 時間 名稱
---- -- ---- ---------- ------------------- ----
1 0 Incr 13625590769907 2015-04-01 10:42:19 G:\U07\ORADATA\NSOA\SYSTEM01.DBF
2 0 Incr 13625590769907 2015-04-01 10:42:19 G:\U08\ORADATA\NSOA\SYSAUX01.DBF
11 0 Incr 13625590769907 2015-04-01 10:42:19 G:\U13\ORADATA\NSOA\FRDC_TABLESPACE.DBF
15 0 Incr 13625590769907 2015-04-01 10:42:19 G:\U10\ORADATA\NSOA\TBS_ZG.DBF
………
介質恢複啟動 SCN 是 13625590769793
恢複範圍必須超出 SCN 13625591441474 才能清除資料檔案模糊性
完成 restore 於 2015-04-10 15:46:27
我當時並沒有意識到什麼錯誤,所以我便開始了還原,但不幸ORA-19693來了:
RMAN>run
{
allocate channel dev type disk;
allocate channel dev1 type disk;
set newname for datafile 1 to 'd:\nsoadp\SYSTEM01.DBF';
set newname for datafile 2 to 'd:\nsoadp\SYSAUX01.DBF';
set newname for datafile 4 to 'd:\nsoadp\USERS01.DBF';
……………
restore database;
switch datafile all;
recover database;
release channel dev;
release channel dev1;
}
正在執行命令: SET NEWNAME
正在執行命令: SET NEWNAME
………
通道 dev: 將資料檔案 00004 還原到 d:\nsoadp\USERS01.DBF
釋放的通道: dev
釋放的通道: dev1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: restore 命令 (在 04/10/2015 15:51:10 上) 失敗
ORA-19693: 已包括備份片段 I:\BACKUP\B_NSOA_10193_UHQ39J0B_20150401
ORA-19693: backup piece string already includedCause: This backup piece was already specified for inclusion in the restore conversation. A restore conversation may process only a single instance of a backup piece.Action: Remove the specified duplicate backup piece in restore steps and restart the conversation.我頓時迷惑了,好端端的0級備份怎麼就會有duplicate backup,so 我用list 查看了備份:
RMAN> list backup;
BS 關鍵字 類型 LV 大小
------- ---- -- ----------
10071 Incr 0 30.29G
備份組 10071 中的資料檔案列表
檔案 LV 類型 Ckp SCN Ckp 時間 名稱
---- -- ---- ---------- ------------------- ----
4 0 Incr 13625590769939 2015-04-01 10:42:20 G:\U09\ORADATA\NSOA\USERS01.DBF
備份組 副本號 1 屬於備份組 10071
裝置類型 經過時間 完成時間 壓縮標記
----------- ------------ ------------------- ---------- ---
DISK 02:46:53 2015-04-01 13:29:12 YES NSOA_BACKUP_INCR0
備份組 10071 副本號 1的備份片段列表
BP 關鍵字 Pc# 狀態 段名稱
------- --- ----------- ----------
10071 1 AVAILABLE I:\BACKUP\B_NSOA_10193_UHQ39J0B_20150401
備份組 副本號 2 屬於備份組 10071
裝置類型 經過時間 完成時間 壓縮標記
----------- ------------ ------------------- ---------- ---
DISK 02:46:53 2015-04-10 18:00:58 YES NSOA_BACKUP_INCR0
備份組 10071 副本號 2的備份片段列表
BP 關鍵字 Pc# 狀態 段名稱
------- --- ----------- ----------
10123 1 AVAILABLE I:\BACKUP\B_NSOA_10193_UHQ39J0B_20150401
備份組 副本號 3 屬於備份組 10071
裝置類型 經過時間 完成時間 壓縮標記
----------- ------------ ------------------- ---------- ---
DISK 02:46:53 2015-04-10 18:17:41 YES NSOA_BACKUP_INCR0
備份組 10071 副本號 3的備份片段列表
BP 關鍵字 Pc# 狀態 段名稱
------- --- ----------- ----------
10152 1 AVAILABLE I:\BACKUP\B_NSOA_10193_UHQ39J0B_20150401
What is backup piece?
A backup set contains one or more binary files in an RMAN-specific format. This file is known as a backup piece. A backup set can contain multiple datafiles. For example, you can back up ten datafiles into a single backup set consisting of a single backup piece. In this case, RMAN creates one backup piece as output. The backup set contains only this backup piece.
接著使用change 命令uncatalog 重複的piece:
RMAN> change backuppiece 'I:\BACKUP\B_NSOA_10193_UHQ39J0B_20150401' uncatalog;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: uncatalog 命令 (在 04/10/2015 15:52:48 上) 失敗
RMAN-20261: 含糊的備份片段控制代碼
RMAN-06092: 尋找備份片段時出錯
RMAN> change backuppiece 10123 uncatalog;
未將備份片段列入目錄
備份片段控制代碼=I:\BACKUP\B_NSOA_10193_UHQ39J0B_20150401 RECID=10123 STAMP=876669065
未分類的 1 對象
RMAN> change backuppiece 10152 uncatalog;
未將備份片段列入目錄
備份片段控制代碼=I:\BACKUP\B_NSOA_10193_UHQ39J0B_20150401 RECID=10152 STAMP=876670068
未分類的 1 對象
Uncatalog 後還原正常了,但我有些糊塗了,便想起了備份通道的問題,也就有了如下的猜測,面對大的庫,備份分配多個通道執行並行備份不是顯著提高備份效率嗎?為什麼我的備份會產生duplicate pieces,是否和多通道有關係?以下是我的備份指令碼:
run{
allocate channel dev type disk;
allocate channel dev1 type disk;
allocate channel dev2 type disk;
backup incremental level 0 database
format 'I:\BackUp\PRACTICE\db_%d_%s_%p_%T'
tag 'WHOLE_INCL0';
release channel dev;
release channel dev1;
release channel dev2;
}
歡迎知情人士指導,謝謝!
--The end