4 RMANクライアントの起動および操作

この章では、RMANコマンドライン・インタフェースを起動する方法およびデータベースに接続する方法について説明します。この章のトピックは、次のとおりです:

4.1 RMANの起動および終了

このRMAN実行可能ファイルは、データベースとともに自動的にインストールされ、通常、他のデータベース実行可能ファイルと同じディレクトリに配置されます。たとえば、Linuxの場合、RMANクライアントは$ORACLE_HOME/binに配置されています。

RMANを起動する場合、次の基本的なオプションがあります。

RMANやプログラムを終了するには、RMANプロンプトでEXITまたはQUITと入力します。

RMAN> EXIT

関連項目:

RMANコマンドラインの構文については、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

4.2 RMANによるデータベース接続の確立

RMANクライアントまたはオペレーティング・システムのコマンドラインからデータベース接続を作成できます。パスワード・ファイルまたはオペレーティング・システム認証を使用して、これらのデータベース接続を認証できます。

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

4.2.1 RMANデータベース接続タイプの概要

適切な作業を行うために、RMANクライアントをデータベースに接続する必要があります。

表4-1に、RMANで確立できるデータベース接続のタイプを示します。

表4-1 RMANによるデータベース接続の概要

データベース接続のタイプ キーワード 説明

ターゲット・データベース

TARGET

RMANによってバックアップまたはリカバリするデータベース

リカバリ・カタログ・データベース

CATALOG

制御ファイルとは別の、RMANリポジトリのオプションのバックアップ先となるデータベース

補助インスタンスまたは補助データベース

AUXILIARY

フィジカル・スタンバイ・データベース、または複製データベースの作成、表領域のトランスポート、表領域のPoint-in-Timeリカバリ(TSPITR)の実行などの特定の作業を実行するために作成されたデータベース・インスタンス

補助データベースを使用する多くのタスクとして、RMANは、タスク実行中に使用する自動補助インスタンスを作成し、そのインスタンスに接続してタスクを実行し、タスクの完了時にそのインスタンスを破棄します。自動補助インスタンスに接続するために明示的なコマンドは指定しません。

4.2.2 RMANによるデータベース接続の認証について

RMANを使用してターゲットまたは補助データベースに接続するユーザーは、SYSDBAまたはSYSBACKUPシステム権限が必要です。

リカバリ・カタログへの接続では、これらの権限は必要ありません。カタログ・スキーマの所有者には、RECOVERY_CATALOG_OWNERロールを付与する必要があります。ユーザーは、リカバリ・カタログの所有者によって作成されたVPC資格証明を使用してリカバリ・カタログに接続することもできます。

SQL*Plusで使用できる認証オプションと同じものがRMANでも使用できます。ターゲット・データベースおよび補助データベースで認証する最も一般的な方法は、次のとおりです。

いずれの方法でもデータベースをオープンする必要はありません。オペレーティング・システム認証は、ローカルでの接続にのみ使用されます。パスワード・ファイル認証は、ローカルまたはリモートの接続に使用できます。

関連項目:

4.2.2.1 オペレーティング・システムを使用した認証

オペレーティング・システム認証を使用して、ターゲット・データベースまたは補助データベースへのRMAN接続を確立できます。

オペレーティング・システム認証(OS認証)を使用して、データベースに接続するための前提条件は、次のとおりです。

  • ORACLE_SID環境変数を設定して、データベースのシステム識別子(SID)を指定する必要があります。

    たとえば、UNIXシェルでSIDをprodに設定するには、次のように入力します。

    % ORACLE_SID=prod; export ORACLE_SID
    
  • SYSDBA権限で接続するには、OSDBAオペレーティング・システム・グループのメンバーである必要があり、SYSBACKUP権限で接続するには、OSBACKUPDBAオペレーティング・システム・グループのメンバーである必要があります。

    UNIXおよびLinuxでは、OSDBAグループは通常dbaという名前で、OSBACKUPDBAグループは通常backupdbaという名前です。これらの名前は、データベース・インストール中に割り当てられます。

次の例は、オペレーティング・システム認証を使用したターゲット・データベースへの接続方法を示します。

関連項目:

オペレーティング・システム・グループについては、『Oracle Database管理者ガイド』を参照してください。

例4-1 SYSDBA権限でのOS認証 - 明示的

% rman target '"/ as sysdba"'

例4-2 SYSBACKUP権限でのOS認証 - 明示的

% rman target '"/ as sysbackup"'

例4-3 SYSDBA権限でのOS認証 - 暗黙的

rman target /

接続文字列でAS SYSBACKUPまたはAS SYSDBAのどちらも指定していしていないと、デフォルトのAS SYSDBAが使用されます。

