国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
【循序漸進(jìn)Oracle】Oracle的物理備份(上)

 

編輯手記:備份重于一切,我們必需知道,系統(tǒng)總是要崩潰的,沒有有效的備份只是等哪一天死!今天你備份了嗎?我們一起來回顧Oracle的物理備份,本文摘自《循序漸進(jìn)Oracle》

邏輯備份:Oracle的邏輯備份與恢復(fù)

正文:

物理備份是指針對Oracle的文件進(jìn)行的備份,這與邏輯備份針對數(shù)據(jù)的備份不同。在物理備份中,數(shù)據(jù)庫使用的重要文件都需要進(jìn)行針對性的備份,這些文件包括數(shù)據(jù)文件(DATA FILE)、控制文件(CONTROL FILE)、聯(lián)機(jī)日志文件(REDO LOG)、歸檔日志文件(ARCHIVE LOG)和參數(shù)文件及口令文件等(可選)。

需要注意的是,臨時(shí)文件因?yàn)椴淮鎯?chǔ)永久數(shù)據(jù),所以可以不必備份,在恢復(fù)后可以重新創(chuàng)建臨時(shí)表空間的臨時(shí)文件。根據(jù)備份方式的不同,物理備份又可以分為冷備份和熱備份。

冷備份

冷備份是指關(guān)閉數(shù)據(jù)庫的備份,又稱脫機(jī)備份或一致性備份,在冷備份開始前數(shù)據(jù)庫必須徹底關(guān)閉。關(guān)閉操作必須用帶有normal、transaction、immediate選項(xiàng)的shutdown來執(zhí)行。

冷備份通常適用于業(yè)務(wù)具有階段性的企業(yè),比如白天運(yùn)行、夜間可以停機(jī)維護(hù)的企業(yè),冷備份操作簡單,但是需要關(guān)閉數(shù)據(jù)庫,對于需要24×7提供服務(wù)的企業(yè)是不適用的。

在進(jìn)行冷備份之前通常需要做一些準(zhǔn)備工作,例如,確定數(shù)據(jù)文件的名稱及路徑、確定日志文件的名稱及路徑等。很多數(shù)據(jù)庫出于空間或負(fù)載分擔(dān)的考慮,會(huì)將文件分散存儲(chǔ)到不同的硬盤或分區(qū),所以在備份時(shí)一定要注意包含所有的需要備份文件。我曾經(jīng)見過有的公司在恢復(fù)時(shí)才發(fā)現(xiàn)冷備份漏掉了部分文件,這種錯(cuò)誤在工作中是應(yīng)該避免的。

以下幾個(gè)查詢在備份之前應(yīng)當(dāng)執(zhí)行,以確認(rèn)數(shù)據(jù)庫文件及存儲(chǔ)路徑:

SQL> select name from v$datafile;

NAME

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

/opt/oracle/oradata/eygle/system01.dbf

/opt/oracle/oradata/eygle/undotbs01.dbf

/opt/oracle/oradata/eygle/sysaux01.dbf

/data1/oradata/systemfile/eygle01.dbf

SQL> select member from v$logfile;

MEMBER

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

/opt/oracle/oradata/eygle/redo01.log

/opt/oracle/oradata/eygle/redo02.log

/opt/oracle/oradata/eygle/redo03.log

SQL> select name from v$controlfile;

NAME

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

/opt/oracle/oradata/eygle/control01.ctl

/opt/oracle/oradata/eygle/control02.ctl

/opt/oracle/oradata/eygle/control03.ctl

冷備份的通常步驟是:

  1. 正常關(guān)閉數(shù)據(jù)庫;

  2. 備份所有重要的文件到備份目錄;

  3. 完成備份后啟動(dòng)數(shù)據(jù)庫。

為了恢復(fù)方便,冷備份應(yīng)該包含所有的數(shù)據(jù)文件、控制文件和日志文件,這樣當(dāng)需要采用冷備份進(jìn)行恢復(fù)時(shí),只需要將所有文件恢復(fù)到原有位置,就可以啟動(dòng)數(shù)據(jù)庫了。

