自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Oracle數(shù)據(jù)庫遷移相關(guān)技巧介紹

數(shù)據(jù)庫 Oracle 數(shù)據(jù)庫運維
在Oracle數(shù)據(jù)庫遷移過程中,會碰到一些平臺和版本的問題。本文將為大家介紹的一些Oracle數(shù)據(jù)庫遷移相關(guān)技巧。

本文將講述的是Oracle數(shù)據(jù)庫遷移的一些技巧,包括Oracle數(shù)據(jù)庫遷移前的準(zhǔn)備工作,以及不同類型遷移的處理方法。希望對大家了解Oracle數(shù)據(jù)庫遷移有所幫助。51CTO數(shù)據(jù)庫頻道之前也曾為大家介紹過《Oracle跨平臺遷移結(jié)構(gòu)而不遷移數(shù)據(jù)方法詳解》。

去年年底做了不少系統(tǒng)的數(shù)據(jù)遷移,大部分系統(tǒng)由于平臺和版本的原因,做的是邏輯遷移,少部分做的是物理遷移,有一些心得體會,與大家分享。

首先說說遷移流程,在遷移之前,寫好方案,特別是實施的方案步驟一定要寫清楚,然后進(jìn)行完整的測試。我們在遷移時,有的系統(tǒng)測試了四五次,通過測試來完善方案和流程。

針對物理遷移,也即通過RMAN備份來進(jìn)行還原并應(yīng)用歸檔的方式(這里不討論通過dd方式進(jìn)行的冷遷移),雖然注意的是要將數(shù)據(jù)庫設(shè)為force logging的方式,在用RMAN做全備之前,一定要執(zhí)行:

  1. view plaincopy to clipboardprint?  
  2. alter database force logging;   
  3. alter database force logging; 

否則可能會產(chǎn)生壞塊。

對于邏輯遷移,在job_processes設(shè)置為>0的數(shù)值之前,注意job的下次執(zhí)行時間和job所屬用戶。比如job的定義在之前已經(jīng)導(dǎo)入,但是在遷移之時,job已經(jīng)運行過,那么遷移完成之后,job的下次時間還是原來的時間,這樣可能會重復(fù)運行。另外,job通過IMP導(dǎo)入后,job所屬用戶會變成導(dǎo)入用戶的名稱,顯然job原來的用戶就不能對JOB進(jìn)行管理了,可以通過下面的sql進(jìn)行修改:

  1. view plaincopy to clipboardprint?  
  2. update sys.job$ set lowner=cowner , powner=cowner;   
  3. update sys.job$ set lowner=cowner , powner=cowner; 

在遷移之前,應(yīng)該禁止對系統(tǒng)進(jìn)行結(jié)構(gòu)上的修改和發(fā)布,比如表結(jié)構(gòu),索引,存儲過程包等。

如果是用exp/imp導(dǎo)入的對象,包括存儲過程等,應(yīng)該檢查對象是否與原生產(chǎn)庫一致,比如由于dblink的原因,imp之后,存儲過程不能創(chuàng)建,導(dǎo)致有部分存儲過程丟失,盡管這些存儲過程可能沒有被使用。

下面是一些加快遷移速度的技巧:

通過dblink,使用append insert的方式,同時利用并行,這種方式比exp/imp更快

對于有LONG類型的列,insert..select的方式顯然是不行的,可以通過exp/imp的方式,但是這種方式速度非常慢,其原因在于imp時一行一行地插入表。有另外一種方式,即sqlplus的copy命令,下面是一個示例: view plaincopy to clipboardprint?

  1. spool copy_long_table_1.log     
  2. conn / as sysdba     
  3. set copycommit=2000     
  4. set arraysize 30     
  5. set long 10485760     
  6.     
  7. copy from system/xxxx@source_db append username.table_name using select * from username.table_name;     
  8.     
  9. spool off    
  10. exit   
  11.  
  12. spool copy_long_table_1.log  
  13. conn / as sysdba  
  14. set copycommit=2000  
  15. set arraysize 30  
  16. set long 10485760  
  17.  
  18. copy from system/xxxx@source_db append username.table_name using select * from username.table_name;  
  19.  
  20. spool off 
  21. exit 