4.2.2.2 パスワード・ファイルを使用した認証

パスワード・ファイルは、ローカルまたはリモート・アクセスに使用します。データベースがパスワード・ファイルを使用して、管理ユーザーを認証する場合、RMANはパスワードを使用して接続できます。

ネット・サービス名を使用してリモートで接続するには、データベースではパスワード・ファイルを使用する必要があります。

注意:

適切なセキュリティ・プラクティスとして、コマンドラインにパスワードを入力するときは、プレーン・テキストで入力しないでください。RMANでは、RMANプロンプトで要求された場合にのみパスワードを入力してください。パスワード保護については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

ユーザーにSYSDBAまたはSYSBACKUP権限を付与すると、データベースによってパスワード・ファイルにエントリが作成されます。その後、データベースがオープンしていない場合でも、このユーザーとしてターゲット・データベースまたは補助データベースに接続できます。

SYSBACKUP権限を使用してパスワード・ファイルを介した接続をサポートするには、パスワード・ファイルをOracle Database 12cリリース1 (12.1)以上の形式で作成するか、この形式にアップグレードする必要があります。

接続文字列でAS SYSBACKUPまたはAS SYSDBAのどちらも指定していしていないと、デフォルトのAS SYSDBAが使用されます。この場合、引用符で囲む必要はありません。

関連項目:

パスワード・ファイルの詳細は、『Oracle Database管理者ガイド』を参照してください。

例4-4 SYSDBAとしてのパスワード・ファイル認証 - 明示的

この例では、sdbaユーザーにSYSDBA権限が付与されています。

% rman target '"sdba@prod1 as sysdba"' 

target database Password: password
connected to target database: PROD1 (DBID=39525561)

例4-5 SYSBACKUPとしてのパスワード・ファイル認証 - 明示的

この例では、ターゲット・データベースで、sbuユーザーにSYSBACKUP権限が付与されています。

% rman target '"sbu@prod1 as sysbackup"' 

target database Password: password
connected to target database: PROD1 (DBID=39525561)

例4-6 SYSDBAとしてのパスワード・ファイル認証 - 暗黙的

% rman target sbu@prod1

target database Password: password
connected to target database: PROD1 (DBID=39525561)

4.2.3 RMANプロンプトからのデータベース接続の確立

オペレーティング・システム・コマンドラインに接続文字列なしでRMANを起動する場合、ターゲット・データベースに接続するには、RMANプロンプトでCONNECT TARGETコマンドを発行する必要があります。

RMANプロンプトからデータベース接続を確立する手順

  1. オペレーティング・システムのコマンドラインで、データベース接続を確立せずにRMANクライアントを起動します。
    % rman
    RMAN>
    
  2. RMANプロンプトで、1つ以上の CONNECTコマンドを入力します。

例4-7 OS認証を使用した接続 - 暗黙的

RMAN> connect target /

システム権限が指定されていないため、 ASSYSDBAと想定されます。

例4-8 OS認証を使用した接続 - 明示的

RMAN> connect target "/ as sysdba"

システム権限を含める場合、引用符(一重または二重)で囲む必要があります。

例4-9 パスワード・ファイル認証を使用した接続

RMAN> connect target "sbu@prod AS SYSBACKUP"

target database Password: password
connected to target database: PROD (DBID=39525561)

例4-10 ターゲットおよびリカバリ・カタログへの接続

この例では、ターゲット接続にオペレーティング・システム認証を、リカバリ・カタログ・データベース接続にサービス名およびパスワード・ファイル認証を使用しています。リカバリ・カタログ所有者は、ユーザーrcoです。RMANによって、リカバリ・カタログ・ユーザーのパスワードの入力を求められます。

RMAN> connect target /
RMAN> connect catalog rco@catdb

recovery catalog database Password: password
connected to recovery catalog database

関連項目:

CONNECTコマンドの詳細は、Oracle Databaseバックアップおよびリカバリ・リファレンスを参照してください。

4.2.4 オペレーティング・システムのコマンドラインからのRMANによるデータベース接続の確立

オペレーティング・システムのコマンドラインからターゲット・データベースに接続するには、rmanコマンドの後に接続情報を続けて入力します。RMANプロンプトが表示されたら、コマンドの実行を開始できます。

CATALOGキーワードを使用してリカバリ・カタログに接続します。NOCATALOGまたはCATALOGを指定せずにRMANを起動することもできます。コマンドラインでNOCATALOGを指定しない場合、およびRMANの起動後にCONNECT CATALOGを指定しない場合、RMANリポジトリの使用を必要とするコマンドを初めて実行したときに、RMANはデフォルトでNOCATALOGモードになります。

注意:

RMANリポジトリを使用するコマンドをNOCATALOGモードで実行した後で、リカバリ・カタログに接続するには、RMANを終了して再起動する必要があります。

オペレーティング・システムのコマンドラインでターゲット・データベースに接続する場合は、RMANプロンプトが表示された後で、コマンドの実行を開始できます。

例4-11 システム・プロンプトからのターゲット・データベースへの接続

この例は、オペレーティング・システム認証を使用するターゲット・データベースへの接続を示しています。NOCATALOGオプションは、セッションでリカバリ・カタログが使用されないことを示します。

% rman TARGET / NOCATALOG

connected to target database: PROD (DBID=39525561)
using target database control file instead of recovery catalog
 
RMAN>

例4-12 ネット・サービス名を使用したシステム・プロンプトからのターゲット・データベースへの接続

この例は、ネット・サービス名およびパスワード・ファイル認証を使用したターゲット・データベースへの接続を示しています。RMANによってパスワードの入力を求められます。

% rman TARGET sbu@prod NOCATALOG

target database Password: password
connected to target database: PROD (DBID=39525561)

RMAN>

例4-13 システム・プロンプトからのターゲットおよびリカバリ・カタログへの接続

この例は、ターゲット・データベースおよびリカバリ・カタログ・データベースに対してOracle Net認証を使用する接続を示しています。いずれの場合も、RMANによってパスワードの入力を求められます。

% rman TARGET sbu@prod CATALOG rco@catdb

target database Password: password
connected to target database: PROD (DBID=39525561)
recovery catalog database Password: password
connected to recovery catalog database

RMAN>

4.2.5 CDBへのRMAN接続の確立

RMANクライアントをマルチテナント・コンテナ・データベース(CDB)およびプラガブル・データベース(PDB)に接続できます。

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

4.2.5.1 CDBおよびPDBでの操作の実行について

CDB全体、rootのみまたは1つ以上のPDBで、RMAN操作を実行できます。

次のルールに従って、CDBへのRMAN接続を確立します。

  • CDB全体での操作(CDB全体のバックアップなど)を実行するには、ターゲットとしてrootに接続します。

  • rootのみでの操作(rootのバックアップなど)を実行するには、ターゲットとしてrootに接続します。

  • 単一のPDBでの操作を実行するには、ターゲットとして、rootまたは直接PDBのいずれかに接続することができます。

    • rootに接続する場合、RMANコマンドでPLUGGABLE DATABASE構文を使用する必要があります。たとえば、PDBをバックアップするには、BACKUP PLUGGABLE DATABASEコマンドを使用します。

    • または、直接PDBに接続した場合は、非CDBへの接続時に使用するものと同じコマンドを使用できます。たとえば、PDBをバックアップするには、BACKUP DATABASEコマンドを使用します。

  • 単一のコマンドで2つ以上のPDBで操作を実行するには、ターゲットとしてrootに接続します。

    たとえば、salesおよびhr PDBをバックアップするには、rootに接続して、次のコマンドを発行します。

    BACKUP PLUGGABLE DATABASE sales, hr;

注意:

オペレーティング・システム認証を使用してターゲットとしてCDBに接続する場合は、rootに接続します。

4.2.5.2 PDBへの接続時の制限事項

プラガブル・データベース(PDB)に直接接続する際には、特定の制限が適用されます。

ターゲットとして直接PDBに接続している場合には、次の操作は使用できません。

  • アーカイブ・ログのバックアップ

  • アーカイブ・ログの削除

  • アーカイブ・ログのバックアップの削除

  • アーカイブ・ログのリストア(必要に応じて、メディア・リカバリ中にRMANによってアーカイブ・ログがリストアされます。)

  • 共有UNDOモード使用時のPoint-in-Timeリカバリ(PITR)

  • TSPITR

  • 表のリカバリ

  • データベースの複製

  • 共有UNDOモード使用時のフラッシュバック操作

  • データ・リカバリ・アドバイザの実行

  • 不要なもののレポート/削除

  • データベースの登録

  • カタログのインポート

  • データベースのリセット

  • RMAN環境の構成(CONFIGUREコマンドを使用)

注意:

TARGETとしてPDBに接続すると、リカバリ・カタログに接続できません。

4.2.5.3 ターゲットとしてのrootへの接続

ターゲットとしてrootに接続する方法がいくつかあります。

最も一般的は方法は次の3つです。

  • 共通ユーザーとしてのローカル接続は、例4-14を参照

  • オペレーティング・システム認証を使用した接続は、例4-15を参照

  • 共通ユーザーとしてOracle Net Servicesを介してネット・サービス名を使用した接続は、例4-16を参照

