Oracle

唯一約束錯誤 Oracle

  • August 6, 2015

我有兩個數據庫——一個是 11g,另一個是 12c。12c db 有 11g (expdp/impdp) 的準確數據。現在,我在一個具有唯一約束錯誤的表中遇到錯誤。我已經檢查了兩個數據庫中表的結構和為表啟用的約束,這也是相同的。現在我該如何解決這個問題?當我點擊其中一個選項卡時,我在其上執行的應用程序上遇到此錯誤。 Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-00001:unique constraint (USER1.HIGHT_PK) violated是我得到的錯誤

你寫了

12c db 有 11g 的準確數據(expdp/impdp)

但是你確定嗎?

1)您是否對錶格進行了一致的導出?這意味著所有表數據都來自同一時間點。為此,在導出期間停止數據庫上的所有其他寫入活動就足夠了。或者你在使用expdp時設置flashback_scn參數或在使用exp時設置consistent參數。

2)你的序列值和你的表數據一致嗎?這意味著所有表數據和序列狀態都來自同一時間點。為此,在導出期間停止數據庫上的所有其他讀寫活動就足夠了。這是我知道保證這種一致性的唯一方法。我認為 enen flashback_scn 或一致的參數在這裡無濟於事。它們僅對事務數據有用。我認為在讀取表數據之前提取了序列等結構,這是來自導出 https://community.oracle.com/thread/3519031的日誌

> expdp system/system123 目錄=DUMP_DIR 轉儲文件=hsfa.dump schemas=HSFA 內容=metadata_only 


導出:2014 年 2 月 20 日星期四 7:55:03 發布 10.2.0.5.0 - 64 位生產 


版權所有 (c) 2003、2007,甲骨文。版權所有。 


連接到:Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production 
具有分區、OLAP、數據探勘和實際應用程序測試選項 
啟動 "SYSTEM"."SYS_EXPORT_SCHEMA_16": system/******** directory=DUMP_DIR dumpfile=hsfa.dump schemas=HSFA content=metadata_only 
處理對像類型 SCHEMA_EXPORT/USER 
處理對像類型SCHEMA_EXPORT/SYSTEM_GRANT 
處理對像類型SCHEMA_EXPORT/ROLE_GRANT 
處理對像類型SCHEMA_EXPORT/DEFAULT_ROLE 
處理對像類型SCHEMA_EXPORT/TABLESPACE_QUOTA 
處理對像類型SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA 
處理對像類型SCHEMA_EXPORT/SYNONYM/SYNONYM 
處理對像類型SCHEMA_EXPORT/TYPE/TYPE_SPEC 
處理對像類型SCHEMA_EXPORT/SEQUENCE/SEQUENCE 
處理對像類型SCHEMA_EXPORT/TABLE/TABLE 
(...)

解決方案

如果您沒有進行數據一致的導出(案例 1),您應該使用適當的重複導出

$$ consistency parameter $$. 如果您對序列有問題(案例 2),您可以嘗試以下操作。像源數據庫的目前序列一樣重新創建目標數據庫的序列(您已在其中導入架構)。現在所有序列都生成應用程序尚未使用的值。如果序列號序列中存在間隙,則大多數應用程序都沒有問題(應該沒有問題)。

all_sequences 中的 last_number 列在兩個數據庫(11g 和 12c)中是不同的,理想情況下它應該是相同的。我所做的是將 12c 數據庫的序列號增加為高於 11g 數據庫的序列號。並且錯誤沒有出現。一切都很好。!

引用自:https://dba.stackexchange.com/questions/109112