有時候我們會遇到這樣的情況,現有的數據庫要從一個機器轉移到另外一個機器上,一般我們會使用導出,導入。但是如果數據庫的數據非常多,數據文件尺寸很大,那麼在導出導入的過程就很可能會出現問題,並且漫長的過程也是我們無法容忍的。在這種情況下,我們可以簡單地使用操作系統的copy命令,直接進行數據庫的轉移。
以下示例均在Redhat Fedora Core 1上的Oracle9.2.0.1中操作,其它操作系統和Oracle版本同樣適用。
假設我們的數據庫在服務器A上,$ORACLE_BASE是/oracle,$ORACLE_HOME是/Oracle/product/9.2.0。現在我們要將此數據庫轉移到服務器B上,並且新的$ORACLE_BASE是/u01/oracle,$ORACLE_HOME是/u01/Oracle/product/9.2.0。SID是oraLinux。
操作步驟如下:
一.在服務器B上安裝Oracle,安裝過程中不要創建數據庫。用戶的profile直接從服務器A上copy過來即可,注意需要修改原先的$Oracle_HOME到現在的位置。
二.如果服務器A上的Oracle使用的是spfile,那麼根據此spfile創建pfile:
create pfile from spfile;
三.關閉服務器A上的數據庫,shutdown immediate。如果數據庫不允許關閉,那麼可以使用聯機備份,這種情況數據庫必須處於archivelog模式,轉移的原理和允許關閉的情況一樣,此處不作討論。
四.備份服務器A上的所有數據文件,包括以下:
a)所有的datafile(臨時文件可以不copy,比如temp01.dbf)
b)所有的online redo log
c)所有的archive redo log
d)所有的control file
e)$Oracle_HOME/dbs/init
f)$Oracle_HOME/dbs/orapw
g)$Oracle_HOME/network/listener.ora(這步可以省略,以後重新生成也可以)
h)$Oracle_BASE/admin/
五.通過FTP或者別的工具將上述的備份文件,全部上傳到服務器B的相應目錄中。比如說原來在服務器A上$Oracle_BASE/oradata/
六.編輯上傳到服務器B上的init
七.在服務器B上,sqlplus “/ as sysdba”,提示進入空閒進程。
八.根據修改過的pfile創建spfile,create spfile from pfile;
九.啟動數據庫到mount狀態,startup mount;
十.修改control file中所有數據文件的位置,可以通過spool生成所有的SQL:
alter database rename file '/Oracle/oradata/oraLinux/system01.dbf'
to '/u01/Oracle/oradata/oraLinux/system01.dbf';
alter tablespace TEMP add tempfile
‘'/u01/Oracle/oradata/oraLinux/temp01.dbf’ size 20M;