海量資料遷移之誤操作和防範建議
在生產環境的資料遷移中,發生誤操作真是很不願意看到,今天自己總結了一下,從個人的經驗來看有以下的幾種操作或者是失誤導致的問題。有一些錯誤自己已經犯過。
外來鍵
不管是使用imp/impdp,sqlldr還是使用Insert append的方式匯入資料,如果存在外來鍵的約束,在資料匯入前最好都設定為disable,要不資料匯入的時候很可能發生衝突,因為批次的資料匯入很可能開啟多個併發程式,如果你不能完全控制匯入的先後順序,最好還是disable掉。
觸發器
觸發器在資料匯入前最好和開發組確認,如果忽略了這個潛在問題,很可能在資料匯入之後,會多出來一部分的資料,而且從日誌中沒有任何錯誤。
密碼的設定
為了杜絕在多個環境中切換帶來的問題,最好在一些登入密碼的設定上進行嚴格控制,如果你一邊連著測試環境,一邊開著生產環境的視窗,不小心把環境混淆的情況下,那就是資料災難了,而且個人的建議都是透過一些工具,都不要儲存密碼,這樣會提醒你到底連入的是什麼環境。
建立臨時賬戶
在資料遷移的時候,如果表的資料都在某一個schema下,個人建議最好建立一個臨時的schema,給這個臨時的schema賦予指定的許可權,比如資料抽取的臨時schema只賦予select許可權,對於資料載入的臨時schema,則只賦予insert的許可權。如果你不管三七二十一,在源schema裡面做所有的操作,很容易犯低階錯誤。一旦發生問題,那也是不可挽回的。
關於命令的歷史
如果你已經習慣使用ctrl+p,或者上下箭頭來執行歷史命令,自己不想敲命令的話,一定要小心,
可能上一個命令是nohup命令,那麼你一旦操作過快,急急忙忙敲回車的話,也是很嚴重的問題。
vi可能導致的問題
vi本身不是問題,但是個人建議vi的改動最好還是儘量在另外一個目錄下備份一份,改動完成之後從另外的目錄copy過來。這樣一旦發生問題也能知道是不是改動導致的。
回車和空格
如果你接入一個環境,呈現在你面前的是一個空螢幕,這個時候不要隨意按Enter鍵,保守的方式就是空格鍵,看看是否是游標顯示不夠完整,有很多時候都是顯示的不夠完整,但是可能命令已經透過歷史記錄給調出來了。隨意按了回車,就是可能的災難。
資料備份
資料的備份,這個從系統級,資料庫級,表級都可以做一些工作。我在這所說的資料備份,可能更側重於說表級的備份,如果有足夠的空間,可以考慮對很關鍵資料量大的表做表級備份,如果只是做了exp/expdp的備份,那麼一旦出現問題,你還需要大量的時間和系統資源去匯入到一個臨時的schema或者其他的地方,這個就耗時費力了。可以使用create table xxx nologging的方式,如果表很大,加個並行還是比較快的。
遷移方式
這裡想說說大家常用的遷移方式,可能資料量小的時候,使用imp/impdp就可以,資料量稍大一些,impdp或者sqlldr就可以,如果資料量更大,就可以考慮sqlldr或者外部表了。
個人的感覺來說imp/impdp/sqlldr都屬於物理級的資料載入,外部表的資料載入才是邏輯級別的。
舉幾個場景,
如果表很大的情況下,impdp的匯入會耗費很多的資源,直到資料完全匯入,才是釋放Undo資源,一旦發生問題,比如undo資源不足,就會直接報錯,這個時候可能會耗費很多的時間和資源。
在資料匯入之前,你不可能從imp/impdp的dump檔案中檢視到表的資料,如果發生資料衝突,也是在資料匯入的時候才可能發現,sqlldr可能還可以檢視一部分資料,但是不夠直觀,資料都是行列形式的檔案,你不能透過sql語句等形式來檢查資料。如果有資料問題,也是在資料匯入的過程中才可能發現。
即使你想對資料進行預檢查,那麼你可能得用Impdp或者sqlldr的形式把資料先載入到一個臨時的使用者下,那麼問題就來了,你得準備足夠多的空間資源,而且匯入的過程中隊系統負載也是很大挑戰。在這一點是外部表要更勝一籌,無須準備額外的空間,外部表就更建立一個同義詞的感覺一樣,載入解除安裝都是很快的,秒級別的操作。
唯一性約束和主鍵
如果你在考慮效能的時候,在資料匯入前刪除了主鍵和唯一性約束,那麼如果存在資料衝突,或者誤操作導致資料載入了多次的時候,你就給自己挖了一個坑,到時候出現問題,很難從頭查起。個人建議還是保留唯一性約束和主鍵,儘管效能會打折扣但是也是值得的付出。
網路中斷
這個問題自己碰到過幾次,如果指令碼在執行的過程中發生網路中斷,你就會馬上崩潰了。這個時候還是保守一些,一些指令碼的執行還是考慮使用nohup的形式來。
要不中途發生問題,你都不知道該從哪開始繼續。
磁碟空間不足
如果資料匯入的過程中發生空間的問題,使用sqlldr的時候你就得仔細的檢視日誌檔案,慢慢一個一個修復吧。最好還是給30%左右的buffer,別自己為難自己。
如果使用外部表的話,可能會有大批的外部表匯入失敗,那麼你就得檢視日誌,慢慢的手動修復。如果問題比較多,那工作量可想而知。
外來鍵
不管是使用imp/impdp,sqlldr還是使用Insert append的方式匯入資料,如果存在外來鍵的約束,在資料匯入前最好都設定為disable,要不資料匯入的時候很可能發生衝突,因為批次的資料匯入很可能開啟多個併發程式,如果你不能完全控制匯入的先後順序,最好還是disable掉。
觸發器
觸發器在資料匯入前最好和開發組確認,如果忽略了這個潛在問題,很可能在資料匯入之後,會多出來一部分的資料,而且從日誌中沒有任何錯誤。
密碼的設定
為了杜絕在多個環境中切換帶來的問題,最好在一些登入密碼的設定上進行嚴格控制,如果你一邊連著測試環境,一邊開著生產環境的視窗,不小心把環境混淆的情況下,那就是資料災難了,而且個人的建議都是透過一些工具,都不要儲存密碼,這樣會提醒你到底連入的是什麼環境。
建立臨時賬戶
在資料遷移的時候,如果表的資料都在某一個schema下,個人建議最好建立一個臨時的schema,給這個臨時的schema賦予指定的許可權,比如資料抽取的臨時schema只賦予select許可權,對於資料載入的臨時schema,則只賦予insert的許可權。如果你不管三七二十一,在源schema裡面做所有的操作,很容易犯低階錯誤。一旦發生問題,那也是不可挽回的。
關於命令的歷史
如果你已經習慣使用ctrl+p,或者上下箭頭來執行歷史命令,自己不想敲命令的話,一定要小心,
可能上一個命令是nohup命令,那麼你一旦操作過快,急急忙忙敲回車的話,也是很嚴重的問題。
vi可能導致的問題
vi本身不是問題,但是個人建議vi的改動最好還是儘量在另外一個目錄下備份一份,改動完成之後從另外的目錄copy過來。這樣一旦發生問題也能知道是不是改動導致的。
回車和空格
如果你接入一個環境,呈現在你面前的是一個空螢幕,這個時候不要隨意按Enter鍵,保守的方式就是空格鍵,看看是否是游標顯示不夠完整,有很多時候都是顯示的不夠完整,但是可能命令已經透過歷史記錄給調出來了。隨意按了回車,就是可能的災難。
資料備份
資料的備份,這個從系統級,資料庫級,表級都可以做一些工作。我在這所說的資料備份,可能更側重於說表級的備份,如果有足夠的空間,可以考慮對很關鍵資料量大的表做表級備份,如果只是做了exp/expdp的備份,那麼一旦出現問題,你還需要大量的時間和系統資源去匯入到一個臨時的schema或者其他的地方,這個就耗時費力了。可以使用create table xxx nologging的方式,如果表很大,加個並行還是比較快的。
遷移方式
這裡想說說大家常用的遷移方式,可能資料量小的時候,使用imp/impdp就可以,資料量稍大一些,impdp或者sqlldr就可以,如果資料量更大,就可以考慮sqlldr或者外部表了。
個人的感覺來說imp/impdp/sqlldr都屬於物理級的資料載入,外部表的資料載入才是邏輯級別的。
舉幾個場景,
如果表很大的情況下,impdp的匯入會耗費很多的資源,直到資料完全匯入,才是釋放Undo資源,一旦發生問題,比如undo資源不足,就會直接報錯,這個時候可能會耗費很多的時間和資源。
在資料匯入之前,你不可能從imp/impdp的dump檔案中檢視到表的資料,如果發生資料衝突,也是在資料匯入的時候才可能發現,sqlldr可能還可以檢視一部分資料,但是不夠直觀,資料都是行列形式的檔案,你不能透過sql語句等形式來檢查資料。如果有資料問題,也是在資料匯入的過程中才可能發現。
即使你想對資料進行預檢查,那麼你可能得用Impdp或者sqlldr的形式把資料先載入到一個臨時的使用者下,那麼問題就來了,你得準備足夠多的空間資源,而且匯入的過程中隊系統負載也是很大挑戰。在這一點是外部表要更勝一籌,無須準備額外的空間,外部表就更建立一個同義詞的感覺一樣,載入解除安裝都是很快的,秒級別的操作。
唯一性約束和主鍵
如果你在考慮效能的時候,在資料匯入前刪除了主鍵和唯一性約束,那麼如果存在資料衝突,或者誤操作導致資料載入了多次的時候,你就給自己挖了一個坑,到時候出現問題,很難從頭查起。個人建議還是保留唯一性約束和主鍵,儘管效能會打折扣但是也是值得的付出。
網路中斷
這個問題自己碰到過幾次,如果指令碼在執行的過程中發生網路中斷,你就會馬上崩潰了。這個時候還是保守一些,一些指令碼的執行還是考慮使用nohup的形式來。
要不中途發生問題,你都不知道該從哪開始繼續。
磁碟空間不足
如果資料匯入的過程中發生空間的問題,使用sqlldr的時候你就得仔細的檢視日誌檔案,慢慢一個一個修復吧。最好還是給30%左右的buffer,別自己為難自己。
如果使用外部表的話,可能會有大批的外部表匯入失敗,那麼你就得檢視日誌,慢慢的手動修復。如果問題比較多,那工作量可想而知。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28389881/viewspace-1301425/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 海量資料遷移之資料抽取流程
- ORM實操之資料庫遷移ORM資料庫
- 海量資料遷移之資料載入流程
- 海量資料遷移之衝突資料篩查
- 海量資料遷移之透過shell估算資料量
- 海量資料遷移之通過shell估算資料量
- 海量資料遷移之傳輸表空間(一)
- 海量資料遷移之sqlldr和datapump的缺點分析SQL
- 海量資料遷移之透過rowid切分大表
- 海量資料遷移之通過rowid切分大表
- 海量資料遷移之外部表切分
- 海量資料遷移之一個誤操作的問題總結
- 資料遷移中的資料庫檢查和建議資料庫
- 海量資料處理_資料泵分批資料遷移
- 海量資料遷移之使用分割槽並行切分匯入並行
- 海量資料遷移之外部表載入
- 使用impdp,expdp資料泵進入海量資料遷移
- 海量資料遷移之分割槽並行抽取並行
- 海量資料遷移之分割槽並行切分並行
- 海量資料遷移之外部表並行抽取並行
- 海量資料處理_使用外部表進行資料遷移
- 海量資料遷移之使用shell啟用多個動態並行並行
- 構建資料防洩露體系,防範敏感資料外洩
- 海量資料轉換遷移的程式碼自動生成
- 資料庫遷移之資料泵實驗資料庫
- 海量資料遷移之分割槽表批次insert效能改進
- 海量資料遷移之分割槽表批量insert效能改進
- 建議收藏!XSS與CSRF攻擊防範措施
- 遷移資料.
- Laravel 學習之資料庫遷移Laravel資料庫
- 【遷移】使用rman遷移資料庫資料庫
- windows下oracle資料檔案的遷移和規範WindowsOracle
- SequoiaDB資料庫之建議資料庫
- metinfo sql注入漏洞修復建議與防範辦法SQL
- 資料庫操作規範及SQL書寫建議資料庫SQL
- 【資料遷移】使用傳輸表空間遷移資料
- 防範重要資料和公民資訊洩露之資料庫安全資料庫
- Kafka資料遷移Kafka