程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 運用transport tablespace快速oracle版本升級

運用transport tablespace快速oracle版本升級

編輯:Oracle數據庫基礎

大家可能都知道在進行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的metadata

exp 'sys/sys as sysdba' transport_tablespace=y tablespaces=(TEST) file=test.dmp log=test.log

傳輸dmp文件和數據文件(在amadeus的案例裡面由於10g的庫和9i的庫在同一台機器上,所以避免了拷貝數據文件的時間,這也是整個方案的重點之一)到遠程

scp test.dmp [email protected]:/opt/Oracle/

scp /opt/oracle/test.dbf [email protected]:/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等,但是總體來說這種方案能提供最短時間內的數據庫版本升級。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved