BloggerAds 部落格廣告

2007/10/12

Oracle Restore

Oracle Restore (recovery)

每天做 Oracle database 的 RMAN backup , 也一段時間了 , 雖然都沒出現什麼大問題 , 但是實際的 Recovery 的演習確是很少 , 最近剛好遇到有人要求要把八月底的某幾個 Table 倒回來 , 正好可以實地演練演練 .

1. Hardware 環境 : HP RP8400 HPUX 11i , HP MSL6030 Tape Library .

2. Software 環境 : Oracle ERP 11.5.8 (with 9.2.0.4 database)

3. Backup 環境 : HP Data Protector 5.5 + Oracle RMAN .

4. 條件 : 需求 Recovery 的日期時間必須 Fully and Increment 的 backup 都是成功的 , 使用 catalog database 做備份 .

Thinking –

當接到這個需求 , 並非整個 database restore , 考慮正式環境的風險 , 所以另外安裝一個 database , 把 backup 的資料倒到這個新的環境 , 然後再進行轉資料 . 當然這個新的環境最好是在不同機器上面 , 這樣更能保證正式環境不會受到影響 .

Step –

1. Install Auxiliary Database Instance

這個就是安裝一個新的 Oracle Database , 當然版本最好是跟要 restore 的是一樣的 9.2.0.4

2. Modify Auxiliary database instSID.ora

這邊需要修改 ora 的 file db_name = DUPDB

control_files = /disk/dupdb/dupdbdata/cntrl01.dbf, /disk/dupdb/dupdbdata/cntrl02.dbf, /disk/dupdb/dupdbdata/cntrl03.dbf

user_dump_dest = /disk/dupdb/admin/DUPDB/udump

background_dump_dest = /disk/dupdb/admin/DUPDB/bdump

core_dump_dest = /disk/dupdb/admin/DUPDB/cdump

#IFILE=/disk/DEV5/dev5db/9.2.0/dbs/DEV5_benqora2_ifile.ora

log_archive_start = false

# convert path (old path, new path)

DB_FILE_NAME_CONVERT=(/disk/DEV5/dev5data/,/disk/dupdb/dupdbdata/)

LOG_FILE_NAME_CONVERT=(/disk/DEV5/dev5data/,/disk/dupdb/dupdbdata/)

3. Make passwd file

orapwd file=$ORACLE_HOME/dbs/orapwDUPDB password=xxxxx entries=5 這裡主要是讓 RMAN 可以順利 Remote 登入

4. Create spfile

create spfile from pfile='/disk/DUPDB/dbs/initDUPDB.ora';

這樣下次啟動就不用在指定 pfile 了

5. Modify listener.ora & tnsnames.ora

因為前面第 2 步已經修改了 datafile 的位置 , 所以需要修改 listener & tnsnames.ora

6. Start Auxiliary Database

開啟 database 為 nomount . Startup force nomount

7. 加入 Auxiliary OS db account 到 data protector 的 user .

8. 加入 Auxiliary database 的 service name 到 catalog database 的 tnsnames.ora 這個動作主要是讓 catalog database 也可以認得 Auxiliary database .

9. RMAN Restore

接下來就開始做 RMAN 的 Restore . 他的原理是從原本的 database run RMAN 去抓 Catalog database 的 information , 然後讀 tape 上的資料 放到我們新裝的 Auxiliary database . 所以需要三個 database 都是 open 的 .

rman TARGET ob2/xxx@bqe CATALOG benq/xxxx@benqadm AUXILIARY sys/xxxx@dupdb

run {

set until time "to_date('2007-08-31 23:59','yyyy-mm-dd hh24:mi')";

allocate auxiliary channel 'dev_0' type 'sbt_tape'

parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=DEV5,OB2BARLIST=DEV5_DB)';

allocate auxiliary channel 'dev_1' type 'sbt_tape'

parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=DEV5,OB2BARLIST=DEV5_DB)';

allocate auxiliary channel 'dev_2' type 'sbt_tape'

parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=DEV5,OB2BARLIST=DEV5_DB)';

allocate auxiliary channel 'dev_3' type 'sbt_tape'

parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=DEV5,OB2BARLIST=DEV5_DB)';

#create a clone of the target db

duplicate target database to dupdb

skip tablespace APPS_TS_ARCHIVE,APPS_TS_INTERFACE;

}

這裡的設定

until time => 打算恢復到什麼時間點的資料

OB2APPNAME => 原本環境的 SID (設定在 Data protector 上面的)

OB2ARLIST => 原本環境 database Backup 的 backup set .

Skip tablespace => 若只需要某些 table 的資料 , 可以把不相干的 tablespace skip 掉 .

這次總共測試了五次都成功後 , 才正式在正式環境動作 .

沒有留言:

張貼留言