熱備份

由于冷備份需要關(guān)閉數(shù)據(jù)庫,所以已經(jīng)很少有企業(yè)能夠采用這種方式進(jìn)行備份了,當(dāng)數(shù)據(jù)庫運(yùn)行在歸檔模式下時(shí),Oracle允許用戶對數(shù)據(jù)庫進(jìn)行聯(lián)機(jī)熱備份。

熱備份又可以簡單的分為兩種:用戶管理的熱備份(user-managed backup and recovery,)和Oracle管理的熱備份(Recovery Manager-RMAN)。

  • 用戶管理的熱備份是指用戶通過將表空間置于熱備份模式下,然后通過操作系統(tǒng)工具對文件進(jìn)行復(fù)制備份,備份完成后再結(jié)束表空間的備份模式。

  • Oracle管理的熱備份通常指通過RMAN對數(shù)據(jù)庫進(jìn)行聯(lián)機(jī)熱備份,RMAN執(zhí)行的熱備份不需要將表空間置于熱備模式,從而可以減少對于數(shù)據(jù)庫的影響獲得性能提升。另外RMAN的備份信息可以通過控制文件或者額外的目錄數(shù)據(jù)庫進(jìn)行管理,功能強(qiáng)大但是相對復(fù)雜。

下面分別來介紹一下用戶管理的備份和RMAN

1.用戶管理的熱備份

用戶管理的熱備份通常包含以下幾個(gè)步驟:

(1)在備份之前需要顯示的發(fā)出Begin Backup的命令;

(2)在操作系統(tǒng)拷貝備份文件(包括數(shù)據(jù)文件、控制文件等);

(3)發(fā)出end backup命令通知數(shù)據(jù)庫完成備份;

(4)備份歸檔日志文件。

常見的備份過程如下,這里以一個(gè)表空間的備份為例:

alter tablespace system begin backup;

host copy E:\ORACLE\ORADATA\EYGLE\SYSTEM01.DBFe:\oracle\orabak\SYSTEM01.DBF

alter tablespace system end backup;

當(dāng)備份被激活時(shí),可以通過v$backup視圖來檢查表空間的備份情況:

     FILE# STATUS        CHANGE# TIME

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

        1 NOT ACTIVE           0

        2 NOT ACTIVE           0

        3 NOT ACTIVE           0

        4 NOT ACTIVE           0

SQL> alter tablespace system begin backup;

Tablespace altered.

SQL> select * from v$backup;

FILE# STATUS   CHANGE# TIME

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

   1 ACTIVE         1.8995E+102007-02-12 15:54:52

    2 NOT ACTIVE           0

    3 NOT ACTIVE           0

    4 NOT ACTIVE           0

需要注意的是,當(dāng)表空間置于熱備模式下,表空間數(shù)據(jù)文件頭的檢查點(diǎn)會(huì)被凍結(jié),當(dāng)熱備份完成,發(fā)出end backup命令后,表空間數(shù)據(jù)文件檢查點(diǎn)被重新同步,恢復(fù)更新:

SQL> alter tablespace system end backup;

Tablespace altered.

SQL> select * from v$backup;

 FILE# STATUS          CHANGE# TIME

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

        1 NOT ACTIVE         1.8995E+102007-02-12 15:54:52

        2 NOT ACTIVE                  0

        3 NOT ACTIVE                  0

        4 NOT ACTIVE                  0

備份的起止時(shí)間會(huì)在警告日志文件中記錄:

Mon Feb 12 15:54:52 2007

alter tablespace system begin backup

Mon Feb 12 15:54:52 2007

Completed: alter tablespace system beginbackup

Mon Feb 12 16:13:00 2007

alter tablespace system end backup

Mon Feb 12 16:13:00 2007

Completed: alter tablespace system end backup

這里需要提醒的是,如果遺忘了end backup命令將會(huì)導(dǎo)致數(shù)據(jù)庫問題,所以使用這種方式備份時(shí)需要確認(rèn)備份正確完成。

