国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

RESETLOGS后沒有備份情況下的數據恢復(1)

2024-07-21 02:40:29
字體:
來源:轉載
供稿:網友
媒體恢復分完全恢復和不完全恢復。不完全恢復可以恢復到指定的時刻或系統更改號,但不完全恢復之后剩余日志文件就不可用,必須重置日志序列號,用RESETLOGS選項打開數據庫,此后數據庫變成一個新形體,為了將來的恢復,必須重做一致備份。而且,RESETLOGS之前的備份已不可用。 但是,很可能在RESETLOGS后沒有做數據庫的一致備份,而數據庫又不熟悉RESETLOGS之前的備份,此時該如何恢復RESETLOGS后的數據呢?雖說本文提供的技術能實現用RESETLOGS之前的備份恢復到RESETLOGS之后某一時刻的數據,但這也是拯救措施,筆者強烈建議讀者要做RESETLOGS之后的一致數據庫備份。

技術的理論基礎



Oracle僅根據系統更改號(SCN)進行恢復操作,所有數據文件必須恢復到同一時間點,并在該點后未作任何改動,才能打開數據庫。數據庫的SCN是唯一的,并隨著數據庫生存期間的操作事務增加而增加(可能不連續)。SCN的值永遠不會為0,除非重新創建數據庫。SCN的序列的遞增性不隨數據庫的任何操作而改變,即使是RESETLOGS也如此。RESETLOGS清除所有聯機日志文件中未應用的重做記錄,RESETLOGS只重置日志文件的序列號為1,但對SCN無影響,SCN仍按原序列遞增。

在控制文件中保存resetlogs SCN和計數器,以便唯一地標識用RESETLOGS選項執行的每一次打開數據庫的操作。這個值被寫進每個數據文件頭以及重做日志文件。假如重做日志文件的日志序列號與Oracle的要求值不相符,則在恢復中不能應用重做日志文件。執行不完全恢復后,數據庫要求日志序列號為1的日志文件,所以原來的日志序列中剩余的日志文件將不可用。RESETLOGS操作創建數據庫的新形體,即一個擁有從1開始的新的日志序列號流的數據庫。

根據以上理論,SCN為順序數據流,在數據庫存在期間始終遞增,而日志文件序列流也是遞增序列,只不過會因RESETLOGS而重置,但日志文件序列流中的SCN序列流卻保持遞增不便。因此可以用RESETLOGS之前的歸檔日志流和RESETLOGS之后的歸檔日志流來連接和延續SCN序列流,這樣就實現了用RESETLOGS之前的備份恢復RESETLOGS之后的數據。前提是保證兩股日志流(RESETLOGS之前的歸檔日志流和RESETLOGS之后的歸檔日志流)完整,并且有相應兩股日志流的控制文件。

即使能夠拯救數據,也要滿足下列條件

(1)Oracle版本等于或高于7.3.3。

(2)能夠成功實現RESETLOGS之前的不完全媒體恢復。

(3)RESETLOGS后沒有提供一致備份。

(4)RESETLOGS之前提供一致性備份(冷或熱)。

(5)必須備份RESETLOGS之前和之后的控制文件。

(6)分別保存RESETLOGS之前和之后的歸檔日志文件到不同位置,提供用于恢復的所有歸檔日志,并保證日志可用。

建議



(一)強烈建議RESETLOGS之后要備份數據庫。

(二)在RESETLOGS前保證數據庫以前備份的數據安全,在創建RESETLOGS之后的一個一致性備份之前,一定不可刪掉在RESETLOGS前創建的一致數據庫備份。如不是為了空間需要,建議永久保留RESETLOGS前創建的一致數據庫備份,包括數據文件、控制文件和歸檔日志。

(三)在RESETLOGS之后立即創建控制文件備份,并把歸檔日志單獨存放。

(四)在以RESETLOGS方式打開數據庫前,備份在恢復中用過的所有歸檔日志和聯機重做日志。