不過,sqlpus的copy命令不支持有timestamp和lob列類型的表。如果有timestamp類型的表,可以通過在exp時,加上rowid的條件,將一個表分成多個部分同時操作,對于有l(wèi)ob類型的表,也可以同樣處理(因為insert …select方式下,有l(wèi)ob類型列時,也同樣是一行一行地插入)。注意在這種方式下,就不能使用direct的方式exp/imp。下面是exp導(dǎo)出時parfile示例:

  1. query="where rowid>=dbms_rowid.rowid_create(1,71224,52,9,0) and rowid<=dbms_rowid.rowid_create(1,71224,55,1038344,10000)"    
  2. file=/dumpdata/n1.dmp     
  3. tables=username.table1     
  4. constraints=n     
  5. grants=no    
  6. indexes=no    
  7. buffer=104857600     
  8. ...     
  9. ...     
  10. query="where rowid>=dbms_rowid.rowid_create(1,71224,423,137,0) and rowid<=dbms_rowid.rowid_create(1,71224,432,59272,10000)"    
  11. file=/dumpdata/n6.dmp     
  12. tables=username.table1     
  13. constraints=n     
  14. grants=no    
  15. indexes=no    
  16. buffer=104857600   
  17.  
  18. query="where rowid>=dbms_rowid.rowid_create(1,71224,52,9,0) and rowid<=dbms_rowid.rowid_create(1,71224,55,1038344,10000)" 
  19. file=/dumpdata/n1.dmp  
  20. tables=username.table1  
  21. constraints=n  
  22. grants=no 
  23. indexes=no 
  24. buffer=104857600  
  25. ...  
  26. ...  
  27. query="where rowid>=dbms_rowid.rowid_create(1,71224,423,137,0) and rowid<=dbms_rowid.rowid_create(1,71224,432,59272,10000)" 
  28. file=/dumpdata/n6.dmp  
  29. tables=username.table1  
  30. constraints=n  
  31. grants=no 
  32. indexes=no 
  33. buffer=104857600 

將表分成幾部分同時操作,不僅僅可以利用rowid,也可以利用表上的列,比如說,表上有一個created_date的列,并且保證是遞增插入數(shù)據(jù),那么這種情況下,也可以使用這個字段將表分成不同的范圍同時進(jìn)行導(dǎo)出和導(dǎo)入。不過使用ROWID通常具有更高的效率。

當(dāng)然對于有l(wèi)ob列的表,可以按上述方式,拆成多個insert方式同時插入,不需要exp/imp。

對于特別大的分區(qū)表,雖然使用并行可以提高速度,但是受限于單個進(jìn)程(不能跨DB LINK進(jìn)行并行事務(wù),只能并行查詢,也即insert..select只能是SELECT部分才能進(jìn)行并行)的處理能力,這種方式下速度仍然有限。可以并行將數(shù)據(jù)插入多個中間表,然后通過exchange partition without validation 的方式,交換分區(qū),這種方式將會大大提高了速度。

有朋友可能會問,為什么不并行直接插入分區(qū)表,當(dāng)然如果是非direct path(append)方式,則是沒問題的,但是這種方式插入的性能較低。而direct path的方式,會在表上持有mode=6(互斥)的TM鎖,不能多個會話同時插入。(update: 在insert 時使用這樣的語句:insert into tablename partition (partname) select * from tablename where ….,更簡單更有效率。)

遷移時,將數(shù)據(jù)分成兩部分,一部分是歷史表,第二部分是動態(tài)變化的表,在遷移之前,先導(dǎo)入歷史表,并在歷史表上建好索引,這無疑會大大減少遷移時業(yè)務(wù)系統(tǒng)中斷時間。
遷移之前,考慮清理掉垃圾數(shù)據(jù)。

