1. はじめに
Oracleデータベースにおいて、特定の表領域に障害が発生した場合、適切なリカバリ手順を実施することでデータを復旧できます。本記事では、RMANを使用したリカバリ方法を中心に、オンライン表領域とオフライン表領域のケースに分けて詳細な手順を解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
2. 事前準備
障害が発生した場合は、以下の点を確認してください。
- 障害の範囲を特定する(どの表領域が影響を受けたか)
- 現在のデータベースの状態を把握する(アーカイブログモードか、REDOログが適切に利用できるか)
- 最新のバックアップの有無を確認する(RMANでバックアップが取得されているか)
- 影響範囲を最小限に抑えるために、速やかにリカバリ手順を実施する
3. 障害の発生を確認する
3.1. 表領域の状態確認
まず、障害が発生した表領域を特定します。
SELECT tablespace_name, status FROM dba_tablespaces;
3.2. データファイルの状態確認
SELECT name, status FROM v$datafile WHERE tablespace_name = 'USERS';
ステータスの意味:
ONLINE:正常OFFLINE:手動でオフラインになっているRECOVER:リカバリが必要な状態
4. 表領域のリカバリ
表領域がオフラインの場合は、次の手順でリカバリを行います。
データベースを停止せずに行えます。
4.1. 表領域をオフラインにする(必要に応じて)
ALTER TABLESPACE USERS OFFLINE;
4.2. RMANを使用してリストアとリカバリ
RMAN> RESTORE TABLESPACE USERS;
RMAN> RECOVER TABLESPACE USERS;
4.3. 表領域をオンラインに戻す
ALTER TABLESPACE USERS ONLINE;
RMAN> select status from v$instance;
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
STATUS
------------
OPEN
RMAN> validate database;
validateを25-03-17で開始しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=74 デバイス・タイプ=DISK
チャネルORA_DISK_1: データファイルの検証を開始しています
チャネルORA_DISK_1: 検証のためのデータファイルを指定しています
入力データファイル ファイル番号=00001 名前=/u01/app/oracle/oradata/V19/system01.dbf
入力データファイル ファイル番号=00003 名前=/u01/app/oracle/oradata/V19/sysaux01.dbf
入力データファイル ファイル番号=00004 名前=/u01/app/oracle/oradata/V19/undotbs01.dbf
入力データファイル ファイル番号=00007 名前=/u01/app/oracle/oradata/V19/users01.dbf
チャネルORA_DISK_1: 検証が完了しました。経過時間: 00:00:07
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
1 OK 0 18147 149764 2274304
ファイル名: /u01/app/oracle/oradata/V19/system01.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 81289
Index 0 13395
Other 0 36929
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
3 OK 0 23966 93450 2274265
ファイル名: /u01/app/oracle/oradata/V19/sysaux01.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 6626
Index 0 2677
Other 0 60171
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
4 OK 0 658 92800 2274304
ファイル名: /u01/app/oracle/oradata/V19/undotbs01.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 0
Index 0 0
Other 0 92142
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
7 FAILED 0 725 9121 2274262
ファイル名: /u01/app/oracle/oradata/V19/users01.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 7996
Index 0 15
Other 1 384
検証により1つ以上の破損したブロックが見つかりました
詳細はトレース・ファイル/u01/app/oracle/diag/rdbms/v19/v19/trace/v19_ora_3136.trcを参照してください
チャネルORA_DISK_1: データファイルの検証を開始しています
チャネルORA_DISK_1: 検証のためのデータファイルを指定しています
現行の制御ファイルを検証に組み込んでいます
バックアップ・セットに現行のSPFILEを組み込んでいます
チャネルORA_DISK_1: 検証が完了しました。経過時間: 00:00:01
List of Control File and SPFILE
===============================
File Type Status Blocks Failing Blocks Examined
------------ ------ -------------- ---------------
SPFILE OK 0 2
Control File OK 0 646
validateを25-03-17で終了しました
RMAN> restore tablespace users; ★エラーが発生
restoreを25-03-17で開始しています
チャネルORA_DISK_1の使用
チャネルORA_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
チャネルORA_DISK_1: データファイル00007を/u01/app/oracle/oradata/V19/users01.dbfにリストアしています
チャネルORA_DISK_1: バックアップ・ピース/u01/app/oracle/product/19.0.0/dbhome_1/dbs/013kjnp8_1_1_1から読取り中です
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: restoreコマンドが03/17/2025 20:54:37で失敗しました
ORA-19870: バックアップ・ピース/u01/app/oracle/product/19.0.0/dbhome_1/dbs/013kjnp8_1_1_1のリストア中にエラーが発生しました
ORA-19573: exclusiveエンキュー(データファイル7)を取得できません。
ORA-19890: データ・ファイルはすでに使用されています
RMAN> alter tablespace users offline; ★USERS表領域をOFFLINEに変更
文が処理されました
RMAN> SELECT tablespace_name, status FROM dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS OFFLINE ★
RMAN> restore tablespace users; ★リストア
restoreを25-03-17で開始しています
チャネルORA_DISK_1の使用
チャネルORA_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
チャネルORA_DISK_1: データファイル00007を/u01/app/oracle/oradata/V19/users01.dbfにリストアしています
チャネルORA_DISK_1: バックアップ・ピース/u01/app/oracle/product/19.0.0/dbhome_1/dbs/013kjnp8_1_1_1から読取り中です
チャネルORA_DISK_1: ピース・ハンドル=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/013kjnp8_1_1_1 タグ=TAG20250317T204632
チャネルORA_DISK_1: バックアップ・ピース1がリストアされました
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:00:01
restoreを25-03-17で終了しました
RMAN> recover tablespace users; ★リカバリ
recoverを25-03-17で開始しています
チャネルORA_DISK_1の使用
メディア・リカバリを開始しています
メディア・リカバリが完了しました。経過時間: 00:00:03
recoverを25-03-17で終了しました
RMAN> alter tablespace users online; ★ONLINEに変更
文が処理されました
RMAN> SELECT tablespace_name, status FROM dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE ★
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
5. データファイルが失われた場合の対応
データファイルが削除または破損した場合、RMANを使用して復旧します。
5.1. 失われたデータファイルの特定
SELECT file_name FROM dba_data_files WHERE tablespace_name = 'USERS';
5.2. RMANでリカバリ
RMAN> RESTORE DATAFILE '/u01/oradata/ORCL/users01.dbf';
RMAN> RECOVER DATAFILE '/u01/oradata/ORCL/users01.dbf';
5.3. データファイルをオンラインにする
ALTER DATABASE DATAFILE '/u01/oradata/ORCL/users01.dbf' ONLINE;
6. SYSTEM表領域やUNDO表領域に障害が発生した場合の対応
6.1. SYSTEM表領域が破損した場合
SYSTEM表領域が破損すると、データベースが正常に起動できなくなります。この場合は、データベースをマウントモードで起動し、RMANを使用して復旧します。
RMAN> STARTUP MOUNT;
RMAN> RESTORE TABLESPACE SYSTEM;
RMAN> RECOVER TABLESPACE SYSTEM;
RMAN> ALTER DATABASE OPEN;
6.2. UNDO表領域が破損した場合
UNDO表領域が破損した場合、新しいUNDO表領域を作成することが可能です。
CREATE UNDO TABLESPACE UNDO_TBS2 DATAFILE '/u01/oradata/ORCL/undotbs02.dbf' SIZE 500M AUTOEXTEND ON;
ALTER SYSTEM SET UNDO_TABLESPACE = UNDO_TBS2;
7. 予防策とベストプラクティス
障害を未然に防ぐために、以下の対策を実施しましょう。
7.1. 定期的なバックアップの実施
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
7.2. 監視の設定
障害発生を早期に検知するため、アラートログを定期的に確認します。
SELECT message FROM v$alert_log WHERE originating_timestamp > SYSDATE - 1;
7.3. FRA(高速リカバリ領域)の設定
FRAを適切に設定し、アーカイブログやバックアップを管理しやすくします。
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 10G;
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/u02/fra';
8. まとめ
特定の表領域に障害が発生した場合、適切なリカバリ手順を実施することで迅速に復旧できます。特に、アーカイブログモードでの運用と定期的なバックアップの取得が重要です。本記事で紹介した手順を参考に、事前にリカバリ手順を確認しておくことをおすすめします。
また、SYSTEM表領域やUNDO表領域の障害に備えることも重要です。定期的にRMANを活用したバックアップを行い、監視を強化することで、障害時の影響を最小限に抑えられます。
[参考]
Oracle Database バックアップおよびリカバリ・ユーザーズ・ガイド 19c
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?




コメント