(五)進行RESETLOGS后,備份alter.log文件,因為該文件保存著point-in-time恢復后記錄的change#(系統更改號SCN)。

(六)把RESETLOGS之前和之后的歸檔日志文件保存到不同位置,用于恢復。因為可能存在如下情形:假如RESETLOGS之前和之后的歸檔日志文件保存到相同位置,而RESETLOGS之后的歸檔日志文件序列號從1開始,隨著日志切換的不斷發生,新的日志序列號要增長到與RESETLOGS之前日志序列號相同的時候,那時RESETLOGS之前的歸檔日志文件將被新日志文件覆蓋,從而使RESETLOGS之前的日志序列出現空洞。

實例演示的具體過程

系統環境

● 軟件環境:Windows Server 2000、Oracle EnterPRise Edition 9.0.1、數據庫SID:TEST

● 數據庫文件的目錄(文件)及意義:

f:/test 在線數據文件和歸檔日志文件

f:/test1、f:/test2、f:/test3 聯機重做日志和在線控制文件

f:/cool/coola 時刻A點的一致性冷備份數據文件目錄

f:/cool/archa_b 時刻A、B兩點間的歸檔日志備份目錄

f:/cool/archb_c 時刻B、C兩點間的歸檔日志備份目錄

f:/cool/ctl_a/ctl.ctl 時刻A點的控制文件備份

f:/cool/ctl_c/ctl.ctl 時刻C點的控制文件備份操作過程

本例中首先建立試驗用戶demo和表空間demo,當前時刻記為A點,用戶demo建立表a后,插入數據1、2、3,之后的時刻記為B點,接著插入數據4、5、6后的時刻記為B'點,接著模擬丟失B'點的數據文件,從A點恢復到B點,用RESETLOGS選項打開數據庫后,再向表a插入數據7、8、9,之后的時刻記為C點。此時模擬丟失C點的數據文件,用A點的備份和A、B之間及B、C之間的歸檔日志加上A、C兩點的控制文件將數據庫恢復到C點。下列步驟中的第17步最為要害,具體步驟如下:

(1)預備工作:建立表空間demo和臨時用戶demo。


create tablespace demo datafile 'f:/test/demo.dbf' size 5M;

create user demo identified by demo

default tablespace demo quota unlimited on demo

temporary tablespace temp;

grant connect,alter system to demo;

alter user demo account unlock;

(2)以SYSDBA身份查看歸檔日志并關閉數據庫。

SQL> archive log list

Database log mode Archive Mode

Automatic archival   Enabled

Archive destination  f:/test

Oldest online log sequence   18

Next log sequence to archive 19

Current log sequence  19

SQL> shutdown;

(3)當前時刻記為A點,做數據庫的一致冷備份。

