rman備份資料庫後到另一臺機器上恢復的例子

eric0435發表於2012-03-17
rman備份資料庫後到另一臺機器上恢復的過程
1.先查詢並記錄源資料庫的dbid號和資料檔名
SQL> select dbid from v$database;

      DBID
----------
2674069457

SQL> select file#,name from v$datafile
  2  ;

     FILE# NAME
---------- --------------------------------------------------------------------------------
         1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\SYSTEM01.DBF
         2 D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\UNDOTBS01.DBF
         3 D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\SYSAUX01.DBF
         4 D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\USERS01.DBF
         5 D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\EXAMPLE01.DBF
         6 D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\HYGEIA01.DBF
         7 D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\HYGEIA02.DBF

7 rows selected

2.在新機器上使用和源資料庫版本相同的oracle安裝軟體建立一個和源資料庫同名的例項使用dbca來建立(生成的資料檔案刪除掉)或 使用如下命令來建立

 複製一個pfile檔案,放到C:\oracle\product\10.2.0\db_1\database目錄下,並啟動資料庫到nomount狀態(需要設定記憶體引數, 否則無法unmount,會無法分記憶體,報ORA-04031錯誤)並修改initcc.ora檔案的內容來達到你要的設定要求

C:\Documents and Settings\Administrator>e:
C:\>cd E:\oracle\product\10.2.0\db_1\BIN
C:\oracle\product\10.2.0\db_1\BIN>orapwd file=C:\oracle\product\10.2.0\db_1\data
base\pwdCC.ora password=oracle entries=5;

E:\oracle\product\10.2.0\db_1\BIN>oradim -new -sid CC -pfile C:\oracle\product\10.2.0\db_1\database\initcc.ora
執行處理已建立.

