169 DBMS_TDB

DBMS_TDBパッケージは、RMANのCONVERT DATABASEコマンドを使用してプラットフォーム間でデータベースを転送できるかどうかをレポートします。

このパッケージは、現在のホスト・プラットフォーム上のデータベースのエンディアン形式が転送先プラットフォームと同じであること、および現在のデータベースの状態によってデータベースの転送が妨げられないことを検証します。

参照:

CONVERT DATABASEを使用したデータベース転送については、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

この章のトピックは、次のとおりです:

169.1 DBMS_TDBの概要

多くの場合、Oracleは、同じエンディアン形式のプラットフォーム間のデータベース転送をサポートしています。ただし、エンディアン形式が同じ場合でも、データベースをプラットフォームから別のプラットフォームに移動するには変換処理が必要です。また、データベース転送のプロセスでは、転送するデータベースを読取り専用モードでオープンするなどの事前条件を満たす必要もあります。

DBMS_TDBパッケージは、次の2つの役割を果たします。

  • 指定したソース・プラットフォームから指定したターゲット・プラットフォームへのデータベース転送がサポートされていることの確認。

  • 転送するデータベースが転送用に正しく準備されているかの確認。正しく準備されていない場合は、データベース転送を妨げている条件を識別します。

実際の変換は、Recovery ManagerのCONVERT DATABASEコマンドを使用して実行されます。データベース転送の要件、プラットフォーム間の転送に必要なデータベース変換のプロセス、および変換プロセスにおけるDBMS_TDBサブプログラムの使用例の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

169.2 DBMS_TDBのセキュリティ・モデル

このパッケージを使用するには、DBA権限が必要です。

169.3 DBMS_TDBの定数

DBMS_TDBパッケージは、パラメータ値の指定に使用するいくつかの列挙定数を定義します。列挙定数にはパッケージ名を接頭辞として付加する必要があります(DBMS_TDB.SKIP_NONEなど)。

DBMS_TDBパッケージでは、表169-1に示す定数が使用されます。

表169-1 DBMS_TDBの定数

名前 タイプ 説明

SKIP_NONE

NUMBER

0

データベースの転送の準備ができているかどうかを確認する際に、すべてのファイルをチェックします。

SKIP_OFFLINE

NUMBER

2

データベースの転送の準備ができているかどうかを確認する際に、オフラインの表領域内のファイルをスキップします。

SKIP_READONLY

NUMBER

3

データベースの転送の準備ができているかどうかを確認する際に、読取り専用の表領域内のファイルをスキップします。

169.4 DBMS_TDBのビュー

DBMS_TDBパッケージは、V$DB_TRANSPORTABLE_PLATFORMビューを使用します。

このビューについては、『Oracle Databaseリファレンス』を参照してください。

  • V$DB_TRANSPORTABLE_PLATFORM: データベース転送をサポートするソース・プラットフォームとターゲット・プラットフォームの組合せを指定します。

169.5 DBMS_TDBの操作上のノート

DBMS_TDBには、次のノートが適用されます。

  • このパッケージのサブプログラムは、目的のプラットフォーム間のデータベース変換が可能かどうかの確認、およびデータベースが変換可能かどうかの確認の両方で有効です。変換プロセスで使用するこれらのサブプログラムの様々な使用方法の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

  • このパッケージのサブプログラムは、単純にTRUEまたはFALSEを結果として戻し、データベース転送が可能かどうかを示します。転送できない原因を示すメッセージを受け取るには、SERVEROUTPUT ONを指定してサブプログラムを使用します。

169.6 DBMS_TDBサブプログラムの要約

この表は、DBMS_TDBサブプログラムを示し、簡単に説明しています。

表169-2 DBMS_TDBパッケージのサブプログラム

サブプログラム 説明

CHECK_DBファンクション

データベースをターゲット・プラットフォームに転送できるかどうかを確認します。

CHECK_EXTERNALファンクション

データベースに外部表、ディレクトリまたはBFILEが含まれているかどうかを確認します。

169.6.1 CHECK_DBファンクション

このファンクションは、データベースをターゲット・プラットフォームに転送できるかどうかを確認します。指定したソース・プラットフォームおよび宛先プラットフォームに対して転送が完全にサポートされているかどうか、またデータベースが現在転送に適切な状態にあるかどうかがテストされます。

データベースの読取り専用またはオフラインの部分を転送しない場合、これらをスキップするかどうかを指定できます。

このファンクションはオーバーロードされています。複数の機能を構文形式ごとに、定義とともに示します。

構文

