oracle實驗記錄 (恢復-rman基於控制檔案的恢復)

fufuh2o發表於2009-09-15

當前控制檔案中沒 test tablespace的資訊了~應該用備份控制檔案恢復or重新建立控制檔案

(下面先使用current controlfile)

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
E:\SYSDATAFILE2.DBF

已選擇6行。

SQL> create  tablespace test datafile 'd:\test.dbf'  reuse;

表空間已建立。

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
D:\TEST.DBF
E:\SYSDATAFILE2.DBF

已選擇7行。

RMAN> backup database;

啟動 backup 於 2009-09-14 17:49:16

完成 backup 於 2009-09-14 17:50:17


RMAN> list backup of tablespace 'TEST';


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

BS 關鍵字  型別 LV 大小       裝置型別 經過時間 完成時間
------- ---- -- ---------- ----------- ------------ -------------------
90      Full    644.78M    DISK        00:00:51     2009-09-14 17:50:07
        BP 關鍵字: 150   狀態: AVAILABLE  已壓縮: NO  標記: TAG20090914T174916
段名:E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_09_14\O1_MF_N
NNDF_TAG20090914T174916_5BW4DXN0_.BKP
  備份集 90 中的資料檔案列表
  檔案 LV 型別 Ckp SCN    Ckp 時間            名稱
  ---- -- ---- ---------- ------------------- ----
  6       Full 1628096    2009-09-14 17:49:17 D:\TEST.DBF

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1628151

SQL> drop tablespace test including contents and datafiles;

表空間已刪除。
RMAN> list backup of tablespace 'TEST';

RMAN-03002: list 命令 (在 09/14/2009 17:52:14 上) 失敗
RMAN-20202: 在恢復目錄中未找到表空間
RMAN-06019: 無法轉換表空間名稱"TEST"~~~~~~~~~~~~~~~~~~~~~~~~~~~~因為使用的controlfile當恢復目錄 所以 沒有TEST TABLESPACE的資訊了

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
E:\SYSDATAFILE2.DBF

已選擇6行。
RMAN> run{startup force mount;
2> set until scn=1628151;
3> restore database;
4> }

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

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

Fixed Size                     1250428 位元組
Variable Size                239078276 位元組
Database Buffers             364904448 位元組
Redo Buffers                   7135232 位元組

正在執行命令: SET until clause

啟動 restore 於 2009-09-14 17:56:10
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=158 devtype=DISK

通道 ORA_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_DISK_1: 正在指定從備份集恢復的資料檔案
正將資料檔案00001恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
正將資料檔案00002恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
正將資料檔案00003恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
正將資料檔案00004恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
正將資料檔案00005恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
正將資料檔案00009恢復到E:\SYSDATAFILE2.DBF
通道 ORA_DISK_1: 正在讀取備份段 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\B
ACKUPSET\2009_09_14\O1_MF_NNNDF_TAG20090914T174916_5BW4DXN0_.BKP
通道 ORA_DISK_1: 已恢復備份段 1
段控制程式碼 = E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_09_14\O1_
MF_NNNDF_TAG20090914T174916_5BW4DXN0_.BKP 標記 = TAG20090914T174916
通道 ORA_DISK_1: 恢復完成, 用時: 00:00:55
完成 restore 於 2009-09-14 17:57:10

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
E:\SYSDATAFILE2.DBF

已選擇6行。
RMAN> run{set until scn=1628151;
2> recover database;
3> }

正在執行命令: SET until clause

啟動 recover 於 2009-09-14 17:59:41
使用通道 ORA_DISK_1

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

完成 recover 於 2009-09-14 17:59:58

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
E:\SYSDATAFILE2.DBF

已選擇6行。

RMAN> alter database open resetlogs;

資料庫已開啟


SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING00006~~~~~~~~~~~~~~~~~~~~~~~~~~~
E:\SYSDATAFILE2.DBF

已選擇7行。
SQL> col tablespace_name format a10
SQL> col file_name format a50
SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE FILE_NAME
---------- --------------------------------------------------
TEST       E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING0000~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           6

EXAMPLE    E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DB
           F

USERS      E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
SYSAUX     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
UNDOTBS1   E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DB
           F


TABLESPACE FILE_NAME
---------- --------------------------------------------------
SYSTEM     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
SYSTEM     E:\SYSDATAFILE2.DBF

已選擇7行。
SQL> alter database rename file 'E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING0000
6' to 'd:\test.dbf';
alter database rename file 'E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING00006' to
 'd:\test.dbf'