2、額外Redo的生成

在使用Begin Backup開始備份時(shí),數(shù)據(jù)庫會(huì)產(chǎn)生了比平常更多的日志,也就會(huì)生成更多的歸檔。這是因?yàn)樵跓醾浞萜陂g,Oracle為了解決SPLIT BLOCK的問題,需要在日志文件中記錄修改的行所在的數(shù)據(jù)塊的前鏡像(image),而不僅僅是修改信息。

為了理解這段話,還需要簡單介紹一下SPLIT BLOCK的概念。

我們知道,Oracle的數(shù)據(jù)塊是由多個(gè)操作系統(tǒng)塊組成。通常UNIX文件系統(tǒng)使用512bytes的數(shù)據(jù)塊,而Oracle使用8kB的db_block_size。當(dāng)熱備份數(shù)據(jù)文件的時(shí)候,使用文件系統(tǒng)的命令工具(通常是cp工具)拷貝文件,并且使用文件系統(tǒng)的blocksize讀取數(shù)據(jù)文件。

在這種情況下,可能出現(xiàn)如下狀況:當(dāng)拷貝數(shù)據(jù)文件的同時(shí),數(shù)據(jù)庫正好向數(shù)據(jù)文件寫數(shù)據(jù)。這就使得拷貝的文件中包含這樣的database block,它的一部分OS block來自于數(shù)據(jù)庫向數(shù)據(jù)文件(這個(gè)db block)寫操作之前,另一部分來自于寫操作之后。對于數(shù)據(jù)庫來說,這個(gè)databaseblock本身并不一致,而是一個(gè)分裂塊(SPLIT BLOCK)。這樣的分裂塊在恢復(fù)時(shí)并不可用(會(huì)提示corrupted block)。

所以,在熱備狀態(tài)下,對于變更的數(shù)據(jù),Oracle需要在日志中記錄整個(gè)變化的數(shù)據(jù)塊的前鏡像。這樣如果在恢復(fù)的過程中,數(shù)據(jù)文件中出現(xiàn)分裂塊,Oracle就可以通過日志文件中的數(shù)據(jù)塊的前鏡像覆蓋備份,以完成恢復(fù)。

來看一下測試,首先通過SYS用戶連接數(shù)據(jù)庫,確認(rèn)SCOTT用戶連接信息及日志信息:

創(chuàng)建一個(gè)視圖用于簡化查詢:

CREATE OR REPLACEVIEW redo_size

AS

SELECT VALUE

FROM v$mystat, v$statname

WHERE v$mystat.statistic# =v$statname.statistic#

AND v$statname.NAME = 'redo size';

然后看一下正常情況下的日志生成:

SQL> select *from redo_size;

VALUE

----------

11972

SQL> update empset sal=10 where empno=7788;

1 row updated.

SQL> commit;

Commit complete.

SQL> select *from redo_size;

VALUE

----------

12484

SQL> select 12484-11972 from dual;

12484-11972

-----------

512

正常的更新操作,大約生成了512 byte的日志。然后用SYS用戶,將EMP表所在的SYSTEM表空間置于熱備份模式:

SQL> altertablespace system begin backup;

Tablespace altered.

使用SCOTT用戶進(jìn)行同樣操作:

SQL> select *from redo_size;

VALUE

----------

8788

SQL> update empset sal=10 where empno=7788;

1 row updated.

SQL> commit;

Commit complete.

SQL> select *from redo_size;

VALUE

----------

17516

SQL> select 17516- 8788 from dual;

17516-8788

----------

8728

注意到這一次,生成了8728 byte的重做,這個(gè)日志量較上次正常模式下大約多出了一個(gè)Block的數(shù)量。然后用SYS用戶轉(zhuǎn)儲(chǔ)日志文件,看一下多出來的日志到底是什么內(nèi)容:

SQL> @gettrcname

TRACE_FILE_NAME

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

