24 RMAN操作のトラブルシューティング

RMAN操作についてトラブルシューティングするには、RMANのメッセージ出力および動的パフォーマンス・ビューを使用します。

24.1 RMANのメッセージ出力の解釈

Recovery Managerは、問題のトラブルシューティングに役立つ詳細なエラー・メッセージを提供します。

また、Oracle Databaseおよびサード・パーティのメディア・ベンダーは、独自の有効なデバッグ出力を生成します。この項では、発生する可能性がある様々なエラーの識別方法および解釈について説明します。

24.1.1 RMANメッセージ出力タイプの識別

障害が発生したか、応答しなくなったRMANジョブのトラブルシューティングに役立つ出力は、様々な場所に表示または格納されます。

次の表に、RMANのバックアップの問題をトラブルシューティングするために使用できるメッセージ出力の場所の概要を示します。

表24-1 メッセージ出力タイプ

出力タイプ 作成元 場所 説明

RMANメッセージ

RMAN

ジョブの詳細情報は、V$RMAN_STATUSおよびRC_RMAN_STATUSに表示されます。現行のジョブの情報は、V$RMAN_OUTPUTに表示されます。

RMANをコマンドラインから実行すると、出力を次の場所に送ることができます。

  • 標準出力

  • コマンドラインのLOGまたはSPOOL LOGコマンドで指定したログ・ファイル

  • RMAN出力をリダイレクトすることで作成したファイル(たとえば、UNIXの場合、'>'演算子を使用)

RMANジョブに関連するアクションと、RMAN、データベース・サーバーおよびメディア・ベンダーによって生成されたエラー・メッセージが含まれています。RMANのエラー・メッセージには、RMAN-という接頭辞が付いています。通常のアクションの説明には接頭辞は付きません。

次のPL/SQLを実行すると、V$RMAN_STATUSからすべてのエントリを削除できます。

update node set high_rsr_recid=0
where db_key = our_target_database_db_key ;

このファンクションでは、すべてのジョブ関連エントリが削除されます。新しいバックアップ・ジョブがV$RMAN_BACKUP_JOB_DETAILSに表示されるまで、行は表示されません。

alert_SID.log

Oracle Database

自動診断リポジトリ(ADR)ホームのalertサブディレクトリ

エラー、初期化パラメータ設定および管理操作の時系列のログが含まれています。上書きされた制御ファイル・レコードの値が記録されます。

Oracleトレース・ファイル

Oracle Database

ADRホームのtraceサブディレクトリ

Oracle Databaseプロセスによって生成された詳細な出力が含まれています。このファイルは、ORA-600またはORA-3113エラー・メッセージが発生したとき、RMANがチャネルを割り当てられないとき、およびデータベースがメディア管理ライブラリのロードに失敗したときに作成されます。

sbtio.log

サード・パーティのメディア管理ソフトウェア

ADRホームのtraceサブディレクトリ

メディア管理ソフトウェアによって生成されたベンダー固有の情報が含まれています。このログには、Oracle DatabaseまたはRMANのエラーは含まれていません。

メディア・マネージャのログ・ファイル

サード・パーティのメディア管理ソフトウェア

sbtio.log以外のすべてのメディア・マネージャのログのファイル名は、メディア管理ソフトウェアによって決定されます。

メディア管理デバイスの機能に関する情報が含まれています

24.1.2 長時間実行中のRMAN操作のトラブルシューティング

RMANメッセージ出力は、バックアップおよびリカバリ操作の進捗状況に関する情報を提供します。この情報を使用して、スタックしている操作やリソースを待機している操作のトラブルシューティングに必要な処理を行ってください。

大規模なデータベースのバックアップ、リストア、リカバリおよび複製などの特定の操作は、通常、完了するまでに時間がかかります。ただし、操作が進行中または一部のリソース上で待機している場合、必ず予測できるとはかぎりません。Oracle Databaseリリース18以上では、RMANメッセージ出力に、ジョブがリソースを待機しているかどうかを示す追加のロギング情報が含まれます。10分ごとに、RMANは、処理されるブロックの数が変更されたかどうかを確認します。処理されるブロックに変更がない場合、RMANは関連付けられた待機イベントを示すメッセージを表示します。

次に、RESTORE操作のRMAN出力の例を示します。

allocated channel: c1
channel c1: SID=123 device type=SBT_TAPE
channel c1: WARNING: Oracle Test Disk API

Starting restore at 18-JAN-18

channel c1: starting datafile backup set restore
channel c1: specifying datafile(s) to restore from backup set
channel c1: restoring datafile 00002 to /ade/b/2776899351/oracle/dbs/tbs_ax1.f
channel c1: reading from backup piece 01sov1t4_1_1

***** Hang Detected ***** at 2018-01-18 04:11:23 for channel c1, INSTID: 1, SID: 123, serial: 35831
No change in read blocks, thus showing wait event[Total blocks = 192000, Blocks read/recovered = 41530]
Seq_No   Event                            Waiting Time(mirco secs)
602      Backup: MML read backup piece    38094371

***** Hang Detected ***** at 2018-01-18 04:11:33 for channel c1, INSTID: 1, SID: 123, serial: 35831
No change in read blocks, thus showing wait event[Total blocks = 192000, Blocks read/recovered = 41530]
Seq_No   Event                            Waiting Time(mirco secs)
602      Backup: MML read backup piece    48106104