修改機器上的監聽,以便能夠對例項CC進行監聽
原內容為:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:oracle92ora92)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = logicdg)
(ORACLE_HOME = C:oracle92ora92)
(SID_NAME = logicdg)
)
)
更改以後的內容為:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:oracle92ora92)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = logicdg)
(ORACLE_HOME = C:oracle92ora92)
(SID_NAME = logicdg)
)
(SID_DESC =
(GLOBAL_DBNAME = CC
(ORACLE_HOME = D:\ORADATA\OCP)
(SID_NAME = CC
)
)


C:\oracle\product\10.2.0\db_1\BIN>set ORACLE_SID=CC
C:\oracle\product\10.2.0\db_1\BIN>sqlplus "/as sysdba"



聯機至閒置的執行處理.

可以連線DB了


3.啟動例項到nomount狀態
SQL>startup pfile='C:\oracle\product\10.2.0\db_1\database\initcc.ora' nomount;
ORACLE執行處理已啟動.

Total System Global Area 163577856 bytes
Fixed Size                 1247852 bytes
Variable Size            104859028 bytes
Database Buffers          50331648 bytes
Redo Buffers               7139328 bytes

4.恢復控制檔案
C:\Documents and Settings\Administrator>rman target/

恢復管理器: Release 10.2.0.1.0 - Production on 星期六 3月 17 10:53:10 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

連線到目標資料庫: ocp (未裝載)

RMAN> startup nomount

資料庫已經啟動

RMAN> restore controlfile from 'D:\t\O1_MF_NCSNF_TAG20120316T161306_7P5Y9JQG_.BK
P';

啟動 restore 於 17-3月 -12
使用目標資料庫控制檔案替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK

通道 ORA_DISK_1: 正在復原控制檔案
通道 ORA_DISK_1: 恢復完成, 用時: 00:00:04
輸出檔名=D:\ORADATA\OCP\CONTROL01.CTL
輸出檔名=D:\ORADATA\OCP\CONTROL02.CTL
輸出檔名=D:\ORADATA\OCP\CONTROL03.CTL
完成 restore 於 17-3月 -12


5. 將新資料庫的dbid設定成源資料庫的dbid
RMAN> set dbid=2674069457;

正在執行命令: SET DBID

6.啟動資料庫到mount狀態
RMAN> alter database mount;

資料庫已裝載
釋放的通道: ORA_DISK_1

7.將備份集的資訊加入到catalog,因為從遠端資料庫複製過來的備份集存放於目錄D:\t而不是和源資料庫備份集在相同的目錄下
RMAN>  catalog start with 'D:\t';

啟動 implicit crosscheck backup 於 17-3月 -12
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=155 devtype=DISK
已交叉檢驗的 1 物件
完成 implicit crosscheck backup 於 17-3月 -12

啟動 implicit crosscheck copy 於 17-3月 -12
使用通道 ORA_DISK_1
完成 implicit crosscheck copy 於 17-3月 -12

搜尋恢復區域中的所有檔案
正在編制檔案目錄...
沒有為檔案編制目錄

搜尋與樣式 D:\t 匹配的所有檔案

資料庫未知檔案的列表
=====================================
檔名: D:\t\O1_MF_NCSNF_TAG20120316T161306_7P5Y9JQG_.BKP
檔名: D:\t\O1_MF_NNNDF_TAG20120316T161306_7P5XJMHN_.BKP

是否確實要將上述檔案列入目錄 (輸入 YES 或 NO)? yes
正在編制檔案目錄...
目錄編制完畢

已列入目錄的檔案的列表
=======================
檔名: D:\t\O1_MF_NCSNF_TAG20120316T161306_7P5Y9JQG_.BKP
檔名: D:\t\O1_MF_NNNDF_TAG20120316T161306_7P5XJMHN_.BKP

8.恢復資料檔案,因為恢復的路徑跟源庫的資料檔案路徑不一致,需要用set newname轉換路徑.
RMAN> run{
2> set newname for datafile 1 to 'D:\oradata\ocp\SYSTEM01.DBF';
3> set newname for datafile 2 to 'D:\oradata\ocp\UNDOTBS01.DBF';
4> set newname for datafile 3 to 'D:\oradata\ocp\SYSAUX01.DBF';
5> set newname for datafile 4 to 'D:\oradata\ocp\USERS01.DBF';
6> set newname for datafile 5 to 'D:\oradata\ocp\EXAMPLE01.DBF';
7> set newname for datafile 6 to 'D:\oradata\ocp\HYGEIA01.DBF';
8> set newname for datafile 7 to 'D:\oradata\ocp\HYGEIA02.DBF';
9> restore database;
10> switch datafile all;
11> }

正在執行命令: SET NEWNAME

正在執行命令: SET NEWNAME

正在執行命令: SET NEWNAME

正在執行命令: SET NEWNAME

正在執行命令: SET NEWNAME

正在執行命令: SET NEWNAME

正在執行命令: SET NEWNAME

啟動 restore 於 17-3月 -12
使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_DISK_1: 正在指定從備份集恢復的資料檔案
正將資料檔案00001恢復到D:\ORADATA\OCP\SYSTEM01.DBF
正將資料檔案00002恢復到D:\ORADATA\OCP\UNDOTBS01.DBF
正將資料檔案00003恢復到D:\ORADATA\OCP\SYSAUX01.DBF
正將資料檔案00004恢復到D:\ORADATA\OCP\USERS01.DBF
正將資料檔案00005恢復到D:\ORADATA\OCP\EXAMPLE01.DBF
正將資料檔案00006恢復到D:\ORADATA\OCP\HYGEIA01.DBF
正將資料檔案00007恢復到D:\ORADATA\OCP\HYGEIA02.DBF
通道 ORA_DISK_1: 正在讀取備份段 D:\T\O1_MF_NNNDF_TAG20120316T161306_7P5XJMHN_.BK
P
通道 ORA_DISK_1: 已恢復備份段 1
段控制程式碼 = D:\T\O1_MF_NNNDF_TAG20120316T161306_7P5XJMHN_.BKP 標記 = TAG20120316T16
1306
通道 ORA_DISK_1: 恢復完成, 用時: 00:20:25
完成 restore 於 17-3月 -12

資料檔案 1 已轉換成資料檔案副本
輸入資料檔案副本 recid=9 stamp=778160312 檔名=D:\ORADATA\OCP\SYSTEM01.DBF
資料檔案 2 已轉換成資料檔案副本
輸入資料檔案副本 recid=10 stamp=778160312 檔名=D:\ORADATA\OCP\UNDOTBS01.DBF
資料檔案 3 已轉換成資料檔案副本
輸入資料檔案副本 recid=11 stamp=778160312 檔名=D:\ORADATA\OCP\SYSAUX01.DBF
資料檔案 4 已轉換成資料檔案副本
輸入資料檔案副本 recid=12 stamp=778160312 檔名=D:\ORADATA\OCP\USERS01.DBF
資料檔案 5 已轉換成資料檔案副本
輸入資料檔案副本 recid=13 stamp=778160312 檔名=D:\ORADATA\OCP\EXAMPLE01.DBF
資料檔案 6 已轉換成資料檔案副本
輸入資料檔案副本 recid=14 stamp=778160313 檔名=D:\ORADATA\OCP\HYGEIA01.DBF
資料檔案 7 已轉換成資料檔案副本
輸入資料檔案副本 recid=15 stamp=778160313 檔名=D:\ORADATA\OCP\HYGEIA02.DBF

9.開啟資料庫
RMAN> alter database open resetlogs;
RMAN> alter database open resetlogs;
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: alter db 命令 (在 03/17/2012 11:41:10 上) 失敗
ORA-00344: 無法重新建立聯機日誌 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\REDO01.LOG'

ORA-27040: 檔案建立錯誤, 無法建立檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 3) 系統找不到指定的路徑。