/opt/oracle9/admin/testora9/udump/testora9_ora_4692.trc

SQL> ALTER SYSTEMDUMP LOGFILE '/opt/oracle9/oradata/testora9/redo01.log';

System altered.

檢查相關(guān)信息,注意到較常規(guī)狀態(tài)下,增加了“Log block image redo entry”部分,這一部分就是在熱備份時(shí)產(chǎn)生的額外日志信息:

REDO RECORD -Thread:1 RBA: 0x000085.00000020.0010 LEN: 0x2018 VLD: 0x01

SCN: 0x0000.0f8b260c SUBSCN:  103/19/2006 20:24:14

CHANGE #1 TYP:3 CLS:1 AFN:1 DBA:0x0040a482SCN:0x0000.0f8b2471SEQ:  1 OP:18.1

Log block image redo entry

Dump of memory from0x0000000103DB7020 to 0x0000000103DB9008

103DB7020 01080015 000070F3 0F8B2470 00004000 [......p...$p..@.]

103DB8FE0 C11F2C00 0803C24A4605534D 49544805  [..,....JF.SMITH.]

103DB8FF0 434C4552 4B03C250 030777B4 0C110101 [CLERK..P..w.....]

103DB9000 0102C209 FF02C115                    [........]       

Dump of memory from0x0000000103DB9008 to 0x0000000103DB9009

103DB9000                   06401F3A                   [.@.:]   

REDO RECORD -Thread:1 RBA: 0x000085.00000030.0128 LEN: 0x01b0 VLD: 0x01

SCN: 0x0000.0f8b260c SUBSCN:  103/19/2006 20:24:14

CHANGE #1 TYP:0CLS:33 AFN:2 DBA:0x00800089 SCN:0x0000.0f8b25c9 SEQ: 1 OP:5.2

...

KDO Op code: URP rowdependencies Disabled

  xtype: XA bdba: 0x0040a482  hdba: 0x0040a481

itli: 1  ispac: 0 maxfr: 4863

tabn: 0 slot: 7(0x7)flag: 0x2c lock: 1ckix: 0

ncol: 8 nnew: 1 size:0

col  5: [ 2] c1 0b

CHANGE #4 MEDIARECOVERY MARKER SCN:0x0000.00000000 SEQ: 0 OP:5.20

session number   = 12

serial  number  = 28

transaction name =

在Oracle數(shù)據(jù)庫內(nèi)部,存在一個(gè)隱含參數(shù)控制這個(gè)行為:

這個(gè)參數(shù)缺省值為TRUE,設(shè)置在熱備份期間允許在redo中記錄數(shù)據(jù)塊信息,如果數(shù)據(jù)庫塊大小等于操作系統(tǒng)塊大小,則可以設(shè)置該參數(shù)為False,減少熱備期間數(shù)據(jù)庫的負(fù)擔(dān)(這種情況極為少見)。

分裂塊產(chǎn)生的根本原因在于備份過程中引入了操作系統(tǒng)工具(如cp工具等),操作系統(tǒng)工具無法保證Oracle數(shù)據(jù)塊的一致性。如果使用RMAN備份,由于Rman可以通過反復(fù)讀取獲得一致的Blok,從而可以避免SPLIT Block的生成,所以不會(huì)產(chǎn)生額外的REDO。所以建議在備份時(shí)(特別是繁忙的數(shù)據(jù)庫),應(yīng)該盡量采用RMAN備份。

3、定制自適應(yīng)的熱備份腳本 

由于數(shù)據(jù)庫經(jīng)常處于變化之中,如表空間文件的增減、新表空間的創(chuàng)建等,所以熱備份的腳本不能一成不變,如果想讓備份充分的自動(dòng)化,必須定制自適應(yīng)的備份腳本。以下是在生產(chǎn)庫中經(jīng)過實(shí)踐的腳本范例(來自UNIX平臺(tái))供大家參考(為了簡潔,省略了腳本中部分環(huán)境變量設(shè)置等內(nèi)容,詳細(xì)腳本可以從本書代碼包中獲得)。

