Duplicating a Database 筆記

wmlm發表於2009-01-20

用途:

1 測試備份與恢復的過程

2 如果誤刪除一個表,可以複製一個庫,然後在複製庫上做恢復,恢復後的正確資料匯入到生產庫上。

[@more@]

經過多次失敗,最後完成。結果記錄如下:

系統結構描述

目標庫:

主機 host1 aix5.3

IP: 10.10.10.72

SID: millet

net: trgt

引數檔案 initmillet.ora spfilemillet.ora

資料檔案主目錄 /netapp/oradata/millet/

跟蹤檔案目錄 /opt/oracle/admin/millet/bdump cdump udump

RMAN備份檔案目錄 /ww

複製庫:

主機 host2 aix5.3

IP: 10.10.10.34

db_name: dupdb

net: aux

引數檔案initaux2.ora spfileaux2.ora

資料檔案主目錄 /u01/oradata/dupdb

跟蹤檔案目錄 /u01/admin/dupdb/bdump cdump udump

備份RMAN檔案目錄 /ww (新建了一個目錄,與目標庫保持一致,並將目標庫的RMAN備份檔案FTP過來)

大致操作過程

1 構建複製庫的環境

1.1 建立目錄

在複製庫上建立必需的目錄,如

mkdir /u01/oradata/dupdb

mkdir -p /u01/admin/dupdb/bdump

mkdir -p /u01/admin/dupdb/cdump

mkdir -p /u01/admin/dupdb/udump

1.2 建立口令檔案

在複製庫上建dupdb 的口令檔案

orapwd file=/u01/product/9.2.0/dbs/orapwaux2 password=oracle

1.3 建立init.ora

可以從trgt庫上覆制過來,然後加上以下內容,並修改所有涉及到目錄變動的地方;

DB_NAME=dupdb

CONTROL_FILES=/u01/oradata/dupdb/control01.ctl

DB_FILE_NAME_CONVERT=('/netapp/oradata/millet/','/u01/oradata/dupdb/')

LOG_FILE_NAME_CONVERT=('/netapp/oradata/millet/','/u01/oradata/dupdb/')

這兩個convert加上也沒有用,還是需要set newname !

修改以_dest為字尾的引數值到新的路徑

修改instance_name=dupdb

兩個引數檔案比較,只顯示不一樣的地方

trgt原來的引數檔案

*.background_dump_dest='/opt/oracle/admin/millet/bdump'

*.control_files='/netapp/oradata/millet/control01.ctl','/netapp/oradata/millet/control02.ctl','/netapp/oradata/millet/control03.ctl'

*.core_dump_dest='/opt/oracle/admin/millet/cdump'

*.db_name='millet'

*.instance_name='millet'

*.user_dump_dest='/opt/oracle/admin/millet/udump'

新建的複製庫上的引數檔案

db_name=dupdb

control_files=/u01/oradata/dupdb/control01.ctl

db_file_name_convert=('/netapp/oradata/millet/','/u01/oradata/dupdb/')

log_file_name_convert=('/netapp/oradata/millet/','/u01/oradata/dupdb/')

*.background_dump_dest='/u01/admin/dupdb/bdump'

*.core_dump_dest='/u01/admin/dupdb/cdump'

*.instance_name='dupdb'

*.user_dump_dest='/u01/admin/dupdb/udump'

1.4 修改listener.ora and tnsnames.ora

我打算在主機1TRGT)將資料庫複製到主機2上,因此,需要在主機1上連線AUX2服務;

在主機2上(AUX2),修改listener.ora檔案,新增aux2,以便在主機1上能夠訪問。

(SID_DESC =

(GLOBAL_DBNAME = aux2)

(ORACLE_HOME = /u01/product/9.2.0)

(SID_NAME = aux2)

)

在主機1上(TRGT),修改tnsnames.ora檔案,新增對複製庫的訪問,名稱aux

用在rman TARGET SYS/oracle@trgt AUXILIARY SYS/oracle@aux這個地方

在主機2上(AUX2),同樣修改tnsnames.ora,內容如下

trgt =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.72)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = millet)

)

)

aux =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.34)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = aux2)

)

)

1.4 啟動複製庫到nomount

在哪個機器上都可以啟,過程略

2 TRGT庫的準備工作

2.1 檢查TRGT庫是否有完整的RMAN備份集

如果沒有,全備一把,過程略

但必需讓AUX庫的主機,也能訪問這個備份集

我是FTP過去,在AUX庫上建了個相同目錄,放進去,等候RMAN使用。

2.2 生成set newname語句

select 'set newname for datafile '||file#||' to '''||name|| ''' ;' from v$datafile;

3 連線trgtaux庫,準備複製資料庫

在目標庫上啟動RMAN(在複製庫上應該一樣,沒試)

run {

set newname for datafile 1 to '/u01/oradata/dupdb/system01.dbf' ;

set newname for datafile 2 to '/u01/oradata/dupdb/undotbs01.dbf' ;

set newname for datafile 3 to '/u01/oradata/dupdb/drsys01.dbf' ;

set newname for datafile 4 to '/u01/oradata/dupdb/example01.dbf' ;

set newname for datafile 5 to '/u01/oradata/dupdb/indx01.dbf' ;

set newname for datafile 6 to '/u01/oradata/dupdb/tools01.dbf' ;

set newname for datafile 7 to '/u01/oradata/dupdb/users01.dbf' ;

set newname for datafile 8 to '/u01/oradata/dupdb/fpgl_data01.dbf' ;

set newname for datafile 9 to '/u01/oradata/dupdb/fpgl_ind01.dbf' ;

set newname for datafile 10 to '/u01/oradata/dupdb/gs12366_data01.dbf' ;

set newname for datafile 11 to '/u01/oradata/dupdb/hlwsb_data01.dbf' ;

set newname for datafile 12 to '/u01/oradata/dupdb/ncp_data01.dbf' ;

set newname for datafile 13 to '/u01/oradata/dupdb/ncp_ind01.dbf' ;

set newname for datafile 14 to '/u01/oradata/dupdb/tbs_dat_par_0101.dbf' ;

set newname for datafile 15 to '/u01/oradata/dupdb/tbs_dat_par_0201.dbf' ;

set newname for datafile 16 to '/u01/oradata/dupdb/tbs_dat_par_0301.dbf' ;

set newname for datafile 17 to '/u01/oradata/dupdb/tbs_dat_par_0401.dbf' ;

set newname for datafile 18 to '/u01/oradata/dupdb/xtjg_data01.dbf' ;

set newname for datafile 19 to '/u01/oradata/dupdb/qxgl01.dbf' ;

set newname for datafile 20 to '/u01/oradata/dupdb/xz_ztry_hist01.dbf' ;

DUPLICATE TARGET DATABASE TO dupdb nofilenamecheck

LOGFILE group 1 ('/u01/oradata/dupdb/redo01.log') size 200k,

GROUP 2 ('/u01/oradata/dupdb/redo02.log') SIZE 200K,

GROUP 3 ('/u01/oradata/dupdb/redo03.log') SIZE 200K;

}

到此為止,已經在2號機上,複製了一個新資料庫,資料庫名稱為 dupdb 並且更改了資料檔案路徑.

小結:看文件有點暈,因為文件上沒有畫出結構圖,看別人的總結更暈,還是自己動手做上十來次,遇到十幾個錯誤之後,才明白這個過程的來龍去脈。心裡才算踏實。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/271063/viewspace-1016344/,如需轉載,請註明出處,否則將追究法律責任。

相關文章