這裡報找不到redo日誌檔案的錯誤,因為資料庫是非歸檔的,日誌檔案沒有備份,在新庫中也沒有redo日誌檔案,這裡需要重新建立日誌

SQL> alter database drop logfile group 1;
alter database drop logfile group 1
*
第 1 行出現錯誤:
ORA-01623: 日誌 1 是例項 ocp (執行緒 1) 的當前日誌 - 無法刪除
ORA-00312: 聯機日誌 1 執行緒 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\REDO01.LOG'


SQL> alter database drop logfile group 2;

資料庫已更改。

SQL> alter database add logfile group 2 'D:\oradata\ocp\redo02.log';
alter database add logfile group 2 'D:\oradata\ocp\redo02.log'
*
第 1 行出現錯誤:
ORA-00301: 新增日誌檔案 'D:\oradata\ocp\redo02.log' 時出錯 - 無法建立檔案
ORA-17610: 檔案 'D:\oradata\ocp\redo02.log' 不存在, 大小也未指定
ORA-27041: 無法開啟檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。


SQL> alter database add logfile group 2 'D:\oradata\ocp\redo02.log' size 50M;

資料庫已更改。

SQL> alter database drop logfile group 3;

資料庫已更改。

SQL> alter database add logfile group 3 'D:\oradata\ocp\redo03.log' size 50M;

資料庫已更改。

SQL> alter system switch logfile;
alter system switch logfile
*
第 1 行出現錯誤:
ORA-01109: 資料庫未開啟

下面試著修改日誌檔案的在控制檔案中的路徑(restore回來的控制檔案中記錄的日誌檔案路徑是源端日誌檔案的路徑)
由於redo01.log是當前重做日誌組所要先複製一個重做日誌檔案命為'D:\oradata\ocp\redo01.log再執行修改日誌檔案的路徑
SQL> alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\REDO01.LOG
' to 'D:\oradata\ocp\REDO01.log';

SQL> alter database open resetlogs;

資料庫已更改。


10.處理臨時表空間檔案
先建立一個新臨時表空間
sql>CREATE TEMPORARY TABLESPACE hygeiatemp  Tempfile 'D:\oradata\ocp\hygeiatemp01.dbf' size 500M;
 修改新建的臨時表空間為預設的臨時表空間
sql> Alter Database  Default Temporary Tablespace hygeiatemp;
再刪除原來的臨時表空間
sql> Drop Tablespace  temp;
再新建原來的臨時表空間
sql> CREATE TEMPORARY TABLESPACE temp Tempfile 'D:\oradata\ocp\temp01.dbf' size 500M;
再將新建的原來的臨時表空間修改為預設的臨時表空間
sql> Alter Database  Default Temporary Tablespace temp;

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

相關文章