*
第 1 行出現錯誤:
ORA-01511: 重新命名日誌/資料檔案時出錯
ORA-01141: 重新命名資料檔案 6 時出錯 - 未找到新檔案 'd:\test.dbf'
ORA-01111: 資料檔案 6 名稱未知 - 請重新命名以更正檔案
ORA-01110: 資料檔案 6: 'E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING00006'
ORA-27041: 無法開啟檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。

已經無法恢復
看alert.log中記載

Dictionary check beginning
Tablespace 'TEST' #7 found in data dictionary,~~~~~~~~~~~~~~~~~~~~~~~~~
but not in the controlfile. Adding to controlfile.
File #6 found in data dictionary but not in controlfile.~~~~~~~~~~~~~~~~~~~~~~~~~~~
Creating OFFLINE file 'MISSING00006' in the controlfile.
This file can no longer be recovered so it must be dropped.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~必須drop了
Dictionary check complete


~~~~~~~~~~~~~~~~~~手動實驗下

SQL> create tablespace test datafile 'd:\test.dbf' size 10m;

表空間已建立。
SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE FILE_NAME
---------- --------------------------------------------------
EXAMPLE    E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DB
           F

USERS      E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
SYSAUX     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
UNDOTBS1   E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DB
           F

SYSTEM     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
TEST       D:\TEST.DBF
SYSTEM     E:\SYSDATAFILE2.DBF

已選擇7行。
SQL> select name from v$datafile;

NAME
------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\SYSTEM01.DBF

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\UNDOTBS01.DBF

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\SYSAUX01.DBF

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\USERS01.DBF

NAME
------------------------------

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\EXAMPLE01.DBF

D:\TEST.DBF
E:\SYSDATAFILE2.DBF

已選擇7行。

SQL> alter database begin backup;

資料庫已更改。

SQL> @d:\backup\backupscript.txt
已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

SQL> alter database end backup;

資料庫已更改。
SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1653723

SQL> drop tablespace test including contents and datafiles;

表空間已刪除。

SQL> startup force mount;
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             255855492 bytes
Database Buffers          348127232 bytes
Redo Buffers                7135232 bytes
資料庫裝載完畢。
SQL> @d:\restore\restoredbf.txt
已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

已複製         1 個檔案。

SQL> recover database until change 1653723;
完成介質恢復。
SQL>
SQL> select name from v$datafile;

NAME
------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\SYSTEM01.DBF

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\UNDOTBS01.DBF

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\SYSAUX01.DBF

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\USERS01.DBF

NAME
------------------------------

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\EXAMPLE01.DBF

E:\SYSDATAFILE2.DBF

已選擇6行。

SQL> alter database open resetlogs;

資料庫已更改。


SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE FILE_NAME
---------- --------------------------------------------------
EXAMPLE    E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DB
           F

USERS      E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
SYSAUX     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
UNDOTBS1   E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DB
           F

SYSTEM     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
TEST       E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING0000******************
           6

TABLESPACE FILE_NAME
---------- --------------------------------------------------

SYSTEM     E:\SYSDATAFILE2.DBF

已選擇7行。
SQL> alter database rename file 'E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING0000
6' to 'd:\test.dbf';

資料庫已更改。

SQL> create table t1 (a int) tablespace test;
create table t1 (a int) tablespace test
*
第 1 行出現錯誤:
ORA-01658: 無法為表空間 TEST 中的段建立 INITIAL 區


SQL> alter database datafile 6 online;
alter database datafile 6 online
*
第 1 行出現錯誤:
ORA-01190: 控制檔案或資料檔案 6 來自最後一個 RESETLOGS 之前
ORA-01110: 資料檔案 6: 'D:\TEST.DBF'

可以看到從備份用指令碼restore回來後~~沒有執行恢復還是備份時候的檔案


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~通過一遍手動的實驗 可以看到因為controlfile中沒有test.dbf的資訊了~~所以應用redo時候表空間雖然恢復了,但資料檔案沒恢復

 

 

下面用備份controlfile恢復 (RMAN)
SQL> create tablespace test datafile 'd:\test.dbf' size 10m;

表空間已建立。

SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE FILE_NAME
---------- --------------------------------------------------
TEST       D:\TEST.DBF
EXAMPLE    E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DB
           F

USERS      E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
SYSAUX     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
UNDOTBS1   E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DB
           F

SYSTEM     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
SYSTEM     E:\SYSDATAFILE2.DBF

已選擇7行。

SQL> select name from v$datafile;