DBMS_TDB.CHECK_DB (
     target_platform_name   IN VARCHAR2, 
     skip_option            IN  NUMBER)
   RETURN BOOLEAN;

DBMS_TDB.CHECK_DB (
     target_platform_name   IN VARCHAR2)
   RETURN BOOLEAN;

DBMS_TDB.CHECK_DB 
   RETURN BOOLEAN;

パラメータ

表169-3 CHECK_DBファンクションのパラメータ

パラメータ 説明

target_platform_name

接続先プラットフォームの名前。V$DB_TRANSPORTABLE_PLATFORMに表示される名前と同じ名前にします。

skip_option

データベースがトランスポート可能かどうかをチェックする際にスキップするデータベースの部分(適切な場合)を指定します。サポートされている値を表169-1に示します。

戻り値

データベースをターゲット・プラットフォームに転送できない場合、またはデータベースが転送可能な状態でない場合は、FALSEを戻します。データベースが転送可能な状態の場合は、TRUEを戻します。

使用上のノート

  • SERVEROUTPUTONの場合、データベースが転送できない原因とその問題を修正する方法が出力に含まれます。考えられる原因と修正の詳細は、表169-4を参照してください。

    表169-4 CHECK_DBファンクションでFALSEが戻される原因

    原因 処置

    ターゲット・プラットフォーム名が認識されません。

    認識可能なプラットフォーム名をV$DB_TRANSPORTABLE_PLATFORM内で検索します。

    ターゲット・プラットフォームのエンディアン形式が異なります。

    変換はサポートされていません。

    データベースが読取り専用でオープンしていません。

    データベースを読取り専用モードでオープンし、再試行します。

    データベース内にアクティブまたはインダウトなトランザクションが存在します。

    データベースを読取り/書込みモードでオープンします。アクティブなトランザクションがロールバックされた後に、データベースを読取り専用モードでオープンし、操作を再試行します。

    これは、ユーザーがデータベースをフラッシュバックし、読取り専用モードで開いた場合に発生します。データベースを読取り/書込みモードでオープンすると、アクティブなトランザクションはロールバックされます。

    遅延トランザクション・ロールバックを実行する必要があります。

    データベースを読取り/書込みモードでオープンし、必要な表領域をオンラインにします。遅延トランザクションのロールバックが完了した後に、データベースを読取り専用モードでオープンし、操作を再試行します。

    データベースの互換性バージョンが10.0.0より低くなっています。

    COMPATIBLE初期化パラメータを10.0.0以上に変更し、データベースを読取り専用モードでオープンして操作を再試行します。

    互換性バージョンが10.0.0以上の読取り/書込みモードでオープンされていない表領域があります。

    COMPATIBLE初期化パラメータを10.0.0以上に変更し、影響を受ける表領域を読取り/書込みモードでオープンします。データベースを停止し、読取り専用モードでオープンして操作を再試行します。

次の例では、読取り/書込みモードでオープンしているデータベースでのCHECK_DBの使用方法を示します。

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
       db_ready BOOLEAN;
     BEGIN
       db_ready := DBMS_TDB.CHECK_DB('Microsoft Windows IA (32-bit)');
     END;
     /
  
Database is not open READ ONLY. Please open database READ ONLY and retry.

PL/SQL procedure successfully completed.

169.6.2 CHECK_EXTERNALファンクション

このファンクションは、データベースに外部表、ディレクトリまたはBFILEが含まれているかどうかを確認します。

構文

DBMS_TDB.CHECK_EXTERNAL 
   RETURN BOOLEAN;

戻り値

データベースに外部表、ディレクトリまたはBFILEが含まれている場合は、TRUEを戻します。それ以外の場合はFALSEを戻します。

使用上のノート

  • SERVEROUTPUTONの場合、データベース内の外部表、ディレクトリまたはBFILEの名前が出力されます。

  • データベースは読取り/書込みモードでオープンしている必要があります。

次の例では、外部表、ディレクトリまたはBFILEを含むデータベースでのCHECK_EXTERNALの使用方法を示します。

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
        external BOOLEAN;
     BEGIN
       external := DBMS_TDB.CHECK_EXTERNAL;
     END;
     /
The following external tables exist in the database:
SH.SALES_TRANSACTIONS_EXT
The following directories exist in the database:
SYS.MEDIA_DIR, SYS.DATA_FILE_DIR, SYS.LOG_FILE_DIR, SYS.DATA_PUMP_DIR
The following BFILEs exist in the database:
PM.PRINT_MEDIA
 
PL/SQL procedure successfully completed.