Oracle Direct Seminar Platinum 列伝セミナー Platinum が語る! 現場から学ぶバックアップ & リカバリの極意 2010 年 3 月 30 日株式会社富士通北陸システムズ 富士通北陸システムズ (FJH) について ORACLE MASTER Platinum AWARD 受賞! オラクルデータベース認定資格制度 ORACLE MASTERの最高峰である ORACLE MASTER Platinum Oracle Database 10g 資格取得者数 2 年連続国内 NO.1 (2009/9 発表 ) 富士通グループを代表するオラクルデータベースプロフェッショナル集団 独自ソリューションの提供 DBを中心としたインフラ全体の設計 / 構築 製品サポート DB 関連製品開発など多方面でビジネス展開
講師自己紹介 氏名齋藤拓哉 ( サイトウタクヤ ) ORACLE MASTER Platinum Oracle Database 10g (2008 年 4 月取得 ) 業務経歴 2005 年株式会社富士通北陸システムズ入社 入社当初よりオラクル関連業務に従事 ORACLE DATABASE バックアップリカバリ用ソフト Recovery Manager for Oracleの開発を担当 現在はそこで培った技術を元に Oracle Database を含むインフラ全般のフィールド SE を担当している Platinum 取得で得たもの得たもお客様からの信頼や期待が大きくなったことを実感 Agenda 現場から学ぶバックアップ & リカバリの極意 バックアップ編 リカバリ編
現場から学ぶバックアップ リカバリの極意 バックアップ編 推奨バックアップ構成 バックアップが必要ないファイルは? 全データファイルを取得する時間がない!? オンラインバックアップの影響 推奨バックアップ構成 ARCHIVEログモード + オンラインバックアップもしくは RMAN システムを停止しなくてもバックアップが可能 障害発生直前までリカバリすることが可能 リカバリ時の選択肢 ( 回復方法 回復ポイント回復ポイント ) が豊富
バックアップが必要ないファイルは? 運用スケジュール上 全ファイルをバックアップする時間がない バックアップを省略できるファイルは? オンライン REDOログ ARCHIVEログモード - ログスイッチ後 アーカイブログをバックアップ NOARCHIVEログモード - RESETLOGSで復旧可能 不用意なリストアにより最新データが失われる場合も ローカル管理の一時表領域 V$TEMPFILE で確認できる一時ファイルはバックアップ不要 ALTER TABLESPACE ADD TEMPFILE で復旧可能 ( 復旧時間も早い ) 読取り専用表領域 ( 変更時に一回のみ ) 読取り専用に変更した時に 一回のみバックアップを取得しておく 全データファイルを取得する時間がない!! 1 週間かけてバックアップを分散する ( アーカイブモード ) 曜日日月火水木金土 対象 表領域 A 表領域 B 表領域 C 表領域 D 表領域 E 表領域 F 表領域 G アーカイブ アーカイブ アーカイブ アーカイブ アーカイブ アーカイブ アーカイブ ログ ログ ログ ログ ログ ログ ログ データファイル A B C D E F G アーカイブログ 35 36 37 38 39 40 41 42 43 44 45 46 47 48 ストレージ装置の高速コピー機能コピー命令は即時に復帰 バックアップは瞬時に完了
オンラインバックアップの影響 オンラインバックアップ時には何が起きているッ? データファイルヘッダのチェックポイント SCN 固定 データブロックへの書込みは継続 更新される毎にデータファイルのブロックコピーを REDO ログファイルに追記 オンラインバックアップ中の内部動作 バッファキャッシュ 2 ブロック更新 更新 SQL 発行 INSERT/UPDATE/DELETE / データファイル DataFile REDO ログ 38 オンラインバックアップ中の更新が多いと REDO ログファイルへのブロックコピーのの格納量が増加しREDOログのI/Oが増大 1バイトの更新でも数 KB 単位で REDO ログファイルの書込が発生 1REDO 生成 ブロックの変更内容 + 更新前のブロックコピー DB_BLOCK_SIZE 単位 2KB/4KB/8KB/16KB/32KB チェンジベクタ ( アドレス SCN オペレーションなど ) オンラインバックアップモードの場合
REDOログファイルの I/O 増加を防ぐには 更新の少ない時間帯にバックアップを取得する データファイルのコピーが完了した表領域はすぐにオンラインバックアップモードを解除する ALTER TABLESPACE SYSTEM BEGIN BACKUP;!cp system01.dbf /backup ALTER TABLESPACE SYSTEM END BACKUP; ALTER TABLESPACE UNDOTBS BEGIN BACKUP;!cp undotbs01.dbf /backup ALTER TABLESPACE UNDOTBS END BACKUP; 表領域毎に Begin/End を実施 ALTER TABLESPACE SYSTEM BEGIN BACKUP; 全ての表領域で ALTER TABLESPACE UNDOTBS BEGIN BACKUP; Begin/Endを実施!cp system01.dbf /backup!cp undotbs01.dbf /backup ALTER TABLESPACE SYSTEM END BACKUP; ALTER TABLESPACE UNDOTBS END BACKUP; 現場から学ぶバックアップ リカバリの極意 リカバリ編 リカバリの基本 ケーススタディ CASE.1 ASM 構成のディスクグループが存在しない状態 でのリカバリエラー CASE.2 ローカル管理の一時表領域のリカバリ < 付録 > CASE.3 RAC 構成 : 時刻のズレによるリカバリ失敗 CASE.4 RAC 構成 : アーカイブ出力タイミングによる失敗 CASE.5 オンラインバックアップ中の障害 CASE.6 ファイルコピー中の起動 CASE.7 データファイルが自動的にOFFLINEに!? CASE.8 ACTIVE 状態のREDOログが破損すると CASE.9 バックアップが存在しないファイルのリカバリバ CASE.10 NOARCHIVEでも完全回復が可能! CASE.11 ORA-1578: ブロック障害が発生!
リカバリの基本 障害発生ファイルの特定エラーメッセージ アラートログ等から障害発生箇所を特定する リストアの必要性を判断 障害の発生状況 一時表領域 読取専用表領域などを見極める リカバリ方針の決定 ( 完全 / 不完全 ) 障害の発生状況 バックアップ / アーカイブログの存在状況から完全回復か不完全回復かを決定する リカバリ実施後の影響を考慮不完全回復などのリカバリを実施した後の影響を把握する ( スタンバイDBの再作成など ) リストア / リカバリ実施 バックアップをリストアし リカバリを実施するリカバリを実施する リカバリが必要なケース SCNの不整合が発生した場合 SCN(System Change[Commit] Number) 内部で変更状態を管理するタイムスタンプのようなもの REDOログ 制御ファイル 各データファイルに格納 ファイルが破損した場合バックアップファイルをリストアした場合 そのファイルの SCN が過去に戻るため 他のファイルと SCN の不整合が発生することになる リカバリとは SCN の不整合を修復する作業
リカバリの基本動作 1 リストア 2SCN の不整合が発生 リカバリが必要! DataFile1 [SCN] データファイル 障害発生 DataFile3 30 リカバリルートを確立する 3 リカバリ 31 32 35 36 37 オンライン 36 37 38 REDOログ アーカイブログ リカバリの基本動作 4SCNの致 4SCN の一致 リカバリ完了 1 リストア 2SCN の不整合が発生 リカバリが必要! DataFile1 [SCN] データファイル DataFile3 30 リカバリルートを確立する 3 リカバリ 31 32 35 36 37 オンライン 36 37 38 REDOログ アーカイブログ
リカバリ不可能な場合 [SCN] バックアップ Ⅰ. バックアップの欠落 DataFile1 データファイル 30 このルートが寸断されるとリカバリは不可能 アーカイブログ 31 32 35 36 DataFile3 オンライン 36 37 38 REDOログ Ⅲ. REDO ログの欠落 ( 未アーカイブ ) Ⅱ. アーカイブログの欠落 CURRENT 状態の REDO ログが重要な理由 バッファキャッシュ データファイル チェックポイント SCN DataFile1 最新 SCN [SCN] SCN のギャップ 運用中はチェックポイントSCNと最新 SCN にギャップが存在 チェックポイントの実行時にデータファイルの SCN が増加 データファイル+バッファキャッシュで最新データの整合性を保証 バッファキャッシュが失われた場合 REDO ログからのみリカバリ可能 オンライン REDO ログ 稼動中のデータベース 37 38 INACTIVE CURRENT ログスイッチ 完全回復には CURRENT 状態の REDO ログが必要
RECOVER コマンドによる動作の違い バックアップ SCN ターゲット SCN [SCN] リストア オンライン REDO ログ 36 37 38 完全回復 RECOVER DATABASE 30 35 36 37 不完全回復 RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL/TIME/CHANGE アーカイブログ RECOVER コマンドの違いによってリカバリルートが異なる リカバリの概念 ( 完全回復 ) バックアップ SCN ターゲット SCN 1 リストア DataFile1 障害発生 [SCN] DataFile3 データファイル 2リカバリルート決定 RECOVER DATABASE オンライン 36 37 38 REDOログ 30 31 32 35 36 37 アーカイブログ
リカバリの概念 ( 完全回復 ) バックアップ SCN ターゲット SCN 1 リストア DataFile1 [SCN] 完全回復 3リカバリ 2リカバリルート決定 RECOVER DATABASE DataFile3 データファイル オンライン 36 37 38 REDOログ 30 31 32 35 36 37 アーカイブログ リカバリの概念 ( 不完全回復 ) バックアップ SCN ターゲット SCN 1 リストア [SCN] DataFile1 DataFile1 DataFile3 DataFile3 データファイル 30 2 リカバリルート決定 RECOVER DATABASE UNTIL CANCEL 31 32 35 36 37 35 障害発生 36 37 38 オンライン REDO ログ アーカイブログ
リカバリの概念 ( 不完全回復 ) バックアップ SCN ターゲット SCN 1 リストア [SCN] DataFile1 3 リカバリ DataFile1 不完全回復 DataFile3 DataFile3 データファイル 30 2 リカバリルート決定 RECOVER DATABASE UNTIL CANCEL 1 31 32 35 36 37 4RESETLOGS 38 オンライン REDOログアーカイブログ 現場から学ぶバックアップ リカバリの極意 リカバリ編 リカバリの基本 ケーススタディ CASE.1 ASM ディスクグループがない状態でのリカバリエラー CASE.2 ローカル管理の一時表領域のリカバリ < 付録 > CASE.3 RAC 構成 : 時刻のズレによるリカバリ失敗 CASE.4 RAC 構成 : アーカイブ出力タイミングによる失敗 CASE.5 オンラインバックアップ中の障害 CASE.6 ファイルコピー中の起動 CASE.7 データファイルが自動的にOFFLINEに!? CASE.8 ACTIVE 状態の REDO ログが破損すると CASE.9 バックアップが存在しないファイルのリカバリ CASE.10 NOARCHIVEでも完全回復が可能! CASE.11 ORA-1578: ブロック障害が発生!
Oracle ASM(Automatic Storage Management) とは Oracle データベースファイルを管理するための ボリューム マネージャ ASM による利点 可用性の向上 : ミラーリングの機能を実装 パフォーマンスの向上 : ストライピングの機能を実装 管理の容易性の向上 :DISK 配置を意識しないデータベースの作成が可能 Oracle ASM(Automatic Storage Management) とは ASMではディスク グループ管理用のインスタンスを作成する必要がある データベースインスタンス ASM 用インスタンス ディスクを使用する ディスクを管理する ディスク グループ 1 ディスク グループ 2
<CASE.1 ASM 構成のディスクグループが存在しない状態でのリカバリエラー > 発生事例 : < 事象 > ASM 構成でのデータベースでファイル破損が発生 データベースリカバリを試みたが ORA-19870 等のエラーにより リカバリが失敗してしまった < 原因 > 1ASMインスタンスが未起動でディスク グループが認識できない もしくは 2ASMディスクグループ自体が破壊されたため RMANにより取得したバックアップファイルのリストア先が見つからない CASE.1 ASMディスクグループがない状態でのリストアエラー 制御ファイルリストア開始 RMAN> restore controlfile; : ORA-19870: error reading backup /ora01/arch_log/ctl/backupset/backup_ctl.2vkh5dmh_1_1 ORA-19504: failed to create file "+DG_REDO/ora01/control01.ctl" ORA-17502: ksfdcre:3 Failed to create file +DG_REDO/ora01/control01.ctl ORA-15001: diskgroup "DG_REDO" does not exist or is not mounted ORA-15077: could not locate ASM instance serving a required diskgroup failover to previous backup エラー発生! どうすればいいの?
CASE.1 ASMディスクグループがない状態でのリストアエラー < 対処方法 > ASMインスタンスの起動状態を確認し 停止していれば起動する ASMインスタンスの状態確認 $crsstat crs_stat tt 名前型ター... ト状態ホスト -------------------------------------------------- ora...ra01.db application OFFLINE OFFLINE ora...11.inst application OFFLINE OFFLINE ora...12.inst application OFFLINE OFFLINE ora...sm1.asm application OFFLINE OFFLINE ora...1p.lsnr application ONLINE ONLINE racsv1 ora...n1p.gsd application ONLINE ONLINE racsv1 ora...n1p.ons application ONLINE ONLINE racsv1 ora...n1p.vip application ONLINE ONLINE racsv1 ora...sm2.asm application OFFLINE OFFLINE ora...2p.lsnr application ONLINE ONLINE racsv2 ora...n2p.gsd application ONLINE ONLINE racsv2 ora...n2p.ons application ONLINE ONLINE racsv2 ora...n2p.vip application ONLINE ONLINE racsv2 ASM インスタンスの起動 $ srvctl start asm -n racsv1 CASE.1 ASMディスクグループがない状態でのリストアエラー ASM インスタンスの起動してもリストアに失敗する場合 ASMディスクグループ自体が破損しています この場合 ASMディスクグループを再作成します ASMディスクグループの再作成 $ export ORACLE_SID=+ASM1 $ sqlplus qp / as sysdba ASMインスタンスに接続 SQL> create diskgroup DG_CTL external redundancy disk '/dev/raw/raw4'; ディスク グループが作成されました リストア実行 RMAN> restore controlfile; : restore が完了しました ( 完了時間 : 2009/10/08-16:26:47) 注意 ディスクグループ破損時に備えて ディスクグループ作成コマンドは予め準備デプ作成しておくこと
<CASE.2 ローカル管理の一時表領域のリカバリ > < 事象 > 発生事例 : データベースは正常にオープンするがアラートログには ORA-01110 等が出力されている また 大量ソート処理がエラーとなる < 原因 > ローカル管理の一時表領域に障害が発生しています ローカル管理の一時表領域の障害の場合 データベースは正常に起動できるため ディスクソートを行うような処理をしない限り 通常は破損に気づくことがない CASE.2 ローカル管理の一時表領域のリカバリ < 出力エラー例 (alert.log)> Errors in file /oralog/db/log/bdump/xxxx / _ lgwr _ 17890.trc: ORA-01110:???????1025: '/oradata/db/dbf/temp01.dbf' : < データディクショナリビューの検索エラー例 > SQL> select * from dba_temp_files; : ORA-01187: cannot read from file 1025 because it failed verification tests ORA-01110: data file 1025: '/psc/goge/db/dbf/temp01.dbf' リストア / リカバリは必要ありません!! < 対処 > テンポラリファイルの再作成を行う テンポラリファイルの再作成 SQL> alter database tempfile '/oradata/db/dbf/temp01.dbf' drop; データベースが変更されました SQL> alter tablespace TEMP add tempfile '/oradata/db/dbf/temp01.dbf' size 1024M reuse ; 表領域が変更されました
まとめ ARCHIVEモード+オンラインバックアップ /RMAN SCN の不整合を修復するためにリカバリが必要 障害状況を把握しリストア / リカバリの必要性を判断 バックアップから アーカイブログ オンライン REDO を経由するリカバリルートを確立する リカバリ成功の鍵となるのは... バックアップファイル アーカイブログの管理 適切なリカバリ手順の選択 / 実行 さいごに FJHでは お客様のご要望にかなう様々なソリューションをご用意しています オラクルのことなら すべてご相談ください! < 主な提供ソリューション > トータル DBソリューション ディザスタリカバリ ソリューションリ バックアップリカバリ ソリューション ブレード ソリューション DBマイグレーション for Oracle DBセキュリティ ソリューション RACソリューション RDBO etc 株式会社富士通北陸システムズデータベースソリューション事業本部 URL : http://jp.fujitsu.com/group/fjh/services/ j p j mailto : fjh-dbsupport@ml.jp.fujitsu.com
All Rights Reserved, Copyright (C) FUJITSU HOKURIKU SYSTEMS LIMITED 2009 現場から学ぶバックアップ リカバリの極意 リカバリ編 リカバリの基本 ケーススタディ CASE.1 ASM 構成のディスクグループが存在しない状態 でのリカバリエラー CASE.2 ローカル管理の一時表領域のリカバリ < 付録 > CASE.3 RAC 構成 : 時刻のズレによるリカバリ失敗 CASE.4 RAC 構成 : アーカイブ出力タイミングによる失敗 CASE.5 オンラインバックアップ中の障害 CASE.6 ファイルコピー中の起動 CASE.7 データファイルが自動的にOFFLINEに!? CASE.8 ACTIVE 状態の REDO ログが破損すると CASE.9 バックアップが存在しないファイルのリカバリ CASE.10 NOARCHIVEでも完全回復が可能! CASE.11 ORA-1578: ブロック障害が発生!
<CASE.3 時刻のズレによるリカバリ失敗 > 発生事例 : < 事象 > RAC 構成でのデータベースで重要なテーブルを削除してしまった 対象テーブルが削除される前の時間を指定してリカバリを試みたが ORA-01547 等のエラーにより リカバリが失敗 < 原因 > RAC を構成するノード間で時刻同期が取れていなかったこと 時間指定でのデータベースリカバリを行う際は 必ず全サーバで時刻同期が取れている状態で実施する必要がある CASE.3 時刻のズレによるリカバリ失敗リ失敗 時間指定リカバリ開始 RMAN> run { RMAN> set until time '2009/09/30-09:00:00'; / RMAN> restore database; RMAN> crosscheck archivelog all; RMAN> recover database delete archivelog, check readonly; RMAN> sql 'alter database open resetlogs'; RMAN> } : ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below ORA-01195: online backup of file 1 needs more recovery to be consistent ORA-01110: data file 1: '/dev/raw/raw126' < 対処方法 > エラー発生! どうすればいいの? リカバリエラー発生時は発生時は ログ順序番号を指定したリカバリを再実行 RAC 環境でのバックアップリカバリは NTPサーバを利用する等で全ノードの時刻同期が取れている状態で運用を行いましょう
<CASE.4 アーカイブ出力タイミングによる失敗 > 発生事例 : < 事象 > RAC 構成でのデータベースで全障害が発生 カレントREDOログも破壊されているため アーカイブログ出力時点までのログ順序番号指定でリカバリを実施したが 必要なログが見つからない旨のエラーで失敗 < 原因 > RACの各スレッドの REDOログにおけるアーカイブ出力タイミングのずれをグ考慮したリカバリポイント ( ログ順序番号 ) を指定してなかった 現場から学ぶバックアップ リカバリの極意 リカバリ編 リカバリの基本 ケーススタディ CASE.1 ASM 構成のディスクグループが存在しない状態 でのリカバリエラー CASE.2 ローカル管理の一時表領域のリカバリ < 付録 > CASE.3 RAC 構成 : 時刻のズレによるリカバリ失敗 CASE.4 RAC 構成 : アーカイブ出力タイミングによる失敗 CASE.5 オンラインバックアップ中の障害 CASE.6 ファイルコピー中の起動 CASE.7 データファイルが自動的にOFFLINEに!? CASE.8 ACTIVE 状態の REDO ログが破損すると CASE.9 バックアップが存在しないファイルのリカバリ CASE.10 NOARCHIVEでも完全回復が可能! CASE.11 ORA-1578: ブロック障害が発生!
CASE.4 アーカイブ出力タイミングによる失敗 リストア / リカバリ開始 RMAN> run { RMAN> set until logseq 30 thread 1; RMAN> restore database; RMAN> recover database delete archivelog, check readonly; RMAN> } RMAN-03002: failure of recover command at 09/30/2009 09:28:33 RMAN-06054: media recovery requesting unknown log: thread 2 seq 30 lowscn 1342039 エラー発生! なんで? 時間 スレッド 1 スレッド 2 リカバリポイント 27 28 29 30 27 28 29 30 破損 破損 スレッド 1/ アーカイフ 29 までリカバリするには スレッド 2/ アーカイフ 30 のログが一部必要!! アーカイブ REDO カレント REDO CASE.4 アーカイブ出力タイミングによる失敗 < 対処 > 発生したエラーで出力されているメッセージを確認し 正しいスレッド番号とログ順序番号で再度リカバリを再実行 出力エラーメッセージ RMAN-06054: media recovery requesting unknown log: thread 2 seq 30 lowscn 1342039 リストア / リカバリ実行 RMAN> run { RMAN> set until logseq 30 thread 2; エラーメッセージ通りに指定 RMAN> restore database; RMAN> recover database delete archivelog, check readonly; RMAN> } メディア リカバリが完了しました 経過時間 : 00:02:02 recover が完了しました ( 完了時間 : 20090930093733)
現場から学ぶバックアップ リカバリの極意 リカバリ編 リカバリの基本 ケーススタディ CASE.1 ASM 構成のディスクグループが存在しない状態 でのリカバリエラー CASE.2 ローカル管理の一時表領域のリカバリ < 付録 > CASE.3 RAC 構成 : 時刻のズレによるリカバリ失敗 CASE.4 RAC 構成 : アーカイブ出力タイミングによる失敗 CASE.5 オンラインバックアップ中の障害 CASE.6 ファイルコピー中の起動 CASE.7 データファイルが自動的にOFFLINEに!? CASE.8 ACTIVE 状態の REDO ログが破損すると CASE.9 バックアップが存在しないファイルのリカバリ CASE.10 NOARCHIVEでも完全回復が可能! CASE.11 ORA-1578: ブロック障害が発生! <CASE.5 オンラインバックアップ中の障害 > 発生事例 : < 事象 > 夜間のオンラインバックアップ実行中にCPU 障害によりマシンが停止した CPU 交換後 OSは起動したがOracle 起動時にORA-1113が発生 < 原因 > オンラインバックアップ中は 対象データファイルヘッダのチェックポイント SCN が固定される 他のデータファイルと SCN の不整合が発生しているため リカバリが必要と判断され ORA-1113: メディアリカバリが必要です が発生する
CASE.5 オンラインバックアップ中の障害 オンラインバックアップ開始 SQL> ALTER TABLESPACE USERS BEGIN BACKUP; インスタンスダウン ( ハード障害 shutdown abort 等 ) Oracle 起動 SQL> STARTUP データベースがマウントされました ORA-01113: ファイル5はメディア リカバリが必要です ORA-01110: データ ファイル 5: E: ORACLE ORADATA TARGET USERS01.DBF' チェックポイントSCN 確認 SQL> SELECT FILE#,STATUS,RECOVER,FUZZY,CHECKPOINT_CHANGE# 2 FROM V$DATAFILE_HEADER; FILE# STATUS REC FUZ CHECKPOINT_CHANGE# リストア / リカバリは ---------- ------- --- --- ------------------ 必要なの?? 3 ONLINE NO YES 180715 4 ONLINE NO YES 180715 SCNの 5 ONLINE NO YES 180658 不整合 CASE.5 オンラインバックアップ中の障害 リストア / リカバリは必要ありません!! < 対処 > バックアップモードを確認し ALTER DATABASE END BACKUP を実行する バックアップモード確認 SQL> SELECT * FROM V$BACKUP; FILE# STATUS CHANGE# TIME ---------- ----------- ---------- ------------------- 5 ACTIVE 180658 2007-11-11 15:50:35 バックアップモード解除 SQL> ALTER DATABASE DATAFILE 5 END BACKUP; または SQL> ALTER DATABASE END BACKUP; (9i~) バックアップモード再確認 FILE# STATUS CHANGE# TIME ---------- ----------- ---------- ------------------- 5 NOT ACTIVE 180658 2007-11-11 15:50:35 データベース起動 SQL> ALTER DATABASE OPEN; recover databaseでも回復可能だが アーカイブログの適用が必要になり時間がかかる場合がある
現場から学ぶバックアップ リカバリの極意 リカバリ編 リカバリの基本 ケーススタディ CASE.1 ASM 構成のディスクグループが存在しない状態 でのリカバリエラー CASE.2 ローカル管理の一時表領域のリカバリ < 付録 > CASE.3 RAC 構成 : 時刻のズレによるリカバリ失敗 CASE.4 RAC 構成 : アーカイブ出力タイミングによる失敗 CASE.5 オンラインバックアップ中の障害 CASE.6 ファイルコピー中の起動 CASE.7 データファイルが自動的にOFFLINEに!? CASE.8 ACTIVE 状態の REDO ログが破損すると CASE.9 バックアップが存在しないファイルのリカバリ CASE.10 NOARCHIVEでも完全回復が可能! CASE.11 ORA-1578: ブロック障害が発生! <CASE.6 ファイルコピー中の起動 (Windows)> 発生事例 : < 事象 > オフラインバックアップ実行中にスケジューラにより Oracle が起動されてしまった オープンは出来たが運用中にORA-1122 ORA-1208が発生しアクセス不可能になった 再起動を行うとORA-1113が発生 < 原因 > Windowsのファイルコピー (COPY XCOPY 等 ) は対象ファイルのコピー中に書込み不可のロックをかける Oracleも起動時にファイルにロックをかけようとするがアクセス拒否され 最終的に他のデータファイルと SCN のギャップが発生する
CASE.6 ファイルコピー中の起動 (Windows) ファイルコピー開始 C: > COPY E: ORACLE ORADATA TARGET SYSTEM01.DBF F: BACKUP ファイルコピー中にOracle 起動 SQL> STARTUP データベースがマウントされました データベースがオープンされました アラートログ確認 ORA-01110: data file 1: E: ORACLE ORADATA TARGET SYSTEM01.DBF DBF' ORA-01114: IO error writing block to file 1 (block # 1) ORA-27072: skgfdisp: I/O error OSD-04008: WriteFile() エラー ファイルへの書込みができません O/S-Error: (OS 5) アクセスが拒否されました SYSTEM 表領域の場合インスタンスダウン ( チェックポイント実行時 ) ユーザ表領域の場合 Oracleが自動的にファイルをオフラインに CASE.6 ファイルコピー中の起動 (Windows) Oracle 再起動 SQL> STARTUP データベースがマウントされました ORA-01113: ファイル 1 はメディア リカバリが必要です ORA-01110: データ ファイル 1: E: ORACLE ORADATA TARGET SYSTEM01.DBF' チェックポイントSCN 確認 SQL> SELECT FILE#,STATUS,RECOVER,FUZZY,CHECKPOINT_CHANGE# 2 FROM V$DATAFILE_HEADER; FILE# STATUS REC FUZ CHECKPOINT_CHANGE# CHANGE# ---------- ------- --- --- ------------------ 1 ONLINE YES NO 203980 SCNの不整合 2 ONLINE NO YES 203981 3 ONLINE NO YES 203981 リストアは必要なの??
CASE.6 ファイルコピー中の起動 (Windows) リストアは必要ありません!! < 対処 > オンライン REDO ログを確認し RECOVER DATABASE を実行する オンラインREDOログの最小 SCN SQL> SELECT MIN(FIRST_CHANGE#) FROM V$LOG; MIN(FIRST_CHANGE#) ------------------ 180713 < ORA-1113が発生するファイルのSCN(203980) リカバリ実行 ( リストアなし ) オンラインREDOログのみでリカバリ可能 SQL> RECOVER DATABASE; メディア リカバリが完了しました チェックポイントSCN 確認 FILE# STATUS REC FUZ CHECKPOINT_CHANGE# ---------- ------- --- --- ------------------ 1 ONLINE NO NO 205710 SCNが一致 2 ONLINE NO NO 205710 データベース起動 SQL> ALTER DATABASE OPEN; 現場から学ぶバックアップ リカバリの極意 リカバリ編 リカバリの基本 ケーススタディ CASE.1 ASM 構成のディスクグループが存在しない状態 でのリカバリエラー CASE.2 ローカル管理の一時表領域のリカバリ < 付録 > CASE.3 RAC 構成 : 時刻のズレによるリカバリ失敗 CASE.4 RAC 構成 : アーカイブ出力タイミングによる失敗 CASE.5 オンラインバックアップ中の障害 CASE.6 ファイルコピー中の起動 CASE.7 データファイルが自動的にOFFLINEに!? CASE.8 ACTIVE 状態の REDO ログが破損すると CASE.9 バックアップが存在しないファイルのリカバリ CASE.10 NOARCHIVEでも完全回復が可能! CASE.11 ORA-1578: ブロック障害が発生!
データファイルが自動的に OFFLINE に!? <CASE.7 Oracle がファイルを OFFLINE に > 発生事例 : < 事象 > データファイルが破損したためリストア後 RECOVER DATABASEを実行し データベースは起動出来たが ORA-376( ファイルを読み込むことはできません ) が発生し テーブルにアクセスできない < 原因 > Oracleがデータファイルを自動的にOFFLINEに設定したため OFFLINE のデータファイルは RECOVER DATABASEコマンドでは復旧することができない また オープン時にもOFFLINEファイルの整合性チェックは行わないため エラー出力もされない CASE.7 Oracle がファイルを OFFLINE に < 出力エラー例 (alert.log)> ORA-01171: datafile 5 going offline due to error advancing checkpoint ORA-01116: error in opening database file 5 ORA-01110: data file 5: 'E: ORACLE ORADATA TARGET USERS01.DBF' ORA-27041: unable to open file OSD-04002: ファイルをオープンできません O/S-Error: (OS 21) デバイスの準備ができていません KCF: write/open error block=0x15 online=1 file=2 E: ORACLE ORADATA TARGET UNDOTBS01.DBF error=27072 txt: OSD-04008: WriteFile() に失敗しました ファイルへの書込みができません O/S-Error: (OS 33) プロセスはファイルにアクセスできません 別のプロセスがファイルの一部をロックしています Automatic datafile offline due to write error on file 2: E: ORACLE ORADATA TARGET UNDOTBS01.DBF
CASE.7 Oracle がファイルを OFFLINE に < 対処 > RECOVER DATABASE を実行する前に データファイルを ONLINE にする Oracle 起動 SQL> STARTUP MOUNT データベースがマウントされました データファイルヘッダのSTATUS 確認 SQL> SELECT FILE#,STATUS,RECOVER,FUZZY,CHECKPOINT_CHANGE# FUZZY CHECKPOINT CHANGE# 2 FROM V$DATAFILE_HEADER; FILE# STATUS REC FUZ CHECKPOINT_CHANGE# ---------- ------- --- --- ------------------ 1 ONLINE NO YES 197092 2 OFFLINE YES 195533 3 ONLINE NO YES 197092 OFFLINE 状態 4 ONLINE NO YES 197092 5 OFFLINE YES 195533 CASE.7 Oracle がファイルを OFFLINE に データファイルのONLINE SQL> Q> ALTER DATABASE DATAFILE 2,5 ONLINE; データベースが変更されました データファイルヘッダのSTATUS 確認 FILE# STATUS REC FUZ CHECKPOINT_CHANGE# CHANGE# ---------- ------- --- --- ------------------ 1 ONLINE NO YES 197092 2 ONLINE YES 195533 3 ONLINE NO YES 197092 ONLINE 状態 4 ONLINE NO YES 197092 5 ONLINE YES 195533 リカバリ実行 SQL> RECOVER DATABASE; メディア リカバリが完了しました データベース起動 SQL> ALTER DATABASE OPEN; データベースが変更されました
現場から学ぶバックアップ リカバリの極意 リカバリ編 リカバリの基本 ケーススタディ CASE.1 ASM 構成のディスクグループが存在しない状態 でのリカバリエラー CASE.2 ローカル管理の一時表領域のリカバリ < 付録 > CASE.3 RAC 構成 : 時刻のズレによるリカバリ失敗 CASE.4 RAC 構成 : アーカイブ出力タイミングによる失敗 CASE.5 オンラインバックアップ中の障害 CASE.6 ファイルコピー中の起動 CASE.7 データファイルが自動的にOFFLINEに!? CASE.8 ACTIVE 状態の REDO ログが破損すると CASE.9 バックアップが存在しないファイルのリカバリ CASE.10 NOARCHIVEでも完全回復が可能! CASE.11 ORA-1578: ブロック障害が発生! ACTIVE 状態の REDOログが破損すると <CASE.8 ACTIVE 状態の REDO ログが破損 > 発生事例 : < 事象 > CURRENTではないオンラインREDOログが破損した リカバリ手順として CURRENT 以外のREDOログの場合は再作成 (ALTER DATABASE CLEAR LOGFILE) で復旧できると聞いていたが ORA-1624: クラッシュ リカバリに必要です が発生し復旧できない < 原因 > 破損したオンライン REDO ログが ACTIVE 状態のため ACTIVE 状態の REDO ログは CURRENT ではないがクリアすることはできない
ACTIVE 状態の REDO ログ チェックポイント SCN DataFile1 データファイル 最新 SCN [SCN] ログスイッチ時にはデータファイルの SCNは増加しない (Oracle 8i ~) ( ゼロプライオリティチェックポイント ) チェックポイントが完了していない REDOログは ACTIVE 状態 ACTIVEなREDOログはクリアできない (CURRENT と同じ扱い ) オンライン REDO ログ アーカイブログ 37 38 ACTIVE CURRENT ログスイッチ 稼動中の 37 データベース ACTIVE 状態でもアーカイブログは作成されている (CURRENT と異なる点 ) ACTIVEなREDOログが破損した場合不完全回復 (RESETLOGS) が必要 CASE.8 ACTIVE 状態の REDOログが破損 バックアップSCN ターゲットSCN 1 リストア DataFile1 障害発生 [SCN] 2 リカバリルート決定 DataFile3 データファイル 障害発生 オンライン 36 37 38 REDOログ 30 31 32 35 36 37 アーカイブログ
CASE.8 ACTIVE 状態の REDOログが破損 バックアップSCN ターゲットSCN [SCN] 1 リストア DataFile1 不完全回復 ( データ損失なし ) 3 リカバリ 2 リカバリルート決定 4RESETLOGS DataFile3 データファイル オンライン 36 37 38 REDOログ 30 31 32 35 36 37 アーカイブログ CASE.8 ACTIVE 状態の REDOログが破損 < 対処 > 不完全回復ベースでスで アーカイブログ CURRENT の REDO ログを適用する データファイル 2 のリストア CP Oracle 起動 SQL> STARTUP MOUNT データベースがマウントされました オンライン REDO ログの STATUS 確認 SQL> SELECT GROUP#, SEQUENCE#, ARCHIVED, STATUS FROM V$LOG; GROUP# SEQUENCE# ARC STATUS ---------- ---------- --- ---------------- 1 17 YES ACTIVE 破損 2 18 NO CURRENT 3 16 YES INACTIVE
CASE.8 ACTIVE 状態の REDOログが破損 不完全回復実行 SQL> RECOVER DATABASE UNTIL CANCEL アーカイブ適用 (ACTIVE 状態のREDOに対応 ) ORA-00289: 検討すべきログ ファイル :E: ORACLE ADMIN TARGET ARCHIVE TARGET_00017.ARC ORA-00280: 変更 198817 ( スレッド1) は順序番号 17に存在します E: ORACLE ADMIN TARGET ARCHIVE TARGET ORACLE ADMIN TARGET ARCHIVE TARGET_00017.ARC < 入力 > CURRENT REDOログの適用 ORA-00289: 検討すべきログ ファイル :E: ORACLE ADMIN TARGET ARCHIVE TARGET_00018.ARC ORA-00280: 変更 232695 ( スレッド1) は順序番号 18に存在します E: ORACLE ORADATA TARGET REDO02.LOG < 入力 > データベース起動 (RESETLOGS) SQL> ALTER DATABASE OPEN RESETLOGS; 現場から学ぶバックアップ リカバリの極意 リカバリ編 リカバリの基本 ケーススタディ CASE.1 ASM 構成のディスクグループが存在しない状態 でのリカバリエラー CASE.2 ローカル管理の一時表領域のリカバリ < 付録 > CASE.3 RAC 構成 : 時刻のズレによるリカバリ失敗 CASE.4 RAC 構成 : アーカイブ出力タイミングによる失敗 CASE.5 オンラインバックアップ中の障害 CASE.6 ファイルコピー中の起動 CASE.7 データファイルが自動的にOFFLINEに!? CASE.8 ACTIVE 状態の REDO ログが破損すると CASE.9 バックアップが存在しないファイルのリカバリ CASE.10 NOARCHIVEでも完全回復が可能! CASE.11 ORA-1578: ブロック障害が発生!
バックアップが存在しないファイルのリカバリリ <CASE.9 ファイルのバックアップがない!!> 発生事例 : < 事象 > システムが稼動して一年後 表領域 / データファイルを追加したが 運用中にデータファイルが破損してしまった リカバリを実施しようとしたが 追加したデータファイルのバックアップが存在していなかった < 原因 > バックアップファイルも破損してしまった バックアップツールやバックアップ用シェルスクリプトの修正を忘れてプ用シルスクリプトの修正を忘れていたリカバリは不可能なのリ?? CASE.9 ファイルのバックアップがない!! リカバリ可能な場合があります!! < 対処 > CREATE DATAFILE で空のファイルを作成し アーカイブログを適用する データファイル破損 ORA-01122: database file 6 failed verification check ORA-01110: data file 6: 'E: ORACLE ORADATA TARGET USERS201.DBF' リストアしようと思ったがデータファイルのバックアップがない!! 表領域をオフライン SQL> ALTER TABLESPACE USERS2 OFFLINE IMMEDIATE; 空のデータファイルを再作成 SQL> ALTER DATABASE CREATE DATAFILE 6 AS 'E: ORACLE ORADATA TARGET USERS201.DBF'; 元ファイル作成時の情報 SQL> SELECT FILE#,CHANGE#,TIME FROM V$RECOVER_FILE; FILE# CHANGE# TIME ---------- ---------- ------------------- 6 198744 2007-11-17 19:53:21
CASE.9 ファイルのバックアップがない!! リカバリ可能な場合があります!! リカバリに必要なアーカイブログの確認カイブ SQL> SELECT ARCHIVE_NAME FROM V$RECOVERY_LOG; ARCHIVE_NAME ----------------------------------------------------- E: ORACLE ADMIN TARGET ARCHIVE TARGET_00006.ARC ARC E: ORACLE ADMIN TARGET ARCHIVE TARGET_00007.ARC E: ORACLE ADMIN TARGET ARCHIVE TARGET_00008.ARC リカバリ実施 SQL> RECOVER TABLESPACE USERS2; ログが適用されました メディア リカバリが完了しました 表領域をオンライン SQL> ALTER TABLESPACE USERS2 ONLINE; 表示されたアーカイブが全て存在していればリカバリが可能! 現場から学ぶバックアップ リカバリの極意 リカバリ編 リカバリの基本 ケーススタディ CASE.1 ASM 構成のディスクグループが存在しない状態 でのリカバリエラー CASE.2 ローカル管理の一時表領域のリカバリ < 付録 > CASE.3 RAC 構成 : 時刻のズレによるリカバリ失敗 CASE.4 RAC 構成 : アーカイブ出力タイミングによる失敗 CASE.5 オンラインバックアップ中の障害 CASE.6 ファイルコピー中の起動 CASE.7 データファイルが自動的にOFFLINEに!? CASE.8 ACTIVE 状態の REDO ログが破損すると CASE.9 バックアップが存在しないファイルのリカバリ CASE.10 NOARCHIVEでも完全回復が可能! CASE.11 ORA-1578: ブロック障害が発生!
NOARCHIVE でも完全回復が可能! <CASE.10 NOARCHIVE モードの完全回復 > 発生事例 : < 事象 > NOARCHIVEモードで運用中にデータファイルの破損が発生した 出来れば最新データを復旧したい < 対処 > NOARCHIVEモードでもあきらめないバックアップ取得タイミングとオンラインREDOログの状態によっては 最新データを復旧できる場合がある NOARCHIVEはアーカイブログが出力されないだけ オンライン REDOログでリカバリルートが確立出来ればリル完全回復が可能! CASE.10 NOARCHIVEモードの完全回復 バックアップ SCN ターゲット SCN [SCN] 1 リストア DataFile1 通常はアーカイブログがないためリカバリルート確立不可能 DataFile3 障害発生 データファイル 36 37 38 オンライン REDOログ アーカイブログ
CASE.10 NOARCHIVEモードの完全回復 バックアップ SCN ターゲット SCN バックアップを取得してから障害発生までの期間が短い場合 1 リストア DataFile1 [SCN] 完全回復障害発生 オンライン REDO ログがあればリカバリルートが確立できる! DataFile3 36 37 38 データファイルオンライン REDOログ アーカイブログ CASE.10 NOARCHIVEモードの完全回復 バックアップ SCN ターゲット SCN 1 リストア オンラインREDOログのサイズが大きいまたは グループ数が多い場合 DataFile1 [SCN] 完全回復障害発生 オンライン REDO ログがあればリカバリルートが確立できる! DataFile3 データファイル 30 31 32 35 36 37 38 オンライン REDOログ アーカイブログ
現場から学ぶバックアップ リカバリの極意 リカバリ編 リカバリの基本 ケーススタディ CASE.1 ASM 構成のディスクグループが存在しない状態 でのリカバリエラー CASE.2 ローカル管理の一時表領域のリカバリ < 付録 > CASE.3 RAC 構成 : 時刻のズレによるリカバリ失敗 CASE.4 RAC 構成 : アーカイブ出力タイミングによる失敗 CASE.5 オンラインバックアップ中の障害 CASE.6 ファイルコピー中の起動 CASE.7 データファイルが自動的にOFFLINEに!? CASE.8 ACTIVE 状態の REDO ログが破損すると CASE.9 バックアップが存在しないファイルのリカバリ CASE.10 NOARCHIVEでも完全回復が可能! CASE.11 ORA-1578: ブロック障害が発生! ORA-1578: ブロック障害が発生! <CASE.11 ORA-1578: ブロック障害 > 発生事例 : < 事象 > 運用中にORA-1578: ブロック障害が発生し特定のデータにアクセスができなくなってしまった < 原因 > Oracle ブロック構造の妥当性チェックに失敗したためクメモリ破損 ディスク破損に伴い発生する場合がある < 対処 > オブジェクトを再作成し ExportデータのImportやSQL*Loaderで修復 破損ブロックをスキップ( 一部データはロスト ) バックアップファイルからリカバリ リカバリはどうすればよい??
CASE.11 ORA-1578: ブロック障害 バックアップ SCN 最新 SCN 1データファイルリストア 通常のバックアップ構成 DataFile1 [SCN] データファイル ブロック障害 3 リカバリ 2 リカバリルート決定 36 37 38 オンライン REDOログ 31 32 35 36 37 アーカイブログ CASE.11 ORA-1578: ブロック障害 バックアップ SCN 最新 SCN 1 特定ブロックのみリストア RMAN の BMR : 9i/10g EE (Block Media Recovery) DataFile1 [SCN] データファイル 3 リカバリ ( 対象ブロック ) ブロックメディアリカバリ 2 リカバリルート決定 ( 対象ブロック関連 ) 36 37 38 31 32 35 36 37 オンライン REDOログ アーカイブログ