在網上找了Oracle9i升級Oracle10g的文章,在這裡與大家共享一下。並做了簡單的transport tablespace的版本升級Oracle10g測試。當然還會有更多的升級Oracle10g的方法。下面就來簡單的講解下。
升級Oracle10g具體的實現方法:
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等,但是總體來說這種方案能提供最短時間內的數據庫版本升級。