遷移時,應(yīng)保證表上沒有任何索引,約束(NOT NULL除外)和觸發(fā)器,數(shù)據(jù)導(dǎo)入完成后,再建索引。建索引時同樣,同時使用多個進(jìn)程跑腳本。索引創(chuàng)建無成后,應(yīng)去掉索引的PARALLEL屬性。

在創(chuàng)建約束時,應(yīng)按先創(chuàng)建CHECK約束,主鍵,***鍵,再創(chuàng)建外鍵約束的順序。約束狀態(tài)為 ENABLE NOVALIDATE,這將大大減少約束創(chuàng)建時間。而在遷移完成后,再考慮設(shè)回為ENABLE VALIDATE。

通過使用dbms_stats.export_schame_stats和dbms_stats.import_schame_stats導(dǎo)入原庫上的統(tǒng)計信息,而不用重新收集統(tǒng)計使用。
朋友們可以看到,以上均是針對9i的,實際上在10g甚至11g環(huán)境下,也仍然很多借鑒意義。當(dāng)然這些技巧不僅僅用于完整的數(shù)據(jù)庫遷移,也可以應(yīng)用到將個別表復(fù)制到其他數(shù)據(jù)庫上。

這里沒有提到的是利用物化視圖或高級復(fù)制、觸發(fā)器之類的技術(shù),因為這些技術(shù),畢竟要修改生產(chǎn)庫,對生產(chǎn)庫的運行有比較大的影響,因此,只有在停機(jī)時間要求特別嚴(yán)格,而在這個時間內(nèi)又不能完成遷移時才應(yīng)該考慮。

從遷移的經(jīng)驗來說,只有完善的流程,完整的測試才可以保證成功。這里只是列舉了一些小技巧,如果對整個遷移過程有興趣,可以針對這個話題再進(jìn)行討論。

原文鏈接:http://www.laoxiong.net/some_data_migration_tips.html

【編輯推薦】

  1. 淺談存取Oracle當(dāng)中掃描數(shù)據(jù)的方法
  2. Oracle設(shè)置系統(tǒng)參數(shù)進(jìn)行性能優(yōu)化
  3. Oracle數(shù)據(jù)庫維護(hù)中的前瞻性
  4. Oracle與SQL Server之間的數(shù)據(jù)遷移
  5. 實例講解Oracle到SQL Server主鍵遷移
責(zé)任編輯:彭凡 來源: laoxiong.net
相關(guān)推薦

2011-09-02 10:37:15

Oraclesqlload用法

2010-04-07 09:31:02

Oracle數(shù)據(jù)庫

2010-01-07 17:24:12

VB.NET連接數(shù)據(jù)庫

2010-04-20 12:09:31

Oracle數(shù)據(jù)庫

2010-04-21 14:45:39

Oracle數(shù)據(jù)庫

2015-10-28 14:45:35

ORACLE AIO異步IO

2015-10-28 17:39:04

ORACLE AIO異步IO

2010-04-23 12:24:06

Oracle數(shù)據(jù)庫

2010-04-23 09:32:39

Oracle數(shù)據(jù)庫實例

2011-09-02 10:06:51

OracleSqlLoad常用技巧

2010-04-06 11:19:28

Oracle數(shù)據(jù)庫

2009-12-29 11:15:45

ADO數(shù)據(jù)庫

2017-04-07 15:00:57

Lotus-NotesORACLE數(shù)據(jù)遷移

2019-10-16 11:40:56

數(shù)據(jù)庫PostgreSQL Oracle

2011-05-17 13:43:23

Oracle數(shù)據(jù)庫

2009-08-24 18:09:13

C#調(diào)用Oracle數(shù)

2010-04-15 13:01:25

Oracel數(shù)據(jù)庫

2009-08-07 18:07:58

C#數(shù)據(jù)庫開發(fā)

2021-02-06 23:03:58

SQLServer數(shù)據(jù)庫變量

2011-08-18 17:05:16

Oracle數(shù)據(jù)庫的服
點贊
收藏

51CTO技術(shù)棧公眾號