您好,登錄后才能下訂單哦!
小編給大家分享一下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è)資訊頻道,感謝各位的閱讀!
免責(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)容。