channel c1: piece handle=01sov1t4_1_1 tag=TAG20180118T040804
channel c1: restored backup piece 1
channel c1: restore complete, elapsed time: 00:02:35
Finished restore at 18-JAN-18
released channel: c1

出力では、メディア・マネージャの読取り操作で問題が発生したため、リストアがスタックしていたことが示されます。読取り操作が完了した後、RMANのリストアに成功しました。

24.1.3 RMANのエラー・メッセージ・スタックの識別

RMANは、エラーの発生時にそれらのエラーを通知します。回復不可能なエラーの場合、つまりRMANが別のチャネルへのフェイルオーバーを実行して特定のジョブ・ステップを完了することができない場合、すべてのジョブ・セットの完了後にエラーの概要レポートも出力されます。この機能は、遅延エラー・レポートともいいます。

RMANにエラーが発生したかどうかを確認する方法の1つは、リターン・コードを調べることです。2つ目の方法は、RMANの出力内でRMAN-00569文字列を検索することです。RMAN-00569は、エラー・スタック・バナーのメッセージ番号です。すべてのRMANエラーの前に、このエラー・メッセージが表示されます。出力内にRMAN-00569メッセージが表示されない場合、エラーはありません。

例24-1 RMAN構文エラー

この例は、RMAN構文エラーを示しています。RMAN-00569メッセージに続いて、エラーの理由を示すエラー・メッセージが表示されます。

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01005: syntax error: found ")": expecting one of: "archivelog, backup,
 backupset, controlfilecopy, current, database, datafile, datafilecopy, (, plus, ;, tablespace"
RMAN-01007: at line 1 column 18 file: standard input

24.1.4 RMANエラー・コードの識別

RMANメッセージ・スタックのエラー・コードを使用すると、RMANコマンドに関する問題をトラブルシューティングできます。

通常、RMANメッセージ・スタックには次のタイプのエラー・コードが含まれています。

  • 接頭辞がRMAN-のエラー

    これらはRMANエラーです。

  • 接頭辞がORA-のエラー

    メディア・マネージャのエラーでは接頭辞ORA-を使用します。

  • Additional information:の後に表示されるエラー

関連項目:

24.1.4.1 Recovery Managerのエラー・メッセージ番号

RMANのエラー・メッセージには、RMAN-という接頭辞が付いています。

次の表に、一般的なRMANエラー・メッセージのエラー範囲を示します。すべてのメッセージの詳細は、Oracle Databaseエラー・メッセージ・リファレンスを参照してください。

表24-2 RMANのエラー・メッセージの範囲

エラー範囲 原因

0550-0999

コマンドライン・インタプリタ

1000-1999

キーワード・アナライザ

2000-2999

構文アナライザ

3000-3999

主レイヤー

4000-4999

サービス・レイヤー

5000-5499

RESTOREコマンドまたはRECOVERコマンドのコンパイル

5500-5999

DUPLICATEコマンドのコンパイル

6000-6999

通常のコンパイル

7000-7999

通常の実行

8000-8999

PL/SQLプログラム

9000-9999

低レベルのキーワードのアナライザ

10000-10999

サーバー側の実行

11000-11999

PL/SQLとRMAN間のフェーズ間エラー

12000-12999

リカバリ・カタログ・パッケージ

24.1.4.2 ORA-19511: メディア・マネージャ・エラー

メディア・マネージャ・エラーが発生した場合、ORA-19511が通知され、説明を含むエラー・メッセージがメディア・マネージャからRMANに戻されます。RMANは、メディア・マネージャから戻されたエラーを表示します。

たとえば、次のようなエラーが表示されます。

ORA-19511: Error received from media manager layer, error text:
   sbtpvt_open_input: file .* does not exist or cannot be accessed, errno = 2

メディア・マネージャからのメッセージには、根本的な問題を修正するために十分な情報が含まれています。十分でない場合、ご使用のメディア・マネージャのドキュメントを参照するか、またはメディア管理ベンダーのサポート担当者に詳細を問い合せてください。ORA-19511エラーは、Oracle Databaseではなくメディア・マネージャによって生成されます。データベースは、メディア・マネージャからのメッセージを渡すのみです。原因を解決できるのは、メディア管理ベンダーのみです。

SBT 1.1対応のメディア管理レイヤーを使用している場合、その他のエラー・メッセージ・テキストが表示される場合があります。SBT 1.1対応のメディア管理レイヤーからの出力は、次のものと類似しています。

ORA-19507: failed to retrieve sequential file, handle="c-140148591-20031014-06", parms=""
ORA-27007: failed to open file
Additional information: 7000
Additional information: 2
ORA-19511: Error received from media manager layer, error text:
   SBT error = 7000, errno = 0, sbtopen: backup file not found

「Additional information」には、SBT 1.1に固有なエラー・コードが表示されます。表示される値は、表24-3に示すメディア・マネージャ・メッセージ番号およびエラー・テキストに対応しています。RMANは、「ORA-19511: メディア・マネージャ・レイヤーからのエラーを受け取りました。」を再度表示し、メディア・マネージャから戻されたエラー・コードに関連する一般的なエラー・メッセージおよびSBT 1.1エラー番号を表示します。

参考として、SBT 1.1エラー・メッセージを示します。表24-3に、メディア・マネージャ・メッセージ番号および各番号に対応するエラー・テキストを示します。エラー・コード内のO/Sは、オペレーティング・システムを意味します。アスタリスク(*)が付いているエラーは内部エラーであり、通常の操作中に一般的に表示されるものではありません。

表24-3 メディア・マネージャのエラー・メッセージの範囲

原因 番号 メッセージ

sbtopen

7000

7001

7002*

7003

7004

7005

7006

7007

7008

7009

7010

7011

7012*

バックアップ・ファイルが見つかりません。(読取りの場合のみ戻されます。)

バックアップ・ファイルは存在します。(書込みの場合のみ戻されます。)

不正なモードが指定されました。

指定されたブロック・サイズが無効です。

デバイスがありません。

デバイスは見つかりましたがビジーです。後で再試行してください。

ボリュームが見つかりません。

ボリュームは使用中です。

I/Oエラーです。

Media Managerと接続できません。

許可されません。

システム・エラー - 例: malloc、forkのエラー

引数が無効です。

sbtclose

7020*

7021*

7022

7023

7024*

7025

ファイル・ハンドルが無効か、ファイルをオープンできません。

フラグが無効です。

I/Oエラーです。

O/Sエラーです。

引数が無効です。

Media Managerと接続できません。

sbtwrite

7040*

7041

7042

7043

7044*

ファイル・ハンドルが無効か、ファイルをオープンできません。

ボリュームの終わりに達しました。

I/Oエラーです。

O/Sエラーです。

引数が無効です。

sbtread

7060*

7061

7062

7063

7064

7065*

ファイル・ハンドルが無効か、ファイルをオープンできません。

EOFに達しました。

ボリュームの終わりに達しました。

I/Oエラーです。

O/Sエラーです。

引数が無効です。

sbtremove

7080

7081

7082

7083

7084

7085

7086*

バックアップ・ファイルが見つかりません。

バックアップ・ファイルは使用中です。

I/Oエラーです。

Media Managerと接続できません。

許可されません。

O/Sエラーです。

引数が無効です。

sbtinfo

7090

7091

7092

7093

7094

7095*

バックアップ・ファイルが見つかりません。

I/Oエラーです。

Media Managerと接続できません。

許可されません。

O/Sエラーです。

引数が無効です。

sbtinit

7110*

7111

引数が無効です。

O/Sエラーです。

24.1.5 RMANエラー・スタックの解釈

RMANエラー・スタックの関連メッセージを識別することは重要です。

RMANメッセージの解釈中に次のヒントおよび提案に注意します。

  • メッセージは下から上に読みます。これは、RMANは下から順にメッセージを発行するためです。スタックの最後から1つか2つのエラーが、通常は最も重要です。

  • SBT 1.1メディア管理レイヤーを使用しており、「追加情報」およびエラー・コード(番号)を含むSBT 1.1形式のエラー・メッセージが表示された場合、その後に続くORA-19511メッセージの、メディア・マネージャによってRMANに戻されたエラー・メッセージのテキストを確認します。これらのメッセージには、メディア管理レイヤーでの実際の障害が示されます。

  • エラー・バナーの直後にあるRMAN-03002メッセージまたはRMAN-03009メッセージを確認します(RMAN-03009にはチャネルIDが含まれていますが、RMAN-03002と同じです)。これらのメッセージには、正常に実行されなかったコマンドが示されます。構文エラーの場合、RMAN-00558が生成されます。

  • 表24-2に示すエラー範囲を参照して基本的なエラー・タイプを判断し、最も重要なメッセージについて、エラー・メッセージを参照して確認します。

関連項目:

24.1.5.1 RMANエラーの解釈の例

RMAN-が先頭に付いたエラーは、RMANコマンドによって発生したエラーを示します。

users表領域のバックアップを試行し、次のメッセージが戻されたと想定します。

Starting backup at 29-AUG-13
using channel ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 08/29/2013 15:14:03
RMAN-20202: tablespace not found in the recovery catalog
RMAN-06019: could not translate tablespace name "USESR"

RMAN-03002エラーは、BACKUPコマンドが正常に実行されなかったことを示しています。スタックの最後の2つのメッセージを参照すると、表領域名をusesrと間違って入力したため、リカバリ・カタログ内にusersという名前の表領域が見つからないことがわかります。

24.1.5.2 サーバー・エラーの解釈の例

サーバーによって発生したエラーには、先頭にORA-が付いています。

表領域のリカバリを試行し、次のエラーが戻されたと想定します。

RMAN> RECOVER TABLESPACE users;

Starting recover at 29-AUG-13
using channel ORA_DISK_1

starting media recovery
media recovery failed
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 08/29/2013 15:18:43
RMAN-11003: failure during parse/execution of SQL statement: alter database recover if needed tablespace USERS
ORA-00283: recovery session canceled due to errors
ORA-01124: cannot recover data file 8 - file is in use or recovery
ORA-01110: data file 8: '/oracle/oradata/trgt/users01.dbf'

前述の推奨事項に従って、スタックの下から読み始めます。ORA-01110メッセージは、users01.dbfデータファイルのリカバリで問題が発生したことを示しています。下から2つ目のメッセージは、そのデータファイルが使用中かリカバリ中であるため、リカバリ不可能であることを示しています。その他のRMANエラーは、サーバー・エラーのためにリカバリ・セッションが取り消されたことを示しています。こうして、このデータファイルはリカバリ中ではないため、問題はデータファイルがオンラインであることで、このファイルをオフラインにしてバックアップをリストアする必要があると判断できます。

24.1.5.3 SBT 2.0のメディア管理エラーの解釈の例

この例では、メディア・マネージャ・レベルで発生したエラーを解釈する方法を示します。

テープ・ドライブを使用したバックアップ・ジョブ中に、次の出力が戻されたと想定します。

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
ORA-19624: operation failed, retry possible
ORA-19507: failed to retrieve sequential file, handle="/tmp/mydir", parms=""
ORA-27029: skgfrtrv: sbtrestore returned error
ORA-19511: Error received from media manager layer, error text:
  sbtpvt_open_input:file /tmp/mydir does not exist or cannot be accessed, errno=2

ORA-19511エラーの後に表示されるエラー・テキストはメディア・マネージャによって生成されたものであり、障害の根源を示しています。このエラーを解釈する方法は、メディア・マネージャのドキュメントを参照してください。

24.1.5.4 SBT 1.1のメディア管理エラーの解釈の例

この例は、メディア管理エラーがあるバックアップ・ジョブの出力を示しています。

テープ・ドライブを使用したバックアップ・ジョブ中に、次の出力が戻されたと想定します。

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of backup command on c1 channel at 09/04/2013 13:18:19
ORA-19506: failed to create sequential file, name="07d36ecp_1_1", parms=""
ORA-27007: failed to open file
SVR4 Error: 2: No such file or directory
Additional information: 7005
Additional information: 1
ORA-19511: Error received from media manager layer, error text:
   SBT error = 7005, errno = 2, sbtopen: system error

SBT 1.1メディア・マネージャによって戻される最も重要な情報は、「Additional information」行にあるエラー・コードです。

Additional information: 7005

表24-3を参照すると、7005エラーが、メディア管理デバイスがビジー状態であることを示していることがわかります。メディア管理ソフトウェアが使用中か、またはそのソフトウェアに問題が発生しているため、そのソフトウェアを使用してデバイスに書き込むことができません。

注意:

sbtio.logには、Oracle Databaseではなくメディア管理ソフトウェアによって生成された情報が含まれています。そのため、それらのエラー・コードおよびメッセージを解釈するには、ご使用のメディア・ベンダーのドキュメントを参照する必要があります。sbtio.logに情報が記述されない場合、別の場所にエラー・メッセージが記述されているかどうか、またはメディア・マネージャ・エラーをsbtio.logに表示するために必要なステップがあるかどうかを、ご使用のメディア・マネージャのサポートに問い合せてください。

24.1.6 RMANのリターン・コードの識別

RMANにエラーが発生したかどうかを確認する方法の1つは、リターン・コードまたは終了ステータスを調べることです。RMANクライアントは、そのクライアントが起動されたシェルに、エラーが発生しなかった場合は0(ゼロ)を戻し、エラーが発生した場合は0(ゼロ)以外のエラー値を戻します。

このリターン・コードへのアクセス方法は、RMANクライアントを起動した環境によって異なります。たとえば、UNIXおよびCシェルを実行している場合、RMANが完了すると、$statusというシェル変数にリターン・コードが配置されます。終了ステータスを戻す方法は、RMANクライアントではなくホスト・オペレーティング・システムの詳細によって異なります。

24.2 RMANのトラブルシューティングでのV$ビューの使用

LISTREPORTおよびSHOWを使用しても、RMANアクティビティで必要なすべての情報が表示されない場合は、いくつかの有効なV$ビューで詳細を参照できます。

バックアップおよびリカバリ・ジョブを実行するサーバー・セッションで現在実行されている動作を確認すると有効な場合があります。次の表に示すビューは、RMANジョブに関する情報を取得する場合に有効です。

表24-4 トラブルシューティングで有効なV$ビュー

ビュー 説明

V$PROCESS

現在アクティブなプロセスを識別します

V$SESSION

現在アクティブなセッションを識別します。このビューを使用して、RMANが割り当てたチャネルに対応するデータベース・サーバー・セッションを判断します。

V$SESSION_WAIT

セッションが待機中のイベントまたはリソースのリストを表示します

前述のビューを使用して、次のタスクを実行できます。

24.2.1 RMANとメディア・マネージャの相互作用の監視

動的パフォーマンス・イベント・ビューのイベント名を使用して、Media Management APIに対するRMANコールを監視できます。イベント名には、SBT機能との1対1の対応があります。

次の例を参照してください。

Backup: MML v1 open backup piece
Backup: MML v1 read backup piece
Backup: MML v1 write backup piece
Backup: MML v1 query backup piece
Backup: MML v1 delete backup piece
Backup: MML v1 close backup piece
.
.
.

SBTイベントの完全なリストを取得するには、次の問合せを使用します。

SELECT NAME 
FROM   V$EVENT_NAME 
WHERE  NAME LIKE '%MML%';

サーバーは、Media Management APIでいずれかのファンクションをコールする前に、V$SESSION_WAITに行を追加して、STATE列に文字列WAITINGを含めます。V$SESSION_WAIT.SECONDS_IN_WAIT列には、サーバーが、このコールが戻されるのを待機している秒数が表示されます。SBTファンクションがメディア・マネージャから戻されると、この行は削除されます。

SBTイベント名に対応するV$SESSION_WAITの行には、問題は表示されません。これは、サーバーがこれらの行を実行時に更新するためです。これらの行は、コールが実行されると表示され、戻されると削除されます。ただし、SECONDS_IN_WAIT列の値が高い場合、メディア・マネージャが一時停止している可能性があります。

SBTイベントを監視するには、次のSQL問合せを実行します。

COLUMN EVENT FORMAT a17
COLUMN SECONDS_IN_WAIT FORMAT 999
COLUMN STATE FORMAT a15
COLUMN CLIENT_INFO FORMAT a30

SELECT p.SPID, s.EVENT, s.SECONDS_IN_WAIT AS SEC_WAIT, 
       sw.STATE, s.CLIENT_INFO
FROM   V$SESSION_WAIT sw, V$SESSION s, V$PROCESS p
WHERE  sw.EVENT LIKE '%MML%'
AND    s.SID=sw.SID
AND    s.PADDR=p.ADDR;

SQL出力を調べて、待機中のSBT機能を確認します。たとえば、次の出力には、RMANがsbtbackupファンクションが戻されるのを10分間待機していることが示されています。

SPID EVENT             SEC_WAIT   STATE           CLIENT_INFO
---- ----------------- ---------- --------------- ------------------------------
8642 Backup: MML creat 600        WAITING         rman channel=ORA_SBT_TAPE_1

注意:

V$SESSION_WAITビューにはデータベース・イベントのみが表示され、メディア・マネージャ・イベントは表示されません。

関連項目:

V$SESSION_WAITビューの詳細は、Oracle Databaseリファレンスを参照してください。

24.2.2 サーバー・セッションとRMANチャネルの関連付け

どのサーバー・セッションがどのRMANチャネルに対応しているかを確認するには、V$SESSIONおよびV$PROCESSを問い合せます。

V$PROCESSSPID列に、オペレーティング・システムのプロセスまたはスレッドのID番号が示されます。たとえば、UNIXではSPID列にプロセスIDが表示され、WindowsではSPID列にスレッドIDが表示されます。この情報を取得するには、複数のRMANセッションが同時にアクティブになっているかどうかに応じて、2つの基本的な方法があります。

この項では、次の項目について説明します。

24.2.2.1 アクティブなRMANセッションが1つの場合のサーバー・セッションとチャネルの一致

アクティブなRMANセッションが1つのみの場合、RMANチャネルに対応するサーバー・セッションIDを確認する最も簡単な方法は、ターゲット・データベースを問い合せることです。

RMANジョブの実行中に、ターゲット・データベースで次の問合せを実行します。

COLUMN CLIENT_INFO FORMAT a30
COLUMN SID FORMAT 999
COLUMN SPID FORMAT 9999

SELECT s.SID, p.SPID, s.CLIENT_INFO
FROM   V$PROCESS p, V$SESSION s
WHERE  p.ADDR = s.PADDR
AND    CLIENT_INFO LIKE 'rman%';

出力例を次に示します。

 SID SPID         CLIENT_INFO
---- ------------ ------------------------------
  14 8374         rman channel=ORA_SBT_TAPE_1

システム生成のデフォルトIDではなく、RMANのSET COMMAND IDコマンドを使用してIDを設定する場合、'rman%'ではなく、CLIENT_INFO列の値を検索します。

24.2.2.2 RMANセッションが複数の場合のサーバー・セッションとチャネルの一致

複数のRMANセッションがアクティブである場合、V$SESSION.CLIENT_INFO列に各セッションのチャネルと同じ情報が生成されます。

次に例を示します。

 SID SPID         CLIENT_INFO
---- ------------ ------------------------------
  14 8374         rman channel=ORA_SBT_TAPE_1
   9 8642         rman channel=ORA_SBT_TAPE_1

この場合、次の方法でSID値に対応するチャネルを確認します。

24.2.2.2.1 RMAN出力からのチャネルIDの取得

まずRMAN出力からsid値を取得して、その値をSQL問合せで使用する必要があります。

バックアップ中にプロセスをチャネルに関連付ける手順

  1. アクティブなセッションで、RMANジョブを通常どおりに実行し、出力を確認してチャネルのSIDを取得します。たとえば、次の出力が表示される場合があります。
    Starting backup at 21-AUG-13
    allocated channel: ORA_SBT_TAPE_1
    channel ORA_SBT_TAPE_1: sid=14 devtype=SBT_TAPE
    
  2. RMANジョブの実行中に、SQL*Plusセッションを開始して、V$SESSIONおよびV$PROCESSビューを結合して問い合せます。たとえば、次のように入力します。
    COLUMN CLIENT_INFO FORMAT a30
    COLUMN SID FORMAT 999
    COLUMN SPID FORMAT 9999
    
    SELECT s.SID, p.SPID, s.CLIENT_INFO
    FROM   V$PROCESS p, V$SESSION s
    WHERE  p.ADDR = s.PADDR
    AND    CLIENT_INFO LIKE 'rman%'
    /
    

    最初のステップで取得したsid値を使用して、どのチャネルがどのサーバー・セッションに対応しているかを確認します。

           SID SPID         CLIENT_INFO
    ---------- ------------ ------------------------------
            14 2036         rman channel=ORA_SBT_TAPE_1
            12 2066         rman channel=ORA_SBT_TAPE_1
24.2.2.2.2 SET COMMAND IDを使用したサーバー・セッションとチャネルの関連付け

RMANバックアップ・スクリプトでコマンドID文字列を指定します。これによって、この文字列のV$SESSION.CLIENT_INFOを問い合せることができます。

バックアップ中にプロセスをチャネルに関連付ける手順

  1. 各セッションで、チャネルの割当てCOMMAND IDを別々の値に設定して、目的のオブジェクトをバックアップします。たとえば、セッション1で次のように入力します。
    RUN 
    {
      ALLOCATE CHANNEL c1 TYPE disk;
      SET COMMAND ID TO 'sess1';
      BACKUP DATABASE;
    }
    

    セッション2で実行中のジョブで、コマンドIDをsess2などの文字列に設定します。

    RUN 
    {
      ALLOCATE CHANNEL c1 TYPE sbt;
      SET COMMAND ID TO 'sess2';
      BACKUP DATABASE;
    }
    
  2. RMANジョブの実行中に、SQL*Plusセッションを開始して、V$SESSIONおよびV$PROCESSビューを結合して問い合せます。たとえば、次のように入力します。
    SELECT SID, SPID, CLIENT_INFO 
    FROM   V$PROCESS p, V$SESSION s 
    WHERE  p.ADDR = s.PADDR 
    AND    CLIENT_INFO LIKE '%id=sess%';
    

    RMANジョブでSET COMMAND IDコマンドを実行した場合、CLIENT_INFO列は次の形式で表示されます。

    id=command_id,rman channel=channel_id
    

    出力例を次に示します。

     SID SPID         CLIENT_INFO
    ---- ------------ ------------------------------
      11 8358         id=sess1
      15 8638         id=sess2
      14 8374         id=sess1,rman channel=c1
       9 8642         id=sess2,rman channel=c1
    

    文字列rman channelを含む行に、バックアップを実行中のチャネルが表示されます。残りの行には、ターゲット・データベースへの接続が表示されます。

関連項目:

SET COMMAND IDの構文についてはOracle Databaseバックアップおよびリカバリ・リファレンスV$SESSIONおよびV$PROCESSの詳細は Oracle Databaseリファレンスを参照してください

24.3 Media Management APIのテスト

一部のプラットフォームでは、Oracleによってsbttestという診断ツールが提供されます。このユーティリティは、Oracle Databaseサーバーとして機能し、メディア・マネージャとの通信を試行することによって、メディア管理ソフトウェアの簡単なテストを実行します。

この項では、次の項目について説明します。

24.3.1 sbttestユーティリティの入手

sbttestユーティリティのデフォルトの場所は、プラットフォームによって異なります。

UNIX上では、sbttestユーティリティは、通常$ORACLE_HOME/binに存在します。なんらかの理由でプラットフォームにこのユーティリティが存在しない場合、Oracleサポート・サービスからこのプログラムのCバージョンを入手してください。このバージョンのプログラムは、すべてのUNIXプラットフォームでコンパイルできます。

Solarisなどのプラットフォームでは、sbttestを使用する際に再リンクを行う必要はありません。その他のプラットフォームでは、再リンクが必要な場合があります。

24.3.2 sbttestユーティリティのオンライン・ドキュメントの取得

引数を指定せずにsbttestコマンドを使用すると、このプログラムの様々な引数が表示されます。

sbttestのオンライン・ドキュメントを入手するには、コマンドラインで次のコマンドを発行します。

% sbttest

このプログラムで使用可能な引数のリストが表示されます。

Error: backup file name must be specified
Usage: sbttest backup_file_name # this is the only required parameter
               <-dbname database_name>
               <-trace trace_file_name>
               <-remove_before>
               <-no_remove_after> 
               <-read_only>
               <-no_regular_backup_restore>
               <-no_proxy_backup>
               <-no_proxy_restore>
               <-file_type n>
               <-copy_number n>
               <-media_pool n>
               <-os_res_size n>
               <-pl_res_size n>
               <-block_size block_size> 
               <-block_count block_count>
               <-proxy_file os_file_name bk_file_name 
                           [os_res_size pl_res_size block_size block_count]>
               <-libname sbt_library_name>

各引数の意味も表示されます。例として、2つのオプション・パラメータの説明を次に示します。

Optional parameters:
  -dbname  specifies the database name which will be used by SBT
           to identify the backup file. The default is "sbtdb"
  -trace   specifies the name of a file where the Media Management 
           software will write diagnostic messages.

24.3.3 sbttestユーティリティの使用

sbttestを使用すると、メディア・マネージャの簡単なテストを実行できます。

sbttestによって0(ゼロ)が戻される場合、テストがエラーなしで実行されています。これは、メディア・マネージャが正しくインストールされ、データ・ストリームを受け入れ、要求に応じて同じデータを戻すことができることを意味します。sbttestによって0以外の値が戻される場合、メディア・マネージャがインストールされていないか、正しく構成されていません。

sbttestの使用手順

  1. コマンドラインでsbttestと入力し、プログラムがインストール済でシステム・パスに含まれていることを確認します。
    % sbttest
    

    プログラムが操作可能の場合、オンライン・ドキュメントが表示されます。

  2. オンライン・ドキュメントに表示された任意の引数を指定して、プログラムを実行します。たとえば、some_file.fテスト・ファイルを作成してsbtio.logに出力を生成するには、次のコマンドを入力します。
    % sbttest some_file.f -trace sbtio.log
    

    既存のデータファイルのバックアップをテストすることもできます。たとえば、prodデータベースのtbs_33.fデータファイルをテストするには、次のコマンドを入力します。

    % sbttest tbs_33.f -dbname prod
    
  3. 出力を確認します。プログラムの実行中にエラーが発生した場合、障害を説明するメッセージが出力されます。たとえば、データベースがライブラリを検出できない場合、次の出力が戻されます。
    libobk.so could not be loaded. Check that it is installed properly, and that
     LD_LIBRARY_PATH environment variable (or its equivalent on your platform)
     includes the directory where this file can be found. Here is some additional
     information on the cause of this error:
    ld.so.1: sbttest: fatal: libobk.so: open failed: No such file or directory
    

sbttestを実行可能でも、RMANバックアップを実行できない場合があります。次のような理由が考えられます。

  • sbttestを実行したユーザーがOracle Databaseプロセスの所有者ではない。

  • データベース・サーバーがメディア管理ライブラリにリンクされていないか、または必要に応じてメディア管理ライブラリを動的にロードできない。この場合、sbttestは機能しますが、メディア・マネージャに対するRMANによるバックアップは失敗します。

  • sbttestプログラムはシェルからすべての環境変数を渡しているが、RMANは渡していない。

24.4 RMANコマンドの終了

実行中のRMANコマンドは、複数の方法で終了できます。

これには次の機能が含まれます。

  • 推奨する方法は、RMANインタフェースで[CTRL]キーを押しながら[C]キー(または、ご使用のシステムのアテンション・キーの組合せ)を押すことです。この操作では、テープのマウントを待機している場合など、割当て済チャネルがメディア管理コードで一時停止していないかぎり、そのチャネルも終了します。

  • RMANチャネルに対応するサーバー・セッションは、「ALTER SYSTEM KILL SESSIONによるセッションの終了」で説明するように、SQLのALTER SYSTEM KILL SESSION文を実行することで終了できます。

  • 「オペレーティング・システム・レベルでのセッションの終了」で説明されているように、オペレーティング・システム上のRMANチャネルに対応するサーバー・セッションを終了できます。

24.4.1 ALTER SYSTEM KILL SESSIONによるセッションの終了

ALTER SYSTEM文を使用してRMANセッションを終了するには、RMANチャネルのOracleセッションIDおよびシリアル番号が必要です。この情報は、RMANログ内のメッセージに含まれます。

次の例に示す書式のメッセージを検索します。

channel ch1: sid=15 devtype=SBT_TAPE

割当て済チャネルごとに、sidおよびdevtypeが表示されます。Oracle Databaseのsidはオペレーティング・システム・プロセスIDとは異なります。セッションを終了するには、SQLのALTER SYSTEM KILL SESSION文を使用します。

ALTER SYSTEM KILL SESSIONには、シリアル番号およびRMANメッセージに出力されたsidの2つの引数を指定できます。いずれの引数も、V$SESSIONを問い合せて取得できます。

たとえば、次の文を実行します。ここで、sid_in_rman_outputはRMANメッセージから得られた番号です。

SELECT SERIAL# 
FROM   V$SESSION 
WHERE  SID=sid_in_rman_output;

問合せによって取得したsid_in_rman_outputおよびシリアル番号を代入して次の文を実行します。

ALTER SYSTEM KILL SESSION 'sid_in_rman_output,serial#';

メディア・マネージャ・コードでセッションが停止した場合、この文はセッションに影響を与えません。

24.4.2 オペレーティング・システム・レベルでのセッションの終了

サーバー・セッションに関連付けられたプロセスの検出および終了の方法は、オペレーティング・システムによって異なります。サーバー・セッションがどのプロセスにも関連付けられていないプラットフォームもあります。詳細は、オペレーティング・システム別のドキュメントを参照してください。

24.4.3 メディア・マネージャで応答しなくなったRMANセッションの終了

メディア・マネージャで応答しなくなったRMANジョブを終了する必要がある場合があります。チャネル接続がメディア・マネージャで応答しなくなった場合にRMANを終了する最も適切な方法は、メディア・マネージャ内のセッションを終了することです。

この操作で問題が解決しない場合、Linuxなどの一部のプラットフォームでは、接続を行っているOracle Databaseプロセスを終了できる場合があります。(Oracleプロセスを終了すると、メディア・マネージャに問題が発生する場合があります。詳細は、ご使用のメディア・マネージャのドキュメントを参照してください。)

24.4.3.1 RMANセッションの構成要素

RMANセッションの特性は、オペレーティング・システムに応じて異なります。

UNIXでは、RMANセッションには次のプロセスが関連付けられています。

  • RMANクライアント・プロセス自体。

  • ターゲット・データベースへの初期接続であるデフォルト・チャネル

  • 各割当て済チャネルに1つ対応付けられた、ターゲット・データベースへのターゲット接続

  • リカバリ・カタログを使用する場合、リカバリ・カタログ・データベースへのカタログ接続

  • DUPLICATE操作またはTSPITR操作中は、補助インスタンスへの補助接続

  • 様々な割当て済チャネルに対するRMANコマンドの実行の監視に使用される、ターゲット・データベースへのポーリング接続。デフォルトでは、RMANは1つのポーリング接続を確立します。ALLOCATE CHANNELコマンドまたはCONFIGURE CHANNELコマンドに異なる接続文字列を使用すると、RMANは追加のポーリング接続を確立します。ポーリング接続は、ALLOCATE CHANNELコマンドまたはCONFIGURE CHANNELコマンドに使用した各接続文字列に1つ存在します。

24.4.3.2 ジョブの一時停止中のプロセス動作

RMANが応答しなくなる理由は、通常、メディア・マネージャ・コードでテープ・リソースが使用可能になるまでチャネル接続が待機するためです。カタログ接続およびデフォルト・チャネルが一時停止しているように見えるのは、RMANからの指示を待機しているためです。ポーリング接続は、RMANプロセスの制御下でRPCをポーリングする間は無限にループしているように見えます。

RMANプロセス自体を終了すると、カタログ接続、補助接続、デフォルト・チャネルおよびポーリング接続が切断されます。メディア・マネージャ・コードの実行中以外に一時停止しているターゲット接続および補助接続も切断されます。メディア管理レイヤーで、ターゲット接続または補助接続が実行されている場合、これらのプロセスを終了するには、オペレーティング・システム・レベルで手動で終了する必要があります。

すべてのメディア・マネージャがOracle Databaseプロセスの終了を検出できるわけではありません。終了を検出しないメディア・マネージャは、リソースをビジー状態のままにしたり、処理を継続する場合があります。詳細は、ご使用のメディア・マネージャのドキュメントを参照してください。

カタログ接続を切断しても、RMANプロセスは終了されません。これは、RMANは、バックアップまたはリストアの実行中にはカタログ操作を実行しないためです。デフォルト・チャネルおよびポーリング接続を削除すると、RMANプロセスはチャネルの1つが存在しなくなったことを検出し、終了処理を実行します。この場合、前述のとおり、応答しなくなったチャネルへの接続はアクティブのままです。

24.4.3.3 RMANセッションの終了の基本ステップ

メディア・マネージャ・コードで応答しなくなったチャネルが終了されると、RMANプロセスはその終了を検出し、終了処理を実行します。その際、メディア管理レイヤーで実行可能なターゲット接続を除く、すべての接続を削除します。

この場合にも、メディア・マネージャ・リソースに関する警告が当てはまります。

メディア・マネージャで応答しなくなったOracle Databaseプロセスを終了する手順

  1. 「RMANのトラブルシューティングでのV$ビューの使用」で説明するように、V$SESSIONおよびV$SESSION_WAIT,を問い合せます。たとえば、次の問合せを実行します。
    COLUMN EVENT FORMAT a17
    COLUMN SECONDS_IN_WAIT FORMAT 999
    COLUMN STATE FORMAT a10
    COLUMN CLIENT_INFO FORMAT a30
    
    SELECT p.SPID, s.EVENT, s.SECONDS_IN_WAIT AS SEC_WAIT, 
           sw.STATE, s.CLIENT_INFO
    FROM   V$SESSION_WAIT sw, V$SESSION s, V$PROCESS p
    WHERE  sw.EVENT LIKE '%MML%'
    AND    s.SID=sw.SID
    AND    s.PADDR=p.ADDR;
    

    SQL出力を調べて、待機中のSBT機能を確認します。たとえば、次のような出力が表示されます。

    SPID EVENT             SEC_WAIT   STATE      CLIENT_INFO
    ---- -----------------  ---------- ---------- -----------------------------
    8642 Backup:MML write   600        WAITING    rman channel=ORA_SBT_TAPE_1
    8374 Backup:MML write   600        WAITING    rman channel=ORA_SBT_TAPE_2
    
  2. ご使用のプラットフォームに適切なオペレーティング・システム・レベルのツールを使用して、応答しなくなったセッションを終了します。たとえば、Linuxではkill -9コマンドを実行します。
    % kill -9 8642 8374
    

    一部のプラットフォームには、orakillというコマンドライン・ユーティリティが含まれています。このユーティリティを使用すると、特定のスレッドを終了できます。コマンド・プロンプトから、次のコマンドを実行します。ここで、sidはターゲットに対するデータベース・インスタンスで、thread_idはステップ1の問合せで取得したSPID値です。

    orakill sid thread_id
    
  3. メディア・マネージャがプロセスも消去したことを確認します。消去されていないプロセスが存在する場合、次のバックアップまたはリストア操作が、以前のバックアップおよびリストア操作の問題が原因で再度フリーズする可能性があります。一部のメディア・マネージャでは、この唯一の解決策は、メディア・マネージャを停止して再起動することです。メディア・マネージャのドキュメントに必要な情報が記載されていない場合、メディア・マネージャのテクニカル・サポートに問い合せてください。

    関連項目:

    関連するコマンドについては、ご使用のオペレーティング・システム固有のドキュメントを参照してください。