oracle實驗記錄 (恢復-rman恢復)

fufuh2o發表於2009-09-18

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production


rman使用備份集 恢復要先
restore  backup

基本命令就是
RESTORE
restore database;從backup  SET 轉儲整個database備份 (MOUNT下)
restore tablespace xx;從backup  SET 轉儲指定tablespace備份(MOUNT下,OPEN下tablespace 需要offline 損壞的datafile or tablespace)
restore  datafile XX;從backup  SET 轉儲指定datafile備份(MOUNT,OPEN下datafile要offline)
restore  spfile xx;從backup  SET 轉儲SPFILE備份(nomount)
restore controlfile xx;  從backup  SET 轉儲controlfile(NOMOUNT)可以加to
restore archivelog xx;從backup set 轉儲archivelog(MOUNT,OPEN)

接著recover
recover tablespace
recover datafile
recover database


完全恢復(database)
RMAN> shutdown immediate;

資料庫已關閉
資料庫已解除安裝
Oracle 例項已關閉

RMAN> startup mount;

已連線到目標資料庫 (未啟動)
Oracle 例項已啟動
資料庫已裝載

系統全域性區域總計     612368384 位元組

Fixed Size                     1250428 位元組
Variable Size                197135236 位元組
Database Buffers             406847488 位元組
Redo Buffers                   7135232 位元組

RMAN> restore database;

啟動 restore 於 14-9月 -09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=157 devtype=DISK

.....................

RMAN>

RMAN>

RMAN> recover database;

啟動 recover 於 14-9月 -09
使用通道 ORA_DISK_1

正在開始介質的恢復
介質恢復完成, 用時: 00:00:05

完成 recover 於 14-9月 -09

RMAN>

RMAN> alter database open;


資料庫已開啟


完全恢復(TABLESPACE) MOUNT下

RMAN> restore  tablespace TESTTB;

啟動 restore 於 14-9月 -09
使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_DISK_1: 正在指定從備份集恢復的資料檔案
正將資料檔案00007恢復到D:\TESTTB.DBF
通道 ORA_DISK_1: 正在讀取備份段 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\B~~~~~~~~~~~~~(OPEN 時候不行)
ACKUPSET\2009_09_14\O1_MF_NNNDF_TAG20090914T103430_5BVBXRF5_.BKP

RMAN> startup force mount;

Oracle 例項已啟動
資料庫已裝載

系統全域性區域總計     612368384 位元組

Fixed Size                     1250428 位元組
Variable Size                201329540 位元組
Database Buffers             402653184 位元組
Redo Buffers                   7135232 位元組

RMAN> restore  tablespace TESTTB;

啟動 restore 於 14-9月 -09
分配的通道: ORA_DISK_1

完成 restore 於 14-9月 -09
RMAN> recover tablespace testtb ;

啟動 recover 於 14-9月 -09
使用通道 ORA_DISK_1

正在開始介質的恢復
介質恢復完成, 用時: 00:00:03

完成 recover 於 14-9月 -09

RMAN> alter database open;
資料庫已開啟
RMAN> sql 'alter tablespace testtb online';~~~~~~~~~~~~~~~~~~~~~~~~~應該把這個操作寫到一個run中

sql 語句: alter tablespace testtb online

完全恢復(TABLESPACE) OPEN下

RMAN> sql 'alter tablespace testtb offline';(先將要恢復的tablespace offline) 實際情況中因為datafile損壞而無法offline ,應該alter tablespace XX OFFLINE FOR

RECOVER


sql 語句: alter tablespace testtb offline

RMAN> restore  tablespace TESTTB;

啟動 restore 於 14-9月 -09
使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_DISK_1: 正在指定從備份集恢復的資料檔案
.................
完成 restore 於 14-9月 -09

RMAN> recover tablespace testtb;

啟動 recover 於 14-9月 -09
使用通道 ORA_DISK_1

正在開始介質的恢復
介質恢復完成, 用時: 00:00:03

完成 recover 於 14-9月 -09

RMAN> sql 'alter tablespace testtb online';

sql 語句: alter tablespace testtb online


RMAN> run{sql'alter database datafile 7 offline'~~~~~~~~~~~~~~~OFFLINE datafile 
2> ;
3> restore tablespace testtb;
4> recover tablespace testtb;
5> sql'alter database datafile 7 online';}

正在開始介質的恢復
介質恢復完成, 用時: 00:00:02

完成 recover 於 14-9月 -09

sql 語句: alter database datafile 7 online

 

 

