連載
» 2006年08月01日 00時00分 公開

物理バックアップの失敗を根絶するノウハウOracleバックアップ/リカバリ講座(7)(3/4 ページ)

[森谷聡,株式会社アゲハ]

データファイルの破損チェック

 バックアップを取得しても、取得したファイルが破損していてリカバリに使用できなければ意味がありません。OracleのRecovery Manager(以下、RMAN)を使用してデータファイルのバックアップを取得する場合には、RMANがデータブロックの破損チェックを行いますのでブロック障害を検出することができますが、OSコマンドによるバックアップではそれを行うことができません。そのため、バックアップ実行時にdbverifyユーティリティ(以下、dbv)を使用して、データファイルやバックアップしたデータファイルの破損チェックを実行することで、より確実なバックアップとなります(ただし、制御ファイルやREDOログファイルに使用することはできません)。

手順1 データファイルの破損チェック方法

 では、まずデータファイルの破損チェックを行うdbvコマンドの実行例から見ていきます。

(1)データファイルのブロックサイズを確認
 次のSQLで対象となるデータファイルのブロックサイズを確認します。

SQL> select df.tablespace_name, df.file_name,dt.block_size
  2  from dba_data_files df, dba_tablespaces dt
  3  where df.tablespace_name = dt.tablespace_name;

TABLESPACE_NAME      FILE_NAME                                     
BLOCK_SIZE
-------------------- --------------------------------------------- 
----------
SYSTEM               /opt/app/oracle/oradata/system01.dbf          
      8192
UNDOTBS1             /opt/app/oracle/oradata/undotbs01.dbf         
      8192
SYSAUX               /opt/app/oracle/oradata/sysaux01.dbf          
      8192
USERS                /opt/app/oracle/oradata/users01.dbf           
      8192
リスト6 データファイルのブロックサイズの確認

(2)データファイルの破損チェックを実行
 dbvコマンドにて、データファイルの破損チェックを実行します。下記の例では、USERS表領域を構成するデータファイルのフルパスと、ブロックサイズを指定して破損チェックを行っています。

oracle@single> dbv file=/opt/app/oracle/oradata/users01.dbf blocksize
=8192

DBVERIFY: Release 10.2.0.1.0 - Production on 木 6月 29 02:35:49 2006

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

DBVERIFY - 検証を開始します: FILE = /opt/app/oracle/oradata/users01.dbf


DBVERIFY - 検証が完了しました

検査済ページ合計               : 640
処理済ページ合計   (データ)    : 5
エラーのページ合計 (データ)    : 0
処理済ページ合計   (索引)      : 0
エラーのページ合計 (索引)      : 0
処理済ページ合計   (その他)    : 11
処理済ページ合計   (セグメント): 0
エラーのページ合計 (セグメント): 0
空白のページ合計               : 624
破損とマークされたページ合計   : 0
インフラックス・ページ合計     : 0
最大ブロックSCN            : 650337(0.650337)
リスト7 データファイルの破損チェック

 破損チェックの結果から「破損とマークされたページ合計:0」と出力されていますので、データファイルに破損がなかったことが分かります。

手順2 セグメント単位の破損チェック方法

 次に、セグメント単位で破損チェックを行うdbvコマンドの実行例を見ていきます。まず、以下のSQLを実行し、破損チェックを実行するセグメント情報(表領域番号、セグメント・ヘッダ・ブロックのファイル番号とブロック番号)を取得します。下記の例では、表(“AGEHA_TEST”)のセグメント情報を取得しています。

SQL> select vt.ts#, ds.header_file, ds.header_block
  2  from v$tablespace vt, dba_segments ds
  3  where vt.name = ds.tablespace_name
  4  and ds.segment_name = 'AGEHA_TEST';

       TS# HEADER_FILE   HEADER_BLOCK
---------- ----------- ----------
         4           4         19
リスト8 セグメント情報の取得

(1)セグメントの破損チェック
 先ほど取得したセグメント情報を基に、指定されたセグメントの高水位標(High Water Mark)までの破損チェックを実行します。

oracle@single> dbv userid=scott/tiger segment_id=4.4.19

DBVERIFY: Release 10.2.0.1.0 - Production on 日 7月 2 19:58:30 2006

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

DBVERIFY - 検証開始 : SEGMENT_ID = 4.4.19


DBVERIFY - 検証が完了しました

検査済ページ合計               : 8
処理済ページ合計   (データ)    : 5
エラーのページ合計 (データ)    : 0
処理済ページ合計   (索引)      : 0
エラーのページ合計 (索引)      : 0
処理済ページ合計   (その他)    : 2
処理済ページ合計   (セグメント): 1
エラーのページ合計 (セグメント): 0
空白のページ合計               : 0
破損とマークされたページ合計   : 0
インフラックス・ページ合計     : 0
最大ブロックSCN            : 652922(0.652922)
リスト9 セグメントの破損チェック

 破損チェックの結果から「破損とマークされたページ合計:0」となっていますので、指定したセグメントに破損がなかったことが分かります。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。