いずれの場合でも、SYSDBAまたはSYSBACKUP権限を持つユーザーとして接続する必要があります。

例4-14 Rootへのローカルでの接続

この例では、共通ユーザーであるSYSユーザーを使用して、rootにローカルに接続します。接続はSYSDBA権限を使用して確立されます。

rman target sys

target database Password: password
connected to target database: CDB (DBID=659628168)

例4-15 オペレーティング・システム認証を使用したrootへの接続

この例では、オペレーティング・システム認証を使用してrootにローカルに接続します。接続はSYSDBA権限を持つSYSユーザーとして確立されます。

rman target /
 
connected to target database: CDB (DBID=659628168)

例4-16 ネット・サービス名を使用したrootへの接続

この例では、rootへのデータベース・サービスに変換されるsalesネット・サービス名があり、SYSBACKUP権限を持つc##bkuserという名前の共通ユーザーがいることを想定しています。

rman target c##bkuser@sales
 
target database Password: password
connected to target database: CDB (DBID=659628168)
4.2.5.4 ターゲットとしてのPDBへの接続

RMANプロンプトまたはオペレーティング・システムのコマンドラインから、PDBに接続できます。

ターゲットとしてPDBへ接続するには、次を実行する必要があります。

例4-17 ターゲットとしてのPDBへの接続

この例は、PDBへの接続を示します。次のことを想定しています。

  • hrpdbという名前のPDBで、RMAN操作を実行します。

  • ネット・サービス名hrpdbは、hrpdb PDBのデータベース・サービスに変換されます。

  • hrpdb PDBにローカル・ユーザーhrbkupが作成され、SYSDBA権限が付与されました。

rman target hrbkup@hrpdb
 
target database Password: password
connected to target database: CDB (DBID=659628168)

4.2.6 コマンド・ファイル内でのRMANによるデータベース接続の確立

CONNECTコマンドを格納するRMANコマンド・ファイルを作成して、データベース接続を確立できます。

CONNECTコマンドとともにデータベース・レベルの資格証明(ユーザー名とパスワード)を使用するRMANコマンド・ファイルを作成した場合、このファイルへの読取りアクセスを持つすべてのユーザーがパスワードを知ることができます。CONNECT文字列とパスワードをコマンド・ファイルに組み込む安全な方法はありません。

CONNECTコマンドを使用するRMANコマンド・ファイルを作成した場合に、@コマンドを使用してそのコマンド・ファイルを実行すると、RMANは接続文字列をエコーしません。この動作によって、RMAN出力を含むログ・ファイルに接続文字列が表示されなくなります。たとえば、次のように、コマンド・ファイルlistbkup.rmanを作成するとします。

cat > listbkup.rman << EOF
CONNECT TARGET /
LIST BACKUP;
EOF

RMANを@コマンドライン・オプションを指定して実行し、このスクリプトを実行します。

% rman @listbkup.rman

このコマンド・ファイルを実行すると、次の出力に示すように、接続文字列がアスタリスクに置き換えられます。

RMAN> CONNECT TARGET *
2> LIST BACKUP;
3>
connected to target database: RDBMS (DBID=771530996)

using target database control file instead of recovery catalog

List of Backup Sets
===================
. . .

4.2.7 RMANによる補助データベースへの接続

DUPLICATEコマンドを使用するには、補助インスタンスに接続する必要があります。表領域のPoint-in-Timeリカバリ(TSPITR)の実行には、補助インスタンスへの接続も必要になることがあります。

補助接続の形式はターゲット・データベース接続と同じですが、TARGETキーワードのかわりにAUXILIARYキーワードを使用します。

注意:

DUPLICATE ... FROM ACTIVE DATABASEコマンドを使用する場合は、ネット・サービス名が必要です。詳細は、補助インスタンス用の初期化パラメータ・ファイルの作成を参照してください。

関連項目:

例4-18 RMANプロンプトからのターゲットおよび補助データベースへの接続

この例では、ターゲット・データベースへの接続にはオペレーティング・システム認証を、補助データベースへの接続にはネット・サービス名およびパスワード・ファイル認証を使用しています。

% rman
RMAN> CONNECT TARGET /
RMAN> CONNECT AUXILIARY sbu@aux

auxiliary database Password: password
connected to auxiliary database: AUX (DBID=30472568)

例4-19 システム・プロンプトからのターゲットおよび補助データベースへの接続

この例は、システム・プロンプトからのターゲット・データベースおよび補助データベースへの接続を示しています。ターゲット接続にはオペレーティング・システム認証を、補助データベース接続にはネット・サービス名およびパスワード・ファイル認証を使用しています。

% rman target / auxiliary sbu@aux

