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 掉 .
這次總共測試了五次都成功後 , 才正式在正式環境動作 .
沒有留言:
張貼留言