首先看看crontab中的定義:

$ crontab -l

30 2 * * 0-6/opt/oracle/tools/hotbackup/startbak.sh

整個(gè)備份是通過一個(gè)叫做startbak.sh的腳本啟動(dòng)的,這個(gè)腳本的主要內(nèi)容如下:

……

week=`date+"%w"`

today=`date+"%m%d"`

ps -ef|grepdbw0_$ORACLE_SID |grep -v grep >>/dev/null

if [ $? -eq 0 ];then

        if [ $week = "1" ] ; then

                $SH_HOME/genbaksql.sh       

        else

                $SH_HOME/dobakarch.sh

        fi

fi

腳本根據(jù)時(shí)間進(jìn)行判斷,如果是周一則執(zhí)行全備份,否則執(zhí)行歸檔日志備份,全備份由腳本genbaksql.sh調(diào)用并執(zhí)行,這個(gè)腳本就是根據(jù)數(shù)據(jù)庫信息自動(dòng)生成自適應(yīng)備份腳本的過程,shell腳本包含一系列的SQL*Plus執(zhí)行SQL,執(zhí)行過程通過spool的方式生成另外一個(gè)文件:

……

SQLPLUS -S "/as sysdba" >/dev/null <<EOF

……

SPOOL$SH_HOME/dobackup.sql

genbaksql.sh這個(gè)腳本的主體部分包含如下語句:

SELECT    'PROMPT Begin Backup Tablespace '

       || tablespace_name|| '.'|| file_name||CHR (10)

       || 'alter tablespace '  || tablespace_name|| ' begin backup;'|| CHR(10)

       || '! cp '|| file_name|| '$BACKUP_FILE'|| CHR (10)

       || 'alter tablespace '||tablespace_name|| ' end backup;'|| CHR (10)

       || '! compress '|| '$BACKUP_FILE'||'/*.dbf'|| CHR (10)

       || 'PROMPT Successed End Backup ThisFile . ;'|| CHR (10)

       || 'select  CHR(10) from dual;'|| CHR (10)

  FROM dba_data_files

 WHERE status = 'AVAILABLE';

這個(gè)SQL執(zhí)行之后,會(huì)根據(jù)數(shù)據(jù)庫當(dāng)前的情況生成備份腳本,生成的內(nèi)容類似:

PROMPT Begin BackupTablespace SYSTEM./opt/oracle/oradata/eygle/system01.dbf

alter tablespaceSYSTEM begin backup;

! cp/opt/oracle/oradata/eygle/system01.dbf $BACKUP_FILE

alter tablespaceSYSTEM end backup;