完全恢復(datafile ) mount
RMAN> run{startup force mount;
2> restore datafile 4;
3> recover datafile 4;
4> sql'alter database datafile 4 online';}

Oracle 例項已啟動
資料庫已裝載

系統全域性區域總計     612368384 位元組

Fixed Size                     1250428 位元組
Variable Size                205523844 位元組
Database Buffers             398458880 位元組
Redo Buffers                   7135232 位元組

啟動 restore 於 14-9月 -09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=157 devtype=DISK

通道 ORA_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_DISK_1: 正在指定從備份集恢復的資料檔案
正將資料檔案00004恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
通道 ORA_DISK_1: 正在讀取備份段 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\B
ACKUPSET\2009_09_14\O1_MF_NNNDF_TAG20090914T103430_5BVBXRF5_.BKP
通道 ORA_DISK_1: 已恢復備份段 1
段控制程式碼 = E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_09_14\O1_
MF_NNNDF_TAG20090914T103430_5BVBXRF5_.BKP 標記 = TAG20090914T103430
通道 ORA_DISK_1: 恢復完成, 用時: 00:00:03
完成 restore 於 14-9月 -09

啟動 recover 於 14-9月 -09
使用通道 ORA_DISK_1

正在開始介質的恢復
介質恢復完成, 用時: 00:00:03

完成 recover 於 14-9月 -09

sql 語句: alter database datafile 4 online

 

 

 


完全恢復(datafile ) OPEN
RMAN> run{sql'alter database datafile 4 offline';
2> restore datafile 4;
3> recover datafile 4;
4> sql'alter database datafile 4 online';}

sql 語句: alter database datafile 4 offline

啟動 restore 於 14-9月 -09
使用通道 ORA_DISK_1

..................

完成 recover 於 14-9月 -09

sql 語句: alter database datafile 4 online

 

恢復spfile(nomount)
RMAN> list backup of spfile;


備份集列表
===================

BS 關鍵字  型別 LV 大小       裝置型別 經過時間 完成時間
------- ---- -- ---------- ----------- ------------ ----------
71      Full    7.11M      DISK        00:00:03     14-9月 -09
        BP 關鍵字: 95   狀態: AVAILABLE  已壓縮: NO  標記: TAG20090914T103430
段名:E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_09_14\O1_MF_N
CSNF_TAG20090914T103430_5BVC0COZ_.BKP
  包含的 SPFILE: 修改時間: 14-9月 -09

SQL> host del E:\oracle\product\10.2.0\db_1\database\spfileorcl.ora;


RMAN> restore spfile from 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUP
SET\2009_09_14\O1_MF_NCSNF_TAG20090914T103430_5BVC0COZ_.BKP';

啟動 restore 於 14-9月 -09
使用通道 ORA_DISK_1

通道 ORA_DISK_1: 已找到的自動備份: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORC
L\BACKUPSET\2009_09_14\O1_MF_NCSNF_TAG20090914T103430_5BVC0COZ_.BKP
通道 ORA_DISK_1: 從自動備份復原 SPFILE 已完成
完成 restore 於 14-9月 -09

RMAN> run{alter database mount;
2> alter database open;}

 

 

恢復controlfile (NOMOUNT)

RMAN> shutdown immediate;