NAME
------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\SYSTEM01.DBF

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\UNDOTBS01.DBF

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\SYSAUX01.DBF

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\USERS01.DBF

NAME
------------------------------

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\EXAMPLE01.DBF

D:\TEST.DBF
E:\SYSDATAFILE2.DBF

已選擇7行。
RMAN> backup database;
完成 backup 於 15-9月 -09

RMAN> list backup of controlfile;


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

BS 關鍵字  型別 LV 大小       裝置型別 經過時間 完成時間
------- ---- -- ---------- ----------- ------------ ----------
95      Full    7.17M      DISK        00:00:03     15-9月 -09
        BP 關鍵字: 155   狀態: AVAILABLE  已壓縮: NO  標記: TAG20090915T111041
段名:E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_09_15\O1_MF_N
CSNF_TAG20090915T111041_5BY1HCDP_.BKP
  包括的控制檔案: Ckp SCN: 1656570      Ckp 時間: 15-9月 -09

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1656664

SQL> drop tablespace test including contents and datafiles;

RMAN> run{startup force mount;
2> set until scn=1656664;~~~~設定恢復到哪
3> restore controlfile from 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACK~~~~~~~~~~~~~~~~~~~~~restore備份的控制檔案
UPSET\2009_09_15\O1_MF_NCSNF_TAG20090915T111041_5BY1HCDP_.BKP';
4> restore database;
5> recover database;
6> alter database open resetlogs;}
Oracle 例項已啟動

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

Fixed Size                     1250428 位元組
Variable Size                239078276 位元組
Database Buffers             364904448 位元組
Redo Buffers                   7135232 位元組

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

通道 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 於 15-9月 -09

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

正在執行命令: SET until clause

啟動 restore 於 15-9月 -09
啟動 implicit crosscheck backup 於 15-9月 -09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=158 devtype=DISK
已交叉檢驗的 1 物件
完成 implicit crosscheck backup 於 15-9月 -09

啟動 implicit crosscheck copy 於 15-9月 -09
使用通道 ORA_DISK_1
已交叉檢驗的 15 物件
完成 implicit crosscheck copy 於 15-9月 -09

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

已列入目錄的檔案的列表
=======================
檔名: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_09_15\O1_M
F_NCSNF_TAG20090915T111041_5BY1HCDP_.BKP

使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_DISK_1: 正在指定從備份集恢復的資料檔案
正將資料檔案00001恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
正將資料檔案00002恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
正將資料檔案00003恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
正將資料檔案00004恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
正將資料檔案00005恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
正將資料檔案00006恢復到D:\TEST.DBF~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~RESTORE回來了
正將資料檔案00009恢復到E:\SYSDATAFILE2.DBF
通道 ORA_DISK_1: 正在讀取備份段 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\B
ACKUPSET\2009_09_15\O1_MF_NNNDF_TAG20090915T111041_5BY1FLM1_.BKP
通道 ORA_DISK_1: 已恢復備份段 1
段控制程式碼 = E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_09_15\O1_
MF_NNNDF_TAG20090915T111041_5BY1FLM1_.BKP 標記 = TAG20090915T111041
通道 ORA_DISK_1: 恢復完成, 用時: 00:00:55
完成 restore 於 15-9月 -09

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

正在開始介質的恢復

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

資料庫已開啟
SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
D:\TEST.DBF
E:\SYSDATAFILE2.DBF

已選擇7行。

SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
TEST
D:\TEST.DBF

EXAMPLE
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF

USERS
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF


TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SYSAUX
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF

UNDOTBS1
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF

SYSTEM
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF


TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SYSTEM
E:\SYSDATAFILE2.DBF


已選擇7行。

SQL> create table t1 (a int) tablespace test;

表已建立。

SQL> insert into t1 values(1);~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~已經恢復ok

已建立 1 行。

 

問題2 如果只有rman備份時候且沒有備份控制檔案,如何恢復~~~restoRE時候不會轉儲回 TEST.DBF

SQL> create tablespace test datafile 'd:\test.dbf' reuse;

表空間已建立。

SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE FILE_NAME
---------- --------------------------------------------------
TEST       D:\TEST.DBF
EXAMPLE    E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DB
           F

USERS      E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
SYSAUX     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
UNDOTBS1   E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DB
           F

SYSTEM     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
SYSTEM     E:\SYSDATAFILE2.DBF

已選擇7行。

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
D:\TEST.DBF
E:\SYSDATAFILE2.DBF

已選擇7行。

RMAN> backup database;
完成 backup 於 15-9月 -09

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1657559

