關於序列同步的問題
在使用oracle資料庫時,當給一個表設定自增欄位時,我們經常會使用到序列+觸發器來完成。但當你需要對資料庫進行匯入匯出時,序列很容易出問題。
當你將資料庫匯出後,匯入到另一個資料時,你會發現另一個資料庫裡的序列當前值會小於之前資料庫的當前值,由此會導致你往該表插入資料時,會出現自增欄位的值重複的情況,如果這個自增欄位為主鍵,則你的插入操作就好報錯。
在網上找了一下資料,發現原來我們對資料庫執行匯出操作時,資料庫先進行的是序列的匯出,然後再進行表資料的匯出,如果在序列匯出過程中,該系統一直在使用,則序列匯出完成後,開始導表資料的時候,有可能表資料因為系統在不斷的使用導致表資料增長,裡面的序列當前值已經增加了很多。當資料庫匯出完成後會造成資料表中的實際記錄跟序列的當前值不一致。
該問題的解決辦法:在匯入資料庫成功後,重建序列,將序列當前值修改為表記錄自增字的最大值+1,即可。
1、Create Sequence
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE許可權,
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加幾個
START WITH 1 -- 從1開始計數
NOMAXVALUE -- 不設定最大值
NOCYCLE -- 一直累加,不迴圈
CACHE 10;
2、Alter Sequence
你或者是該sequence的owner,或者有ALTER ANY SEQUENCE 許可權才能改動sequence. 可以alter除start至以外的所有sequence引數.如果想要改變start值,必須 drop sequence 再 re-create .
Alter sequence 的例子
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXVALUE 10000
CYCLE -- 到10000後從頭開始
NOCACHE ;
影響Sequence的初始化引數:
SEQUENCE_CACHE_ENTRIES =設定能同時被cache的sequence數目。
可以很簡單的Drop Sequence
DROP SEQUENCE order_seq;
當你將資料庫匯出後,匯入到另一個資料時,你會發現另一個資料庫裡的序列當前值會小於之前資料庫的當前值,由此會導致你往該表插入資料時,會出現自增欄位的值重複的情況,如果這個自增欄位為主鍵,則你的插入操作就好報錯。
在網上找了一下資料,發現原來我們對資料庫執行匯出操作時,資料庫先進行的是序列的匯出,然後再進行表資料的匯出,如果在序列匯出過程中,該系統一直在使用,則序列匯出完成後,開始導表資料的時候,有可能表資料因為系統在不斷的使用導致表資料增長,裡面的序列當前值已經增加了很多。當資料庫匯出完成後會造成資料表中的實際記錄跟序列的當前值不一致。
該問題的解決辦法:在匯入資料庫成功後,重建序列,將序列當前值修改為表記錄自增字的最大值+1,即可。
1、Create Sequence
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE許可權,
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加幾個
START WITH 1 -- 從1開始計數
NOMAXVALUE -- 不設定最大值
NOCYCLE -- 一直累加,不迴圈
CACHE 10;
2、Alter Sequence
你或者是該sequence的owner,或者有ALTER ANY SEQUENCE 許可權才能改動sequence. 可以alter除start至以外的所有sequence引數.如果想要改變start值,必須 drop sequence 再 re-create .
Alter sequence 的例子
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXVALUE 10000
CYCLE -- 到10000後從頭開始
NOCACHE ;
影響Sequence的初始化引數:
SEQUENCE_CACHE_ENTRIES =設定能同時被cache的sequence數目。
可以很簡單的Drop Sequence
DROP SEQUENCE order_seq;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22969361/viewspace-1180052/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於forEach同步非同步的問題非同步
- 關於非同步傳送EMail的問題非同步AI
- 關於是否需要同步的一個問題?
- 關於Java序列化的問題你真的會嗎?Java
- 關於兩組相同的radio同步問題
- fastapi 關於執行緒池、同步、非同步的問題解答彙總ASTAPI執行緒非同步
- 非同步任務:並行與序列的典型問題非同步並行
- 關於時間 PHP 處理包遇到的問題時間序列化差值問題PHP
- 有關時間同步的問題
- 關於Handler同步屏障你可能不知道的問題
- [求助] 關於ehcache叢集快取同步資料的問題快取
- 關於詳細設計/程式碼的同步問題--請教
- 關於非同步介面呼叫的疑問?非同步
- 關於在glassfish中執行webservice 引數序列化與反序列化的問題?Web
- 關於SQLServerDriver的問題SQLServer
- 關於 JavaMail 的問題JavaAI
- 關於session的問題Session
- 請教大俠。關於多執行緒同步問題執行緒
- 關於非同步AJAX請求執行速度過快問題非同步
- 關於javascript的this指向問題JavaScript
- 關於跨域的問題跨域
- 關於bit code的問題
- 關於IP地址的問題
- 關於橋模式的問題模式
- 求救 關於parallel的問題Parallel
- 關於web start的問題Web
- 關於action的error問題Error
- 關於ADAPTER的問題APT
- 關於session的奇怪問題Session
- php關於session的問題PHPSession
- 關於diag程式的問題
- 關於SimpleJdonFrameworkTest的問題Framework
- 關於盒模型相關的問題模型
- 關於FastHashMap問題ASTHashMap
- 面試中關於多執行緒同步,你必須要思考的問題面試執行緒
- 關於非同步郵件傳送服務的思路,和 Swoole 非同步任務的一個問題非同步
- GoldenGate的Sequence同步DLL及其相關問題Go
- 關於PHP佇列的問題PHP佇列