運用transport tablespace快速oracle版本升級
2024-08-29 13:34:12
供稿:網友
 
             大家可能都知道在進行Oracle數據庫版本升級的時候會有2種方式1.通過dbua(database upgrade assistant)2.eXP/imp                                                                                                通過dbua來升級的話由于不涉及到數據文件的改變,所以速度會比較快,但是假如dbua一旦在升級的過程中出現問題可能會導致原來的庫不可用。    而通過exp/imp雖然對原來的庫不會有影響,但是假如數據庫比較大的話那么升級的時間將會是不可接受的(尤其對24*7)的應用來說。    針對這個問題,這次的2006 oracle openworld法國的amadeus公司提供了一個非常有創意的點子,就是利用dataguard和transport tablespace功能來實現最短時間內的安全升級。首先讓我們來了解一下amadeus公司    艾瑪迪斯全球旅游分銷系統公司(Amadeus Global Travel Distribution SA)是全球領先的旅游行業技術及分銷供給商。1987年艾瑪迪斯總部建立于西班牙馬德里。在 Sophia Antipolis(法國尼斯四周)和美國波士頓設立有市場及開發部門。公司的數據中心位于德國慕尼黑四周的Erding。公司提供各種先進的旅游行業技術解決方案,至今已成為成長最快并被最廣泛使用的全球分銷系統(GDS)。    作為卓越的技術合作伙伴,艾瑪迪斯把最先進的信息技術帶入旅游行業,使眾多的旅游供給商、休閑及商務旅游服務商從中獲益。通過設立服務于當地市場的national marketing companies(NMCs),艾瑪迪斯用其龐大的信息技術資源向全世界200個國家和地區提供優質的技術解決方案。我們再來看一下跟它們的數據庫相關的信息    他們的業務系統達到99.99%的可用率,每秒鐘有30萬次的數據庫請求,天天有2億8千萬次transaction,這是一個相當大的數據庫系統,假如用dbua或者exp/imp他們都不能接受升級的風險,于是他們的技術人員就想出了用dataguard和transport tablespace功能來實現最短時間內的安全升級。具體的實現方法是這樣的1.先為主庫建立一個dataguard數據庫(可以在線做)2.在dataguard庫上安裝10g軟件(可以在線做)3.整理一些不能通過transport tablespace搞定的東西,比如sequence,synonyms,grants......4.停止主庫這邊所有write的應用,提供read的服務(寫入停止,提供查詢)5.強制歸檔主庫redo log并傳到dataguard恢復(寫入停止,提供查詢)6.利用transport tablespace來轉換數據庫版本,并創建sequencee,synonyms,grants等(寫入停止,提供查詢)。7.驗證新環境的過程,在驗證過程中假如發現有問題,則可以切換會原來的系統(寫入停止,提供查詢)。8.切換應用到10g數據庫(提供服務)amadeus在演習時做到10分鐘內完成4,5,6,7并成功切換了系統,考慮到他們的數據庫繁忙程度和數據庫容量非常大,這真是一項偉大的成就。我們可以在以后的數據庫版本的升級過程中借鑒他們的方法。我們再從技術上驗證一下transport tablespace可以運用在版本升級在9i的庫上創建一個test tablespace create tablespace test
datafile '/opt/oracle/test.dbf' size 10m 
extent management local autoallocate;創建一張表在test表空間上 create table test1(a number) tablespace test;insert into test1 values(1);
commit;SQL 9i>select * from test1;A
----------
1把test表空間置為read only模式
alter tablespace test read only;到處test tablespace的metadataexp 'sys/sys as sysdba' transport_tablespace=y tablespaces=(TEST) file=test.dmp log=test.log傳輸dmp文件和數據文件(在amadeus的案例里面由于10g的庫和9i的庫在同一臺機器上,所以避免了拷貝數據文件的時間,這也是整個方案的重點之一)到遠程scp test.dmp oracle@10.0.100.115:/opt/oracle/
                         scp /opt/oracle/test.dbf oracle@10.0.100.115:/opt/oracle/在目標庫上導入metadata數據imp 'sys/sys as sysdba' transport_tablespace=y tablespaces=(TEST) file='/opt/oracle/test.dmp' datafiles=('/opt/oracle/test.dbf') tts_owners=test fromuser=test touser=test log=tts_i.log查看test1表,發現數據一致
SQL 10G>select * from test1;A
----------
1把test表空間置為read write模式alter tablespace test read write;insert into test1 values(2);
SQL 10G>select * from test1;A
----------
1
2一切正常,測試完畢這個測試簡單的模擬了transport tablespace升級數據庫的可能性,當然在實際過程中我們要校驗是否自包含表空間,是否需要創建sequence等,但是總體來說這種方案能提供最短時間內的數據庫版本升級。 Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1479518