ORACLE expdp備份與ORA-31693、ORA-02354、ORA-02149
平臺環境是:solaris作業系統
資料庫是:oracle 10.2.0.4
故障現象:2015年10月份以來,一綜合網管資料庫頻頻報出ORA-31693、ORA-02354、ORA-02149錯誤,具體報錯資訊如下所示:
. . 匯出了 "SSMS"."CHECKWHITELIST" 5.882 KB 1 行
ORA-31693: 表資料物件 "SSMS"."RES_SSMSKEYWCONF":"P_20121207000000" 無法載入/解除安裝並且被跳過, 錯誤如下:
ORA-02354: 匯出/匯入資料時出錯
ORA-02149: 指定的分割槽不存在
. . 匯出了 "SSMS"."RES_SSMSKEYWCONF":"P_20121208000000" 1.481 MB 17506 行
起初處理,用如下sql語句從資料庫查詢 "SSMS"."RES_SSMSKEYWCONF":"P_20121207000000"分割槽,沒有查詢到,可能相關的分割槽表的分割槽已經不存在了。於是,建議業務方手工執行分割槽表分割槽清理命令,更新資料庫字典資訊。
select table_owner,table_name,partition_name from DBA_TAB_PARTITIONS where table_name='RES_SSMSHOLDCONF' and partition_name='P_20121207000000';
處理完後,第二天相關這個分割槽表的expdp備份的報錯果然沒有了,但是又出現新的分割槽表分割槽備份報錯,報錯資訊跟上述症狀一致:
. . 匯出了 "SSMS"."BLACK_WHITE_LOG":"P_20151014000000" 3.270 MB 36055 行
ORA-31693: 表資料物件 "SSMS"."RES_SSMSHOLDCONF":"P_20121207000000" 無法載入/解除安裝並且被跳過, 錯誤如下:
ORA-02354: 匯出/匯入資料時出錯
ORA-02149: 指定的分割槽不存在
. . 匯出了 "SSMS"."RES_SSMSHOLDCONF":"P_20121208000000" 3.178 MB 29845 行
. . 匯出了 "SSMS"."RES_DIM_PROVINCE_DBLINK" 5.835 KB 16 行
ORA-31693: 表資料物件 "SSMS"."RES_SSMSWHITELIST":"P_20121207000000" 無法載入/解除安裝並且被跳過, 錯誤如下:
ORA-02354: 匯出/匯入資料時出錯
ORA-02149: 指定的分割槽不存在
. . 匯出了 "SSMS"."RES_SSMSWHITELIST":"P_20121208000000" 129.2 KB 1380 行
看來,這種expdp報錯不是簡單的資料庫字典問題。我懷疑是資料庫的expdp備份開始後到結束前,有人或者自動作業清理分割槽表分割槽,這樣才能每天都報備份分割槽不存在,而且每天報的分割槽表分割槽不同;透過與業務、開發方溝通得知,他們確實有分割槽表分割槽清理job且開始時間是每天零點,另經檢視資料庫expdp備份計劃也是每天零點開始,這符合自己的猜測。於是我按照自己的猜測思路進行了模擬實驗,具體的步奏如下:
1、將上述報錯涉及的一張分割槽表匯出,觀察備份過程,備份成功沒有報錯或異常,然後匯入到實驗環境
2、在實驗環境進行備份
[oracle@orcl11204 ~]$ date
Fri Oct 30 17:46:52 CST 2015
[oracle@orcl11204 ~]$ expdp system/redhat5 tables=RES_SSMSWHITELIST SCHEMAS=ssms directory=TEXPDP dumpfile=exp_20`date +%y
y%m%d`1.dmp filesize=3000000000 logfile=exp_20`date +%y%m%d`.logdirectory=TEXPDP dumpfile=exp_20`date +%y%m%d`full=y directory=TEXPDP dumpfile=exp_20`date +%y%m%d`1.dmp filesize=cd
expdp system/redhat5 tables=ssms.RES_SSMSWHITELIST directory=TEXPDP dumpfile=exp_20`date +%y%m%d`1.
dmp filesize=3000000000 logfile=exp_20`date +%y%m%d`.log
Export: Release 11.2.0.4.0 - Production on Fri Oct 30 17:46:30 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_EXPORT_TABLE_01": system/******** tables=ssms.RES_SSMSWHITELIST directory=TEXPDP dumpfile=exp_201510301.dmp filesize=3000000000 logfile=exp_20151030.log
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 2.021 GB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20131001000000" 37.50 MB 357138 rows
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20130901000000" 36.52 MB 347839 rows
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20150401000000" 33.56 MB 297716 rows
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20150801000000" 33.30 MB 295103 rows
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20150901000000" 33.48 MB 296620 rows
.
.
.
3、另開視窗,進行分割槽表刪除操作
[oracle@orcl11204 ~]$ date
Fri Oct 30 17:49:47 CST 2015
.
.
.
SQL> show user
USER is "SSMS"
SQL> alter table RES_SSMSWHITELIST drop partition P_20130826000000;
Table altered.
SQL> alter table RES_SSMSWHITELIST drop partition P_20150425000000;
Table altered.
SQL> alter table RES_SSMSWHITELIST drop partition P_20150116000000;
Table altered.
4、觀察備份過程,果然出現了生產環境中的報錯
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20130824000000" 14.24 KB 60 rows
ORA-31693: Table data object "SSMS"."RES_SSMSWHITELIST":"P_20130826000000" failed to load/unload and is being skipped due to error:
ORA-02354: error in exporting/importing data
ORA-02149: Specified partition does not exist
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20130827000000" 8.835 KB 9 rows
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20150115000000" 21.14 KB 120 rows
ORA-31693: Table data object "SSMS"."RES_SSMSWHITELIST":"P_20150116000000" failed to load/unload and is being skipped due to error:
ORA-02354: error in exporting/importing data
ORA-02149: Specified partition does not exist
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20150117000000" 11.27 KB 30 rows
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20150423000000" 9.281 KB 12 rows
ORA-31693: Table data object "SSMS"."RES_SSMSWHITELIST":"P_20150425000000" failed to load/unload and is being skipped due to error:
ORA-02354: error in exporting/importing data
ORA-02149: Specified partition does not exist
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20150426000000" 9.765 KB 17 rows
總結以上實驗:oracle資料庫expdp備份開始到結束期間,人為的或自動作業刪除分割槽表分割槽,會導致分割槽表分割槽備份不到而報錯,這不是資料庫字典問題,也不是oracle自身的bug,是業務的分割槽表分割槽清理Job任務與資料庫expdp備份作業之間的邏輯問題。
需要作出的調整是(二者選一)
1、在備份開始前進行分割槽表清理並清理結束
2、在備份結束後進行分割槽表清理
資料庫是:oracle 10.2.0.4
故障現象:2015年10月份以來,一綜合網管資料庫頻頻報出ORA-31693、ORA-02354、ORA-02149錯誤,具體報錯資訊如下所示:
. . 匯出了 "SSMS"."CHECKWHITELIST" 5.882 KB 1 行
ORA-31693: 表資料物件 "SSMS"."RES_SSMSKEYWCONF":"P_20121207000000" 無法載入/解除安裝並且被跳過, 錯誤如下:
ORA-02354: 匯出/匯入資料時出錯
ORA-02149: 指定的分割槽不存在
. . 匯出了 "SSMS"."RES_SSMSKEYWCONF":"P_20121208000000" 1.481 MB 17506 行
起初處理,用如下sql語句從資料庫查詢 "SSMS"."RES_SSMSKEYWCONF":"P_20121207000000"分割槽,沒有查詢到,可能相關的分割槽表的分割槽已經不存在了。於是,建議業務方手工執行分割槽表分割槽清理命令,更新資料庫字典資訊。
select table_owner,table_name,partition_name from DBA_TAB_PARTITIONS where table_name='RES_SSMSHOLDCONF' and partition_name='P_20121207000000';
處理完後,第二天相關這個分割槽表的expdp備份的報錯果然沒有了,但是又出現新的分割槽表分割槽備份報錯,報錯資訊跟上述症狀一致:
. . 匯出了 "SSMS"."BLACK_WHITE_LOG":"P_20151014000000" 3.270 MB 36055 行
ORA-31693: 表資料物件 "SSMS"."RES_SSMSHOLDCONF":"P_20121207000000" 無法載入/解除安裝並且被跳過, 錯誤如下:
ORA-02354: 匯出/匯入資料時出錯
ORA-02149: 指定的分割槽不存在
. . 匯出了 "SSMS"."RES_SSMSHOLDCONF":"P_20121208000000" 3.178 MB 29845 行
. . 匯出了 "SSMS"."RES_DIM_PROVINCE_DBLINK" 5.835 KB 16 行
ORA-31693: 表資料物件 "SSMS"."RES_SSMSWHITELIST":"P_20121207000000" 無法載入/解除安裝並且被跳過, 錯誤如下:
ORA-02354: 匯出/匯入資料時出錯
ORA-02149: 指定的分割槽不存在
. . 匯出了 "SSMS"."RES_SSMSWHITELIST":"P_20121208000000" 129.2 KB 1380 行
看來,這種expdp報錯不是簡單的資料庫字典問題。我懷疑是資料庫的expdp備份開始後到結束前,有人或者自動作業清理分割槽表分割槽,這樣才能每天都報備份分割槽不存在,而且每天報的分割槽表分割槽不同;透過與業務、開發方溝通得知,他們確實有分割槽表分割槽清理job且開始時間是每天零點,另經檢視資料庫expdp備份計劃也是每天零點開始,這符合自己的猜測。於是我按照自己的猜測思路進行了模擬實驗,具體的步奏如下:
1、將上述報錯涉及的一張分割槽表匯出,觀察備份過程,備份成功沒有報錯或異常,然後匯入到實驗環境
2、在實驗環境進行備份
[oracle@orcl11204 ~]$ date
Fri Oct 30 17:46:52 CST 2015
[oracle@orcl11204 ~]$ expdp system/redhat5 tables=RES_SSMSWHITELIST SCHEMAS=ssms directory=TEXPDP dumpfile=exp_20`date +%y
y%m%d`1.dmp filesize=3000000000 logfile=exp_20`date +%y%m%d`.logdirectory=TEXPDP dumpfile=exp_20`date +%y%m%d`full=y directory=TEXPDP dumpfile=exp_20`date +%y%m%d`1.dmp filesize=cd
expdp system/redhat5 tables=ssms.RES_SSMSWHITELIST directory=TEXPDP dumpfile=exp_20`date +%y%m%d`1.
dmp filesize=3000000000 logfile=exp_20`date +%y%m%d`.log
Export: Release 11.2.0.4.0 - Production on Fri Oct 30 17:46:30 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_EXPORT_TABLE_01": system/******** tables=ssms.RES_SSMSWHITELIST directory=TEXPDP dumpfile=exp_201510301.dmp filesize=3000000000 logfile=exp_20151030.log
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 2.021 GB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20131001000000" 37.50 MB 357138 rows
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20130901000000" 36.52 MB 347839 rows
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20150401000000" 33.56 MB 297716 rows
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20150801000000" 33.30 MB 295103 rows
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20150901000000" 33.48 MB 296620 rows
.
.
.
3、另開視窗,進行分割槽表刪除操作
[oracle@orcl11204 ~]$ date
Fri Oct 30 17:49:47 CST 2015
.
.
.
SQL> show user
USER is "SSMS"
SQL> alter table RES_SSMSWHITELIST drop partition P_20130826000000;
Table altered.
SQL> alter table RES_SSMSWHITELIST drop partition P_20150425000000;
Table altered.
SQL> alter table RES_SSMSWHITELIST drop partition P_20150116000000;
Table altered.
4、觀察備份過程,果然出現了生產環境中的報錯
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20130824000000" 14.24 KB 60 rows
ORA-31693: Table data object "SSMS"."RES_SSMSWHITELIST":"P_20130826000000" failed to load/unload and is being skipped due to error:
ORA-02354: error in exporting/importing data
ORA-02149: Specified partition does not exist
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20130827000000" 8.835 KB 9 rows
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20150115000000" 21.14 KB 120 rows
ORA-31693: Table data object "SSMS"."RES_SSMSWHITELIST":"P_20150116000000" failed to load/unload and is being skipped due to error:
ORA-02354: error in exporting/importing data
ORA-02149: Specified partition does not exist
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20150117000000" 11.27 KB 30 rows
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20150423000000" 9.281 KB 12 rows
ORA-31693: Table data object "SSMS"."RES_SSMSWHITELIST":"P_20150425000000" failed to load/unload and is being skipped due to error:
ORA-02354: error in exporting/importing data
ORA-02149: Specified partition does not exist
. . exported "SSMS"."RES_SSMSWHITELIST":"P_20150426000000" 9.765 KB 17 rows
總結以上實驗:oracle資料庫expdp備份開始到結束期間,人為的或自動作業刪除分割槽表分割槽,會導致分割槽表分割槽備份不到而報錯,這不是資料庫字典問題,也不是oracle自身的bug,是業務的分割槽表分割槽清理Job任務與資料庫expdp備份作業之間的邏輯問題。
需要作出的調整是(二者選一)
1、在備份開始前進行分割槽表清理並清理結束
2、在備份結束後進行分割槽表清理
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29357786/viewspace-1820618/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE expdp備份與ORA-31693、ORA-02354、ORA-01555Oracle
- 揭祕ORACLE備份之--邏輯備份(EXPDP)Oracle
- Oracle 邏輯備份 expdp/impdpOracle
- oracle資料泵備份(Expdp命令)Oracle
- Oracle 邏輯備份之EXPDP精講Oracle
- Oracle 效能優化-expdp備份速度優化02Oracle優化
- Oracle 效能優化-expdp備份速度優化03Oracle優化
- Oracle EXPDP自動備份緩慢問題解決Oracle
- windowns系統,oracle資料庫expdp自動備份Oracle資料庫
- expdp 邏輯備份指令碼指令碼
- ORACLE expdp備份到windows網路共享檔案目錄(NFS)OracleWindowsNFS
- Oracle 11g EXPDP、RMAN自動備份SHELL指令碼Oracle指令碼
- 【EXPDP】不使用DIRECTORY引數完成expdp資料備份
- expdp備份+FTP自動上傳FTP
- Oracle資料庫的邏輯備份工具-expdp資料泵Oracle資料庫
- Oracle expdp/impdp匯出匯入命令及資料庫備份Oracle資料庫
- Oracle expdp/impdp匯入匯出備份資料庫指令碼Oracle資料庫指令碼
- Oracle之差異增量備份與累積增量備份Oracle
- Oracle 備份 與 恢復 概述Oracle
- Oracle RAC備份與恢復Oracle
- Oracle備份與恢復 (zt)Oracle
- Oracle備份與恢復案例Oracle
- Oracle備份與恢復(轉)Oracle
- 【EXPDP】使用EXPDP備份資料時預估大小——ESTIMATE引數
- ORACLE 資料匯出LOB欄位報錯ORA-31693,ORA-02354,ORA-22924Oracle
- Oracle資料庫冷備份與熱備份操作梳理Oracle資料庫
- Oracle RMAN中全備份與0級備份區別Oracle
- Linux 平臺下 Oracle 資料泵備份(expdp) SHELL 指令碼LinuxOracle指令碼
- 【EXPDP】使用expdp的QUERY引數限定備份資料的範圍
- oracle備份--離線備份Oracle
- Expdp 備份到ASM之 ORA-39070ASM
- 備份與恢復oracle_homeOracle
- Oracle OCR的備份與恢復Oracle
- Oracle 備份與恢復(一):概念Oracle
- oracle備份與恢復雜記Oracle
- Oracle備份與恢復入門Oracle
- Oracle備份與恢復案例 (zt)Oracle
- oracle資料還原與備份Oracle