溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

RMAN如何實(shí)現(xiàn)備份與恢復(fù)

發(fā)布時(shí)間:2021-11-12 09:38:46 來源:億速云 閱讀:130 作者:小新 欄目:關(guān)系型數(shù)據(jù)庫

小編給大家分享一下RMAN如何實(shí)現(xiàn)備份與恢復(fù),希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

#########################################################

#[1] 控制文件損壞(rman和常規(guī)恢復(fù))                       #
#########################################################

準(zhǔn)備工作
~~~~~~~~
備份
~~~~

RMAN> configure controlfile autobackup on;

新的 RMAN 配置參數(shù):
CONFIGURE CONTROLFILE AUTOBACKUP ON;
已成功存儲(chǔ)新的 RMAN 配置參數(shù)
RMAN> configure controlfile autobackup format for device type disk to 'c:\temp\%
F';

新的 RMAN 配置參數(shù):
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'c:\temp\%F';
已成功存儲(chǔ)新的 RMAN 配置參數(shù)

RMAN>

RMAN> backup database;

啟動(dòng) backup 于 25-2月 -05
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=12 devtype=DISK
分配的通道: ORA_DISK_2
通道 ORA_DISK_2: sid=13 devtype=DISK
通道 ORA_DISK_1: 正在啟動(dòng) full 數(shù)據(jù)文件備份集
通道 ORA_DISK_1: 正在指定備份集中的數(shù)據(jù)文件
輸入數(shù)據(jù)文件 fno=00002 name=C:\ORACLE\ORADATA\PDF\UNDOTBS01.DBF
輸入數(shù)據(jù)文件 fno=00003 name=C:\ORACLE\ORADATA\PDF\INDX01.DBF
輸入數(shù)據(jù)文件 fno=00005 name=C:\ORACLE\ORADATA\PDF\USERS01.DBF
通道 ORA_DISK_1: 正在啟動(dòng)段 1 于 25-2月 -05
通道 ORA_DISK_2: 正在啟動(dòng) full 數(shù)據(jù)文件備份集
通道 ORA_DISK_2: 正在指定備份集中的數(shù)據(jù)文件
輸入數(shù)據(jù)文件 fno=00001 name=C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF
輸入數(shù)據(jù)文件 fno=00004 name=C:\ORACLE\ORADATA\PDF\TOOLS01.DBF
通道 ORA_DISK_2: 正在啟動(dòng)段 1 于 25-2月 -05
通道 ORA_DISK_1: 已完成段 1 于 25-2月 -05
段 handle=C:\ORACLE\ORA92\DATABASE\07GDKT8C_1_1 comment=NONE
通道 ORA_DISK_1: 備份集已完成, 經(jīng)過時(shí)間:00:00:56
通道 ORA_DISK_2: 已完成段 1 于 25-2月 -05
段 handle=C:\ORACLE\ORA92\DATABASE\08GDKT8C_1_1 comment=NONE
通道 ORA_DISK_2: 備份集已完成, 經(jīng)過時(shí)間:00:00:57
完成 backup 于 25-2月 -05

啟動(dòng) Control File and SPFILE Autobackup 于 25-2月 -05
段 handle=C:\TEMP\C-3171861129-20050225-00 comment=NONE
完成 Control File and SPFILE Autobackup 于 25-2月 -05

RMAN>
       
~~~~~~~~~~~       
常規(guī)備份
~~~~~~~~~~~
備份數(shù)據(jù)文件cp   C:\ORACLE\ORADATA\PDF\* C:\ORACLE\ORADATA\bak
備份控制文件                                                             
###################################################
# [1.1] 有老的備份數(shù)據(jù)備份和控制文件trace
###################################################
SQL> alter session set tracefile_identifier=fanglf
  2  ;

會(huì)話已更改。

SQL> alter database backup controlfile to trace;

數(shù)據(jù)庫已更改。

SQL>  alter database backup controlfile to 'c:\temp\controlfile.bak';

數(shù)據(jù)庫已更改。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我們也可以使用RMAN來拷貝備份控制文件
RMAN> copy CURRENT CONTROLFILE TO 'c:\cf.cpy';

啟動(dòng) copy 于 03-3月 -05
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=16 devtype=DISK
通道 ORA_DISK_1: 已復(fù)制當(dāng)前的控制文件
輸出文件名=C:\CF.CPY
完成 copy 于 03-3月 -05
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


SQL> col name format a50
SQL> select * from v$controlfile;

STATUS  NAME
------- --------------------------------------------------
        C:\ORACLE\ORADATA\PDF\CONTROL01.CTL
        C:\ORACLE\ORADATA\PDF\CONTROL02.CTL
        C:\ORACLE\ORADATA\PDF\CONTROL03.CTL     <<-此時(shí)仍然可以使用
~~~~~~~~~~~~~~~~
模擬控制文件損壞
~~~~~~~~~~~~~~~~       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       
使用ULTRAEDIT編輯CONTROL01.CTL部分?jǐn)?shù)據(jù)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL> select * from v$controlfile;

STATUS  NAME
------- ------------------------------------------------
        C:\ORACLE\ORADATA\PDF\CONTROL01.CTL
        C:\ORACLE\ORADATA\PDF\CONTROL02.CTL
        C:\ORACLE\ORADATA\PDF\CONTROL03.CTL

SQL>
SQL> create table test (a int,v varchar(200));

使用ULTRAEDIT編輯清空CONTROL01.CTL大部分?jǐn)?shù)據(jù)
SQL> select * from v$controlfile;  <<-出現(xiàn)異常
select * from v$controlfile
*
ERROR 位于第 1 行:
ORA-12571: TNS: 包寫入程序失敗
  
