前言
總結一個老生常談的話題,利用數據泵執行邏輯導入時,經常會碰到sequence發生唯一衝突的問題,本文總結解決方式
原因
impdp執行導入時,按順序先導入sequence(假定此時currval是100)而後導入表,但如果在這之間有人向表中插入數據或其它方式導致sequence被調用,導致此時currval增加到1000。數據導入完成後,sequence是從100開始取值,而100-1000的sequence已經被佔用,導致唯一衝突
解決方式:
1.在dest端 drop掉sequence,從source端獲取sequence的元數據到dest重新創建
2.數據庫至於RESTRICT SESSION模式下,執行導出
3.將SEQUENCE的CACHE設置爲一個較大的值,確保導出序列和導出表數據之前的時間內,序列CACHE的值不會被用完,這就保證了導入後不會出現序列值的NEXTVAL小於表中已有數據的情況