最近,我們把我們的生產數據庫的實時/在線備份,通過發出以下命令:Oracle數據泵出口包括不正確的序列
expdp system/******@SID FULL=y DIRECTORY=data_pump_dir DUMPFILE=full_prod.dmp LOGFILE=full_prod_export.log JOB_NAME=prod_backup
沒有任何錯誤,也沒有警告。
然後我們把這個轉儲和造就了一批由它開發的數據庫,由發行:
impdp system/******@SID SCHEMAS=MY_SCHEMA DIRECTORY=data_pump_dir DUMPFILE=full_prod.dmp LOGFILE=full_prod_import.log
同樣,沒有錯誤,也沒有警告。
開發者環境設置好後,開發者啓動他們的應用程序並試圖插入一些測試數據。主要關鍵違規的前幾次嘗試失敗。經過一番挖掘,發現緩存的序列(NOCACHE序列很好)通常落後於一個或兩個值。
一個例子是我們的聯繫表中序列:
CREATE SEQUENCE REQ_CONTACT_SEQ
START WITH 213041
MAXVALUE 999999999999999999999999999
MINVALUE 1
NOCYCLE
CACHE 20
NOORDER;
甲骨文顯示了213041這個序列的最後緩存值。現在,當我運行以下查詢:
SELECT MAX(id) FROM REQ_CONTACT;
Oracle返回213042
。很顯然,這個值比序列高1。
所以....我的問題是,我們是否只得到這個結果,因爲我們在生產過程中進行了數據導出 - 也就是說存在與數據庫的開放和活動連接?或者數據泵有緩存的序列有問題嗎?我們正在使用Oracle 10.2.0.4。
謝謝, Muel。
感謝您的有用的參考! – Muel