SQL> drop tablespace test including contents and datafiles;

表空間已刪除。

RMAN> run{startup force mount;
2> set until scn=1657559;
3> restore database;}
RMAN> run{startup force mount;
2> set until scn=1657559;
3> restore database;}

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

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

Fixed Size                     1250428 位元組
Variable Size                243272580 位元組
Database Buffers             360710144 位元組
Redo Buffers                   7135232 位元組

正在執行命令: SET until clause

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

通道 ORA_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_DISK_1: 正在指定從備份集恢復的資料檔案
正將資料檔案00001恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
正將資料檔案00002恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
正將資料檔案00003恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
正將資料檔案00004恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF~~~~~~~~~~~~~~~看到沒有restore test.dbf
正將資料檔案00005恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
正將資料檔案00009恢復到E:\SYSDATAFILE2.DBF
通道 ORA_DISK_1: 正在讀取備份段 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\B
ACKUPSET\2009_09_15\O1_MF_NNNDF_TAG20090915T112736_5BY2F9L2_.BKP
通道 ORA_DISK_1: 恢復完成, 用時: 00:00:55
完成 restore 於 15-9月 -09


~~~~~~~~~~~~~~~~手工從buckup set中提取 test.dbf的備份
  1  DECLARE
  2   devtype varchar2(256);
  3   done boolean;
  4   BEGIN
  5   devtype:=sys.dbms_backup_restore.deviceAllocate (type=>'',ident=>'a');
  6   sys.dbms_backup_restore.restoreSetDatafile;
  7   sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>06,toname=>'d:\test.dbf')
;
  8   sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'E:\ORACLE\PROD
UCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_09_15\O1_MF_NNNDF_TAG20090915T11
2736_5BY2F9L2_.BKP', params=>null);
  9   sys.dbms_backup_restore.deviceDeallocate;
 10* END;
SQL> /

PL/SQL 過程已成功完成。

SQL> select name from v$datafile;~~~~~~~~~~~~~控制檔案中沒記錄

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
E:\SYSDATAFILE2.DBF

已選擇6行。
SQL> select name from v$tablespace;

NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
USERS~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~沒有test tablespace
EXAMPLE
TEMP

已選擇6行。

SQL> alter database backup controlfile to trace;

資料庫已更改。

SQL> startup force nomount;
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             243272580 bytes
Database Buffers          360710144 bytes
Redo Buffers                7135232 bytes
SQL>
~~~~~~~~~重新建立控制檔案
SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG
  2      MAXLOGFILES 16
  3      MAXLOGMEMBERS 3
  4      MAXDATAFILES 100
  5      MAXINSTANCES 8
  6      MAXLOGHISTORY 292
  7  LOGFILE
  8    GROUP 1 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG'  SIZE 50M,
  9    GROUP 2 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'  SIZE 50M,
 10    GROUP 3 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG'  SIZE 50M
 11  -- STANDBY LOGFILE
 12  DATAFILE
 13    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF',
 14    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF',
 15    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF',
 16    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF',
 17    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF',
 18    'E:\SYSDATAFILE2.DBF',
 19    'd:\test.dbf'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~手動加進來
 20  CHARACTER SET ZHS16GBK
 21  ;

控制檔案已建立。


已選擇6行。

SQL> select name from v$tablespace;

NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
USERS
EXAMPLE
TEST

已選擇6行。

 

SQL> recover database until change 1657559;
完成介質恢復。
SQL> select name from v$tablespace;

NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
USERS
EXAMPLE
TEST

已選擇6行。

 

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
D:\TEST.DBF
E:\SYSDATAFILE2.DBF

已選擇7行。

SQL> alter database open resetlogs;
SQL> col tablespace_name format a10
SQL> col file_name format a40
SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE FILE_NAME
---------- ----------------------------------------
TEST       D:\TEST.DBF~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SYSTEM     E:\SYSDATAFILE2.DBF
EXAMPLE    E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EX
           AMPLE01.DBF

USERS      E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\US
           ERS01.DBF

SYSAUX     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SY
           SAUX01.DBF


TABLESPACE FILE_NAME
---------- ----------------------------------------
UNDOTBS1   E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UN
           DOTBS01.DBF

SYSTEM     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SY
           STEM01.DBF


已選擇7行。

SQL>
SQL> create table t1 (a int) tablespace test;

表已建立。

SQL> insert into t1 values(1);

已建立 1 行。

 

 

手動恢復的話 用熱備份 restore回去,然後  create controlfile(加入刪除的datafile資訊) 恢復即可

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

相關文章