! compress $BACKUP_FILE/*.dbf

PROMPT Successed EndBackup This File . ;

select  CHR(10) from dual;

其中壓縮步驟是為了節(jié)省空間,不同環(huán)境可以根據(jù)情況來修改。genbaksql.sh的最后部分通過調(diào)用另外一個(gè)編譯好的shell腳本來調(diào)用以上動(dòng)態(tài)生成的dobackup.sql腳本,執(zhí)行備份:

chmod u+x$SH_HOME/dobackup.sh

$SH_HOME/dobackup.sh

這個(gè)dobackup.sh腳本主要用來執(zhí)行備份,并最終對所有備份文件進(jìn)行打包(還可以加入簡單的過期備份刪除功能),這個(gè)腳本的主要內(nèi)容如下(最后一部分是用來備份歸檔日志的): 

date

echo"--------------------------------------------------------------"

sqlplus "/ assysdba" @$SH_HOME/dobackup.sql

date

$TAR_COMMAND cvf$BACKUP_FILE/hotback`date +"%Y%m%d"`.tar `find $BACKUP_FILE -name"*.Z"`

$RM_COMMAND$BACKUP_FILE/*.Z

find $BACKUP_FILE-name "*.tar" -mtime +10 -exec rm {} \;

cat$SH_HOME/dobackup.log |$MAIL_COMMAND -s "HOT BACKUP FROM $LOCAL" $DBA

echo"-------------------------------------------------"

echo "Beginbackup today archive log files....."

$SH_HOME/dobakarch.sh

echo "Successedin backup archive files"

echo"--------------------------------------------------"

備份歸檔日志的腳本dobakarch.sh是一個(gè)簡單的通用腳本,除了全備份時(shí)調(diào)用,日常也可以在startbak.sh腳本中調(diào)用,其主要內(nèi)容如下:

$SH_HOME/bakarch.sh> $SH_HOME/dobakarch.log

最終的歸檔備份是通過bakarch.sh完成的:

date

echo"-------------------------------------------------"

echo "Beginbackup today archive log files....."

$MV_COMMAND `find$RAEL_ARCH -name "*.arc"` $BACK_ARCH

$TAR_COMMAND cvf$BACK_ARCH/arch$DATE.tar `find $BACK_ARCH -name "*.arc"`

$COMPRESS_COMMAND$BACK_ARCH/arch$DATE.tar

if [ $? ="0" ]; then

$RM_COMMAND$BACK_ARCH/*.arc

fi

find $BACK_ARCH -name"*.tar.Z" -mtime +10 -exec rm {} \;

if [ $? ="0" ]; then

   echo "Successed in backup archivefiles"

else

   echo "File not find!"

fi

echo"-------------------------------------------------"

這樣就完成了這個(gè)自定制備份腳本。

4.Oracle10g的增強(qiáng)

在Oracle 10g中,Oracle新增命令用以簡化用戶管理的備份,現(xiàn)在可以通過alter databasebegin/end backup來進(jìn)行數(shù)據(jù)庫備份模式的切換,在Oracle 10g之前,需要對每個(gè)表空間逐一進(jìn)行熱備設(shè)置:

SQL> alter session setnls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> alterdatabase begin backup;

Database altered.

當(dāng)執(zhí)行了alter database begin backup之后,所有表空間一次被置于熱備狀態(tài),可以通過并行方式對數(shù)據(jù)庫進(jìn)行備份:

SQL> select * from v$backup;

FILE# STATUS       CHANGE# TIME

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

    1 ACTIVE          8.9255E+12 2010-12-22 16:26:18

    2 ACTIVE          8.9255E+122010-12-22 16:26:18

    3 ACTIVE          8.9255E+122010-12-22 16:26:18

    4 ACTIVE          8.9255E+122010-12-22 16:26:18

    5 ACTIVE          8.9255E+122010-12-22 16:26:18

    6 ACTIVE          8.9255E+122010-12-22 16:26:18

在執(zhí)行alter databaseend backup,所有表空間將一次性停止熱備:

這是Oracle 10g對于用戶管理熱備的一個(gè)增強(qiáng)。

5.用戶管理備份的完全恢復(fù)

當(dāng)進(jìn)行了完善的備份之后,接下來的工作就是等候故障出現(xiàn)時(shí)一展身手了(當(dāng)然能夠不出故障是更理想的)。以下通過實(shí)例來說明對于用戶管理的備份進(jìn)行完全恢復(fù)。

完全恢復(fù)的前提是有一個(gè)全備份,為了驗(yàn)證恢復(fù)情況,執(zhí)行如下一系列的數(shù)據(jù)庫操作:

SQL> connect eygle/eygle

SQL> create table eygle as select * fromdba_users;

SQL> select count(*) from eygle;

 COUNT(*)

----------

        8

SQL> delete from eygle where rownum <5;

SQL> commit;

SQL> alter system switch logfile;

SQL> insert into eygle select * fromdba_users;

SQL> commit;

SQL> select count(*) from eygle;

 COUNT(*)

----------

       12

SQL> alter system switch logfile;

System altered.

假定此后發(fā)生數(shù)據(jù)庫故障,所有數(shù)據(jù)文件丟失,但是還有當(dāng)前的控制文件和日志文件。

注意:如果當(dāng)前的日志文件丟失,那么數(shù)據(jù)庫只能進(jìn)行不完全恢復(fù),因?yàn)楫?dāng)前日志中包含的Redo信息對應(yīng)的數(shù)據(jù)修改可能尚未寫入到數(shù)據(jù)文件,丟失當(dāng)前日志文件意味著數(shù)據(jù)庫將會(huì)丟失提交成功的數(shù)據(jù),恢復(fù)的最大限度只能是進(jìn)行不完全恢復(fù),恢復(fù)完成后將需要通過Resetlogs打開數(shù)據(jù)庫;如果當(dāng)前控制文件丟失,那么只能通過備份的控制文件或重建控制文件來進(jìn)行恢復(fù)。

但是如果擁有控制文件和日志文件,那么接下來可以進(jìn)行完全恢復(fù),首先Restore數(shù)據(jù)文件到原有目錄:

[oracle@jumper oradata]$ cp eyglebak/*.dbfeygle

此時(shí)如果嘗試啟動(dòng)數(shù)據(jù)庫,Oracle就會(huì)提示需要介質(zhì)恢復(fù),這是根據(jù)控制文件及數(shù)據(jù)文件頭的信息進(jìn)行判斷的:

SQL> startup

ORACLE instance started.

Database mounted.

ORA-01113: file 1 needs media recovery

ORA-01110: data file 1:'/opt/oracle/oradata/eygle/system01.dbf'

正常情況下,可以先啟動(dòng)數(shù)據(jù)庫到Mount狀態(tài),然后開始恢復(fù):

SQL> startup mount;

ORACLE instance started.

Database mounted.

因?yàn)槲覀儞碛凶钚碌目刂莆募约八械臍w檔及在線日志文件,所以可以簡單地通過一條命令執(zhí)行恢復(fù),在恢復(fù)過程中,Oracle會(huì)提示歸檔文件,可以輸入Auto讓Oracle自動(dòng)執(zhí)行恢復(fù):

SQL> recover database;

ORA-00279: change 18995632784 generated at03/09/2007 15:41:26 needed for thread 1

ORA-00289: suggestion : /oracle/prod/9.2.0/dbs/arch1_6503.dbf

ORA-00280: change 18995632784 for thread 1 isin sequence #6503

Specify log: {<RET>=suggested | filename| AUTO | CANCEL} auto

ORA-00279: change 18995632919 generated at03/09/2007 15:47:01 needed for thread 1

ORA-00289: suggestion : /oracle/prod/9.2.0/dbs/arch1_6504.dbf

ORA-00280: change 18995632919 for thread 1 isin sequence #6504

ORA-00278: log file '/oracle/prod/9.2.0/dbs/arch1_6503.dbf'no longer needed for this recovery

ORA-00279: change 18995652925 generated at03/09/2007 16:01:02 needed for thread 1

ORA-00289: suggestion : /oracle/prod/9.2.0/dbs/arch1_6505.dbf

ORA-00280: change 18995652925 for thread 1 isin sequence #6505

ORA-00278: log file '/oracle/prod/9.2.0/dbs/arch1_6504.dbf'no longer needed for this recovery

Log applied.

Mediarecovery complete.

恢復(fù)完成之后,可以open打開數(shù)據(jù)庫:

SQL> alter database open;

Database altered.

恢復(fù)之后可以驗(yàn)證之前的數(shù)據(jù):

SQL> select count(*) from eygle.eygle;

 COUNT(*)

----------

       12

由于控制文件和在線日志文件都沒有損失,數(shù)據(jù)庫執(zhí)行了完全恢復(fù),數(shù)據(jù)被正確的恢復(fù)了出來。從alert文件中,我們可以看到完整的介質(zhì)恢復(fù)過程,Oracle通過應(yīng)用歸檔日志對數(shù)據(jù)文件進(jìn)行不斷的推進(jìn)恢復(fù):

Fri Mar 9 16:05:29 2007

ALTERDATABASE RECOVER  database

Media Recovery Start

Starting datafile 1 recovery in thread 1sequence 6503

Datafile 1:'/opt/oracle/oradata/eygle/system01.dbf'

Starting datafile 2 recovery in thread 1sequence 6503

Datafile 2: '/opt/oracle/oradata/eygle/undotbs01.dbf'

Starting datafile 3 recovery in thread 1sequence 6503

Datafile 3:'/opt/oracle/oradata/eygle/eygle01.dbf'

Media Recovery Log

ORA-279 signalled during: ALTER DATABASERECOVER database  ...

Fri Mar 9 16:05:37 2007

ALTERDATABASE RECOVER    CONTINUE DEFAULT

Media Recovery Log /opt/oracle/product/9.2.0/dbs/arch1_6503.dbf

ORA-279 signalled during: ALTER DATABASERECOVER CONTINUE DEFAULT  ...

Fri Mar 9 16:05:38 2007

ALTER DATABASE RECOVER    CONTINUE DEFAULT

Media Recovery Log /opt/oracle/product/9.2.0/dbs/arch1_6504.dbf

ORA-279 signalled during: ALTER DATABASERECOVER CONTINUE DEFAULT  ...

Fri Mar 9 16:05:38 2007

ALTER DATABASE RECOVER    CONTINUE DEFAULT

Media Recovery Log /opt/oracle/product/9.2.0/dbs/arch1_6505.dbf

然后根據(jù)日志序列,順序應(yīng)用在線日志文件,完成恢復(fù):

Recovery of Online Redo Log: Thread 1 Group 3Seq 6506 Reading mem 0

Mem# 0errs 0: /opt/oracle/oradata/eygle/redo03.log

Recovery of Online Redo Log: Thread 1 Group 4Seq 6507 Reading mem 0

Mem# 0errs 0: /opt/oracle/oradata/eygle/redo04.dbf

Recovery of Online Redo Log: Thread 1 Group 5Seq 6508 Reading mem 0

Mem# 0errs 0: /opt/oracle/oradata/eygle/redo05.dbf

Media Recovery Complete

Completed: ALTER DATABASE RECOVER    CONTINUE DEFAULT

在Open過程中,Oracle進(jìn)行實(shí)例恢復(fù),實(shí)例恢復(fù)對日志的掃描是通過兩階段掃描完成的:

Fri Mar 9 16:05:44 2007

alter database open

Fri Mar 9 16:05:44 2007

Beginning crash recovery of 1 threads

Fri Mar 9 16:05:44 2007

Startedfirst pass scan

Fri Mar 9 16:05:44 2007

Completed first pass scan

 0 redoblocks read, 0 data blocks need recovery

Fri Mar 9 16:05:44 2007

Startedrecovery at

 Thread1: logseq 6508, block 2, scn 4.1815783972

Recovery of Online Redo Log: Thread 1 Group 5Seq 6508 Reading mem 0

Mem# 0errs 0: /opt/oracle/oradata/eygle/redo05.dbf

Fri Mar 9 16:05:44 2007

Completed redo application

Fri Mar 9 16:05:44 2007

Ended recovery at

Thread1: logseq 6508, block 2, scn 4.1815803973

 0 datablocks read, 0 data blocks written, 0 redo blocks read

Crashrecovery completed successfully

恢復(fù)完成后,數(shù)據(jù)庫可以成功Open打開。

本次分享的內(nèi)容到此結(jié)束,下期將會(huì)詳細(xì)介紹RMAN備份。今天你備份了嗎?

如何加入"云和恩墨大講堂"微信群

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
controlfile文件的備份與恢復(fù)
教你如何來恢復(fù)一個(gè)丟失的數(shù)據(jù)文件
Standby Database的工作原理
Oracle只有數(shù)據(jù)文件恢復(fù)數(shù)據(jù)庫
Oracle 重要文件系統(tǒng)解釋 - 爪哇一角 - BlogJava
利用已有的建立好的數(shù)據(jù)庫,直接改相關(guān)配置文件到新的盤符
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服