亚洲免费日韩av一区,最近2019中文字幕大全视频10,体育生gay自慰网站,麻豆国产精品va在线观看不卡

搜索
Close this search box.

Oracle數(shù)據(jù)塊損壞與恢復(fù)詳解

作者:admin 發(fā)布日期:2016-09-26 11:42:28

Oracle數(shù)據(jù)塊損壞與恢復(fù)詳解

1.什么是數(shù)據(jù)塊損壞:
所謂損壞的數(shù)據(jù)塊,是指塊沒(méi)有采用可識(shí)別的 Oracle 格式,或者其內(nèi)容在內(nèi)部不一致。通常情況下,損壞是由硬件故障或操作系統(tǒng)問(wèn)題引起的。Oracle 數(shù)據(jù)庫(kù)將損壞的塊標(biāo)識(shí)為“邏輯損壞”或“介質(zhì)損壞”。如果是邏輯損壞,則是 Oracle 內(nèi)部錯(cuò)誤。Oracle 數(shù)據(jù)庫(kù)檢測(cè)到不一致之后,就將邏輯損壞的塊標(biāo)記為損壞。如果是介質(zhì)損壞,則是塊格式不正確;從磁盤(pán)讀取的塊不包含有意義的信息。

通過(guò)恢復(fù)塊,或者刪除包含損壞塊的數(shù)據(jù)庫(kù)對(duì)象(或同時(shí)采用這兩種方式),可以修復(fù)介質(zhì)損壞的塊。如果介質(zhì)損壞是由硬件故障引起的,則只有修復(fù)了硬件故障后,才能徹底解決問(wèn)題。
Oracle數(shù)據(jù)塊損壞恢復(fù)詳解
只要對(duì)塊執(zhí)行讀或?qū)懖僮?,就?huì)執(zhí)行下列一致性檢查:

--塊版本

--高速緩存中的 DBA(數(shù)據(jù)塊地址)值與塊緩沖區(qū)中的 DBA 值比較的結(jié)果

--塊校驗(yàn)和(如果啟用)

損壞的塊被標(biāo)識(shí)為以下類別:

--介質(zhì)損壞

--邏輯(或軟件)損壞

2.塊損壞故障現(xiàn)象:ORA-01578

ORA-01578 錯(cuò)誤:“ORACLE data block corrupted (file # %s, block # %s)”:

--發(fā)現(xiàn)損壞的數(shù)據(jù)塊時(shí)生成此信息

--始終返回相對(duì)文件號(hào)和塊號(hào)

--返回到發(fā)出查詢的會(huì)話(該查詢?cè)诎l(fā)現(xiàn)損壞時(shí)執(zhí)行)

--顯示在 alert.log 文件中

一般情況下,ORA-01578 錯(cuò)誤是由硬件問(wèn)題引起的。如果 ORA-01578 錯(cuò)誤始終返回相同的參數(shù),則最可能的原因是塊介質(zhì)損壞。
如果返回的參數(shù)每次都有變化,則可能存在硬件問(wèn)題。應(yīng)檢查內(nèi)存和頁(yè)面空間,并檢查 I/O 子系統(tǒng),以便查找有問(wèn)題的控制器。
注:ORA-01578 會(huì)返回相對(duì)文件號(hào),但隨之出現(xiàn)的 ORA-01110 錯(cuò)誤會(huì)顯示絕對(duì)文件號(hào)。

3.如何處理?yè)p壞

--檢查預(yù)警日志和操作系統(tǒng)日志文件。

--使用可用的診斷工具,找出損壞的類型。

--多次運(yùn)行檢查功能,確定錯(cuò)誤是否持續(xù)存在。

--根據(jù)需要,從損壞的對(duì)象中恢復(fù)數(shù)據(jù)。

--解決硬件問(wèn)題:
內(nèi)存條、
磁盤(pán)控制器、
磁盤(pán)

--根據(jù)需要,從損壞的對(duì)象中恢復(fù)或還原數(shù)據(jù)。

始終嘗試確定錯(cuò)誤是否持續(xù)出現(xiàn)。多次運(yùn)行 ANALYZE 命令;如果可能,可執(zhí)行關(guān)閉再啟動(dòng)操作,然后再次嘗試早先發(fā)生故障的操作。查找是否有其它損壞。如果發(fā)現(xiàn)一個(gè)損壞的塊,則可能還存在其它損壞的塊。

硬件故障必須立即解決。遇到硬件問(wèn)題時(shí),應(yīng)與供應(yīng)商取得聯(lián)系,在檢查并修復(fù)了計(jì)算機(jī)后再繼續(xù)工作。此時(shí)應(yīng)運(yùn)行一次全面的硬件診斷會(huì)話。

硬件故障的類型可能會(huì)有很多種:
--I/O 硬件或固件故障

--操作系統(tǒng)
--I/O 或高速緩存問(wèn)題

--內(nèi)存或分頁(yè)問(wèn)題

--磁盤(pán)修復(fù)實(shí)用程序


4.實(shí)時(shí)驗(yàn)證塊完整性:DB_BLOCK_CHECKING :

