【故障處理】如何避免在執行impdp後出現ORA-00001錯誤
問題還原
1. 在源庫建立一個帶有主鍵的表
SQL> create user tc identified by oracle default tablespace users;
SQL> grant resource ,connect to tc;
SQL> conn tc/oracle
SQL> create sequence seq1 increment by 1;
Sequence created.
SQL> create table tc_table (nr number primary key,txt varchar2(10));
SQL> conn / as sysdba
2. 使用序列給該表插入資料
SQL> insert into tc.tc_table values (tc.seq1.nextval,'Line 1');
SQL> insert into tc.tc_table values (tc.seq1.nextval,'Line 2');
commit;
3. 使用expdp 匯出 tc schema ,在匯出的時候要繼續插入資料
insert into tc.tc_table values (tc.seq1.nextval,'Line 3');
commit;
insert into tc.tc_table values (tc.seq1.nextval,'Line 4');
commit;
·
·
insert into tc.tc_table values (tc.seq1.nextval,'Line 24');
commit;
4. 執行expdp 匯出
$ expdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp_tc.dmp logfile=expdp_tc.log schemas=tc
Export: Release 11.2.0.4.0 - Production on Sat Nov 28 01:07:33 2020
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_SCHEMA_01": system/******** directory=DATA_PUMP_DIR dumpfile=expdp_tc.dmp logfile=expdp_tc.log schemas=tc
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
. . exported "TC"."TC_TABLE" 5.429 KB 24 rows
Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
/u01/app/oracle/admin/orcl/dpdump/expdp_tc.dmp
Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at Sat Nov 28 01:07:40 2020 elapsed 0 00:00:07
5. 在目標庫執行匯入操作
$ impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp_tc.dmp logfile=impdp_tc.log schemas=tc
Import: Release 11.2.0.4.0 - Production on Sat Nov 28 01:10:26 2020
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
Master table "SYSTEM"."SYS_IMPORT_SCHEMA_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_SCHEMA_01": system/******** directory=DATA_PUMP_DIR dumpfile=expdp_tc.dmp logfile=impdp_tc.log schemas=tc
Processing object type SCHEMA_EXPORT/USER
ORA-31684: Object type USER:"TC" already exists
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "TC"."TC_TABLE" 5.429 KB 24 rows
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Job "SYSTEM"."SYS_IMPORT_SCHEMA_01" completed with 1 error(s) at Sat Nov 28 01:10:27 2020 elapsed 0 00:00:01
6. 成功匯入後,向tc.tc_table 表插入資料會報以下錯誤
insert into tc.tc_table values (tc.seq1.nextval,'Line 25');
*
ERROR at line 1:
ORA-00001: unique constraint (TC.SYS_C0013274) violated
解決方法
出現上述問題的原因是,在我們執行expdp 匯出的操作時,應用繼續往表中插入資料。 Data Pump 首先會匯出序列,之後匯出表資料, 因此在匯出表資料時,可能已經使用儲存在dumpfile 中的序列的 nextval 將資料插入到表中。
解決方法如下:
方式一:
1. 以一致性模式進行匯出,意味著整個匯出的時間與給定的時間一致
$ expdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp_tc.dmp logfile=expdp_tc.log schemas=tc flashback_time=systimestamp
2. 為了避免ORA-01555(snapshot too old) 錯誤,確保引數 undo_retention 有足夠的空間去執行 expdp 匯出工作。
如果expdp 需要花費 3.5 小時,設定 undo_retention 為 4 個小時
SQL> alter system set undo_retention=14400 scope=spfile sid='*';
同時也要確保UNDO 表空間在源庫中有足夠的空間儲存 4 個小時的 UNDO 資料。
方式二:
避免在執行expdp 的過程中應用在使用
方式三:
在目標庫中,透過重新創序列,提高序列的next value
SQL> select max(nr) from tc.<TABLE_NAME>;
MAX(NR)
------------
24
SQL> select tc.<SEQUENCE_NAME>.nextval from dual;
NEXTVAL
------------
22
SQL> select dbms_ metadata.get_ddl('SEQUENCE',' SEQ1 ','TC') "DDL" from dual;
DDL
---------------------------------------------------------
CREATE SEQUENCE "TC"." SEQ1 " MINVALUE 1 MAXVALUE 9999999999999999 INCREMENT BY 1 START WITH 41
SQL> drop sequence tc.<SEQUENCE_NAME>;
SQL> create sequence tc.<SEQUENCE_NAME> start with 25 increment by 1
---- end ----
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31529886/viewspace-2740723/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- impdp匯入報ORA-00001 ORA-04088錯誤
- Android執行出現android Installation failed due to invalid URI! 錯誤處理AndroidAI
- ORA-01591錯誤故障處理
- Oracle impdp遷移資料後主鍵丟失故障處理Oracle
- 如何優雅的在Golang中進行錯誤處理Golang
- Qt處理中文編碼出現錯誤QT
- Camunda 流程執行錯誤處理ERROR BOUNDARY EVENTError
- eclipse在使用中彈出這個錯誤框,該如何處理?Eclipse
- 錯誤處理:如何通過 error、deferred、panic 等處理錯誤?Error
- 轉載ORA-01591錯誤故障處理(ji)
- PHP安裝後錯誤處理PHP
- mysql執行函式出現1418錯誤MySql函式
- 伺服器出現404錯誤怎麼處理伺服器
- 【故障處理】ORA-31600和ORA-04063錯誤
- 淺析Node是如何進行錯誤處理的
- 錯誤處理
- 如何處理錯誤訊息PleaseinstalltheLinuxkernelheaderfilesLinuxHeader
- MES專案執行:3個要避免的錯誤
- 【翻譯】在Spring WebFlux中處理錯誤SpringWebUX
- win10系統office 2013安裝時出現錯誤1303如何處理Win10
- Python錯誤處理Python
- PHP 錯誤處理PHP
- php錯誤處理PHP
- Go 錯誤處理Go
- linux下gdb如何處理coredump錯誤Linux
- 金融行業現場故障處理實錄行業
- 檢視執行計劃出現ORA-22992錯誤
- 【知識分享】伺服器出現404錯誤怎麼處理伺服器
- 在大型軟體專案中如何處理錯誤和異常
- 在vue使用異常處理做錯誤提示Vue
- GPON網路故障如何處理?GPON網路故障處理流程
- 如何處理ABAP DDIC_TYPE_INCONSISTENCY錯誤
- 淺出Vue 錯誤處理機制errorCaptured、errorHandlerVueErrorAPT
- openGauss 處理錯誤表
- go的錯誤處理Go
- axios 的錯誤處理iOS
- wordpress更換域名後CSS錯誤怎麼處理CSS
- 如何在 Go 中優雅的處理和返回錯誤(1)——函式內部的錯誤處理Go函式