auxiliary database Password: password
connected to auxiliary database: AUX (DBID=30472568)

4.2.8 RMANによる接続で発生した問題の診断

ターゲット・データベース、カタログ・データベースおよび補助データベースへの接続時にRMANで発生したエラーを診断する際、SQL*Plusを使用してこれらのデータベースに直接接続することを検討してください。このアクションによって、接続情報またはデータベースに関連する根本的な問題を明らかにできます。

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

4.2.8.1 ターゲット・データベースおよび補助データベースへの接続時に発生した問題の診断

RMANは、SYSDBAまたはSYSBACKUP権限を使用して、ターゲットおよび補助データベースに接続します。このため、SQL*Plusを使用してターゲット・データベースまたは補助データベースへの接続時に発生した問題を診断する場合は、SYSDBAまたはSYSBACKUP接続を要求して、RMANの動作を再現します。

たとえば、次のRMANコマンドで接続エラーが発生したとします。

RMAN> CONNECT TARGET /

この場合、次のSQL*Plusコマンドを使用して前の接続操作を再現します。

SQL> CONNECT / AS SYSBACKUP
4.2.8.2 リカバリ・カタログへの接続時に発生した問題の診断

SQL*Plusを使用してリカバリ・カタログの接続の問題を診断します。

RMANでリカバリ・カタログ・データベースに接続する場合、SYSDBAまたはSYSBACKUP権限は使用されません。SQL*Plusを使用してリカバリ・カタログ・データベースへの接続時に発生した問題を診断する場合は、RMANに入力したものと同じデータベース接続文字列を入力する必要があります。AS SYSBACKUPまたはAS SYSDBAを指定しないでください。

4.3 RMAN出力の場所の指定

デフォルトでは、RMANはコマンド出力を標準出力に書き込みます。出力をログ・ファイルにリダイレクトするには、RMANの起動時にコマンドラインでLOGパラメータを入力します。

次の例では、RMANコマンドの出力がrman.logというファイルに書き込まれます。

% rman LOG /tmp/rman.log

この場合、RMANによってコマンド入力は表示されますが、RMAN出力は表示されません。RMAN出力をログ・ファイルと標準出力の両方に送信する場合は、Linuxのteeコマンドまたは同等のコマンドを使用する方法が最も簡単です。たとえば、次の方法で、入力と出力の両方をRMANコマンドライン・インタフェース内に表示できます。

% rman | tee rman.log
RMAN>

関連項目:

RMANコマンドライン・オプションについては、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

4.4 RMANのグローバリゼーション・サポート環境変数の設定

RMANを起動する前に、環境変数NLS_DATE_FORMATおよびNLS_LANGを設定しておくと役に立つ場合があります。これらの変数では、RMANのRESTORERECOVERREPORTなどのコマンドの時間パラメータに使用される書式を決定します。

次に、一般的な言語および日付書式の設定例を示します。

NLS_LANG=american
NLS_DATE_FORMAT='Mon DD YYYY HH24:MI:SS'

RMANを使用してマウントされていないデータベースに接続し、その後、RMANが接続された状態でそのデータベースをマウントする場合は、NLS_LANG環境変数にデータベースが使用するキャラクタ・セットを指定してください。

マウントされていないデータベースのキャラクタ・セットは、デフォルトのUS7ASCIIとみなされます。キャラクタ・セットがデフォルトと異なる場合、RMANは、データベースのマウント後にエラーを戻します。たとえば、キャラクタ・セットがWE8DECの場合は、NLS_LANG変数を次のように設定してエラーを回避できます。

NLS_LANG=american_america.we8dec

環境変数NLS_DATE_FORMATを適用して、サーバー初期化ファイル内のサーバーのデフォルト設定を上書きするには、環境変数NLS_LANGの設定も必要です。

関連項目:

4.5 RMANコマンドの入力

RMANコマンドは、RMANプロンプトから直接入力するか、またはテキスト・ファイルから読み取ることができます。

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

4.5.1 RMANプロンプトでのRMANコマンドの入力

RMANクライアントでコマンドを受け入れる準備が整うと、コマンド・プロンプトが表示されます。

次に、RMANコマンド・プロンプトの例を示します。

RMAN> 

RMANで実行するコマンドを入力します。次に例を示します。

RMAN> CONNECT TARGET
RMAN> BACKUP DATABASE;

RMANのほとんどのコマンドでは、いくつかのパラメータを使用し、末尾にセミコロンを付ける必要があります。STARTUPSHUTDOWNCONNECTなどのいくつかのコマンドは、セミコロンの有無に関係なく使用できます。

完全なコマンドではないテキスト行を入力すると、RMANは、行番号を表示して入力の継続を求めます。次に例を示します。

RMAN> BACKUP DATABASE
2> INCLUDE CURRENT 
3> CONTROLFILE
4> ;

4.5.2 RMANでのコマンド・ファイルの使用

繰返し作業の場合は、RMANコマンドを含むテキスト・ファイルを作成し、@引数の後にファイル名を続けてRMANクライアントを起動します。

たとえば、現行のディレクトリに次のテキスト行を含むテキスト・ファイルcmdfile1を作成します。

BACKUP DATABASE PLUS ARCHIVELOG;

このコマンド・ファイルをコマンドラインから実行すると、コマンド・ファイルに含まれているコマンドが実行されます。次に例を示します。

% rman TARGET / @cmdfile1

コマンドの完了後、RMANは終了します。

また、RMANコマンド・プロンプトで@コマンドを使用すると、RMANセッション中にコマンド・ファイルの内容を実行できます。RMANは、ファイルを読み取り、ファイル内のコマンドを実行します。次に例を示します。

RMAN> @cmdfile1

RMANは、コマンド・ファイル内のコマンドの実行後、次のメッセージを表示します。

RMAN>  **end-of-file**

オペレーティング・システムのコマンドラインからコマンド・ファイルを実行した場合と異なり、RMANは終了しません。

関連項目:

RMANコマンドラインの構文については、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

4.5.3 RMANコマンド・ファイルへのコメントの入力

RMANでのコメント文字は、シャープ記号(#)です。行のシャープ記号から最後までのテキストはすべて無視されます。

たとえば、次のコマンド・ファイルの内容は、データベース・ファイルおよびアーカイブREDOログ・ファイルをバックアップし、コメントを追加します。

# Command file name: mybackup.rman
# The following command backs up the database
BACKUP DATABASE;
# The following command backs up the archived redo logs
BACKUP ARCHIVELOG ALL;

次の例では、単一のRMANコマンドを複数の行に分割する方法を示します。

RMAN> BACKUP # this is a comment
2> SPFILE;

4.5.4 コマンド・ファイルでの置換変数の使用

コマンド・ファイルの実行時に、コマンド・ファイル内の置換変数で使用される1つ以上の値をUSING句に指定できます。この方法で、コマンド・ファイルを動的にすることができます。

SQL*Plusの場合と同様に、&1は最初の値を配置する場所を示し、&2は2番目の値を配置する場所を示します。それ以降も同様です。置換変数の構文では、&integerの後にオプションのピリオドが続きます。たとえば、&1.3のようになります。オプションのピリオドは変数の一部であり、値と置換されます。したがって、置換テキストの直後に別の整数を続けることができます。たとえば、値mybackupを変数&1.3を含むコマンド・ファイルに渡すと、置換の結果はmybackup3になります。

次の手順では、置換変数を含むコマンド・ファイルをコールする動的シェル・スクリプトを作成および使用する方法について説明します。

動的シェル・スクリプトを作成および使用する手順

  1. 置換変数を使用するRMANコマンド・ファイルを作成します。

    次に、四半期ごとに実行されるquarterly_backup.cmdという名前のコマンド・ファイルの内容の例を示します。このスクリプトでは、テープ・セットの名前、FORMAT指定内の文字列および作成するリストア・ポイントの名前の置換変数が使用されています。

    # quarterly_backup.cmd
    CONNECT TARGET /
    RUN
    {
      ALLOCATE CHANNEL c1
        DEVICE TYPE sbt
        PARMS 'ENV=(OB_MEDIA_FAMILY=&1)';
      BACKUP DATABASE 
        TAG &2 
        FORMAT '/disk2/bck/&1%U.bck'
        KEEP FOREVER 
        RESTORE POINT &3;
    }
    EXIT;
    
  2. 前の手順で作成したRMANコマンド・ファイルを実行するために使用できるシェル・スクリプトを作成します。

    次の例では、runbackup.shというシェル・スクリプトを作成します。この例では、書式およびリストア・ポイント名のシェル変数を作成し、これらの変数の値をスクリプトへのコマンドライン引数として受け入れます。

    #!/bin/tcsh
    # name: runbackup.sh
    # usage: use the tag name and number of copies as arguments
    set media_family = $argv[1]
    set format = $argv[2]set restore_point = $argv[3]
    rman @'/disk1/scripts/quarterly_backup.cmd' USING $media_family $format $restore_point
    
  3. 前の手順で作成したシェル・スクリプトを実行します。コマンドラインで適切な引数を指定します。

    次の例では、runbackup.shシェル・スクリプトを実行し、メディア・ファミリ名としてarchival_backup、書式文字列としてbck0906、リストア・ポイント名としてFY06Q3を渡します。

    % runbackup.sh archival_backup bck0906 FY06Q3

関連項目:

@の構文については、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

4.5.5 RMAN構文の確認

RMANコマンドを実行せずに、その構文の正しさをテストできます。コマンドライン引数 CHECKSYNTAXを使用して、RMANクライアントを起動します。これによって、入力したコマンドの解析のみが行われ、有効なRMAN構文ではないコマンドに対して RMAN-00558エラーが戻されます。

RMANコマンドの構文は、コマンドラインまたはコマンド・ファイルで確認できます。

関連項目:

CHECKSYNTAXコマンドライン・オプションについては、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください

4.5.5.1 コマンドラインでのRMAN構文の確認

コマンドを実際には実行せずに、RMANコマンドの構文を対話形式で確認できます。

RMAN構文をコマンドラインで確認する手順

  1. CHECKSYNTAXパラメータを使用して、RMANを起動します。
    % rman CHECKSYNTAX
    
  2. 確認するRMANコマンドを入力します。

次の例に、対話形式のセッションの例を示します。ユーザーが入力するテキストは太字になっています。

RMAN> run [ backup database; ]
 
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01006: error signaled during parse 
 RMAN-02001: unrecognized punctuation symbol "["
 
RMAN> run { backup database; }

The command has no syntax errors

RMAN>
4.5.5.2 コマンド・ファイル内のRecovery Manager構文の確認

コマンド・ファイル内のコマンドをテストするには、CHECKSYNTAXパラメータを指定してRMANを起動し、 @コマンドを使用して、渡すコマンド・ファイルの名前を指定します。

コマンド・ファイル内のコマンドをテストする手順

  1. テキスト・エディタを使用してコマンド・ファイルを作成します。

    次の内容の/tmp/goodcmdfileを作成するとします。

    # command file with legal syntax
    RESTORE DATABASE; 
    RECOVER DATABASE;
    

    次の内容の別のコマンド・ファイル/tmp/badcmdfileを作成するとします。

    # command file with bad syntax commands
    RESTORE DATABASE
    RECOVER DATABASE
    
  2. RMANプロンプトから次の形式でコマンド・ファイルを実行します。ここで、filenameはコマンド・ファイルの名前です。
    % rman CHECKSYNTAX @filename
    

例4-20 正しい構文が含まれているコマンド・ファイルの構文の確認

この例は、CHECKSYNTAXを使用して/tmp/goodcmdfileを実行した場合の出力を示しています。

RMAN> # command file with legal syntax
2> restore database;
3> recover database;
4>
The cmdfile has no syntax errors
 
Recovery Manager complete.

例4-21 無効な構文が含まれているコマンド・ファイルの構文の確認

この例は、CHECKSYNTAXを使用して/tmp/badcmdfileを実行した場合の出力を示しています。

RMAN> #command file with syntax error
2> restore database
3> recover
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01005: syntax error: found "recover": expecting one of: "archivelog, 
      channel, check, controlfile, clone, database, datafile, device, 
      from, force, high, (, preview, ;, skip, spfile, standby, tablespace, 
      until, validate"
RMAN-01007: at line 3 column 1 file: /tmp/badcmdfile

例4-22 置換変数を含むコマンド・ファイルの構文の確認

置換変数を含めて、コマンド・ファイルを動的にします。置換変数を含むコマンド・ファイルの構文を確認する場合は、RMANによって値を入力するように求められます。この例は、動的コマンド・ファイルの構文を確認する際に無効な値を入力した場合を示しています。太字のテキストは、プロンプトに入力されたテキストを示しています。

RMAN> CONNECT TARGET *
2> BACKUP TAG 
Enter value for 1: mybackup
abc COPIES 
Enter value for 2: mybackup
abc
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01009: syntax error: found "identifier": expecting one of: "integer"
RMAN-01008: the bad identifier was: mybackup
RMAN-01007: at line 2 column 25 file: /tmp/whole_db.cmd

文字列 mybackupCOPIESの有効な引数ではないため、RMANは構文エラーを示します。

4.6 RMANのパイプ・インタフェースの使用

Recovery Managerにコマンドを発行してそれらのコマンドから出力を受信するかわりに、Recovery Managerのパイプ・インタフェースを使用できます。このインタフェースを使用することによって、Recovery Managerへのポータブル・プログラム・インタフェースを作成できます。

パイプ・インタフェースを使用すると、RMANは、オペレーティング・システム・シェルではなくDBMS_PIPE PL/SQLパッケージによってコマンドを取得し、出力を送信します。パイプ・インタフェースを起動するには、RMANクライアントのPIPEコマンドライン・パラメータを使用します。RMANは2つのプライベート・パイプを使用します。1つはコマンドの受信用、もう1つは出力の送信用です。パイプの名前はPIPEパラメータの値から導出されます。たとえば、次のコマンドでRMANを起動できます。

% rman PIPE abc TARGET /

RMANは、ターゲット・データベースで2つのパイプをオープンします。ORA$RMAN_ABC_INはユーザー・コマンドの受信に使用するパイプ、ORA$RMAN_ABC_OUTはすべての出力をRMANに戻すために使用するパイプです。入力と出力の両方のパイプでは、すべてのメッセージはVARCHAR2型です。

セキュリティの問題が発生する可能性があるため、RMANでは、パイプ・インタフェースをパブリック・パイプで使用することはできません。パブリック・パイプの場合、パイプ名を知っているすべてのユーザーが、RMANにコマンドを送信してその出力を取得できます。

パイプは、初期化されていない場合はプライベート・パイプとして作成されます。 RMANの起動前に入力パイプにコマンドを入力する場合は、DBMS_PIPE.CREATE_PIPEをコールして最初にパイプを作成しておく必要があります。パイプは、プライベート・パイプとして明示的に作成しないと、そのパイプへの最初のアクセス時に自動的にパブリック・パイプとして作成されます。Recovery Managerでパブリック・パイプを使用しようとすると、エラーが戻されます。

注意:

複数のRMANセッションをターゲット・データベースに対して実行する場合は、各RMANセッションに一意のパイプ名を使用する必要があります。一意のパイプ名を生成する方法の1つとして、DBMS_PIPE.UNIQUE_SESSION_NAMEファンクションを使用できます。

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

4.6.1 パイプを介した複数のRMANコマンドの連続実行の例

この例では、RMANを制御しているアプリケーションで、複数のコマンドを連続して実行すると仮定します。パイプに各コマンドが送信および実行されて出力が戻されると、RMANは一時停止して次のコマンドを待機します。

パイプを介してRMANコマンドを実行する手順

  1. ターゲット・データベースに接続し(必須)、PIPEオプションを指定してRMANを起動します。たとえば、次のように入力します。
    % rman PIPE abc TARGET /
    

    TIMEOUTオプションを指定することもできます。このオプションを指定すると、指定した時間内(秒単位)に入力パイプから入力を受信しなかった場合、RMANが強制終了されます。たとえば、次のように入力します。

    % rman PIPE abc TARGET / TIMEOUT 60
    
  2. ターゲット・データベースに接続し、DBMS_PIPE.PACK_MESSAGEおよびDBMS_PIPE.SEND_MESSAGEを使用して目的のコマンドを入力パイプに入力します。パイプ・モードでは、RMANで入力の受入れ準備が完了すると、標準RMANプロンプトではなくRMAN-00572メッセージが表示されます。
  3. DBMS_PIPE.RECEIVE_MESSAGEおよびDBMS_PIPE.UNPACK_MESSAGEを使用して、出力パイプからRMAN出力を読み取ります。
  4. 手順2と3を繰り返し、手順1で起動したRMANインスタンスで他のコマンドを実行します。
  5. RMANの起動時にTIMEOUTオプションを使用した場合は、指定した時間内に入力を受信しなければRMANが自動的に終了します。すぐにRMANを終了するには、EXITコマンドを送信します。

4.6.2 パイプを介したRMANコマンドの単一ジョブでの実行の例

この例では、RMANを制御しているアプリケーションで1つ以上のコマンドを単一ジョブとして実行すると仮定します。パイプに入力されたコマンドの実行後、RMANが終了します。

パイプを介して単一ジョブでRMANコマンドを実行する手順

  1. ターゲット・データベースへの接続後、パイプを作成します(ORA$RMAN_pipe_INという名前のパイプが存在しない場合)。
  2. 目的のコマンドを入力パイプに入力します。パイプ・モードでは、RMANで入力の受入れ準備が完了すると、標準RMANプロンプトではなくRMAN-00572メッセージが表示されます。
  3. PIPEオプションを使用してRMANを起動し、TIMEOUT 0を指定します。たとえば、次のように入力します。
    % rman PIPE abc TARGET / TIMEOUT 0
    
  4. DBMS_PIPE.PACK_MESSAGEおよびDBMS_PIPE.SEND_MESSAGEを使用して、パイプに入力されたコマンドを読み取り、実行します。入力パイプのすべてのコマンドを実行すると、RMANはすぐに終了します。
  5. DBMS_PIPE.RECEIVE_MESSAGEおよびDBMS_PIPE.UNPACK_MESSAGEを使用して、出力パイプからRMAN出力を読み取ります。

    関連項目:

    DBMS_PIPEパッケージのドキュメントについては、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。