可通過(guò)將 DB_BLOCK_CHECKING 初始化參數(shù)設(shè)置為 TRUE 啟用數(shù)據(jù)庫(kù)塊檢查。只要修改了數(shù)據(jù)塊或索引塊,此項(xiàng)檢查就會(huì)檢查數(shù)據(jù)塊和索引塊的內(nèi)部一致性。DB_BLOCK_CHECKING 是一個(gè)動(dòng)態(tài)參數(shù),可使用 ALTER SYSTEM SET 語(yǔ)句修改此參數(shù)。對(duì)于系統(tǒng)表空間,將始終啟用塊檢查。塊檢查通常會(huì)產(chǎn)生 1% 到 10% 的開(kāi)銷,具體取決于工作量。正在執(zhí)行的更新或插入操作越多,執(zhí)行塊檢查的開(kāi)銷就會(huì)越高。DB_BLOCK_CHECKING 有以下四個(gè)可能的值:

--OFF:除 SYSTEM 之外的所有表空間都不執(zhí)行塊檢查。

--LOW:在內(nèi)存中塊的內(nèi)容發(fā)生更改之后(例如,在執(zhí)行 UPDATE 或 INSERT 語(yǔ)句以及在執(zhí)行磁盤(pán)上讀取后),執(zhí)行基本的塊頭檢查。

--MEDIUM:執(zhí)行所有 LOW 檢查, 對(duì)所有不是按索引組織的表塊執(zhí)行語(yǔ)義塊檢查。

--FULL:執(zhí)行所有 LOW 和 MEDIUM 檢查, 對(duì)索引塊執(zhí)行語(yǔ)義檢查。

初始化參數(shù) DB_BLOCK_CHECKING:

--在對(duì)每個(gè)塊執(zhí)行自我一致性檢查時(shí),控制檢查的處理程度

--可防止內(nèi)存和數(shù)據(jù)損壞

--可使用 ALTER SESSION 命令或 ALTER SYSTEM DEFERRED 命令進(jìn)行設(shè)置

5.塊介質(zhì)恢復(fù)

大多數(shù)情況下,第一次遇到損壞時(shí),數(shù)據(jù)庫(kù)會(huì)將塊標(biāo)記為介質(zhì)損壞,然后將其寫(xiě)到磁盤(pán)上。在該塊得到恢復(fù)之前,不能對(duì)其執(zhí)行任何后續(xù)讀取操作。只能對(duì)標(biāo)記為損壞或者未通過(guò)損壞檢查的塊執(zhí)行塊恢復(fù)??墒褂?RMAN RECOVER...BLOCK 命令執(zhí)行塊介質(zhì)恢復(fù)。默認(rèn)情況下,RMAN 會(huì)在閃回日志中搜索好的塊副本,然后在完全備份或 0 級(jí)增量備份中搜索塊。如果 RMAN 找到了好的副本,則會(huì)還原這些副本,并對(duì)塊執(zhí)行介質(zhì)恢復(fù)。塊介質(zhì)恢復(fù)只能將重做日志用于介質(zhì)恢復(fù),不能使用增量備份。

V$DATABASE_BLOCK_CORRUPTION 視圖顯示由數(shù)據(jù)庫(kù)組件(如 RMAN 命令、ANALYZE、dbv、SQL 查詢等)標(biāo)記為損壞的塊。對(duì)于以下類型的損壞此視圖會(huì)增加相應(yīng)的行:

--物理/介質(zhì)損壞:數(shù)據(jù)庫(kù)無(wú)法識(shí)別塊:校驗(yàn)和無(wú)效、塊內(nèi)容全部為零或者塊頭不完整。默認(rèn)情況下,物理?yè)p壞檢查處于啟用狀態(tài)。

--邏輯損壞:塊的校驗(yàn)和有效,塊頭和塊尾也匹配,但是內(nèi)容不一致。塊介質(zhì)恢復(fù)不能修復(fù)邏輯塊損壞。默認(rèn)情況下,邏輯損壞檢查處于禁用狀態(tài)。通過(guò)指定 BACKUP、RESTORE、RECOVER 和 VALIDATE 命令的 CHECK LOGICAL 選項(xiàng),可以啟用邏輯損壞檢查。

塊介質(zhì)恢復(fù):

--降低平均恢復(fù)時(shí)間 (MTTR)

--提高介質(zhì)恢復(fù)期間的可用性

--恢復(fù)期間數(shù)據(jù)文件保持聯(lián)機(jī)狀態(tài)

--只有正在恢復(fù)的塊是不可訪問(wèn)的

--使用 RMAN RECOVER...BLOCK 命令調(diào)用

--使用閃回日志以及完全備份或 0 級(jí)備份還原塊

--使用重做日志執(zhí)行介質(zhì)恢復(fù)

--V$DATABASE_BLOCK_CORRUPTION 視圖顯示標(biāo)記為損壞的塊

6.塊介質(zhì)恢復(fù)的先決條件

--目標(biāo)數(shù)據(jù)庫(kù)必須處于 ARCHIVELOG 模式

