特定の表領域に障害が発生した場合のリカバリ手順

Oracle Master Gold

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専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました