摘要:《以原資料庫備份檔案重新建置》
因為本篇目的是為了建置測試用資料庫,所以不用完全與正式資料庫相同;
所以最後丟失 redo log 的資料也不在意了。
下列步驟是在同一台機器上作重建資料庫。
若各位真要作請不要在正式環境上作,後果概不負責。
[1. RMAN 備份資料]
Recovery Manager: 版本 9.2.0.8.0 - Production
Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.
已連線到目標資料庫: TINGDB (DBID=524677568)
RMAN> run {
2> allocate channel ch1 type disk maxpiecesize 4000M;
3> sql 'alter system switch logfile';
4> backup incremental level 0 database format 'd:\TINGDB_%T_%U_LV0';
5> backup current controlfile format 'd:\tingdb_ctl_%T_%U';
6>
7> backup spfile format 'd:\tingdb_spfile_%T_%U';
8> backup archivelog all format 'd:\tingdb_archivelog_%T_%U';
9> release channel ch1;
10> }
已配置通道: ch1
通道 ch1: sid=16 devtype=DISK
sql 敘述句: alter system switch logfile
開始 backup, 於 16-3月 -10
通道 ch1: 正在啟動 incremental level 0 資料檔備份集
通道 ch1: 正在設定備份集中的資料檔
在備份集中包括目前的 SPFILE
包括備份集中目前的控制檔
輸入資料檔 fno=00009 name=C:\ORACLE\ORADATA\TINGDB\USERS01.DBF
輸入資料檔 fno=00001 name=C:\ORACLE\ORADATA\TINGDB\SYSTEM01.DBF
輸入資料檔 fno=00002 name=C:\ORACLE\ORADATA\TINGDB\UNDOTBS01.DBF
輸入資料檔 fno=00005 name=C:\ORACLE\ORADATA\TINGDB\EXAMPLE01.DBF
輸入資料檔 fno=00013 name=C:\ORACLE\ORADATA\TINGDB\PERFSTAT.DBF
輸入資料檔 fno=00010 name=C:\ORACLE\ORADATA\TINGDB\XDB01.DBF
輸入資料檔 fno=00011 name=C:\ORACLE\ORADATA\TINGDB\TINGSPACE01.DBF
輸入資料檔 fno=00006 name=C:\ORACLE\ORADATA\TINGDB\INDX01.DBF
輸入資料檔 fno=00003 name=C:\ORACLE\ORADATA\TINGDB\CWMLITE01.DBF
輸入資料檔 fno=00004 name=C:\ORACLE\ORADATA\TINGDB\DRSYS01.DBF
輸入資料檔 fno=00007 name=C:\ORACLE\ORADATA\TINGDB\ODM01.DBF
輸入資料檔 fno=00008 name=C:\ORACLE\ORADATA\TINGDB\TOOLS01.DBF
輸入資料檔 fno=00012 name=C:\ORACLE\ORADATA\TINGDB\TESTSPACE.DBF
通道 ch1: 啟動部份 1, 在 16-3月 -10
通道 ch1: 已完成部份 1, 在 16-3月 -10
處理片=D:\TINGDB_20100316_E6L8NF7P_1_1_LV0 註解=NONE
通道 ch1: 啟動部份 2, 在 16-3月 -10
通道 ch1: 已完成部份 2, 在 16-3月 -10
處理片=D:\TINGDB_20100316_E6L8NF7P_2_1_LV0 註解=NONE
通道 ch1: 備份集完成, 經歷時間: 00:09:52
完成 backup, 於 16-3月 -10
開始 backup, 於 16-3月 -10
通道 ch1: 正在啟動 full 資料檔備份集
通道 ch1: 正在設定備份集中的資料檔
包括備份集中目前的控制檔
通道 ch1: 啟動部份 1, 在 16-3月 -10
通道 ch1: 已完成部份 1, 在 16-3月 -10
處理片=D:\TINGDB_CTL_20100316_E7L8NFQ9_1_1 註解=NONE
通道 ch1: 備份集完成, 經歷時間: 00:00:03
完成 backup, 於 16-3月 -10
開始 backup, 於 16-3月 -10
通道 ch1: 正在啟動 full 資料檔備份集
通道 ch1: 正在設定備份集中的資料檔
在備份集中包括目前的 SPFILE
通道 ch1: 啟動部份 1, 在 16-3月 -10
通道 ch1: 已完成部份 1, 在 16-3月 -10
處理片=D:\TINGDB_SPFILE_20100316_E8L8NFQC_1_1 註解=NONE
通道 ch1: 備份集完成, 經歷時間: 00:00:03
完成 backup, 於 16-3月 -10
開始 backup, 於 16-3月 -10
已存檔目前的日誌
通道 ch1: 啟動存檔日誌備份集
通道 ch1: 指定備份集中的存檔日誌
輸入存檔日誌繫線=1 順序=1 recid=2040 戳記=713799589
輸入存檔日誌繫線=1 順序=2 recid=2041 戳記=713799811
輸入存檔日誌繫線=1 順序=3 recid=2042 戳記=713800381
輸入存檔日誌繫線=1 順序=4 recid=2043 戳記=713800952
輸入存檔日誌繫線=1 順序=5 recid=2044 戳記=713801551
通道 ch1: 啟動部份 1, 在 16-3月 -10
通道 ch1: 已完成部份 1, 在 16-3月 -10
處理片=D:\TINGDB_ARCHIVELOG_20100316_E9L8NFQG_1_1 註解=NONE
通道 ch1: 備份集完成, 經歷時間: 00:00:04
完成 backup, 於 16-3月 -10
已釋放通道: ch1
RMAN> run {
2> allocate channel ch1 type disk maxpiecesize 4000M;
3> sql 'alter system switch logfile';
4> backup incremental level 1 database format 'd:\TINGDB_%T_%U_LV1';
5> release channel ch1;
6> }
已配置通道: ch1
通道 ch1: sid=16 devtype=DISK
sql 敘述句: alter system switch logfile
開始 backup, 於 16-3月 -10
通道 ch1: 正在啟動 incremental level 1 資料檔備份集
通道 ch1: 正在設定備份集中的資料檔
在備份集中包括目前的 SPFILE
包括備份集中目前的控制檔
輸入資料檔 fno=00009 name=C:\ORACLE\ORADATA\TINGDB\USERS01.DBF
輸入資料檔 fno=00001 name=C:\ORACLE\ORADATA\TINGDB\SYSTEM01.DBF
輸入資料檔 fno=00002 name=C:\ORACLE\ORADATA\TINGDB\UNDOTBS01.DBF
輸入資料檔 fno=00005 name=C:\ORACLE\ORADATA\TINGDB\EXAMPLE01.DBF
輸入資料檔 fno=00013 name=C:\ORACLE\ORADATA\TINGDB\PERFSTAT.DBF
輸入資料檔 fno=00010 name=C:\ORACLE\ORADATA\TINGDB\XDB01.DBF
輸入資料檔 fno=00011 name=C:\ORACLE\ORADATA\TINGDB\TINGSPACE01.DBF
輸入資料檔 fno=00006 name=C:\ORACLE\ORADATA\TINGDB\INDX01.DBF
輸入資料檔 fno=00003 name=C:\ORACLE\ORADATA\TINGDB\CWMLITE01.DBF
輸入資料檔 fno=00004 name=C:\ORACLE\ORADATA\TINGDB\DRSYS01.DBF
輸入資料檔 fno=00007 name=C:\ORACLE\ORADATA\TINGDB\ODM01.DBF
輸入資料檔 fno=00008 name=C:\ORACLE\ORADATA\TINGDB\TOOLS01.DBF
輸入資料檔 fno=00012 name=C:\ORACLE\ORADATA\TINGDB\TESTSPACE.DBF
通道 ch1: 啟動部份 1, 在 16-3月 -10
通道 ch1: 已完成部份 1, 在 16-3月 -10
處理片=D:\TINGDB_20100316_EAL8NFU4_1_1_LV1 註解=NONE
通道 ch1: 備份集完成, 經歷時間: 00:02:56
完成 backup, 於 16-3月 -10
已釋放通道: ch1
RMAN> exit
完成 Recovery Manager.
D:\>
[2. 停用oracle service]
D:\>net stop oracleservicetingdb
OracleServiceTINGDB 服務正在停止........
OracleServiceTINGDB 服務無法停止。
D:\>net stop oracledefault_home1tnslistener
OracleDEFAULT_HOME1TNSListener 服務正在停止.
OracleDEFAULT_HOME1TNSListener 服務已經成功停止。
[3. 刪除原有資料庫檔案 - 保留原有目錄架構]
C:\oracle\admin\TINGDB\bdump
C:\oracle\admin\TINGDB\create
C:\oracle\admin\TINGDB\pfile
C:\oracle\admin\TINGDB\udump
C:\oracle\oradata\TINGDB
C:\oracle\ora92\database\INITtingdb.ORA
C:\oracle\ora92\database\SPFILETINGDB.ORA
C:\oracle\ora92\database\pwdtingdb.ora
[4. 刪除原資料庫服務]
執行下列指令
oradim -delete -sid tingdb
[5. 重建資料庫服務]
oradim -new -sid tingdb -intpwd change_on_install -startmode auto
[6. 取出備份檔案的control file、spfile]
因為資料庫無法開啟到 nomount,所以也無法從備份資料中取出spfile。
筆者試著從 sqlplus 將資料庫開啟到 nomount,但是一直出現ORA-01078、LRM-00109的錯誤。
google 說可以從rman 去開啟資料庫,果然可行;實作請參考以下。
U:\>sqlplus /nolog
SQL*Plus: Release 9.2.0.8.0 - Production on 星期二 3月 16 14:46:33 2010
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> conn sys/change_on_install as sysdba
連線至閒置的執行處理.
SQL> startup nomount
ORA-01078: failure in processing system parameters
LRM-00109: ?L?k?}???????? 'C:\ORACLE\ORA92\DATABASE\INITTINGDB.ORA'
SQL> startup nomount force;
ORA-01078: failure in processing system parameters
LRM-00109: ?L?k?}???????? 'C:\ORACLE\ORA92\DATABASE\INITTINGDB.ORA'
SQL> exit
已切斷連線
U:\>rman target sys/change_on_install
Recovery Manager: 版本 9.2.0.8.0 - Production
Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.
已連線到目標資料庫 (未啟動)
RMAN> startup nomount force;
無法啟動: ORA-01078: failure in processing system parameters
LRM-00109: ?L?k?}???????? 'C:\ORACLE\ORA92\DATABASE\INITTINGDB.ORA'
嘗試不使用參數檔啟動 Oracle 執行處理 ...
已啟動 Oracle 執行處理
系統整體區域總共是 97590688 個位元組
Fixed Size 454048 個位元組
Variable Size 46137344 個位元組
Database Buffers 50331648 個位元組
Redo Buffers 667648 個位元組
RMAN> restore spfile to 'c:\oracle\ora92\database\spfileTINGDB.ora' from 'd:\TINGDB_SPFILE_20100316_E8L8NFQC_1
_1';
開始 restore, 於 16-3月 -10
使用目標資料庫控制檔案替代復原目錄
已配置通道: ORA_DISK_1
通道 ORA_DISK_1: sid=9 devtype=DISK
通道 ORA_DISK_1: 找到自動備份: d:\TINGDB_SPFILE_20100316_E8L8NFQC_1_1
通道 ORA_DISK_1: 從自動備份回復 SPFILE 完成
完成 restore, 於 16-3月 -10
RMAN> shutdown immediate
已關閉 Oracle 執行處理
RMAN> startup nomount
已連線到目標資料庫 (未啟動)
已啟動 Oracle 執行處理
系統整體區域總共是 135339604 個位元組
Fixed Size 454228 個位元組
Variable Size 109051904 個位元組
Database Buffers 25165824 個位元組
Redo Buffers 667648 個位元組
RMAN> restore controlfile from 'd:\TINGDB_CTL_20100316_E7L8NFQ9_1_1';
開始 restore, 於 16-3月 -10
已配置通道: ORA_DISK_1
通道 ORA_DISK_1: sid=13 devtype=DISK
通道 ORA_DISK_1: 回復控制檔案
通道 ORA_DISK_1: 回復完成
複製控制檔案
輸入檔案名稱=C:\ORACLE\ORADATA\TINGDB\CONTROL01.CTL
輸出檔案名稱=C:\ORACLE\ORADATA\TINGDB\CONTROL02.CTL
輸出檔案名稱=C:\ORACLE\ORADATA\TINGDB\CONTROL03.CTL
完成 restore, 於 16-3月 -10
RMAN> alter database mount;
已掛上資料庫
RMAN> restore database;
開始 restore, 於 16-3月 -10
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 啟動資料檔案備份集的回復
通道 ORA_DISK_1: 正在設定要從備份集回復的資料檔
正在將資料檔 00001 回復為 C:\ORACLE\ORADATA\TINGDB\SYSTEM01.DBF
正在將資料檔 00002 回復為 C:\ORACLE\ORADATA\TINGDB\UNDOTBS01.DBF
正在將資料檔 00003 回復為 C:\ORACLE\ORADATA\TINGDB\CWMLITE01.DBF
正在將資料檔 00004 回復為 C:\ORACLE\ORADATA\TINGDB\DRSYS01.DBF
正在將資料檔 00005 回復為 C:\ORACLE\ORADATA\TINGDB\EXAMPLE01.DBF
正在將資料檔 00006 回復為 C:\ORACLE\ORADATA\TINGDB\INDX01.DBF
正在將資料檔 00007 回復為 C:\ORACLE\ORADATA\TINGDB\ODM01.DBF
正在將資料檔 00008 回復為 C:\ORACLE\ORADATA\TINGDB\TOOLS01.DBF
正在將資料檔 00009 回復為 C:\ORACLE\ORADATA\TINGDB\USERS01.DBF
正在將資料檔 00010 回復為 C:\ORACLE\ORADATA\TINGDB\XDB01.DBF
正在將資料檔 00011 回復為 C:\ORACLE\ORADATA\TINGDB\TINGSPACE01.DBF
正在將資料檔 00012 回復為 C:\ORACLE\ORADATA\TINGDB\TESTSPACE.DBF
正在將資料檔 00013 回復為 C:\ORACLE\ORADATA\TINGDB\PERFSTAT.DBF
通道 ORA_DISK_1: 回復備份片 1
處理片=D:\TINGDB_20100316_E6L8NF7P_1_1_LV0 標誌=TAG20100316T140233 參數=NULL
通道 ORA_DISK_1: 回復備份片 2
處理片=D:\TINGDB_20100316_E6L8NF7P_2_1_LV0 標誌=TAG20100316T140233 參數=NULL
通道 ORA_DISK_1: 回復完成
完成 restore, 於 16-3月 -10
RMAN> recover database;
開始 recover, 於 16-3月 -10
使用通道 ORA_DISK_1
啟動媒體恢復
存檔日誌檔案名稱=C:\ARCHIVED_LOG\ARC00005.001 繫線=1 順序=5
存檔日誌檔案名稱=C:\ARCHIVED_LOG\ARC00006.001 繫線=1 順序=6
找不到存檔日誌
存檔日誌繫線=1 順序=7
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 03/16/2010 15:06:13
RMAN-06054: media recovery requesting unknown log: thread 1 scn 4363735536
RMAN> exit
完成 Recovery Manager.
U:\>sqlplus /nolog
SQL*Plus: Release 9.2.0.8.0 - Production on 星期二 3月 16 15:06:57 2010
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> conn sys/change_on_install as sysdba
已連線.
SQL> recover database;
ORA-00283: 發生錯誤, 取消復原階段作業
ORA-01610: 必須完成使用 BACKUP CONTROLFILE 選項的復原作業
SQL> recover database using backup controlfile;
ORA-00279: 必須變更 4363735536 建立於 03/16/2010 14:14:27 上 (對於繫線 1 而言)
ORA-00289: 建議 : C:\ARCHIVED_LOG\ARC00007.001
ORA-00280: 變更 4363735536 (屬於繫線 1) 是在序列 #7
指定日誌: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 無法開啟存檔日誌 'C:\ARCHIVED_LOG\ARC00007.001'
ORA-27041: 無法開啟檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。
ORA-00308: 無法開啟存檔日誌 'C:\ARCHIVED_LOG\ARC00007.001'
ORA-27041: 無法開啟檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。
SQL> alter database open resetlogs;
已更改資料庫.
SQL>