--包含損壞塊的數(shù)據(jù)文件的備份必須是完全備份或 0 級(jí)備份。

--要使用代理副本,必須先將它們還原到非默認(rèn)位置
--RMAN 只能使用歸檔的重做日志進(jìn)行恢復(fù)

--要使用閃回日志,必須啟用閃回?cái)?shù)據(jù)庫(kù)

以下先決條件適用于 RECOVER ... BLOCK 命令:


--目標(biāo)數(shù)據(jù)庫(kù)必須以 ARCHIVELOG 模式運(yùn)行,并且必須是打開(kāi)的,或是使用當(dāng)前控制文件裝載的。

--包含損壞塊的數(shù)據(jù)文件備份必須是完全備份或 0 級(jí)備份,不能是代理副本。如果只存在代理副本備份,則可將它們還原到磁盤(pán)上的非默認(rèn)位置;在這種情況下,RMAN 會(huì)認(rèn)為它們是數(shù)據(jù)文件副本,在塊介質(zhì)恢復(fù)過(guò)程中會(huì)在其中搜索塊。

--RMAN 只能使用歸檔的重做日志進(jìn)行恢復(fù)。RMAN 不能使用 1 級(jí)增量備份。塊介質(zhì)恢復(fù)不能恢復(fù)丟失或無(wú)法訪問(wèn)的歸檔重做日志,但有時(shí)可以恢復(fù)丟失的重做記錄。

--必須在目標(biāo)數(shù)據(jù)庫(kù)上啟用閃回?cái)?shù)據(jù)庫(kù),這樣 RMAN 才能在閃回日志中搜索損壞塊的好副本。如果啟用了閃回事件記錄,并且此事件記錄包含損壞塊的較舊但未損壞的版本,則 RMAN 可以使用這些塊,因而可能會(huì)提高恢復(fù)的速度。

7.RECOVER...BLOCK 命令

--確定包含要進(jìn)行恢復(fù)的塊的備份

--讀取備份并將請(qǐng)求的塊累積到內(nèi)存緩沖區(qū)

--必要時(shí),通過(guò)從備份中讀取歸檔日志來(lái)管理塊介質(zhì)恢復(fù)會(huì)話

RECOVER DATAFILE 6 BLOCK 3; Recover a single block

RECOVER Recover multiple blocks

DATAFILE 2 BLOCK 43 in multiple data files

DATAFILE 2 BLOCK 79

DATAFILE 6 BLOCK 183;

RECOVER CORRUPTION LIST; Recover all blocks logged in V$DATABASE_BLOCK_CORRUPTION

恢復(fù)單個(gè)塊:

在進(jìn)行塊恢復(fù)之前,必須確定損壞的塊。一般情況下,會(huì)在以下位置中報(bào)告塊損壞:

--LIST FAILURE、VALIDATE 或 BACKUP ...VALIDATE 命令的結(jié)果
--V$DATABASE_BLOCK_CORRUPTION 視圖

--標(biāo)準(zhǔn)輸出中的錯(cuò)誤消息

--預(yù)警日志文件和用戶跟蹤文件(在 V$DIAG_INFO 視圖中標(biāo)識(shí))
--SQL ANALYZE TABLE 和 ANALYZE INDEX 命令的結(jié)果
--DBVERIFY 實(shí)用程序的結(jié)果

例如,可能會(huì)在用戶跟蹤文件中發(fā)現(xiàn)以下消息:

ORA-01578: ORACLE data block corrupted (file # 7, block # 3)

ORA-01110: data file 7: '/oracle/oradata/orcl/tools01.dbf'

ORA-01578: ORACLE data block corrupted (file # 2, block # 235)

ORA-01110: data file 2: '/oracle/oradata/orcl/undotbs01.dbf'

--確定了塊以后,在 RMAN 提示符下運(yùn)行 RECOVER ...BLOCK 命令,指定損壞塊的文件號(hào)和塊編號(hào)。

RECOVER

DATAFILE 7 BLOCK 3

DATAFILE 2 BLOCK 235;

8.使用10231事件進(jìn)行處理:(塊損壞但沒(méi)有備份,沒(méi)辦法回復(fù)的情況下)

在sqlplus中執(zhí)行如下命令:
ALTER SYSTEM SET EVENTS='10231 trace name context forever,level 10';
然后導(dǎo)出該表:
exp test/test file=t.dmp tables=t;
在數(shù)據(jù)庫(kù)中刪除該表
drop table t;
然后導(dǎo)入
imp test/test file=t.dmp tables=t;
最后關(guān)閉10231事件:
ALTER SYSTEM SET EVENTS='10231 trace name context off';
Oracle數(shù)據(jù)塊損壞恢復(fù)詳解


上一篇:延長(zhǎng)硬盤(pán)壽命的一些方法

下一篇:東芝要做64層3D閃存重磅發(fā)布!

熱門(mén)閱讀

你丟失數(shù)據(jù)了嗎!

我們有能力從各種數(shù)字存儲(chǔ)設(shè)備中恢復(fù)您的數(shù)據(jù)

Scroll to Top