copy f:/test/*.dbf f:/cool/coola

copy f:/test1/ctl.ctl f:/cool/ctl_a

(4)以試驗用戶demo登錄,并插入數據到表a中。

create table a (i number);

commit;

insert into a values(1);

commit;

alter system switch logfile;

insert into a values(2);

commit;

alter system switch logfile;

insert into a values(3);

commit;

alter system switch logfile;

(5)記錄當前時刻為B點。

SQL> select to_char(sysdate,'DD-MONTH-YYYY HH24:MI:SS') "DATE" from dual;

DATE

--------------------------

04-OCTOBER -2002 09:18:52

(6)繼續由用戶demo向表a插入數據。

insert into a values(4);

commit;

alter system switch logfile;

insert into a values(5);

commit;

alter system switch logfile;

insert into a values(6);

commit;

alter system switch logfile;

alter system switch logfile;

alter system switch logfile; 媒體恢復分完全恢復和不完全恢復。不完全恢復可以恢復到指定的時刻或系統更改號,但不完全恢復之后剩余日志文件就不可用,必須重置日志序列號,用RESETLOGS選項打開數據庫,此后數據庫變成一個新形體,為了將來的恢復,必須重做一致備份。而且,RESETLOGS之前的備份已不可用。 但是,很可能在RESETLOGS后沒有做數據庫的一致備份,而數據庫又不熟悉RESETLOGS之前的備份,此時該如何恢復RESETLOGS后的數據呢?雖說本文提供的技術能實現用RESETLOGS之前的備份恢復到RESETLOGS之后某一時刻的數據,但這也是拯救措施,筆者強烈建議讀者要做RESETLOGS之后的一致數據庫備份。

技術的理論基礎



Oracle僅根據系統更改號(SCN)進行恢復操作,所有數據文件必須恢復到同一時間點,并在該點后未作任何改動,才能打開數據庫。數據庫的SCN是唯一的,并隨著數據庫生存期間的操作事務增加而增加(可能不連續)。SCN的值永遠不會為0,除非重新創建數據庫。SCN的序列的遞增性不隨數據庫的任何操作而改變,即使是RESETLOGS也如此。RESETLOGS清除所有聯機日志文件中未應用的重做記錄,RESETLOGS只重置日志文件的序列號為1,但對SCN無影響,SCN仍按原序列遞增。

在控制文件中保存resetlogs SCN和計數器,以便唯一地標識用RESETLOGS選項執行的每一次打開數據庫的操作。這個值被寫進每個數據文件頭以及重做日志文件。假如重做日志文件的日志序列號與Oracle的要求值不相符,則在恢復中不能應用重做日志文件。執行不完全恢復后,數據庫要求日志序列號為1的日志文件,所以原來的日志序列中剩余的日志文件將不可用。RESETLOGS操作創建數據庫的新形體,即一個擁有從1開始的新的日志序列號流的數據庫。

根據以上理論,SCN為順序數據流,在數據庫存在期間始終遞增,而日志文件序列流也是遞增序列,只不過會因RESETLOGS而重置,但日志文件序列流中的SCN序列流卻保持遞增不便。因此可以用RESETLOGS之前的歸檔日志流和RESETLOGS之后的歸檔日志流來連接和延續SCN序列流,這樣就實現了用RESETLOGS之前的備份恢復RESETLOGS之后的數據。前提是保證兩股日志流(RESETLOGS之前的歸檔日志流和RESETLOGS之后的歸檔日志流)完整,并且有相應兩股日志流的控制文件。

即使能夠拯救數據,也要滿足下列條件

(1)Oracle版本等于或高于7.3.3。

(2)能夠成功實現RESETLOGS之前的不完全媒體恢復。

(3)RESETLOGS后沒有提供一致備份。

(4)RESETLOGS之前提供一致性備份(冷或熱)。

(5)必須備份RESETLOGS之前和之后的控制文件。

(6)分別保存RESETLOGS之前和之后的歸檔日志文件到不同位置,提供用于恢復的所有歸檔日志,并保證日志可用。

建議



(一)強烈建議RESETLOGS之后要備份數據庫。

(二)在RESETLOGS前保證數據庫以前備份的數據安全,在創建RESETLOGS之后的一個一致性備份之前,一定不可刪掉在RESETLOGS前創建的一致數據庫備份。如不是為了空間需要,建議永久保留RESETLOGS前創建的一致數據庫備份,包括數據文件、控制文件和歸檔日志。

(三)在RESETLOGS之后立即創建控制文件備份,并把歸檔日志單獨存放。

(四)在以RESETLOGS方式打開數據庫前,備份在恢復中用過的所有歸檔日志和聯機重做日志。

(五)進行RESETLOGS后,備份alter.log文件,因為該文件保存著point-in-time恢復后記錄的change#(系統更改號SCN)。

(六)把RESETLOGS之前和之后的歸檔日志文件保存到不同位置,用于恢復。因為可能存在如下情形:假如RESETLOGS之前和之后的歸檔日志文件保存到相同位置,而RESETLOGS之后的歸檔日志文件序列號從1開始,隨著日志切換的不斷發生,新的日志序列號要增長到與RESETLOGS之前日志序列號相同的時候,那時RESETLOGS之前的歸檔日志文件將被新日志文件覆蓋,從而使RESETLOGS之前的日志序列出現空洞。

實例演示的具體過程

系統環境

● 軟件環境:Windows Server 2000、Oracle Enterprise Edition 9.0.1、數據庫SID:TEST

● 數據庫文件的目錄(文件)及意義:

f:/test 在線數據文件和歸檔日志文件

f:/test1、f:/test2、f:/test3 聯機重做日志和在線控制文件

f:/cool/coola 時刻A點的一致性冷備份數據文件目錄

f:/cool/archa_b 時刻A、B兩點間的歸檔日志備份目錄

f:/cool/archb_c 時刻B、C兩點間的歸檔日志備份目錄

f:/cool/ctl_a/ctl.ctl 時刻A點的控制文件備份

f:/cool/ctl_c/ctl.ctl 時刻C點的控制文件備份操作過程

本例中首先建立試驗用戶demo和表空間demo,當前時刻記為A點,用戶demo建立表a后,插入數據1、2、3,之后的時刻記為B點,接著插入數據4、5、6后的時刻記為B'點,接著模擬丟失B'點的數據文件,從A點恢復到B點,用RESETLOGS選項打開數據庫后,再向表a插入數據7、8、9,之后的時刻記為C點。此時模擬丟失C點的數據文件,用A點的備份和A、B之間及B、C之間的歸檔日志加上A、C兩點的控制文件將數據庫恢復到C點。下列步驟中的第17步最為要害,具體步驟如下:

(1)預備工作:建立表空間demo和臨時用戶demo。


create tablespace demo datafile 'f:/test/demo.dbf' size 5M;

create user demo identified by demo

default tablespace demo quota unlimited on demo

temporary tablespace temp;

grant connect,alter system to demo;

alter user demo account unlock;

(2)以SYSDBA身份查看歸檔日志并關閉數據庫。

SQL> archive log list

Database log mode Archive Mode

Automatic archival   Enabled

Archive destination  f:/test

Oldest online log sequence   18

Next log sequence to archive 19

Current log sequence  19

SQL> shutdown;

(3)當前時刻記為A點,做數據庫的一致冷備份。

copy f:/test/*.dbf f:/cool/coola

copy f:/test1/ctl.ctl f:/cool/ctl_a

(4)以試驗用戶demo登錄,并插入數據到表a中。

create table a (i number);

commit;

insert into a values(1);

commit;

alter system switch logfile;

insert into a values(2);

commit;

alter system switch logfile;

insert into a values(3);

commit;

alter system switch logfile;

(5)記錄當前時刻為B點。

SQL> select to_char(sysdate,'DD-MONTH-YYYY HH24:MI:SS') "DATE" from dual;

DATE

--------------------------

04-OCTOBER -2002 09:18:52

(6)繼續由用戶demo向表a插入數據。

insert into a values(4);

commit;

alter system switch logfile;

insert into a values(5);

commit;

alter system switch logfile;

insert into a values(6);

commit;

alter system switch logfile;

alter system switch logfile;

alter system switch logfile;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 财经| 定远县| 伊宁县| 鹤壁市| 高清| 灵石县| 石嘴山市| 普格县| 襄城县| 陈巴尔虎旗| 海丰县| 揭西县| 手游| 呼玛县| 泸水县| 寿阳县| 交口县| 邹平县| 灌阳县| 泗水县| 米林县| 望谟县| 成都市| 沧源| 历史| 常山县| 靖远县| 东丽区| 龙川县| 祁连县| 宣恩县| 清河县| 湖北省| 疏勒县| 九江县| 新乡市| 正蓝旗| 孟连| 阳江市| 繁峙县| 涿州市|