資料庫已關閉
資料庫已解除安裝
Oracle 例項已關閉
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`刪除控制檔案
RMAN> restore controlfile from 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\B
ACKUPSET\2009_09_14\O1_MF_NCSNF_TAG20090914T103430_5BVC0COZ_.BKP';

啟動 restore 於 14-9月 -09
使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在復原控制檔案
通道 ORA_DISK_1: 恢復完成, 用時: 00:00:05
輸出檔名=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL
輸出檔名=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL
輸出檔名=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL
完成 restore 於 14-9月 -09

RMAN> alter database mount;

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


RMAN> recover database ;

..............................
使用通道 ORA_DISK_1

正在開始介質的恢復

存檔日誌執行緒 1 序列 3 已作為檔案 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG
存在於磁碟上
存檔日誌執行緒 1 序列 4 已作為檔案 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG
存在於磁碟上
存檔日誌執行緒 1 序列 5 已作為檔案 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG
存在於磁碟上
存檔日誌檔名 =E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG 執行緒 =1 序列 =3
存檔日誌檔名 =E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG 執行緒 =1 序列 =4
存檔日誌檔名 =E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG 執行緒 =1 序列 =5
介質恢復完成, 用時: 00:00:06
完成 recover 於 14-9月 -09


單恢復controlfile的話 必須應用current redofile (可以看恢復controlfile(4)實驗記錄)
RMAN> alter database open resetlogs;(因為備份控制檔案中資訊與logfile中資訊不一樣 所以resetlogs重置redofile ,sequence 為1,scn+1)

 

 

 


rman 不完全恢復

 

基於時間
基於SCN
基於sequence
基於控制檔案恢復

正常情況下恢復完後以前的備份將無法使用 ,要重新備份(其實也可以使用 後面會實驗)


RMAN> backup database;

啟動 backup 於 14-9月 -09
使用目標資料庫控制檔案替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=136 devtype=DISK
SQL> set time on
15:01:28 SQL>
15:02:43 SQL> conn xh/a831115
已連線。
15:02:50 SQL> select count(*) from t2;

  COUNT(*)
----------
      1001

15:02:51 SQL> truncate table t2;

表被截斷。

15:02:59 SQL> select count(*) from t2;

  COUNT(*)
----------
         0

 

C:\>rman target '/ as sysdba'

恢復管理器: Release 10.2.0.1.0 - Production on 星期一 9月 14 15:11:57 2009

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

已連線到目標資料庫: ORCL (DBID=1223510333, 未開啟)

RMAN> run{startup force mount;
2> set until time='2009-09-14 15:01:28';~~~~~~~~~~~~~~~~基於scn就是until scn= ,基於sequence就是until sequece=
3> restore database;
4> recover database;
5> alter database open resetlogs;
6> }
介質恢復完成, 用時: 00:00:04

完成 recover 於 2009-09-14 15:14:04

資料庫已開啟

SQL> conn xh/a831115


已連線。
SQL> select count(*) from t2;

  COUNT(*)
----------
      1001

 

 

~~~~~~~~~~~~~~~~~~~~~~~`
恢復時候改變檔案位置
比如原來DISK不能用了 改變下位置

RMAN> backup datafile 6;

RMAN> run{sql'alter database datafile 6 offline';
2> set newname for datafile 6 to 'e:\test.dbf';~~~~~~~~~讓restore到這個位置
3> restore datafile 6;
4> switch datafile 6;~~~~~~~~~~~~~改變controlfile中記錄
5> recover datafile 6;
6> sql 'alter database 6 online';
7> }

sql 語句: alter database datafile 6 offline
sql 語句: alter database datafile 6 offline

正在執行命令: SET NEWNAME

啟動 restore 於 18-9月 -09
使用通道 ORA_DISK_1


另外
在oracle連線的時候可以直接執行指令碼和讓oracle操作不顯示到螢幕 而寫入指定的log

C:\>rman target '/ as sysdba' nocatalog log='d:\rmanlog.log' (APPEND 追加)
如果下次還是使用這個log將會覆蓋上次的記錄,除非用APPEND將追加在上次記錄的後面
RMAN> backup datafile 6;
RMAN>

~~~~~~~~RMANLOG.LOG中記錄
恢復管理器: Release 10.2.0.1.0 - Production on 星期五 9月 18 17:49:29 2009

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

連線到目標資料庫: ORCL (DBID=1223510333)
使用目標資料庫控制檔案替代恢復目錄

RMAN>
啟動 backup 於 18-9月 -09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=160 devtype=DISK
通道 ORA_DISK_1: 啟動全部資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集中的資料檔案
輸入資料檔案 fno=00006 name=E:\TEST.DBF
通道 ORA_DISK_1: 正在啟動段 1 於 18-9月 -09
通道 ORA_DISK_1: 已完成段 1 於 18-9月 -09
段控制程式碼=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_09_18\O1_MF_NNNDF_TAG20090918T175010_5C6OYLM1_.BKP 標記=TAG20090918T175010 註釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:01
完成 backup 於 18-9月 -09


執行系統檔案
C:\>rman target '/ as sysdba' cmdfile='d:\test.txt'(TEST.TXT中 是backup datafile 6)

恢復管理器: Release 10.2.0.1.0 - Production on 星期五 9月 18 10:11:28 2009

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

連線到目標資料庫: ORCL (DBID=1223510333)

RMAN> backup datafile 6;
2>
啟動 backup 於 18-9月 -09
使用目標資料庫控制檔案替代恢復目錄
分配的通道: ORA_DISK_1

rman target '/ as sysdba' catalog / script=.......
另外也可以執行指令碼 指令碼儲存在catalog中所以要建立catalog

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

相關文章