出現這個錯誤是因為oracle序列R3產生的值在表gdb_objectclasses中已經有記錄造成的。解決辦法是進入plus/sql或用PL/SQL Developer鏈接oracle.
(1)執行SQL
SELECT MAX(id) FROM gdb_objectclasses
找出id的最大值。例如執行結果是
MAX(ID)
---------------
55
(2)執行SQL
SELECT registration_id FROM table_registry WHERE table_name = 'GDB_OBJECTCLASSES'
找到表'GDB_OBJECTCLASSES'注冊ID號
如執行結果是
--------------
3
(3)執行SQL
SELECT last_number FROM user_sequences WHERE sequence_name = 'R3'
找出序列R3的下一個值,如果第二步中的執行結果是4則這里是R4。例如執行結果是:
LAST_NUMBER
---------------
50
(4)從上面的查詢結果中可以看出,序列R3的下一個值是50,而表gdb_objectclasses中小于55的值都已經被占用了。所以就會出現異常Unique contraint (SDE.GDB_OC_PKC) violated。解決辦法是不斷增加序列R3的值,使其大于55,執行下面的SQL語句6次就可以了。
SELECT R3.NEXTVAL from dual
(5)在SDE中,選中sde連接后點鼠標右鍵,選擇refresh。然后就可以再導數據了。注意這一步一定要進行,這也是我一直認為sde很爛的地方。