~~~~~~~~~~~~~~~~       
在alert中顯示 
~~~~~~~~~~~~~~~~
Fri Feb 25 11:51:56 2005
Errors in file c:\oracle\admin\pdf\bdump\pdf_ckpt_2556.trc:
ORA-00227: corrupt block detected in controlfile: (block 1, # blocks 1)
ORA-00202: controlfile: 'C:\ORACLE\ORADATA\PDF\CONTROL01.CTL'

CKPT: terminating instance due to error 227
Fri Feb 25 11:51:58 2005
Errors in file c:\oracle\admin\pdf\bdump\pdf_pmon_3084.trc:
ORA-00227: corrupt block detected in controlfile: (block , # blocks )

Instance terminated by CKPT, pid = 2556       
~~~~~~~~~~~~~~~~
在trace文件中顯示
~~~~~~~~~~~~~~~~

Corrupt block relative dba: 0x00000001 (file 0, block 1)
Completely zero block found during control file header read
*** 2005-02-25 11:51:55.000
ksedmp: internal or fatal error
ORA-00202: controlfile: 'C:\ORACLE\ORADATA\PDF\CONTROL01.CTL'

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
這里我模擬把3個(gè)控制文件都破壞
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

啟動(dòng)數(shù)據(jù)庫時(shí)提示
SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-00205: ?????????????????????

恢復(fù)實(shí)例
###################################################
# [測試1] --使用trace恢復(fù) shutdown abort
###################################################
SQL> shutdown abort 
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup nomount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL>


SQL> CREATE CONTROLFILE REUSE DATABASE "DF" NORESETLOGS  ARCHIVELOG
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\PDF\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\PDF\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\PDF\REDO03.LOG'  SIZE 100M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\PDF\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\PDF\INDX01.DBF',
17    'C:\ORACLE\ORADATA\PDF\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\PDF\USERS01.DBF'
19  CHARACTER SET ZHS16GBK
20  ;

控制文件已創(chuàng)建
SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01113: ?? 1 ??????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF'

SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
ORA-01113: 文件 1 需要介質(zhì)恢復(fù)
ORA-01110: 數(shù)據(jù)文件 1: 'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF'


SQL> recover database ;  --因?yàn)槭莝hutdown abort關(guān)閉,所以需要恢復(fù)
完成介質(zhì)恢復(fù)。
SQL> alter database open;

數(shù)據(jù)庫已更改。
###################################################
# [測試2] --使用trace恢復(fù) 正常shutdown
###################################################
SQL> insert into test select rownum,'aaaaaaaaaaaaaaaaaaaaaa' from dba_objects;

已創(chuàng)建6165行。

SQL> /

已創(chuàng)建6165行。

SQL> insert into test select * from test;

已創(chuàng)建12330行。

SQL> commit;

提交完成。

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。

SQL> startup nomount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL>


SQL> CREATE CONTROLFILE REUSE DATABASE "DF" NORESETLOGS  ARCHIVELOG
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\PDF\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\PDF\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\PDF\REDO03.LOG'  SIZE 100M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\PDF\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\PDF\INDX01.DBF',
17    'C:\ORACLE\ORADATA\PDF\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\PDF\USERS01.DBF'
19  CHARACTER SET ZHS16GBK
20  ;

控制文件已創(chuàng)建
SQL> alter database open;
                        
數(shù)據(jù)庫已更改。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我們看到如果是正常數(shù)據(jù)庫down機(jī)的,
那么使用noresetlog創(chuàng)建控制文件后
直接可以打開數(shù)據(jù)庫
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL> select count(*) from test;

  COUNT(*)
----------
     24660
    
用trace完成了數(shù)據(jù)庫的完全恢復(fù)  

SQL> select * from v$tempfile;

未選定行

SQL> select name from v$tablespace;

NAME
------------------------------
SYSTEM
UNDOTBS1
INDX
TOOLS
USERS
TEMP
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
注意我們可以看到由于重建了控制文件,
臨時(shí)表空間的臨時(shí)文件沒有了
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
################################################### 
# [測試3] --使用控制文件備份來恢復(fù)
###################################################
~~~~~~~~~~~~~~~~
還原備份控制文件
~~~~~~~~~~~~~~~~
C:\Documents and Settings\lifeng.fang>copy c:\temp\controlfile.bak
C:\oracle\oradata\pdf\CONTROL01.CTL
已復(fù)制         1 個(gè)文件。

C:\Documents and Settings\lifeng.fang>copy c:\temp\controlfile.bak
C:\oracle\oradata\pdf\CONTROL02.CTL
已復(fù)制         1 個(gè)文件。

C:\Documents and Settings\lifeng.fang>copy c:\temp\controlfile.bak
C:\oracle\oradata\pdf\CONTROL03.CTL
已復(fù)制         1 個(gè)文件。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
備份控制文件不會(huì)存有關(guān)于聯(lián)機(jī)日志文件
和數(shù)據(jù)文件結(jié)束SCN,因此不會(huì)在恢復(fù)時(shí)使
用聯(lián)機(jī)日志文件,并因此將數(shù)據(jù)文件假定了
一個(gè)無窮大的結(jié)束SCN,所以要休整他,必須
resetlogs,但是我們可以在例子[測試5.1]中可以看到
我們可以強(qiáng)制應(yīng)用在線日志實(shí)現(xiàn)完全恢復(fù)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
當(dāng)數(shù)據(jù)庫用normal或immediate關(guān)閉時(shí),發(fā)
出檢查點(diǎn)處理,這將為每個(gè)數(shù)據(jù)文件在控制
文件中設(shè)置相應(yīng)的結(jié)束SCN,使其等于數(shù)據(jù)
文件頭中對(duì)應(yīng)的開始SCN
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDpdf.ORA'

SQL> recover database;
ORA-00283: ??????????
ORA-01610: ?? BACKUP CONTROLFILE ??????????
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
數(shù)據(jù)文件頭中原有檢查點(diǎn)計(jì)數(shù)器決不會(huì)大于
當(dāng)前控制文件中的檢查點(diǎn)計(jì)數(shù)器,所以必須在
恢復(fù)時(shí)指定USING  BACKUP CONTROLFILE,
這樣就會(huì)基于備份控制文件的信息
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01152: ?? 1 ????????????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF'

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
這時(shí),沒有進(jìn)行恢復(fù),檢查到當(dāng)前數(shù)據(jù)文件頭
的開始SCN和控制文件的結(jié)束SCN不一致需要
進(jìn)行恢復(fù)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


這里無法恢復(fù)數(shù)據(jù)庫
而采用第1鐘方法執(zhí)行成功

###################################################
# [測試4] 我們現(xiàn)在模擬備份控制文件,同時(shí)備份部分?jǐn)?shù)據(jù)文件先于備份
#         控制文件的數(shù)據(jù)文件
###################################################
SQL> shutdown immediate
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。

copy SYSTEM01.DBF 復(fù)件 SYSTEM01.DBF
alter database backup controlfile to 'c:\temp\controlfile1.bak';

SQL> shutdown immediate
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
C:\Documents and Settings\lifeng.fang>copy c:\temp\controlfile1.bak C:\oracle\or
adata\pdf\CONTROL01.CTL
已復(fù)制         1 個(gè)文件。

C:\Documents and Settings\lifeng.fang>copy c:\temp\controlfile1.bak C:\oracle\or
adata\pdf\CONTROL02.CTL
已復(fù)制         1 個(gè)文件。

C:\Documents and Settings\lifeng.fang>copy c:\temp\controlfile1.bak C:\oracle\or
adata\pdf\CONTROL03.CTL
已復(fù)制         1 個(gè)文件。

SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
ORA-01589: 要打開數(shù)據(jù)庫則必須使用 RESETLOGS 或 NORESETLOGS 選項(xiàng)

SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
SQL> recover database using backup controlfile;
ORA-00279: 更改 1069041 (在 02/25/2005 15:36:00 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORA92\RDBMS\ARC00012.001
ORA-00280: 更改 1069041 對(duì)于線程 1 是按序列 # 12 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 無法打開存檔日志 'C:\ORACLE\ORA92\RDBMS\ARC00012.001'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。


ORA-00308: 無法打開存檔日志 'C:\ORACLE\ORA92\RDBMS\ARC00012.001'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。


SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01589: 要打開數(shù)據(jù)庫則必須使用 RESETLOGS 或 NORESETLOGS 選項(xiàng)


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01113: 文件 1 需要介質(zhì)恢復(fù)
ORA-01110: 數(shù)據(jù)文件 1: 'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF'


SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 1069041 (在 02/25/2005 15:36:00 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORA92\RDBMS\ARC00012.001
ORA-00280: 更改 1069041 對(duì)于線程 1 是按序列 # 12 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現(xiàn)如下錯(cuò)誤
ORA-01152: 文件 2 沒有從完備的舊備份中恢復(fù)
ORA-01110: 數(shù)據(jù)文件 2: 'C:\ORACLE\ORADATA\PDF\UNDOTBS01.DBF'


ORA-01112: 未啟動(dòng)介質(zhì)恢復(fù)


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01152: 文件 2 沒有從完備的舊備份中恢復(fù)
ORA-01110: 數(shù)據(jù)文件 2: 'C:\ORACLE\ORADATA\PDF\UNDOTBS01.DBF'
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
雖然在備份控制文件前備份了SYSTEM文件,但是
其他文件沒有備份,而有超過控制文件檢查點(diǎn)SCN
的信息,不能恢復(fù)成功
如果有只讀表空間,使用備份控制文件恢復(fù),
要先offline 參見備份與恢復(fù)手冊(cè)

對(duì)于使用備份控制文件進(jìn)行恢復(fù)由于默認(rèn)是所有
數(shù)據(jù)文件聯(lián)機(jī)的,而且resetlogs時(shí)需要寫數(shù)據(jù)
文件的,那么只讀文件恢復(fù)時(shí),由于只讀文件不
需要恢復(fù),就要強(qiáng)制將他offline;
所以在選取控制文件時(shí)也要注意,如果選取了當(dāng)
時(shí)正好是只讀狀態(tài)的控制文件時(shí),必須將數(shù)據(jù)文
件offline ,而使得在切換前為讀寫狀態(tài)時(shí)的數(shù)
據(jù)無法恢復(fù),反之同理
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#######################################################
# [測試5]我們現(xiàn)在模擬控制文件損壞,將備份控制文件前,先備份所有數(shù)據(jù)文件
#######################################################

copy SYSTEM01.DBF 復(fù)件 SYSTEM01.DBF
copy UNDOTBS01.DBF 復(fù)件 UNDOTBS01.DBF
copy TOOLS01.DBF   復(fù)件 TOOLS01.DBF
copy USERS01.DBF   復(fù)件 USERS01.DBF
copy INDX01.DBF    復(fù)件 INDX01.DBF

SQL>  alter database backup controlfile to 'c:\temp\controlfile2.bak';
                                                                     
數(shù)據(jù)庫已更改。     

替換老的控制文件

SQL> insert into test select * from test;

已創(chuàng)建24660行。

SQL> commit;

提交完成。

SQL> select count(*) from test;

  COUNT(*)
----------
     49320
SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。

copy c:\temp\controlfile2.bak C:\oracle\oradata\pdf\CONTROL01.CTL
copy c:\temp\controlfile2.bak C:\oracle\oradata\pdf\CONTROL02.CTL
copy c:\temp\controlfile2.bak C:\oracle\oradata\pdf\CONTROL03.CTL                                                      

rename SYSTEM01.DBF  復(fù)件 SYSTEM01.DBF  SYSTEM01.DBF  -->>臨時(shí)文件可以不要
rename UNDOTBS01.DBF 復(fù)件 UNDOTBS01.DBF UNDOTBS01.DBF
rename TOOLS01.DBF   復(fù)件 TOOLS01.DBF   TOOLS01.DBF  
rename USERS01.DBF   復(fù)件 USERS01.DBF   USERS01.DBF  
rename INDX01.DBF    復(fù)件 INDX01.DBF    INDX01.DBF

SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。  

SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 1069386 (在 02/25/2005 15:47:59 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORA92\RDBMS\ARC00013.001
ORA-00280: 更改 1069386 對(duì)于線程 1 是按序列 # 13 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto -->>使用auto恢復(fù)也是成功
ORA-00308: 無法打開存檔日志 'C:\ORACLE\ORA92\RDBMS\ARC00013.001'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。


ORA-00308: 無法打開存檔日志 'C:\ORACLE\ORA92\RDBMS\ARC00013.001'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。


SQL> recover database using backup controlfile until cancel; -->>這個(gè)cancel是表示每次應(yīng)用一個(gè)日志時(shí)都提示一下,直到輸入cancel后結(jié)束
ORA-00279: 更改 1069386 (在 02/25/2005 15:47:59 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORA92\RDBMS\ARC00013.001
ORA-00280: 更改 1069386 對(duì)于線程 1 是按序列 # 13 進(jìn)行的

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cancel通常好于change和time的恢復(fù)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


指定日志: {<RET>=suggested | filename | AUTO | CANCEL} 
cancel  --輸入cancel恢復(fù)成功 -->>cancel選項(xiàng)允許每次前滾一個(gè)日志文件,當(dāng)需要停止恢復(fù)時(shí),輸入cancel
                                 ,在這種方式下不會(huì)自動(dòng)運(yùn)用聯(lián)機(jī)日志文件.
介質(zhì)恢復(fù)已取消。
SQL> alter database open resetlogs;

數(shù)據(jù)庫已更改。
SQL> select CHECKPOINT_CHANGE# from v$database;

CHECKPOINT_CHANGE#
------------------
           1069388
          
SQL> select count(*) from test;

  COUNT(*)
----------
     24660  --丟失了數(shù)據(jù)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
那我們使用備份控制文件恢復(fù),是不是一定恢復(fù)不了在線日志中的數(shù)據(jù)嗎?
答案是錯(cuò)誤的,其實(shí)也能完全恢復(fù)(當(dāng)然我們用trace更好)  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
#######################################################
# [測試5.1]我們現(xiàn)在模擬控制文件損壞,有控制文件備份,先于控制文件備份的所有數(shù)據(jù)文件備份
#        使用在線日志進(jìn)行完全恢復(fù)
#######################################################
SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。
SQL> create table arch (status varchar(2)) tablespace users;

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已創(chuàng)建6166行。

SQL> /

已創(chuàng)建12332行。

SQL> /

已創(chuàng)建24664行。

SQL> /

已創(chuàng)建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          5 NO  CURRENT
         2          3 YES ACTIVE 
         3          4 YES ACTIVE

SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
              68658               69410

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。

還原備份控制文件,還原所有備份數(shù)據(jù)文件
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-00314: 日志 1 (線程 1),預(yù)計(jì)序號(hào)  與  不匹配
ORA-00312: 聯(lián)機(jī)日志 1 線程 1: 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'


SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 69257 (在 02/28/2005 11:08:18 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: 更改 69257 對(duì)于線程 1 是按序列 # 3 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介質(zhì)恢復(fù)已取消。
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
              68658               69257

SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 69257 (在 02/28/2005 11:08:18 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: 更改 69257 對(duì)于線程 1 是按序列 # 3 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 69362 (在 03/04/2005 11:21:25 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: 更改 69362 對(duì)于線程 1 是按序列 # 4 進(jìn)行的
ORA-00278: 此恢復(fù)不再需要日志文件 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 69408 (在 03/04/2005 11:21:26 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69408 對(duì)于線程 1 是按序列 # 5 進(jìn)行的
ORA-00278: 此恢復(fù)不再需要日志文件 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00308: 無法打開存檔日志 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。


SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
              68658               69408
             
~~~~~~~~~~~~~~             
到此是不完全恢復(fù)
那我們是不是可以
應(yīng)用在線日志呢,那
我們先應(yīng)用SEQUENCE=3和4
的日志C:\oracle\oradata\testdb\REDO02.LOG
C:\oracle\oradata\testdb\REDO03.LOG
我們可以看到恢復(fù)時(shí)這個(gè)文件不需要
~~~~~~~~~~~~~~~             

SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 69408 (在 03/04/2005 11:21:26 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69408 對(duì)于線程 1 是按序列 # 5 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
C:\oracle\oradata\testdb\REDO02.LOG
ORA-00310: 存檔日志包含序列 3;要求序列 5
ORA-00334: 歸檔日志: 'C:\ORACLE\ORADATA\TESTDB\REDO02.LOG'


SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 69408 (在 03/04/2005 11:21:26 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69408 對(duì)于線程 1 是按序列 # 5 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
C:\oracle\oradata\testdb\REDO03.LOG
ORA-00310: 存檔日志包含序列 4;要求序列 5
ORA-00334: 歸檔日志: 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'


SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
              68658               69408

~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我們看到非活動(dòng)在線日志沒有被應(yīng)用
我們應(yīng)用SEQUENCE=5
的日志C:\oracle\oradata\testdb\REDO01.LOG
我們可以看到恢復(fù)時(shí)這個(gè)文件是需要的
~~~~~~~~~~~~~~~   
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 69408 (在 03/04/2005 11:21:26 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69408 對(duì)于線程 1 是按序列 # 5 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
C:\oracle\oradata\testdb\REDO01.LOG --這步是關(guān)鍵
已應(yīng)用的日志。
完成介質(zhì)恢復(fù)。
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
              68658               69418 --在SEQUENCE=5中的SCN被應(yīng)用了

SQL> alter database open resetlogs;

數(shù)據(jù)庫已更改。

SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
              69418               69516

SQL> select count(*),status from arch group by status;

  COUNT(*) ST
---------- --
      6166 no
     98656 ok
-->>完全恢復(fù)
~~~~~~~~~~~~~~~~~~~~~~~~~~
這里主要是由于應(yīng)用了活動(dòng)在線日志
C:\oracle\oradata\testdb\REDO01.LOG的恢復(fù)
~~~~~~~~~~~~~~~~~~~~~~~~~~
#######################################################
# [測試6]那我們看看,有老的數(shù)據(jù)文件備份,備份控制文件后插
#  入的數(shù)據(jù)在shutdown abort后能不能恢復(fù)
#######################################################
SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。
SQL> create table arch (status varchar(2)) tablespace users;

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已創(chuàng)建6166行。

SQL> /

已創(chuàng)建12332行。

SQL> /

已創(chuàng)建24664行。

SQL> /

已創(chuàng)建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
              68658               69611

SQL>
SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
              68658               69611

SQL> commit;

提交完成。

SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
              68658               69611

SQL> shutdown abort
ORACLE 例程已經(jīng)關(guān)閉。
SQL> exit
從Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production中斷開

C:\Documents and Settings\lifeng.fang>sqlplus "sys/sunsdl as sysdba"

SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 3月 2 14:25:25 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

已連接到空閑例程。

SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
              68658               69360

SQL> recover database using backup controlfile;
ORA-00279: 更改 69456 (在 03/02/2005 10:26:30 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: 更改 69456 對(duì)于線程 1 是按序列 # 3 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 69564 (在 03/02/2005 14:23:19 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: 更改 69564 對(duì)于線程 1 是按序列 # 4 進(jìn)行的
ORA-00278: 此恢復(fù)不再需要日志文件 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 69610 (在 03/02/2005 14:23:21 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69610 對(duì)于線程 1 是按序列 # 5 進(jìn)行的
ORA-00278: 此恢復(fù)不再需要日志文件 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00308: 無法打開存檔日志 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。


SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
              68658               69610

SQL> recover database using backup controlfile until change 69620;  --我們看到CONTROLFILE_CHANGE#為69610,那我隨便加大這個(gè)值69620試試看能不能恢復(fù)到69610以后
ORA-00279: 更改 69610 (在 03/02/2005 14:23:21 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69610 對(duì)于線程 1 是按序列 # 5 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00308: 無法打開存檔日志 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。


SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
              68658               69610
             
SQL> recover database using backup controlfile until change 69620;
ORA-00279: 更改 69610 (在 03/02/2005 14:23:21 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69610 對(duì)于線程 1 是按序列 # 5 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00308: 無法打開存檔日志 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。


SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
              68658               69610

~~~~~~~~~~~~~~
這里如果在線日志沒有
損壞,那么可以應(yīng)用在線
日志完全恢復(fù)
~~~~~~~~~~~~~~

SQL> alter database open resetlogs;

數(shù)據(jù)庫已更改。

SQL> select count(*),status from arch group by status;

  COUNT(*) ST
---------- --
     98656 ok  -->>不能恢復(fù)status = no ,這部分?jǐn)?shù)據(jù)在在線日志中的,但是until cancel+ backup controlfile不前滾在線日志文件

~~~~~~~~~~~~~~~~~~~
經(jīng)過測試也可以用5.1的方法
應(yīng)用在線日志進(jìn)行完全恢復(fù)
~~~~~~~~~~~~~~~~~~~
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#  -->>奇怪這里值變成我要until change的值了
------------------- -------------------
              69610               69720

SQL> select count(*),status from arch group by status;

  COUNT(*) ST
---------- --
     98656 ok


[ Last edited by fly115 on 2005-3-21 at 19:37 ]
  
UID393 帖子3566 精華23 積分3803 流通積分3803 點(diǎn) 金錢0 O元 閱讀權(quán)限225 在線時(shí)間173 小時(shí) 注冊(cè)時(shí)間2003-1-21 最后登錄2008-8-27 查看詳細(xì)資料
 TOP
 

fly115
超級(jí)版主

個(gè)人空間 發(fā)短消息 加為好友 當(dāng)前離線  3樓 大 中 小 發(fā)表于 2005-3-19 17:58  只看該作者


#######################################################
# [測試7]那我們看看,有老的數(shù)據(jù)文件備份,備份控制文件后插
#  入的數(shù)據(jù)在正常shutdown 后能不能恢復(fù)
#######################################################                 

測試結(jié)果同上.
通過create controlfile方法才能完全恢復(fù)
也可以參考[測試5.1]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我們注意到,在這里仍然可以用resetlogs
前的trace來進(jìn)行控制文件恢復(fù),因?yàn)榻Y(jié)構(gòu)
沒有變動(dòng).
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#######################################################
# [測試8]那我們看看,有老的數(shù)據(jù)文件備份,插
#  入的數(shù)據(jù)在正常shutdown 后用create controlfile noresetlogs
#  方法來恢復(fù)控制文件,能不能恢復(fù)
#######################################################      
SQL> STARTUP
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。
SQL> create table arch (status varchar(2)) tablespace users;

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已創(chuàng)建6166行。

SQL> /

已創(chuàng)建12332行。

SQL> /

已創(chuàng)建24664行。

SQL> /

已創(chuàng)建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
              68658               69607

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
~~~~~~~~~~~~~~~~~~~~~~~~
刪除控制文件
刪除USERS01.DBF
~~~~~~~~~~~~~~~~~~~~~~~~
SQL> STARTUP NOMOUNT
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes

SQL> CREATE CONTROLFILE REUSE DATABASE "TESTDB" NORESETLOGS  ARCHIVELOG

  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'  SIZE 100M,

10    GROUP 2 'C:\ORACLE\ORADATA\TESTDB\REDO02.LOG'  SIZE 100M,

11    GROUP 3 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'  SIZE 100M

12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF',

15    'C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF',

16    'C:\ORACLE\ORADATA\TESTDB\INDX01.DBF',

17    'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF',

18    'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF'

19  CHARACTER SET ZHS16GBK
20  ;

控制文件已創(chuàng)建

SQL> ALTER DATABASE OPEN;
ALTER DATABASE OPEN
*
ERROR 位于第 1 行:
ORA-01113: ?? 5 ??????
ORA-01110: ???? 5: 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF'


SQL> RECOVER DATABASE;
完成介質(zhì)恢復(fù)。
SQL> ALTER DATABASE  OPEN;

數(shù)據(jù)庫已更改。

SQL> select count(*),status from arch group by status;

  COUNT(*) ST
---------- --
      6166 no
     98656 ok
完全恢復(fù)了

  
######################################################### 
# [1.2] 有RMAN的autobackup,catalog異常                      
#########################################################      

SQL> startup nomount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL> exit

C:\Documents and Settings\lifeng.fang>rman nocatalog target "sys/sunsdl"

恢復(fù)管理器: 版本9.2.0.1.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.

連接到目標(biāo)數(shù)據(jù)庫: pdf(未安裝)
正在使用目標(biāo)數(shù)據(jù)庫控制文件替代恢復(fù)目錄

RMAN> restore controlfile from autobackup;

啟動(dòng) restore 于 25-2月 -05

分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=13 devtype=DISK
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 02/25/2005 17:21:52
RMAN-06495: must explicitly specify DBID with SET DBID command

RMAN> exit

所以要使用RMAN,那么必須預(yù)先知道DBID

如果我們知道(DBID=3171861129)
RMAN> set dbid=3171861129  -->>注意如果startup nomount在RMAN上執(zhí)行就不需要指定DBID

正在執(zhí)行命令: SET DBID

RMAN> restore controlfile from autobackup;

啟動(dòng) restore 于 25-2月 -05

分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=13 devtype=DISK
通道 ORA_DISK_1: 尋找以下日期的自動(dòng)備份: 20050225
通道 ORA_DISK_1: 尋找以下日期的自動(dòng)備份: 20050224
通道 ORA_DISK_1: 尋找以下日期的自動(dòng)備份: 20050223
通道 ORA_DISK_1: 尋找以下日期的自動(dòng)備份: 20050222
通道 ORA_DISK_1: 尋找以下日期的自動(dòng)備份: 20050221
通道 ORA_DISK_1: 尋找以下日期的自動(dòng)備份: 20050220
通道 ORA_DISK_1: 尋找以下日期的自動(dòng)備份: 20050219
通道 ORA_DISK_1: 沒有找到 7 天之內(nèi)的自動(dòng)備份
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 02/25/2005 17:26:46
RMAN-06172: no autobackup found or specified handle is not a valid copy or piece
由于catalog壞了,所以備份信息沒有了,但是自動(dòng)控制文件備份提供了特殊的格式,可以不讀取catalog或者控制文件信息
來恢復(fù)控制文件
我們看到,現(xiàn)在RMAN不能自動(dòng)找到自動(dòng)備份的路徑.

RMAN> SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/temp/%F';  -->>通過指定的路徑就可以恢復(fù)了

正在執(zhí)行命令: SET CONTROLFILE AUTOBACKUP FORMAT

RMAN> restore controlfile from autobackup ;

啟動(dòng) restore 于 25-2月 -05

使用通道 ORA_DISK_1
通道 ORA_DISK_1: 尋找以下日期的自動(dòng)備份: 20050225
通道 ORA_DISK_1: 已找到的自動(dòng)備份: /temp/c-3171861129-20050225-00
通道 ORA_DISK_1: 從自動(dòng)備份復(fù)原控制文件已完成
正在復(fù)制控制文件
輸出文件名=C:\ORACLE\ORADATA\PDF\CONTROL01.CTL
輸出文件名=C:\ORACLE\ORADATA\PDF\CONTROL02.CTL
輸出文件名=C:\ORACLE\ORADATA\PDF\CONTROL03.CTL
完成 restore 于 25-2月 -05

==>>用冷備來恢復(fù)數(shù)據(jù)庫
用冷備的控制文件和數(shù)據(jù)文件
SQL> shutdown
ORA-01109: ??????


已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL> select count(*) from tab;
select count(*) from tab
                     *
ERROR 位于第 1 行:
ORA-01219: ??????: ???????????


SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-00314: ?? 1 (?? 1)?????  ?  ???
ORA-00312: ???? 1 ?? 1: 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'  -->>這里REDO是無用的,但是因?yàn)闆]有對(duì)REDO進(jìn)行備份,存在他就打不開


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01139: RESETLOGS ???????????????


SQL> alter database open noresetlogs;
alter database open noresetlogs
*
ERROR 位于第 1 行:
ORA-01139: RESETLOGS ???????????????


SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-00314: ?? 1 (?? 1)?????  ?  ???
ORA-00312: ???? 1 ?? 1: 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'


SQL>  alter database clear logfile group 1;

數(shù)據(jù)庫已更改。

SQL>  alter database clear logfile group 2;

數(shù)據(jù)庫已更改。

SQL>  alter database clear logfile group 3;
alter database clear logfile group 3
*
ERROR 位于第 1 行:
ORA-00350: ?? 3 (?? 1) ?????
ORA-00312: ???? 3 ?? 1: 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'


SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-00338: ?? 3 (?? 1) ???????
ORA-00312: ???? 3 ?? 1: 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'


SQL>  alter database clear UNARCHIVED logfile group 3;
alter database clear UNARCHIVED logfile group 3
*
ERROR 位于第 1 行:
ORA-00338: ?? 3 (?? 1) ???????
ORA-00312: ???? 3 ?? 1: 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'

方法1
SQL> recover database using backup controlfile;
ORA-00279: ?? 48540 (? 02/28/2005 10:06:38 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: ?? 48540 ???? 1 ???? # 3 ???


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: ?? 68658 (? 02/28/2005 10:22:51 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: ?? 68658 ???? 1 ???? # 4 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'


ORA-00308: ???????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'
ORA-27041: ??????
OSD-04002: N^7(4r?*ND<~
O/S-Error: (OS 2) O5M3UR2;5=V86(5DND<~!#


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01113: ?? 1 ??????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'


SQL> recover database using backup controlfile using cancel;
ORA-01906: ?? BACKUP ???


SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 68658 (? 02/28/2005 10:22:51 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: ?? 68658 ???? 1 ???? # 4 ???


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介質(zhì)恢復(fù)已取消。
SQL>
SQL> alter database open resetlogs;

數(shù)據(jù)庫已更改。
####################################################
# [方法2] --使用帶resetlogs的創(chuàng)建控制文件trace
####################################################
SQL> startup nomount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "TESTDB" RESETLOGS  ARCHIVELOG  --這里我們用了resetlogs
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\TESTDB\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'  SIZE 100M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\TESTDB\INDX01.DBF',
17    'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF'
19  CHARACTER SET ZHS16GBK
20  ;

控制文件已創(chuàng)建

SQL> alter database open resetlogs;

數(shù)據(jù)庫已更改。
~~~~~~~~~~~~~~~
這將丟失部分?jǐn)?shù)據(jù)
~~~~~~~~~~~~~~~

#############################################
# [方法3] 使用noresetlog的trace來恢復(fù)
#############################################
SQL> shutdown abort 
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup nomount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL>


SQL> CREATE CONTROLFILE REUSE DATABASE "DF" NORESETLOGS  ARCHIVELOG
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\PDF\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\PDF\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\PDF\REDO03.LOG'  SIZE 100M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\PDF\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\PDF\INDX01.DBF',
17    'C:\ORACLE\ORADATA\PDF\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\PDF\USERS01.DBF'
19  CHARACTER SET ZHS16GBK
20  ;

控制文件已創(chuàng)建
SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01113: ?? 1 ??????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF'

SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
ORA-01113: 文件 1 需要介質(zhì)恢復(fù)
ORA-01110: 數(shù)據(jù)文件 1: 'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF'


SQL> recover database ;  --因?yàn)槭莝hutdown abort關(guān)閉,所以需要恢復(fù)
完成介質(zhì)恢復(fù)。
SQL> alter database open;

數(shù)據(jù)庫已更改。
#############################################
# [方法4] 那我們對(duì)數(shù)據(jù)庫的數(shù)據(jù)文件控制文件和
#         在線日志文件都做備份會(huì)需要恢復(fù)嗎?
#############################################

SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。
SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。

將控制文件,數(shù)據(jù)文件,在線日志文件都進(jìn)行備份
SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。
SQL> select count(*) from test;

  COUNT(*)
----------
     12330

SQL> create table arch (status varchar(2));

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。

將控制文件,數(shù)據(jù)文件,在線日志文件都進(jìn)行還原
SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。
SQL> select count(*) from test;

  COUNT(*)
----------
     12330

SQL> select count(*) from arch;
select count(*) from arch
                     *
ERROR 位于第 1 行:
ORA-00942: 表或視圖不存在
SQL> archive log list
數(shù)據(jù)庫日志模式            存檔模式
自動(dòng)存檔             啟用
存檔終點(diǎn)            C:\oracle\oradata\testdb\archive
最早的概要日志序列     1
下一個(gè)存檔日志序列   3
當(dāng)前日志序列           3

~~~~~~~~~~~~~~~~~~~~~~~~~~~
數(shù)據(jù)庫冷備份如果包括所有數(shù)據(jù)
文件控制文件和在線日志,那么
數(shù)據(jù)庫可以直接打開,如果沒有在
線日志,那么需要create controlfile
... resetlogs;
或者recover database until cancel;
alter database open resetlogs;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#####################################################
#  但是由于在線日志也被覆蓋了,前面的歸檔3和在序列4已
#  經(jīng)沒有應(yīng)用,那么我們序列4雖然被強(qiáng)制覆蓋了,那么3其實(shí)
#  是被歸檔了,那么我們建的arch表是不是可以恢復(fù)出來呢?
#  這里我們看看能不能備份(做完冷備份后的控制文件)控制
#  文件來進(jìn)行恢復(fù)
#  [測試5] 我們模擬在線日志損壞,使用備份控制文件,有數(shù)據(jù)文件的備份的恢復(fù)
####################################################

SQL>  create table arch (status varchar(2));

表已創(chuàng)建。

SQL>  alter system switch logfile;

系統(tǒng)已更改。

SQL>  insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。


alter database backup controlfile to 'C:\oracle\oradata\testdb\bak2\controlfile.ctl';
SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。

拷貝原來的冷備份中的數(shù)據(jù)文件和在線日志(其實(shí)在線日志沒有用啦),不拷貝原來冷備份的控制文件

SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
SQL> recover database using backup controlfile;
ORA-00279: 更改 69257 (在 02/28/2005 11:08:18 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: 更改 69257 對(duì)于線程 1 是按序列 # 3 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 69776 (在 02/28/2005 11:23:24 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: 更改 69776 對(duì)于線程 1 是按序列 # 4 進(jìn)行的
ORA-00278: 此恢復(fù)不再需要日志文件 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF


ORA-00308: 無法打開存檔日志 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。


SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01589: 要打開數(shù)據(jù)庫則必須使用 RESETLOGS 或 NORESETLOGS 選項(xiàng)


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01113: 文件 1 需要介質(zhì)恢復(fù)
ORA-01110: 數(shù)據(jù)文件 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'


SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 69776 (在 02/28/2005 11:23:24 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: 更改 69776 對(duì)于線程 1 是按序列 # 4 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介質(zhì)恢復(fù)已取消。
SQL> alter database open resetlogs;

數(shù)據(jù)庫已更改。

SQL> select count(*) from arch;

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

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~成功了,結(jié)果是有表arch,但沒有數(shù)據(jù),也就是沒有應(yīng)用在線日志,其實(shí)這里如果不還原在線日志(反而來攪亂),
我們是可以recover database 進(jìn)行完全恢復(fù)的,因?yàn)榭刂莆募鋵?shí)也是當(dāng)前的,如果使用后面?zhèn)浞莸目刂莆募?
因?yàn)樵摽刂莆募呀?jīng)在建arch表之后,也能進(jìn)行恢復(fù)

上面的方法也是在在線日志被破壞后,有原來的冷備份(或熱備份時(shí)),使用當(dāng)前的控制文件(其實(shí)已經(jīng)不是當(dāng)前的了,
我們?cè)诤竺婵梢钥吹绞褂昧藆sing  backup controlfile)可以還原到最后的歸檔日志,只是丟失在線日志的數(shù)據(jù).
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

################################
[1.3] 有RMAN的備份,catalog正常
################################                                                                 
    --需要建立一個(gè)catalog庫    
   
   
   
   
################################   
[1.4] 控制文件損壞,有trace,非活動(dòng)在
    線日志損壞 
################################

SQL> archive log list
數(shù)據(jù)庫日志模式            存檔模式
自動(dòng)存檔             啟用
存檔終點(diǎn)            C:\oracle\oradata\testdb\archive
最早的概要日志序列     0
下一個(gè)存檔日志序列   1
當(dāng)前日志序列           1
SQL> select count(*) from test;

  COUNT(*)
----------
     12330

SQL> create table arch (status varchar(2));

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。
SQL> archive log list
數(shù)據(jù)庫日志模式            存檔模式
自動(dòng)存檔             啟用
存檔終點(diǎn)            C:\oracle\oradata\testdb\archive
最早的概要日志序列     1
下一個(gè)存檔日志序列   2
當(dāng)前日志序列           2
SQL>
    SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          2 NO  CURRENT         
         2          0 YES UNUSED
         3          1 YES INACTIVE          --非在線日志
GROUP#          MEMBER
----------      ----------------------------------------
3                C:\ORACLE\ORADATA\TESTDB\REDO03.LOG        
用ultraedit破壞日志3        

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。                                     -->>非在線日志破壞了,數(shù)據(jù)庫仍然能執(zhí)行

SQL> alter system switch logfile;
系統(tǒng)已更改。
        
SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          2 YES ACTIVE
         2          3 NO  CURRENT
         3          1 YES INACTIVE
SQL> alter system switch logfile;  -->>當(dāng)切換到日志組3時(shí)報(bào)錯(cuò)
alter system switch logfile
*
ERROR 位于第 1 行:
ORA-03113: 通信通道的文件結(jié)束
       
###########################
# [方法1] 使用clear group
###########################
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          2 YES ACTIVE
         2          3 NO  INVALIDATED
         3          0 YES UNUSED

SQL> alter database clear logfile group 3;
alter database clear logfile group 3
*
ERROR 位于第 1 行:
ORA-00344: 無法重新創(chuàng)建聯(lián)機(jī)日志 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 32) 進(jìn)程無法訪問文件,因?yàn)榱硪粋€(gè)程序正在使用此文件。


SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          2 YES ACTIVE
         2          3 NO  INVALIDATED
         3          0 YES CLEARING   --上面的語句已經(jīng)執(zhí)行了clear功能
        
SQL> alter database open;

數(shù)據(jù)庫已更改。             

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          4 NO  CURRENT
         2          3 YES INACTIVE
         3          0 YES CLEARING        --直接跳過損壞的日志組
        
        
SQL> select count(*) from arch;

  COUNT(*)
----------
      6166        -->>數(shù)據(jù)沒有丟失
     
###########################
# [方法2] 使用trace resetlogs
###########################
SQL> create table arch (status varchar(2));

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL>  commit;

提交完成。

SQL> archive log list
數(shù)據(jù)庫日志模式            存檔模式
自動(dòng)存檔             啟用
存檔終點(diǎn)            C:\oracle\oradata\testdb\archive
最早的概要日志序列     1
下一個(gè)存檔日志序列   2
當(dāng)前日志序列           2
SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          2 YES ACTIVE
         2          1 YES INACTIVE
         3          3 NO  CURRENT

SQL> archive log list
數(shù)據(jù)庫日志模式            存檔模式
自動(dòng)存檔             啟用
存檔終點(diǎn)            C:\oracle\oradata\testdb\archive
最早的概要日志序列     1
下一個(gè)存檔日志序列   3
當(dāng)前日志序列           3
SQL>
SQL>shutdown
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
這時(shí)因?yàn)槭钦hutdown,arch表狀態(tài)等于
no的數(shù)據(jù)已經(jīng)寫到數(shù)據(jù)文件中了
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
模擬日志2錯(cuò)誤

SQL> startup nomount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS  AR
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'  SIZE 10
10    GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'  SIZE 10
11    GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'  SIZE 10
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
17    'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
19  CHARACTER SET ZHS16GBK
20  ;

控制文件已創(chuàng)建

SQL> alter database open resetlogs;

數(shù)據(jù)庫已更改。

SQL> select count(*),status from arch group by status;

  COUNT(*) ST
---------- --
      6166 no            -->>我們發(fā)現(xiàn)這里在線日志中的數(shù)據(jù)沒有丟失
     12332 ok                                                   
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
在這里用resetlogs和noresetlogs創(chuàng)建控制文件都不會(huì)丟失數(shù)據(jù)了,
因?yàn)檎hutdown數(shù)據(jù)已經(jīng)寫到數(shù)據(jù)文件中了
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
那么我們假想使用了老的數(shù)據(jù)備份,那么在前滾的時(shí)候會(huì)用到這部分?jǐn)?shù)據(jù)嗎?
我們?cè)谀M日志2出錯(cuò)后,復(fù)制數(shù)據(jù)文件備份.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

###############################################
# [測試3] 數(shù)據(jù)文件損壞,控制文件損壞,有trace ,
#         使用resetlogs,非在線日志損壞
###############################################

SQL> create table arch (status varchar(2));  --歸檔1

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects; --在歸檔2

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          2 YES ACTIVE
         2          1 YES INACTIVE
         3          3 NO  CURRENT

SQL>
SQL>
SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。

這里模擬日志文件組2錯(cuò)誤,控制文件損壞,數(shù)據(jù)文件損壞
SQL>
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL> shutdown
ORA-01109: ??????


已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。

還原數(shù)據(jù)文件
SQL> startup nomount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL>  CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS  ARCHIVELOG
  2   --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3       MAXLOGFILES 5
  4       MAXLOGMEMBERS 3
  5       MAXDATAFILES 100
  6       MAXINSTANCES 1
  7       MAXLOGHISTORY 226
  8   LOGFILE
  9     GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'  SIZE 100M,
10     GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'  SIZE 100M,
11     GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'  SIZE 100M
12   -- STANDBY LOGFILE
13   DATAFILE
14     'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
15     'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
16     'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
17     'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
18     'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
19   CHARACTER SET ZHS16GBK
20   ;

控制文件已創(chuàng)建

SQL> alter database mount
  2  ;
alter database mount
*
ERROR 位于第 1 行:
ORA-01100: ??????


SQL> shutdown
ORA-01109: ??????


已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
SQL> recover database using backup controlfile using cancel;
ORA-01906: 需要 BACKUP 關(guān)鍵字


SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 69257 (在 02/28/2005 11:08:18 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: 更改 69257 對(duì)于線程 1 是按序列 # 3 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介質(zhì)恢復(fù)已取消。
SQL> alter database open resetlogs;

數(shù)據(jù)庫已更改。

SQL>  select count(*),status from arch group by status;
select count(*),status from arch group by status
                             *
ERROR 位于第 1 行:
ORA-00942: 表或視圖不存在


SQL> select count(*) from arch;
select count(*) from arch
                     *
ERROR 位于第 1 行:
ORA-00942: 表或視圖不存在


SQL> select count(*) from test;

  COUNT(*)
----------
     12330           
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
用resetlogs就不會(huì)完全恢復(fù)了,因?yàn)閿?shù)據(jù)文件也還原了,
所以要讀在線日志進(jìn)行前滾,可現(xiàn)在是resetlogs
那我們用noresetlogs來創(chuàng)建控制文件會(huì)怎么樣呢?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
###############################################
# [測試4] 數(shù)據(jù)文件損壞,控制文件損壞,有trace ,
#         使用noresetlogs,非在線日志損壞 ,shutdown abort
###############################################    
    
SQL> shutdown
ORA-01109: 數(shù)據(jù)庫未打開


已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> create table arch (status varchar(2)) tablespace users;

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已創(chuàng)建6166行。

SQL> /

已創(chuàng)建12332行。

SQL> /

已創(chuàng)建24664行。

SQL> /

已創(chuàng)建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          5 NO  CURRENT
         2          3 YES INACTIVE
         3          4 YES ACTIVE

SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
              68658               69641

SQL> shutdown abort
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> insert into arch select 'af' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          5 YES INACTIVE
         2          6 NO  CURRENT
         3          4 YES INACTIVE

SQL> shutdown abort
ORACLE 例程已經(jīng)關(guān)閉。
SQL> exit
從Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production中斷開

C:\Documents and Settings\lifeng.fang>sqlplus "sys/sunsdl as sysdba"

SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 3月 2 16:29:44 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

已連接到空閑例程。

SQL> startup nomount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS  ARCHIVELOG
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226

  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'  SIZE 100M  --這個(gè)非在線日志丟了
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
17    'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
19  CHARACTER SET ZHS16GBK
20  ;
CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS  ARCHIVELOG
*
ERROR 位于第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-01565: ????'C:\ORACLE\ORADATA\testdb\REDO03.LOG'???
ORA-27041: ??????
OSD-04002: N^7(4r?*ND<~
O/S-Error: (OS 2) O5M3UR2;5=V86(5DND<~!#


SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS  ARCHIVELOG
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226

  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'  SIZE 100M --刪除日志3
11  -- STANDBY LOGFILE
12  DATAFILE
13    'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
14    'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
15    'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
16    'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
17    'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
18  CHARACTER SET ZHS16GBK
19  ;

控制文件已創(chuàng)建

SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01113: ?? 1 ??????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'


SQL> recover database ;
ORA-00279: ?? 69456 (? 03/02/2005 10:26:30 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: ?? 69456 ???? 1 ???? # 3 ???


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: ?? 69594 (? 03/02/2005 16:27:24 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: ?? 69594 ???? 1 ???? # 4 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'


已應(yīng)用的日志。
完成介質(zhì)恢復(fù)。
SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> select count(*),status from arch group by status;

  COUNT(*) ST
---------- --
      6166 af
      6166 no
     98656 ok
這種情況配合noresetlogs可以完全恢復(fù).   
      


[ Last edited by fly115 on 2005-3-21 at 19:56 ]
  
UID393 帖子3566 精華23 積分3803 流通積分3803 點(diǎn) 金錢0 O元 閱讀權(quán)限225 在線時(shí)間173 小時(shí) 注冊(cè)時(shí)間2003-1-21 最后登錄2008-8-27 查看詳細(xì)資料
 TOP
 

fly115
超級(jí)版主

個(gè)人空間 發(fā)短消息 加為好友 當(dāng)前離線  4樓 大 中 小 發(fā)表于 2005-3-19 18:00  只看該作者


################################                                                                     
# [1.5] 有trace,活動(dòng)在線日志損壞   
################################
################################                                                             
# [1.5.1] 有trace,活動(dòng)在線日志損壞,正常shutdown或是當(dāng)前的數(shù)據(jù)文件  
################################
SQL> create table arch (status varchar(2));

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          2 YES ACTIVE
         2          1 YES ACTIVE
         3          3 NO  CURRENT
    
SQL> shutdown  --正常關(guān)閉數(shù)據(jù)庫
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。


此時(shí)模擬刪除當(dāng)前在線日志組3
SQL>
SQL>
SQL> startup nomount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS  ARCHIVELOG
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'  SIZE 100M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
17    'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
19  CHARACTER SET ZHS16GBK
20  ;

控制文件已創(chuàng)建

SQL> alter database open resetlogs;

數(shù)據(jù)庫已更改。
   
SQL> select count(*),status from arch group by status;

  COUNT(*) ST
---------- --
      6166 no
     12332 ok

-->>沒有丟失任何數(shù)據(jù),因?yàn)槟愕臄?shù)據(jù)都已經(jīng)寫到數(shù)據(jù)文件里了    

#########################################                                                  
# [1.5.2] 有trace,活動(dòng)在線日志損壞,shutdown abort 或是非當(dāng)前的數(shù)據(jù)文件
          ,當(dāng)前在線日志文件損壞         
#########################################

####################################################
[測試1] shutdown abort,備份控制文件或者resetlog的trace,
沒有數(shù)據(jù)文件備份,采用強(qiáng)制打開數(shù)據(jù)庫的方法
####################################################
SQL> create table arch (status varchar(2));           
                                                          
表已創(chuàng)建。                                                    

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;
SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。
SQL>  select GROUP#,SEQUENCE#,archived, STATUS from v$log;

GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          2 YES ACTIVE
         2          3 NO  CURRENT
         3          1 YES INACTIVE

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> shutdown abort
ORACLE 例程已經(jīng)關(guān)閉。

SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
ORA-00313: 無法打開日志組 1 (線程 1) 的成員
ORA-00312: 聯(lián)機(jī)日志 1 線程 1: 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'
ORA-27047: 無法讀取文件的標(biāo)題塊
OSD-04006: ReadFile() 失敗, 無法讀取文件
O/S-Error: (OS 38) 到達(dá)文件結(jié)尾。


SQL> alter database clear logfile group 1;
alter database clear logfile group 1
*
ERROR 位于第 1 行:
ORA-01624: 線程1的緊急恢復(fù)需要日志1
ORA-00312: 聯(lián)機(jī)日志 1 線程 1: 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'

SQL> startup nomount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS  ARCHIVELOG
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'  SIZE 100M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
17    'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
19  CHARACTER SET ZHS16GBK
20  ;

控制文件已創(chuàng)建

SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01194: ??1?????????????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'

SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 70123 (? 02/28/2005 15:22:05 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: ?? 70123 ???? 1 ???? # 3 ???


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: ??: RECOVER ??? OPEN RESETLOGS ???????
ORA-01194: ??1?????????????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'


ORA-01112: ???????

我們看到如果是abort DOWN機(jī)的話,打開數(shù)據(jù)庫都需要應(yīng)用在線活動(dòng)日志

這時(shí)必須加隱含參數(shù)強(qiáng)制打開數(shù)據(jù)庫,并進(jìn)行導(dǎo)出,重建數(shù)據(jù)庫,導(dǎo)入業(yè)務(wù)數(shù)據(jù)

SQL> show parameter spfile                                                                               
                                                                                                         
NAME                                 TYPE        VALUE                                                   
------------------------------------ ----------- -----------------------------                           
spfile                               string      %ORACLE_HOME%\DATABASE\SPFILE                           
                                                 ORACLE_SID%.ORA                                         
                                                                                                         
                                                                                                         
SQL> create pfile='pfiletest.ora' from spfile;                                                           
                                                                                                         
文件已創(chuàng)建。                                                                                             
                                                                                                         
SQL> create pfile='c:\pfiletest.ora' from spfile;                                                        
                                                                                                         
文件已創(chuàng)建。                                                                                             
編輯c:\pfiletest.ora                                                                                     
增加三個(gè)參數(shù)                                                                                             
                                                                                                         
_allow_resetlogs_corruption=true                                                                         
_corrupted_rollback_segments=true                                                                        
_offline_rollback_segments=true                                                                          
                                                                                                         
SQL> shutdown immediate                                                                                  
ORA-01109: 數(shù)據(jù)庫未打開                                                                                  
                                                                                                         
                                                                                                         
已經(jīng)卸載數(shù)據(jù)庫。                                                                                         
ORACLE 例程已經(jīng)關(guān)閉。                                                                                    
SQL>                                                                                                     
SQL>                                                                                                     
SQL>                                                                                                     
SQL> startup pfile='c:\pfiletest.ora'                                                                    
ORACLE 例程已經(jīng)啟動(dòng)。                                                                                    
                                                                                                         
Total System Global Area  135338868 bytes                                                                
Fixed Size                   453492 bytes                                                                
Variable Size             109051904 bytes                                                                
Database Buffers           25165824 bytes                                                                
Redo Buffers                 667648 bytes                                                                
數(shù)據(jù)庫裝載完畢。                                                                                         
ORA-01589: 要打開數(shù)據(jù)庫則必須使用 RESETLOGS 或 NORESETLOGS 選項(xiàng)                                          
                                                                                                         
                                                                                                         
SQL> alter database open resetlogs;                                                                      
alter database open resetlogs                                                                            
*                                                                                                        
ERROR 位于第 1 行:                                                                                       
ORA-01092: ORACLE 例程終止。強(qiáng)行斷開連接                                                                 
                                                                                                         
                                                                                                         
SQL>                                                                                                     
SQL>                                                                                                     
SQL> exit                                                                                                
從Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production                                             
With the Partitioning, OLAP and Oracle Data Mining options                                               
JServer Release 9.2.0.1.0 - Production中斷開                                                             
                                                                                                         
C:\>sqlplus "/as sysdba"                                                                                 
                                                                                                         
SQL*Plus: Release 9.2.0.1.0 - Production on 星期五 12月 31 14:03:09 2004                                 
                                                                                                         
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.                                      
                                                                                                         
已連接到空閑例程。                                                                                       
                                                                                                         
SQL> startup pfile='c:\pfiletest.ora'                                                                    
ORACLE 例程已經(jīng)啟動(dòng)。                                                                                    
                                                                                                         
Total System Global Area  135338868 bytes                                                                
Fixed Size                   453492 bytes                                                                
Variable Size             109051904 bytes                                                                
Database Buffers           25165824 bytes                                                                
Redo Buffers                 667648 bytes                                                                
數(shù)據(jù)庫裝載完畢。                                                                                         
數(shù)據(jù)庫已經(jīng)打開。                                                                                         
SQL>                                                                                                     


####################################################
# [測試2] shutdown abort,resetlog的trace,
#         有數(shù)據(jù)文件備份,當(dāng)前在線日志損壞,控制文件損壞,有trace
####################################################
SQL> create table arch (status varchar(2)) tablespace users;

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已創(chuàng)建6166行。

SQL> /

已創(chuàng)建12332行。

SQL> /

已創(chuàng)建24664行。

SQL> /

已創(chuàng)建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          5 NO  CURRENT
         2          3 YES ACTIVE
         3          4 NO  ACTIVE

SQL> shutdown abort
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup nomount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS  ARCHIVELOG

  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE

  3      MAXLOGFILES 5

  4      MAXLOGMEMBERS 3

  5      MAXDATAFILES 100

  6      MAXINSTANCES 1

  7      MAXLOGHISTORY 226

  8  LOGFILE
  9    GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'  SIZE 100M,

10    GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'  SIZE 100M

11  -- STANDBY LOGFILE

12  DATAFILE

13    'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',

14    'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',

15    'C:\ORACLE\ORADATA\testdb\INDX01.DBF',

16    'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',

17    'C:\ORACLE\ORADATA\testdb\USERS01.DBF'

18  CHARACTER SET ZHS16GBK

19  ;
CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS  ARCHIVELOG
*
ERROR 位于第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-01192: ??????????

~~~~~~~~~~~~~~~~~~~~~~
如果是NORESETLOGS,那么他要檢查當(dāng)前的在線日志,而現(xiàn)在沒有了

SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS  ARCHIVELOG

  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE

  3      MAXLOGFILES 5

  4      MAXLOGMEMBERS 3

  5      MAXDATAFILES 100

  6      MAXINSTANCES 1

  7      MAXLOGHISTORY 226

  8  LOGFILE

  9    GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'  SIZE 100M,

10    GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'  SIZE 100M,

11    GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'  SIZE 100M

12  -- STANDBY LOGFILE

13  DATAFILE

14    'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',

15    'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',

16    'C:\ORACLE\ORADATA\testdb\INDX01.DBF',

17    'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',

18    'C:\ORACLE\ORADATA\testdb\USERS01.DBF'

19  CHARACTER SET ZHS16GBK

20  ;
CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS  ARCHIVELOG
*
ERROR 位于第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-01565: ????'C:\ORACLE\ORADATA\testdb\REDO01.LOG'???  -->>這個(gè)文件不在了
ORA-27041: ??????
OSD-04002: N^7(4r?*ND<~
O/S-Error: (OS 2) O5M3UR2;5=V86(5DND<~!#


SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS  ARCHIVELOG

  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE

  3      MAXLOGFILES 5

  4      MAXLOGMEMBERS 3

  5      MAXDATAFILES 100

  6      MAXINSTANCES 1

  7      MAXLOGHISTORY 226

  8  LOGFILE
  9    GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'  SIZE 100M,

10    GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'  SIZE 100M

11  -- STANDBY LOGFILE

12  DATAFILE

13    'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',

14    'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',

15    'C:\ORACLE\ORADATA\testdb\INDX01.DBF',

16    'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',

17    'C:\ORACLE\ORADATA\testdb\USERS01.DBF'

18  CHARACTER SET ZHS16GBK

19  ;
CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS  ARCHIVELOG
*
ERROR 位于第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-00200: ????????
ORA-00202: ????: 'C:\oracle\oradata\testdb\control01.ctl'  --這個(gè)文件不能被覆蓋,刪除三個(gè)控制文件
ORA-27086: skgfglk: ?????? - ?????
OSD-04002: N^7(4r?*ND<~
O/S-Error: (OS 5) >\>7CNJ!#


SQL> shutdown
ORA-01507: ??????


ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup nomount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS  ARCHIVELOG

  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE

  3      MAXLOGFILES 5

  4      MAXLOGMEMBERS 3

  5      MAXDATAFILES 100

  6      MAXINSTANCES 1

  7      MAXLOGHISTORY 226

  8  LOGFILE
  9    GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'  SIZE 100M,

10    GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'  SIZE 100M

11  -- STANDBY LOGFILE

12  DATAFILE

13    'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',

14    'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',

15    'C:\ORACLE\ORADATA\testdb\INDX01.DBF',

16    'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',

17    'C:\ORACLE\ORADATA\testdb\USERS01.DBF'

18  CHARACTER SET ZHS16GBK

19  ;

控制文件已創(chuàng)建

SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01589: ??????????? RESETLOGS ? NORESETLOGS ??


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01152: ?? 1 ????????????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'


SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69456 (? 03/02/2005 10:26:30 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: ?? 69456 ???? 1 ???? # 3 ???


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69616 (? 03/02/2005 16:53:52 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: ?? 69616 ???? 1 ???? # 4 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69661 (? 03/02/2005 16:53:54 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69661 ???? 1 ???? # 5 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00308: ???????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'
ORA-27041: ??????
OSD-04002: N^7(4r?*ND<~
O/S-Error: (OS 2) O5M3UR2;5=V86(5DND<~!#


SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69661 (? 03/02/2005 16:53:54 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69661 ???? 1 ???? # 5 ???


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介質(zhì)恢復(fù)已取消。
SQL> alter database open resetlogs;

數(shù)據(jù)庫已更改。

SQL> select count(*),status from arch group by status;

  COUNT(*) ST
---------- --
     98656 ok  --還原了部分?jǐn)?shù)據(jù),但不能還原在線日志中的數(shù)據(jù)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果數(shù)據(jù)庫是abort或者老的數(shù)據(jù)文件備份,那么就涉及到控制文件和數(shù)據(jù)文件不一致,需要恢復(fù),就涉及到當(dāng)前被破壞的在線日志,
,啟動(dòng)時(shí)仍然需要用在線活動(dòng)日志進(jìn)行恢復(fù).如果是正常的shutdown,而且沒有用老的數(shù)據(jù)備份,那么控制文件和數(shù)據(jù)文件是一致的,
不需要當(dāng)前在線日志.而在abort或者老的數(shù)據(jù)文件備份在這種情況下,只能用備份的datafile和備份的controlfile來做不完
全恢復(fù),都將造成數(shù)據(jù)丟失。因此多重controlfile 和 online redo log file 很重要。通常情況下是在正常運(yùn)行數(shù)據(jù)庫時(shí),
當(dāng)前在線日志被破壞的,此時(shí)馬上會(huì)數(shù)據(jù)庫不正常DOWN機(jī),也就出現(xiàn)1.5.2的情景
我們知道如果是abort關(guān)閉的,那么有些事務(wù)是不完整的或者有些事務(wù)沒有被寫到數(shù)據(jù)文件,在數(shù)據(jù)文件中有這樣的標(biāo)識(shí),這樣,用
create controlfile ... noresetlogs或者resetlogs創(chuàng)建時(shí)讀取數(shù)據(jù)文件頭信息,該文件在控制文件信息,比如結(jié)束SCN設(shè)置為無窮大)
打開時(shí)就需要當(dāng)前在線日志恢復(fù)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
####################################################
# [測試3] shutdown abort,控制文件損壞,備份控制文件,
#         當(dāng)前在線日志損壞,有數(shù)據(jù)文件備份
####################################################

還原原來備份的數(shù)據(jù)文件,控制文件
SQL> shutdown
ORA-01109: 數(shù)據(jù)庫未打開

ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL> recover database using backup controlfile ;
ORA-00279: ?? 69456 (? 03/02/2005 10:26:30 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: ?? 69456 ???? 1 ???? # 3 ???


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69572 (? 03/02/2005 17:07:43 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: ?? 69572 ???? 1 ???? # 4 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69617 (? 03/02/2005 17:07:44 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69617 ???? 1 ???? # 5 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00308: ???????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'
ORA-27041: ??????
OSD-04002: N^7(4r?*ND<~
O/S-Error: (OS 2) O5M3UR2;5=V86(5DND<~!#


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01113: ?? 1 ??????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'


SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
              68658               69617

SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69617 (? 03/02/2005 17:07:44 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69617 ???? 1 ???? # 5 ???


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介質(zhì)恢復(fù)已取消。
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
              68658               69617

SQL> alter database open resetlogs;

數(shù)據(jù)庫已更改。

SQL> select count(*),status from arch group by status;

  COUNT(*) ST
---------- --
     98656 ok


######################################################                                               
# [1.5.3]  控制文件損壞,如果trace不是最新的數(shù)據(jù)庫結(jié)構(gòu),如少了個(gè)數(shù)據(jù)文件
######################################################   

SQL> create table arch (status varchar(2));

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          2 NO  ACTIVE
         2          1 YES ACTIVE
         3          3 NO  CURRENT   
SQL> alter tablespace tools add datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf'
size 10m;

表空間已更改。

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。

模擬控制文件丟失

SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS  ARCHIVELOG
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'  SIZE 100M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
17    'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
19  CHARACTER SET ZHS16GBK
20  ;

控制文件已創(chuàng)建

SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> select name,status from v$datafile;

NAME                                         STATUS
--------------------------------------       -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF        SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF       ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF          ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF         ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF             ONLINE
C:\ORACLE\ORA92\DATABASE\MISSING00006        RECOVER --這個(gè)文件現(xiàn)在是recover狀態(tài)

已選擇6行。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我們發(fā)現(xiàn)C:\ORACLE\ORA92\DATABASE\MISSING00006并不存在,只不過是個(gè)標(biāo)記而已
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SQL> alter database rename file 'MISSING00006' to 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf';  --MISSING00006不要加路徑


數(shù)據(jù)庫已更改。

SQL> recover datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf';
完成介質(zhì)恢復(fù)。

SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf' online;

數(shù)據(jù)庫已更改。

~~~~~~~~~~~~~~~~~~~~~~~~~
如果用備份控制文件,且備份
控制文件少了新增加的兩個(gè)文件
,恢復(fù)時(shí)會(huì)提示錯(cuò)誤,我們可以
用rename來解決
~~~~~~~~~~~~~~~~~~~~~~~~~
使用備份控制文件
recover AUTOMATIC   database using backup controlfile until cancel
...      
ORA-00283: recovery session canceled due to errors                  
ORA-01244: unnamed datafile(s) added to controlfile by media recovery
ORA-01110: data file 3: '/oracle/dbs/db2.f'                         
ORA-01110: data file 2: '/oracle/dbs/db3.f'                         

~~~~~~~~~~~~~~~~~~~~
這是因?yàn)榍皾L時(shí)發(fā)現(xiàn)file#中
有兩個(gè)文件,但控制文件沒有
我們可以在v$datafile中看到
所以恢復(fù)中斷
~~~~~~~~~~~~~~~~~~~~
SELECT FILE#,NAME
FROM V$DATAFILE;

FILE#           NAME
--------------- ----------------------
1               /oracle/dbs/db1.f
2               /oracle/dbs/UNNAMED00002
3               /oracle/dbs/UNNAMED00003

這時(shí)對(duì)文件進(jìn)行改名就可以了

ALTER DATABASE RENAME FILE '/db/UNNAMED00002' TO '/oracle/dbs/db3.f';
ALTER DATABASE RENAME FILE '/db/UNNAMED00003' TO '/oracle/dbs/db2.f';

RECOVER AUTOMATIC DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL


######################################################                               
# [1.5.4] 控制文件損壞,如果trace不是最新的數(shù)據(jù)庫結(jié)構(gòu),如少了個(gè)只讀數(shù)據(jù)文件
###################################################### 


SQL> alter tablespace tools add datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf'
size 10m ;

表空間已更改。                 
SQL> alter tablespace tools read only;

表空間已更改。
   
    SQL> select name,ENABLED
  2   from v$datafile;

NAME                                            ENABLED
---------------------------------------         ----------   
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF                READ WRITE
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF                READ WRITE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF                READ WRITE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF                READ ONLY
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF                READ WRITE
C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF                READ ONLY

已選擇6行。
SQL> startup nomount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS  ARCHIVELOG
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'  SIZE 100M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
17    'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
19  CHARACTER SET ZHS16GBK
20  ;

控制文件已創(chuàng)建
SQL> select name from v$datafile;

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

C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> select name from v$datafile;

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

C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
C:\ORACLE\ORA92\DATABASE\MISSING00006  --OPEN時(shí)增加了不認(rèn)識(shí)的文件名

已選擇6行。

SQL> alter database rename file 'MISSING00006' to 'C:\ORACLE\ORA92\DATABASE\TOOL
S02.DBF';
alter database rename file 'MISSING00006' to 'C:\ORACLE\ORA92\DATABASE\TOOLS02.D
BF'
*
ERROR 位于第 1 行:
ORA-01511: 重命名日志/數(shù)據(jù)文件時(shí)出錯(cuò)
ORA-01141: 重命名數(shù)據(jù)文件 6 時(shí)出錯(cuò) - 未找到新文件
'C:\ORACLE\ORA92\DATABASE\TOOLS02.DBF'
ORA-01111: 數(shù)據(jù)文件 6 名稱未知 - 請(qǐng)重命名以更正文件
ORA-01110: 數(shù)據(jù)文件 6: 'C:\ORACLE\ORA92\DATABASE\MISSING00006'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。
*
ERROR 位于第 1 行:
ORA-01113: ?? 4 ??????
ORA-01110: ???? 4: 'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF'


SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF' offline;

數(shù)據(jù)庫已更改。

SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF' offline;
alter database datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF' offline
*
ERROR 位于第 1 行:
ORA-01516: ????????, ????????? 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF'


SQL> alter database open ;

數(shù)據(jù)庫已更改。

SQL> alter database datafile 'MISSING00006' offline;  -->>注意只讀表空間必須先offline,而且注意MISSING00006不能寫全路徑

數(shù)據(jù)庫已更改。


SQL> alter database rename file  'MISSING00006' to 'C:\ORACLE\ORADATA\TESTDB\TOO
LS02.DBF';

數(shù)據(jù)庫已更改。
SQL> alter tablespace tools online;

表空間已更改。

方法2
SQL> SHUTDOWN
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> STARTUP NOMOUNT
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS  ARCHIVELOG

  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'  SIZE 100M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
17    'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\testdb\TOOLS02.DBF',  --創(chuàng)建語句中加入該數(shù)據(jù)文件
19    'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
20  CHARACTER SET ZHS16GBK
21  ;

控制文件已創(chuàng)建

SQL> SELECT NAME FROM V$DATAFILE;

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

C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF

已選擇6行。

SQL> ALTER DATABASE OPEN;
ALTER DATABASE OPEN
*
ERROR 位于第 1 行:
ORA-01113: ?? 4 ??????
ORA-01110: ???? 4: 'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF'


SQL> RECOVER TABLESPACE TOOLS;
完成介質(zhì)恢復(fù)。
SQL> ALTER DATABASE OPEN;

數(shù)據(jù)庫已更改。


##################################             
# [1.6] 使用備份的控制文件進(jìn)行恢復(fù)
#                    
##################################

前面有很多例子


 
  
UID393 帖子3566 精華23 積分3803 流通積分3803 點(diǎn) 金錢0 O元 閱讀權(quán)限225 在線時(shí)間173 小時(shí) 注冊(cè)時(shí)間2003-1-21 最后登錄2008-8-27 查看詳細(xì)資料
 TOP
 

fly115
超級(jí)版主

個(gè)人空間 發(fā)短消息 加為好友 當(dāng)前離線  5樓 大 中 小 發(fā)表于 2005-3-19 18:03  只看該作者


################################################                                                    
# [1.7] 數(shù)據(jù)文件損壞,且沒有備份,沒有備份控制文件,
#       且其他數(shù)據(jù)文件備份中都是在該數(shù)據(jù)文件創(chuàng)建后
#       的備份
################################################                                                            

################################################                                                    
# [測試1](resetlogs前創(chuàng)建的數(shù)據(jù)文件),數(shù)據(jù)文件丟失,沒有備份,控制文件損壞,有備份控制文件,但備份控制文件后于該文件重建日期
#         使用resetlogs打開數(shù)據(jù)庫,所以沒有數(shù)據(jù)文件自創(chuàng)建以來所有的日志,
#         因?yàn)榍懊娴娜罩颈唤厝×?(所以resetlog后必須要有備份,
#         除非是resetlogs后創(chuàng)建的數(shù)據(jù)文件,可以通過create datafile來恢復(fù))
#         當(dāng)然如果有resetlogs后的控制文件及相關(guān)的數(shù)據(jù),也可以完全恢復(fù),參見1.12
#################################################
還原原來的數(shù)據(jù)文件和控制文件
然后SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。  

SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 1069386 (在 02/25/2005 15:47:59 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORA92\RDBMS\ARC00013.001
ORA-00280: 更改 1069386 對(duì)于線程 1 是按序列 # 13 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto -->>使用auto恢復(fù)也是成功
ORA-00308: 無法打開存檔日志 'C:\ORACLE\ORA92\RDBMS\ARC00013.001'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。


ORA-00308: 無法打開存檔日志 'C:\ORACLE\ORA92\RDBMS\ARC00013.001'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。


SQL> recover database using backup controlfile until cancel; -->>這個(gè)cancel是表示每次應(yīng)用一個(gè)日志時(shí)都提示一下,直到輸入cancel后結(jié)束
ORA-00279: 更改 1069386 (在 02/25/2005 15:47:59 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORA92\RDBMS\ARC00013.001
ORA-00280: 更改 1069386 對(duì)于線程 1 是按序列 # 13 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL} 
cancel  --輸入cancel恢復(fù)成功 -->>cancel選項(xiàng)允許每次前滾一個(gè)日志文件,當(dāng)需要停止恢復(fù)時(shí),輸入cancel
                                 ,在這種方式下不會(huì)自動(dòng)運(yùn)用聯(lián)機(jī)日志文件.
介質(zhì)恢復(fù)已取消。
SQL> alter database open resetlogs;

數(shù)據(jù)庫已更改。


SQL> select name,status from v$datafile;

NAME                                                         STATUS
------------------------------------------------------------ -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF                        SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF                       ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF                          ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF                         ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF                         ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF                         ONLINE

已選擇6行。
SQL> create table arch (status varchar(2)) tablespace users;

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

在數(shù)據(jù)庫打開的狀況下用ULTRAEDIT破壞文件USERS01.DBF

SQL> shutdown abort
ORACLE 例程已經(jīng)關(guān)閉。

SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF' offline;

數(shù)據(jù)庫已更改。

SQL> alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF' ;
alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF'
*
ERROR 位于第 1 行:
ORA-01181: ??5????? RESETLOGS ???????????
ORA-01110: ???? 5: 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF'

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
因?yàn)槭褂胷esetlogs打開數(shù)據(jù)庫,所以沒有數(shù)據(jù)文件自創(chuàng)建以來所有的日志,因?yàn)榍懊娴娜罩颈唤厝×?br/>(所以resetlog后必須要有備份,除非是resetlogs后創(chuàng)建的數(shù)據(jù)文件,可以通過create datafile來恢復(fù))
換句話說,因?yàn)閿?shù)據(jù)文件在創(chuàng)建的時(shí)候的創(chuàng)建時(shí)間點(diǎn)和相關(guān)信息保存在控制文件中!控制文件丟失的話
數(shù)據(jù)文件的創(chuàng)建時(shí)候的信息丟失,則數(shù)據(jù)庫無從知道要 從創(chuàng)建文件創(chuàng)建時(shí)候開始recover datafile
需要從哪個(gè)歸檔日志開始。也就無法知道該數(shù)據(jù)文件是否可以從現(xiàn)有歸檔日志恢復(fù)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

################################################                                                    
# (resetlog是在數(shù)據(jù)文件創(chuàng)建前或者控制文件包含了創(chuàng)建該數(shù)據(jù)文件的起始信息)
          那我們測試resetlogs后創(chuàng)建的數(shù)據(jù)文件被丟失,沒有備份的恢復(fù)方法
          假設(shè)前面的users01沒有破壞,數(shù)據(jù)庫被打開
################################################         
分兩種
#####################################################################################################
# [測試2] 控制文件正常,數(shù)據(jù)文件丟失,數(shù)據(jù)文件丟失沒有備份,
#         也就說丟失的數(shù)據(jù)文件創(chuàng)建在該控制文件中的,該控制文件也沒有被trace刷新,那控制文件就包含了該數(shù)據(jù)文件自創(chuàng)建以來的所有信息
#####################################################################################################

SQL> shutdown
ORA-01109: ??????

已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL>
SQL>
SQL> alter tablespace users add datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
size 25M;

表空間已更改。

SQL> create table arch (status varchar(2)) tablespace users;

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已創(chuàng)建6166行。

SQL> /

已創(chuàng)建12332行。

SQL> /

已創(chuàng)建24664行。

SQL> /

已創(chuàng)建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          5 NO  CURRENT
         2          3 YES INACTIVE
         3          4 YES ACTIVE

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

     FILE#            NAME
----------        ---------------------------------
         1        C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
         2        C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
         3        C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
         4        C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
         5        C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
         6        C:\ORACLE\ORADATA\TESTDB\USERS02.DBF
已選擇6行。

SQL> select segment_name from dba_extents where FILE_ID=6;

SEGMENT_NAME
--------------------------------------------------------------------------------
ARCH

SQL> shutdown abort
ORACLE 例程已經(jīng)關(guān)閉。

用ultraedit編輯文件USERS02.DBF

SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL> select name ,status from v$datafile;

NAME                                                STATUS
---------------------------------------             -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF                SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF                ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF                ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF                ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF                ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS02.DBF                ONLINE
已選擇6行。

SQL> alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'; --online也可以create

數(shù)據(jù)庫已更改。 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
system tablespace 的第一個(gè)datafile 是不能用 alter database create datafile 命令
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SQL> recover datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF';

完成介質(zhì)恢復(fù)。
SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> select count(*) ,status from arch group by status;

  COUNT(*) ST
---------- --
      6166 no
     98656 ok


完全恢復(fù)了

#####################################################################################################
# [測試3] 控制文件沒有丟失,數(shù)據(jù)文件丟失,數(shù)據(jù)文件丟失沒有備份
####################################################################################################
-->>那我們看看在offline情況下,recover database 會(huì)不會(huì)丟失數(shù)據(jù)

alter tablespace users add datafile 'C:\ORACLE\ORADATA\TESTDB\USERS03.DBF' size 25M;

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

     FILE# NAME
---------- --------------------------------------------------
         1 C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
         2 C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
         3 C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
         4 C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
         5 C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
         6 C:\ORACLE\ORADATA\TESTDB\USERS02.DBF
         7 C:\ORACLE\ORADATA\TESTDB\USERS03.DBF
        
SQL> select segment_name from dba_extents where FILE_ID= 7;

未選定行        
        
SQL> insert into arch select * from arch;

已創(chuàng)建104822行。

SQL> commit;

提交完成。

SQL> select segment_name from dba_extents where FILE_ID= 7;

SEGMENT_NAME
-------------------------------------------------------------------
ARCH
用ultraedit編輯文件USERS03.DBF迫害該文件
SQL> shutdown abort
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup
Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'

SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01157: ????????? 7 - ??? DBWR ????
ORA-01110: ???? 7: 'C:\ORACLE\ORADATA\TESTDB\USERS03.DBF'

SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\USERS03.DBF' offline;

數(shù)據(jù)庫已更改。

SQL> alter database create datafile  'C:\ORACLE\ORADATA\TESTDB\USERS03.DBF';

數(shù)據(jù)庫已更改。

SQL> recover datafile  'C:\ORACLE\ORADATA\TESTDB\USERS03.DBF';
完成介質(zhì)恢復(fù)。
SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\USERS03.DBF' online;

數(shù)據(jù)庫已更改。

SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> select count(*) ,status from arch group by status;

  COUNT(*) ST
---------- --
     12332 no
    197312 ok
   
    --數(shù)據(jù)沒有丟失

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
那我們?nèi)绻褂胷ecover database 方式恢復(fù)offline的數(shù)據(jù)文件呢
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SQL> alter tablespace users add datafile 'C:\ORACLE\ORADATA\TESTDB\USERS04.DBF' size 25M;

表空間已更改。

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

     FILE# NAME
---------- --------------------------------------------------
         1 C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
         2 C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
         3 C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
         4 C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
         5 C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
         6 C:\ORACLE\ORADATA\TESTDB\USERS02.DBF
         7 C:\ORACLE\ORADATA\TESTDB\USERS03.DBF
         8 C:\ORACLE\ORADATA\TESTDB\USERS04.DBF

已選擇8行。

SQL> insert into arch select * from arch;

已創(chuàng)建209644行。

SQL> select segment_name from dba_extents where FILE_ID= 8;

SEGMENT_NAME
----------------------------------------------------------------------------

ARCH

SQL> commit;

提交完成。

SQL>
SQL>
SQL> shutdown abort
ORACLE 例程已經(jīng)關(guān)閉。

刪除文件USERS04
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\USERS04.DBF' offline;

數(shù)據(jù)庫已更改。

SQL> recover datafile 'C:\ORACLE\ORADATA\TESTDB\USERS04.DBF';
ORA-00283: ??????????
ORA-01110: ???? 8: 'C:\ORACLE\ORADATA\TESTDB\USERS04.DBF'
ORA-01157: ????????? 8 - ??? DBWR ????
ORA-01110: ???? 8: 'C:\ORACLE\ORADATA\TESTDB\USERS04.DBF'


SQL> alter database create datafile  'C:\ORACLE\ORADATA\TESTDB\USERS04.DBF';

數(shù)據(jù)庫已更改。

SQL> select name,status from v$datafile;

NAME                                               STATUS
-------------------------------------------------- -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF              SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF             ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF                ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF               ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF               ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS02.DBF               ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS03.DBF               ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS04.DBF               RECOVER

已選擇8行。

SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\USERS04.DBF' offline;

數(shù)據(jù)庫已更改。

SQL> recover database;   --我們看到offline的數(shù)據(jù)文件恢復(fù)無效,到后來還是要在online之后再恢復(fù)一把
完成介質(zhì)恢復(fù)。
SQL>  select count(*) ,status from arch group by status;
select count(*) ,status from arch group by status
                              *
ERROR 位于第 1 行:
ORA-01219: ??????: ???????????


SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\USERS04.DBF' online;

數(shù)據(jù)庫已更改。

SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01113: ?? 8 ??????
ORA-01110: ???? 8: 'C:\ORACLE\ORADATA\TESTDB\USERS04.DBF'


SQL> recover database;
完成介質(zhì)恢復(fù)。
SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> select count(*) ,status from arch group by status;

  COUNT(*) ST
---------- --
     24664 no
    394624 ok
   
#####################################################################################################
# [測試4] 控制文件丟失,數(shù)據(jù)文件丟失,沒有備份,有trace,那我們看看為什么trace會(huì)造成控制文件的頭中數(shù)據(jù)文件創(chuàng)建的信息被修改
# 無法實(shí)現(xiàn)create datafile功能
#################################################################
SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> alter tablespace users add datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
size 25m;

表空間已更改。

SQL> alter database backup controlfile to trace;

數(shù)據(jù)庫已更改。

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup nomount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "TESTDB" NORESETLOGS  ARCHIVELOG
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\TESTDB\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'  SIZE 100M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\TESTDB\INDX01.DBF',
17    'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF',
19    'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
20  CHARACTER SET ZHS16GBK
21  ;

控制文件已創(chuàng)建

SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
SQL> alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF' ;
alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
*
ERROR 位于第 1 行:
ORA-01178: 文件 6 在最后一個(gè) CREATE CONTROLFILE 之前創(chuàng)建,無法重新創(chuàng)建
ORA-01110: 數(shù)據(jù)文件 6: 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
所以執(zhí)行了create controlfile后一定要先做個(gè)全備份
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#####################################################################################################
# [測試5]控制文件沒有創(chuàng)建數(shù)據(jù)文件的起始信息,使用不同trace的方法
#####################################################################################################
SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL>
SQL>
SQL>
SQL>
SQL> col name format a50
SQL> select name ,status from v$datafile;

NAME                                               STATUS
-------------------------------------------------- -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF              SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF             ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF                ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF               ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF               ONLINE

SQL> alter tablespace users add datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
size 25m;

表空間已更改。

SQL> create table arch (status varchar(2)) tablespace users;

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已創(chuàng)建6166行。

SQL> /

已創(chuàng)建12332行。

SQL> /

已創(chuàng)建24664行。

SQL> /

已創(chuàng)建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          5 NO  CURRENT
         2          3 YES ACTIVE
         3          4 YES ACTIVE

SQL> select name ,status from v$datafile;

NAME                                               STATUS
-------------------------------------------------- -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF              SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF             ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF                ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF               ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF               ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS02.DBF               ONLINE

已選擇6行。

SQL> alter database backup controlfile to 'C:\oracle\oradata\testdb\controlfile
ak.ctl';  --該控制文件包含了USERS02的頭信息

數(shù)據(jù)庫已更改。

SQL> alter database backup controlfile to trace;

數(shù)據(jù)庫已更改。
此時(shí)用ultraedit破壞文件USERS02

SQL> shutdown abort
ORACLE 例程已經(jīng)關(guān)閉。
SQL> exit
從Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production中斷開

刪除3個(gè)控制文件


SQL> startup nomount;
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "TESTDB" NORESETLOGS  ARCHIVELOG
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\TESTDB\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'  SIZE 100M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\TESTDB\INDX01.DBF',
17    'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF',
19    'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
20  CHARACTER SET ZHS16GBK
21  ;
CREATE CONTROLFILE REUSE DATABASE "TESTDB" NORESETLOGS  ARCHIVELOG
*
ERROR 位于第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-01565: ????'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'???
ORA-27047: ??????????
OSD-04006: ReadFile() J'0\, N^7(6AH!ND<~
O/S-Error: (OS 38) 5=4oND<~=aN2!#


SQL> CREATE CONTROLFILE REUSE DATABASE "TESTDB" NORESETLOGS  ARCHIVELOG
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\TESTDB\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'  SIZE 100M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\TESTDB\INDX01.DBF',
17    'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF'
19  CHARACTER SET ZHS16GBK
20  ;

控制文件已創(chuàng)建

SQL> alter database mount
  2  ;
alter database mount
*
ERROR 位于第 1 行:
ORA-01100: ??????


SQL> shutdown
ORA-01109: ??????


已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
SQL> col name format a60
SQL> select name ,status from v$datafile;

NAME                                                         STATUS
------------------------------------------------------------ -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF                        SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF                       RECOVER
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF                          RECOVER
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF                         RECOVER
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF                         RECOVER

SQL> alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF';
alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
*
ERROR 位于第 1 行:
ORA-01516: 不存在的日志文件, 數(shù)據(jù)文件或臨時(shí)文件
'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'


SQL> alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF' as 'C
:\ORACLE\ORADATA\TESTDB\USERS02.DBF' reuse ;
alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF' as 'C:\ORA
CLE\ORADATA\TESTDB\USERS02.DBF' reuse
*
ERROR 位于第 1 行:
ORA-01516: 不存在的日志文件, 數(shù)據(jù)文件或臨時(shí)文件
'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'


SQL> recover database;
完成介質(zhì)恢復(fù)。
SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> select name,status from v$datafile;

NAME                                                         STATUS
------------------------------------------------------------ -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF                        SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF                       ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF                          ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF                         ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF                         ONLINE
C:\ORACLE\ORA92\DATABASE\MISSING00006                        RECOVER

已選擇6行。

SQL> alter database rename file 'MISSING00006' to 'C:\ORACLE\ORADATA\TESTDB\USER
S02.DBF';
alter database rename file 'MISSING00006' to 'C:\ORACLE\ORADATA\TESTDB\USERS02.D
BF'
*
ERROR 位于第 1 行:
ORA-01511: 重命名日志/數(shù)據(jù)文件時(shí)出錯(cuò)
ORA-01141: 重命名數(shù)據(jù)文件 6 時(shí)出錯(cuò) - 未找到新文件
'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
ORA-01111: 數(shù)據(jù)文件 6 名稱未知 - 請(qǐng)重命名以更正文件
ORA-01110: 數(shù)據(jù)文件 6: 'C:\ORACLE\ORA92\DATABASE\MISSING00006'
ORA-27047: 無法讀取文件的標(biāo)題塊
OSD-04006: ReadFile() 失敗, 無法讀取文件
O/S-Error: (OS 38) 到達(dá)文件結(jié)尾。


SQL> alter database datafile 'MISSING00006' offline;

數(shù)據(jù)庫已更改。

SQL> alter database rename file 'MISSING00006' to 'C:\ORACLE\ORADATA\TESTDB\USER
S02.DBF';
alter database rename file 'MISSING00006' to 'C:\ORACLE\ORADATA\TESTDB\USERS02.D
BF'
*
ERROR 位于第 1 行:
ORA-01511: 重命名日志/數(shù)據(jù)文件時(shí)出錯(cuò)
ORA-01141: 重命名數(shù)據(jù)文件 6 時(shí)出錯(cuò) - 未找到新文件
'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
ORA-01111: 數(shù)據(jù)文件 6 名稱未知 - 請(qǐng)重命名以更正文件
ORA-01110: 數(shù)據(jù)文件 6: 'C:\ORACLE\ORA92\DATABASE\MISSING00006'
ORA-27047: 無法讀取文件的標(biāo)題塊
OSD-04006: ReadFile() 失敗, 無法讀取文件
O/S-Error: (OS 38) 到達(dá)文件結(jié)尾。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
數(shù)據(jù)庫打開了,但數(shù)據(jù)文件USERS02無法恢復(fù),因?yàn)榭刂莆募o法記錄該文件創(chuàng)建時(shí)的信息,所以也無法實(shí)現(xiàn)rename file 'MISSING00006'
我們?cè)賮眚?yàn)證一下控制文件信息與數(shù)據(jù)文件頭信息的關(guān)系
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

###################################################################################
# [測試6]  數(shù)據(jù)文件損壞,且沒有備份,控制文件使用備份控制文件,且控制文件是在該數(shù)據(jù)文件創(chuàng)建后的控制文件
###################################################################################

那我們用剛開始的備份的控制文件可不可以呢?

SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL>
SQL>
SQL>
SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> create table arch (status varchar(2)) tablespace users;

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已創(chuàng)建6166行。

SQL> /

已創(chuàng)建12332行。

SQL> /

已創(chuàng)建24664行。

SQL> /

已創(chuàng)建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          5 NO  CURRENT
         2          3 YES ACTIVE
         3          4 NO  ACTIVE

SQL>
SQL> alter tablespace tools add datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
ize 10m;

表空間已更改。

SQL> insert into arch select 'af' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL>
SQL>
SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> alter database backup controlfile to 'c:\control01.ctl';

數(shù)據(jù)庫已更改。

SQL> insert into arch select 'af' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> exit
從Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production中斷開

C:\Documents and Settings\lifeng.fang>
C:\Documents and Settings\lifeng.fang>
C:\Documents and Settings\lifeng.fang>sqlplus "sys/sunsdl as sysdba"

SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 3月 2 18:17:11 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

已連接到空閑例程。

SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL>
SQL>
SQL> alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF';

數(shù)據(jù)庫已更改。

SQL> recover database using backup controlfile ;
ORA-00279: ?? 69456 (? 03/02/2005 10:26:30 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: ?? 69456 ???? 1 ???? # 3 ???


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69563 (? 03/02/2005 18:12:22 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: ?? 69563 ???? 1 ???? # 4 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69606 (? 03/02/2005 18:12:22 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69606 ???? 1 ???? # 5 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69672 (? 03/02/2005 18:13:24 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_6.DBF
ORA-00280: ?? 69672 ???? 1 ???? # 6 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69834 (? 03/02/2005 18:15:40 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_7.DBF
ORA-00280: ?? 69834 ???? 1 ???? # 7 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_6.DBF'


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00308: ???????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_7.DBF'
ORA-27041: ??????
OSD-04002: N^7(4r?*ND<~
O/S-Error: (OS 2) O5M3UR2;5=V86(5DND<~!#


SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69834 (? 03/02/2005 18:15:40 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_7.DBF
ORA-00280: ?? 69834 ???? 1 ???? # 7 ???


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介質(zhì)恢復(fù)已取消。
SQL> alter database open resetlogs;

數(shù)據(jù)庫已更改。
SQL> select count(*),status from arch group by status;

  COUNT(*) ST
---------- --
     12332 af
      6166 no
     98656 ok
#############################################################################################        
[1.8] 數(shù)據(jù)文件損壞,且沒有備份,控制文件使用備份控制文件,且控制文件是在該數(shù)據(jù)文件創(chuàng)建前的控制文件 
    參見1.7的測試1
#############################################################################################   
###################################################################################
# [1.9]  數(shù)據(jù)文件損壞,且沒有備份,控制文件使用備份控制文件,且控制文件是在該數(shù)據(jù)文件創(chuàng)建后的控制文件
###################################################################################
SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL>
SQL>
SQL>
SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> create table arch (status varchar(2)) tablespace users;

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已創(chuàng)建6166行。

SQL> /

已創(chuàng)建12332行。

SQL> /

已創(chuàng)建24664行。

SQL> /

已創(chuàng)建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          5 NO  CURRENT
         2          3 YES ACTIVE
         3          4 NO  ACTIVE

SQL>
SQL> alter tablespace tools add datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
ize 10m;

表空間已更改。

SQL> insert into arch select 'af' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> alter system switch logfile; --一定要?dú)w檔

系統(tǒng)已更改。

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL>
SQL>
SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> alter database backup controlfile to 'c:\control01.ctl';  --該控制文件有數(shù)據(jù)文件頭信息

數(shù)據(jù)庫已更改。

SQL> insert into arch select 'af' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> exit
從Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production中斷開

C:\Documents and Settings\lifeng.fang>
C:\Documents and Settings\lifeng.fang>

模擬控制文件破壞,刪除控制文件,還原備份的控制文件,還原老的所有的數(shù)據(jù)文件,出了users02.dbf

C:\Documents and Settings\lifeng.fang>sqlplus "sys/sunsdl as sysdba"

SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 3月 2 18:17:11 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

已連接到空閑例程。

SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL>
SQL>
SQL> alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF';

數(shù)據(jù)庫已更改。

SQL> recover database using backup controlfile ;
ORA-00279: ?? 69456 (? 03/02/2005 10:26:30 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: ?? 69456 ???? 1 ???? # 3 ???


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69563 (? 03/02/2005 18:12:22 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: ?? 69563 ???? 1 ???? # 4 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69606 (? 03/02/2005 18:12:22 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69606 ???? 1 ???? # 5 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69672 (? 03/02/2005 18:13:24 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_6.DBF
ORA-00280: ?? 69672 ???? 1 ???? # 6 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69834 (? 03/02/2005 18:15:40 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_7.DBF
ORA-00280: ?? 69834 ???? 1 ???? # 7 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_6.DBF'


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00308: ???????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_7.DBF'
ORA-27041: ??????
OSD-04002: N^7(4r?*ND<~
O/S-Error: (OS 2) O5M3UR2;5=V86(5DND<~!#


SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69834 (? 03/02/2005 18:15:40 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_7.DBF
ORA-00280: ?? 69834 ???? 1 ???? # 7 ???


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介質(zhì)恢復(fù)已取消。
SQL> alter database open resetlogs;

數(shù)據(jù)庫已更改。 
SQL> select count(*),status from arch group by status;

  COUNT(*) ST
---------- --
     12332 af
      6166 no
     98656 ok
##############################################################################################    
# [1.10] 數(shù)據(jù)文件損壞,且沒有備份,沒有備份控制文件,且其他數(shù)據(jù)文件備份中都是在該數(shù)據(jù)文件創(chuàng)建后的備份
##############################################################################################      


##############################################################################################
# [1.11] 損壞單個(gè)控制文件
#        將好的控制文件覆蓋損壞的控制文件
##############################################################################################

##############################################################################################
# [1.12] 當(dāng)前控制文件做為備份控制文件恢復(fù),在當(dāng)前在線日志中有業(yè)務(wù)數(shù)據(jù)時(shí)的恢復(fù)    (通常沒有太大意義,只是想做一下resetlogs)
##############################################################################################
SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL>
SQL>
SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> create table arch (status varchar(2)) tablespace users;

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已創(chuàng)建6166行。

SQL> /

已創(chuàng)建12332行。

SQL> /

已創(chuàng)建24664行。

SQL> /

已創(chuàng)建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          5 NO  CURRENT
         2          3 YES ACTIVE
         3          4 NO  ACTIVE

SQL>
SQL> select count(*),status from arch group by status;

  COUNT(*) ST
---------- --
      6166 no
     98656 ok

SQL> shutdown abort
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL> recover database using backup controlfile;
ORA-00279: ?? 69399 (? 03/01/2005 15:58:22 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: ?? 69399 ???? 1 ???? # 4 ???


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: ?? 69444 (? 03/01/2005 15:58:23 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69444 ???? 1 ???? # 5 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'


ORA-00308: ???????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'
ORA-27041: ??????
OSD-04002: N^7(4r?*ND<~
O/S-Error: (OS 2) O5M3UR2;5=V86(5DND<~!#


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01113: ?? 1 ??????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'


SQL> shutdown
ORA-01109: ??????


已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'


SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69444 (? 03/01/2005 15:58:23 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69444 ???? 1 ???? # 5 ???


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: ??: RECOVER ??? OPEN RESETLOGS ???????
ORA-01194: ??1?????????????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'


ORA-01112: ???????


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01194: ??1?????????????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'


SQL> shutdown
ORA-01109: ??????


已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。

這里我們看到是shutdown abort的,所以需要在線日志恢復(fù),但是使用備份控制文件恢復(fù)則是不應(yīng)用在線日志的

如果不是shutdown abort,那么就可以打開,因?yàn)閿?shù)據(jù)文件一直是完整的
 
  
UID393 帖子3566 精華23 積分3803 流通積分3803 點(diǎn) 金錢0 O元 閱讀權(quán)限225 在線時(shí)間173 小時(shí) 注冊(cè)時(shí)間2003-1-21 最后登錄2008-8-27 查看詳細(xì)資料
 TOP
 

fly115
超級(jí)版主

個(gè)人空間 發(fā)短消息 加為好友 當(dāng)前離線  6樓 大 中 小 發(fā)表于 2005-3-19 18:04  只看該作者


##############################################################################          
# [1.13] 在resetlogs前的RMAN備份如何應(yīng)用到resetlogs后的 
##############################################################################          
                                                          
   


SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> select count(*) from arch;
select count(*) from arch
                     *
ERROR 位于第 1 行:
ORA-00942: ???????


SQL> create table arch (status varchar(2)) tablespace users;

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已創(chuàng)建6166行。

SQL> /

已創(chuàng)建12332行。

SQL> /

已創(chuàng)建24664行。


已創(chuàng)建24664行。

SQL> /

已創(chuàng)建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> /

系統(tǒng)已更改。

SQL> /

系統(tǒng)已更改。

SQL> /

系統(tǒng)已更改。

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。

-->>模擬一個(gè)resetlogs
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
SQL> recover database until cancel;
完成介質(zhì)恢復(fù)。  -->>這里我們后面可以注意到
SQL> alter database open resetlogs;

數(shù)據(jù)庫已更改。

SQL> select count(*),status from arch group by status;

  COUNT(*) ST
---------- --
      6166 no
     98656 ok

SQL> insert into arch select 'af' from dba_objects;

已創(chuàng)建6166行。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> archive log list
數(shù)據(jù)庫日志模式            存檔模式
自動(dòng)存檔             啟用
存檔終點(diǎn)            C:\oracle\oradata\testdb\archive
最早的概要日志序列     1
下一個(gè)存檔日志序列   2
當(dāng)前日志序列           2
SQL> shutdown
ORA-01097: 無法在事務(wù)處理過程中關(guān)閉 - 首先提交或返回
SQL> commit;

提交完成。

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。

-->>此時(shí)模擬刪除了users01.dbf
我們沒有resetlogs后的備份,想把resetlogs前備份的數(shù)據(jù)文件恢復(fù)數(shù)據(jù)庫到resetlogs后的狀態(tài)

關(guān)鍵步驟.還原resetlogs前備份的數(shù)據(jù)文件和控制文件,不包括在線日志(我們后面可以看到在線日志包括了SCN 69628 - 69459)
SQL> select resetlogs_change# - 1 from v$database;

RESETLOGS_CHANGE#-1
-------------------
              68658

SQL> recover database using backup controlfile until change 69639;
ORA-00279: 更改 69257 (在 02/28/2005 11:08:18 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: 更改 69257 對(duì)于線程 1 是按序列 # 3 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 69582 (在 03/02/2005 10:28:34 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: 更改 69582 對(duì)于線程 1 是按序列 # 4 進(jìn)行的
ORA-00278: 此恢復(fù)不再需要日志文件 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 69628 (在 03/02/2005 10:28:35 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69628 對(duì)于線程 1 是按序列 # 5 進(jìn)行的
ORA-00278: 此恢復(fù)不再需要日志文件 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00308: 無法打開存檔日志 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。


SQL> recover database using backup controlfile until change 69639;
ORA-00279: 更改 69628 (在 03/02/2005 10:28:35 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69628 對(duì)于線程 1 是按序列 # 5 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介質(zhì)恢復(fù)已取消。
SQL> select CONTROLFILE_CHANGE# from v$database;

CONTROLFILE_CHANGE#
-------------------
              69628
             
我們看到?jīng)]有恢復(fù)到69639,因?yàn)槲疫€原的時(shí)候沒有把resetlogs前的在線日志備份給還原,所以沒法前滾69628到69639             

SQL> shutdown
ORA-01109: 數(shù)據(jù)庫未打開

已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。


-->>這里還原resetlogs后的控制文件
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes


SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE# CONTROLFILE_CHANGE#
----------------- -------------------
            69639               69795


SQL> recover database;
ORA-00283: 恢復(fù)會(huì)話因錯(cuò)誤而取消
ORA-01190: 控制文件或數(shù)據(jù)文件1來自于最后一個(gè) RESETLOGS 之前
ORA-01110: 數(shù)據(jù)文件 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'


那我們只能不完全恢復(fù)
SQL> recover database until cancel;
ORA-00279: ?? 69452 (? 03/01/2005 17:45:23 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_9.DBF
ORA-00280: ?? 69452 ???? 1 ???? # 9 ???


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介質(zhì)恢復(fù)已取消。
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69452 (? 03/01/2005 17:45:23 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_9.DBF
ORA-00280: ?? 69452 ???? 1 ???? # 9 ???


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介質(zhì)恢復(fù)已取消。
SQL> select count(*),status from arch group by status;
select count(*),status from arch group by status
                            *
ERROR 位于第 1 行:
ORA-01219: ??????: ???????????


SQL> alter database open resetlogs;

數(shù)據(jù)庫已更改。

SQL> select count(*),status from arch group by status;

  COUNT(*) ST
---------- --
      6166 no
     98656 ok  --我們沒有看到af狀態(tài)的

我們看到這里需要在線日志恢復(fù),無法越過resetlogs恢復(fù)

好那我們?cè)陉P(guān)鍵步驟那步把在線日志也還原的話是否可以越過69628到69639 一直到69795
   

SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。
SQL> select count(*) from arch;
select count(*) from arch
                     *
ERROR 位于第 1 行:
ORA-00942: 表或視圖不存在


SQL> create table arch (status varchar(2)) tablespace users;

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已創(chuàng)建6166行。

SQL> /

已創(chuàng)建12332行。

SQL> /

已創(chuàng)建24664行。

SQL> /

已創(chuàng)建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          5 NO  CURRENT
         2          3 YES ACTIVE
         3          4 NO  ACTIVE

SQL>
SQL>
SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL>
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
SQL> recover database until cancel;
完成介質(zhì)恢復(fù)。
SQL> shutdown immediate
ORA-01109: 數(shù)據(jù)庫未打開


已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
SQL> select resetlogs_change#,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE# CONTROLFILE_CHANGE#
----------------- -------------------
            68659               69884

SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01589: 要打開數(shù)據(jù)庫則必須使用 RESETLOGS 或 NORESETLOGS 選項(xiàng)


SQL> alter database open resetlogs;

數(shù)據(jù)庫已更改。

SQL> select resetlogs_change#,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE# CONTROLFILE_CHANGE# 
----------------- -------------------
            69889               69932

SQL> insert into arch select 'af' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
SQL>
SQL>
SQL> recover database using backup controlfile until change 69888;     -->>這里我們看到until change 69888與RESETLOGS_CHANGE#接上頭了,就是以為我們有備份的在線日志
ORA-00279: 更改 69888 (在 03/02/2005 11:11:40 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69888 對(duì)于線程 1 是按序列 # 5 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00308: 無法打開存檔日志 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。


SQL> select resetlogs_change#,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE# CONTROLFILE_CHANGE#
----------------- -------------------
            68659               69888

SQL>
SQL> shutdown
ORA-01109: 數(shù)據(jù)庫未打開


已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。

-->>這里我們將resetlogs后的控制文件備份還原(不包括resetlogs后的在線日志)
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
SQL> select resetlogs_change#,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE# CONTROLFILE_CHANGE#
----------------- -------------------
            69889               69932

SQL> recover database ;
ORA-00283: 恢復(fù)會(huì)話因錯(cuò)誤而取消
ORA-00314: 日志 1 (線程 1),預(yù)計(jì)序號(hào) 1 與 5 不匹配
ORA-00312: 聯(lián)機(jī)日志 1 線程 1: 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'  -->>我們這里看到恢復(fù)仍然到69889截止,而沒有恢復(fù)到69932

原因就是我們r(jià)esetlogs后的在線日志也要做備份.
#################################################################
#[測試1] 那我們?cè)诳纯磖esetlogs前的數(shù)據(jù)文件控制文件和在線日志都做了備份,
#        然后resetlogs后的控制文件在線日志都做備份的情況下,是不是能越過resetlogs
#################################################################

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。
SQL> create table arch (status varchar(2)) tablespace users;

表已創(chuàng)建。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已創(chuàng)建6166行。

SQL> /

已創(chuàng)建12332行。

SQL> /

已創(chuàng)建24664行。

SQL> /

已創(chuàng)建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          5 NO  CURRENT
         2          3 YES ACTIVE
         3          4 NO  ACTIVE

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL>

SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。

-->>模擬resetlogs
SQL> recover database until cancel;
完成介質(zhì)恢復(fù)。
SQL> shutdown
ORA-01109: 數(shù)據(jù)庫未打開


已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。

-->>這里我們對(duì)所有的數(shù)據(jù)文件控制文件和在線日志進(jìn)行備份
SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
ORA-01589: 要打開數(shù)據(jù)庫則必須使用 RESETLOGS 或 NORESETLOGS 選項(xiàng)


SQL> alter database open resetlogs;

數(shù)據(jù)庫已更改。

SQL> select resetlogs_change# -1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE# CONTROLFILE_CHANGE#
----------------- -------------------
            69808               69850

SQL> insert into arch select 'af' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。

--這時(shí)我們備份控制文件和在線日志,因?yàn)槲覀冃枰?9808 到 69850的數(shù)據(jù)
-->>這時(shí)我們把users01.dbf刪除
-->>還原resetlogs前的所有數(shù)據(jù)文件控制文件和在線日志
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
SQL>
SQL>  select resetlogs_change#,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE# CONTROLFILE_CHANGE#
----------------- -------------------
            68659               69804

SQL> recover database using backup controlfile until change 69808;
ORA-00279: 更改 69808 (在 03/02/2005 11:35:33 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69808 對(duì)于線程 1 是按序列 # 5 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00308: 無法打開存檔日志 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。


SQL> recover database using backup controlfile until change 69808;
ORA-00279: 更改 69808 (在 03/02/2005 11:35:33 生成) 對(duì)于線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69808 對(duì)于線程 1 是按序列 # 5 進(jìn)行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介質(zhì)恢復(fù)已取消。
SQL>  select resetlogs_change#,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE# CONTROLFILE_CHANGE#   --已經(jīng)應(yīng)用到了69808
----------------- -------------------
            68659               69808

SQL>
SQL>
SQL> shutdown
ORA-01109: 數(shù)據(jù)庫未打開

-->>好這時(shí)我們就需要應(yīng)用69808 到 69850的數(shù)據(jù)
-->>這時(shí)我們要想恢復(fù)69808 到 69850的數(shù)據(jù)就必須要resetlogs后的控制文件,
我們從前面的CONTROLFILE_CHANGE#和ESETLOGS_CHANGE#就可以看的出來,只有他才能進(jìn)行完全恢復(fù)到69850

-->>還原resetlogs后的控制文件和在線日志文件
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
SQL>  select resetlogs_change#,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE# CONTROLFILE_CHANGE#
----------------- -------------------
            69809               69850

SQL> recover database;
完成介質(zhì)恢復(fù)。

SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> select count(*) ,status from arch group by status;

  COUNT(*) ST
---------- --
      6166 af
      6166 no
     98656 ok
     --這一次是真的越過resetlogs正確的完全恢復(fù)了
            
-->>注意切換歸檔是不是的序列號(hào)是不是當(dāng)前序列號(hào)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
必須使用TEMPORARY(一些數(shù)據(jù)文件對(duì)檢查點(diǎn)不可用)或IMMEDIATE(所有數(shù)據(jù)文件對(duì)
檢查點(diǎn)不可用)選項(xiàng)。在表空間再現(xiàn)聯(lián)機(jī)之前,那些數(shù)據(jù)文件需要被恢復(fù)(數(shù)據(jù)文件恢復(fù)或
表空間恢復(fù))。如果文件修復(fù)之后,重新聯(lián)機(jī)之前發(fā)生了數(shù)據(jù)庫崩潰,而該崩潰又要求執(zhí)行不
完全的介質(zhì)恢復(fù)的話,其后用來恢復(fù)數(shù)據(jù)庫的RESETLOGS選項(xiàng)將致使該脫機(jī)表空間無效?;?br/>復(fù)該表空間的唯一方法是將以前的備份還原到另外一臺(tái)機(jī)器上,用存檔重作日志實(shí)施恢復(fù),
直到數(shù)據(jù)庫失敗前為止,這樣做顯然會(huì)浪費(fèi)大量的時(shí)間和資源。因此在恢復(fù)之前,應(yīng)當(dāng)切記
檢查v$datafile確定所有的關(guān)鍵表空間是聯(lián)機(jī)的。但是,允許只讀表空間的數(shù)據(jù)文件或通過
NORMAL選項(xiàng)脫機(jī)的表空間,保持不變(因?yàn)樗鼈円呀?jīng)是一致的了,不希望它們隸屬于恢復(fù)
操作)。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


###############################################################################################
#                                  [2]. 非歸檔模式下的恢復(fù)(rman和常規(guī)恢復(fù))                    #
###############################################################################################
~~~~~~~~~~~~~~~~~~
準(zhǔn)備工作
~~~~~~~~~~~~~~~~~~ 


SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
SQL> alter database noarchivelog;

數(shù)據(jù)庫已更改。

SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL>
SQL> archive log list
數(shù)據(jù)庫日志模式             非存檔模式
自動(dòng)存檔             啟用
存檔終點(diǎn)            C:\oracle\oradata\testdb\archive
最早的概要日志序列     0
當(dāng)前日志序列           1
SQL>
SQL>
SQL>
SQL>
SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup -->>是spfile啟動(dòng)的,所以不需要修改初始化參數(shù)就已經(jīng)啟動(dòng)了非存檔模式
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。
SQL> archive log list
數(shù)據(jù)庫日志模式             非存檔模式
自動(dòng)存檔             啟用
存檔終點(diǎn)            C:\oracle\oradata\testdb\archive
最早的概要日志序列     0
當(dāng)前日志序列           1
SQL>


###############################################
# [測試1] 數(shù)據(jù)庫在非歸檔模式,數(shù)據(jù)庫打開
###############################################
SQL> startup -->>是spfile啟動(dòng)的,所以不需要修改初始化參數(shù)就已經(jīng)啟動(dòng)了非存檔模式
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。
SQL> archive log list
數(shù)據(jù)庫日志模式             非存檔模式
自動(dòng)存檔             啟用
存檔終點(diǎn)            C:\oracle\oradata\testdb\archive
最早的概要日志序列     0
當(dāng)前日志序列           1
SQL>

C:\Documents and Settings\lifeng.fang>rman nocatalog target "sys/sunsdl"

恢復(fù)管理器: 版本9.2.0.1.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.

連接到目標(biāo)數(shù)據(jù)庫: TESTDB (DBID=2334768642)
正在使用目標(biāo)數(shù)據(jù)庫控制文件替代恢復(fù)目錄

RMAN> show all;

RMAN 配置參數(shù)為:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'C:\ORACLE\ORA92\DATABASE\SNCFTESTDB.ORA'
; # default

RMAN> backup database include current controlfile;

啟動(dòng) backup 于 03-3月 -05
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=16 devtype=DISK
通道 ORA_DISK_1: 正在啟動(dòng) full 數(shù)據(jù)文件備份集
通道 ORA_DISK_1: 正在指定備份集中的數(shù)據(jù)文件
在備份集中包含當(dāng)前的 SPFILE
備份集中包括當(dāng)前控制文件
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 03/03/2005 09:46:
04
ORA-19602: 無法按 NOARCHIVELOG 模式備份或復(fù)制活動(dòng)文件

~~~~~~~~~~~~~~~~~~~~~~~~~~
我們看到如果是NOARCHIVELOG 模式,
數(shù)據(jù)庫如果打開則不能做RMAN備份
~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我們可以用RMAN拷貝控制文件
RMAN> copy CURRENT CONTROLFILE TO 'c:\cf.cpy';

啟動(dòng) copy 于 03-3月 -05
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=16 devtype=DISK
通道 ORA_DISK_1: 已復(fù)制當(dāng)前的控制文件
輸出文件名=C:\CF.CPY
完成 copy 于 03-3月 -05
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
###############################################
# [測試2] 數(shù)據(jù)庫在非歸檔模式,數(shù)據(jù)庫MOUNT,備份整個(gè)數(shù)據(jù)庫
###############################################
SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
SQL>

RMAN> backup database include current controlfile;

啟動(dòng) backup 于 03-3月 -05
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=14 devtype=DISK
通道 ORA_DISK_1: 正在啟動(dòng) full 數(shù)據(jù)文件備份集
通道 ORA_DISK_1: 正在指定備份集中的數(shù)據(jù)文件
在備份集中包含當(dāng)前的 SPFILE
備份集中包括當(dāng)前控制文件
輸入數(shù)據(jù)文件 fno=00001 name=C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
輸入數(shù)據(jù)文件 fno=00002 name=C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
輸入數(shù)據(jù)文件 fno=00003 name=C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
輸入數(shù)據(jù)文件 fno=00005 name=C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
輸入數(shù)據(jù)文件 fno=00004 name=C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
輸入數(shù)據(jù)文件 fno=00006 name=C:\ORACLE\ORADATA\TESTDB\USERS02.DBF
通道 ORA_DISK_1: 正在啟動(dòng)段 1 于 03-3月 -05
通道 ORA_DISK_1: 已完成段 1 于 03-3月 -05
段 handle=C:\ORACLE\ORA92\DATABASE\02GECED4_1_1 comment=NONE
通道 ORA_DISK_1: 備份集已完成, 經(jīng)過時(shí)間:00:00:27
完成 backup 于 03-3月 -05

RMAN> backup tablespace users;

啟動(dòng) backup 于 03-3月 -05
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在啟動(dòng) full 數(shù)據(jù)文件備份集
通道 ORA_DISK_1: 正在指定備份集中的數(shù)據(jù)文件
輸入數(shù)據(jù)文件 fno=00005 name=C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
通道 ORA_DISK_1: 正在啟動(dòng)段 1 于 03-3月 -05
通道 ORA_DISK_1: 已完成段 1 于 03-3月 -05
段 handle=C:\ORACLE\ORA92\DATABASE\03GECEG5_1_1 comment=NONE
通道 ORA_DISK_1: 備份集已完成, 經(jīng)過時(shí)間:00:00:01
完成 backup 于 03-3月 -05

###############################################
# [測試3] 數(shù)據(jù)庫在非歸檔模式,數(shù)據(jù)庫MOUNT,備份表空間
###############################################
RMAN> backup tablespace users;

啟動(dòng) backup 于 03-3月 -05
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在啟動(dòng) full 數(shù)據(jù)文件備份集
通道 ORA_DISK_1: 正在指定備份集中的數(shù)據(jù)文件
輸入數(shù)據(jù)文件 fno=00005 name=C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
通道 ORA_DISK_1: 正在啟動(dòng)段 1 于 03-3月 -05
通道 ORA_DISK_1: 已完成段 1 于 03-3月 -05
段 handle=C:\ORACLE\ORA92\DATABASE\03GECEG5_1_1 comment=NONE
通道 ORA_DISK_1: 備份集已完成, 經(jīng)過時(shí)間:00:00:01
完成 backup 于 03-3月 -05

~~~~~~~~~~~~~~~~~~~~~~~~
注意表空間是邏輯概念,常規(guī)備份,
必須open數(shù)據(jù)庫后才能看到表空間
但是RMAN可以在mount下備份表空間
~~~~~~~~~~~~~~~~~~~~~~~~

###############################################
# [測試4] 數(shù)據(jù)庫在非歸檔模式,數(shù)據(jù)庫MOUNT,備份的表空間是常規(guī)OFFLINE的
###############################################
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果使用TEMPORARY選項(xiàng)對(duì)表空間進(jìn)行脫機(jī),則數(shù)據(jù)庫仍然會(huì)對(duì)該表空間
的所有文件進(jìn)行一個(gè)檢查點(diǎn),其中如果有個(gè)文件IO損壞,那么他對(duì)該文件
不會(huì)執(zhí)行檢查點(diǎn),但是normal方式脫機(jī)的話就會(huì)強(qiáng)制寫檢查點(diǎn),所以如果
io物理損壞了,那么NORMAL方式可能就脫機(jī)不了了.假設(shè)表空間兩個(gè)文件
T1,T2,如果T1寫錯(cuò)誤而被脫機(jī).如果使用temporary選項(xiàng),則ORACLE在使T1
脫機(jī)前設(shè)檢查點(diǎn)檢查文件D2.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。
SQL> alter  tablespace users offline immediate;
alter  tablespace users offline immediate
*
ERROR 位于第 1 行:
ORA-01145: 除非啟用了介質(zhì)恢復(fù),否則不允許緊急脫機(jī)


SQL> alter  tablespace users offline TEMPORARY;

表空間已更改。

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。


RMAN> backup tablespace users;

啟動(dòng) backup 于 03-3月 -05
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=14 devtype=DISK
通道 ORA_DISK_1: 正在啟動(dòng) full 數(shù)據(jù)文件備份集
通道 ORA_DISK_1: 正在指定備份集中的數(shù)據(jù)文件
輸入數(shù)據(jù)文件 fno=00005 name=C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
通道 ORA_DISK_1: 正在啟動(dòng)段 1 于 03-3月 -05
通道 ORA_DISK_1: 已完成段 1 于 03-3月 -05
段 handle=C:\ORACLE\ORA92\DATABASE\09GECGJ0_1_1 comment=NONE
通道 ORA_DISK_1: 備份集已完成, 經(jīng)過時(shí)間:00:00:03
完成 backup 于 03-3月 -05

SQL> alter database open;

數(shù)據(jù)庫已更改。

SQL> insert into arch select 'af' from dba_objects;
insert into arch select 'af' from dba_objects
            *
ERROR 位于第 1 行:
ORA-00376: 此時(shí)無法讀取文件 5
ORA-01110: 數(shù)據(jù)文件 5: 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF'


SQL> alter  tablespace users online;

表空間已更改。

SQL> insert into arch select 'af' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> alter  tablespace users offline TEMPORARY;

表空間已更改。

SQL> shutdown
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
數(shù)據(jù)庫裝載完畢。

RMAN> backup tablespace users;

啟動(dòng) backup 于 03-3月 -05
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=14 devtype=DISK
通道 ORA_DISK_1: 正在啟動(dòng) full 數(shù)據(jù)文件備份集
通道 ORA_DISK_1: 正在指定備份集中的數(shù)據(jù)文件
輸入數(shù)據(jù)文件 fno=00005 name=C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
通道 ORA_DISK_1: 正在啟動(dòng)段 1 于 03-3月 -05
通道 ORA_DISK_1: 已完成段 1 于 03-3月 -05
段 handle=C:\ORACLE\ORA92\DATABASE\0AGECGNM_1_1 comment=NONE
通道 ORA_DISK_1: 備份集已完成, 經(jīng)過時(shí)間:00:00:03
完成 backup 于 03-3月 -05


###############################################
# [測試5] 數(shù)據(jù)庫在非歸檔模式,數(shù)據(jù)庫MOUNT,shutdown abort,備份的表空間
###############################################

SQL> alter  tablespace users online;

表空間已更改。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'ok' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已創(chuàng)建123320行。

SQL> /

已創(chuàng)建246640行。

SQL> /

已創(chuàng)建493280行。

SQL> /

已創(chuàng)建986560行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統(tǒng)已更改。

SQL> insert into arch select 'no' from dba_objects;

已創(chuàng)建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          2 NO  ACTIVE
         2          1 NO  ACTIVE
         3          3 NO  CURRENT

SQL> shutdown abort
ORACLE 例程已經(jīng)關(guān)閉。
SQL>
SQL>
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
 

看完了這篇文章,相信你對(duì)“RMAN如何實(shí)現(xiàn)備份與恢復(fù)”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI