DBMS_TDBパッケージは、Recovery ManagerのCONVERT DATABASEコマンドを使用してプラットフォーム間でデータベースを転送できるかどうかをレポートします。このパッケージは、現在のホスト・プラットフォーム上のデータベースのエンディアン形式が転送先プラットフォームと同じであること、および現在のデータベースの状態によってデータベースの転送が妨げられないことを検証します。
|
関連項目: CONVERT DATABASEを使用したデータベース転送については、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。 |
この章では、次の項目について説明します。
概要
セキュリティ・モデル
定数
ビュー
使用上の注意
この項では、DBMS_TDBの使用に関連する項目について説明します。
多くの場合、Oracleは、同じエンディアン形式のプラットフォーム間のデータベース転送をサポートしています。ただし、エンディアン形式が同じ場合でも、データベースをプラットフォームから別のプラットフォームに移動するには変換処理が必要です。また、データベース転送のプロセスでは、転送するデータベースを読取り専用モードでオープンするなどの事前条件を満たす必要もあります。
DBMS_TDBパッケージは、次の2つの役割を果たします。
指定したソース・プラットフォームから指定したターゲット・プラットフォームへのデータベース転送がサポートされていることの確認。
転送するデータベースが転送用に正しく準備されているかの確認。正しく準備されていない場合は、データベース転送を妨げている条件を識別します。
実際の変換は、Recovery ManagerのCONVERT DATABASEコマンドを使用して実行されます。 データベース転送の要件、プラットフォーム間の転送に必要なデータベース変換のプロセス、および変換プロセスにおけるDBMS_TDBサブプログラムの使用例の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。
このパッケージを使用するには、DBA権限が必要です。
DBMS_TDBパッケージは、パラメータ値の指定に使用するいくつかの列挙定数を定義します。 列挙定数にはパッケージ名を接頭辞として付加する必要があります(DBMS_TDB.SKIP_NONEなど)。
DBMS_TDBパッケージでは、表135-1に示す定数が使用されます。
表135-1 DBMS_TDBの定数
| 名前 | 型 | 値 | 説明 |
|---|---|---|---|
|
|
|
|
データベースの転送の準備ができているかどうかを確認する際に、すべてのファイルをチェックします。 |
|
|
|
|
データベースの転送の準備ができているかどうかを確認する際に、オフラインの表領域内のファイルをスキップします。 |
|
|
|
|
データベースの転送の準備ができているかどうかを確認する際に、読取り専用の表領域内のファイルをスキップします。 |
DBMS_TDBパッケージは、次のビューを使用します。このビューの詳細は、『Oracle Databaseリファレンス』を参照してください。
V$DB_TRANSPORTABLE_PLATFORM: データベース転送をサポートするソース・プラットフォームとターゲット・プラットフォームの組合せを指定します。
このパッケージのサブプログラムは、目的のプラットフォーム間のデータベース変換が可能かどうかの確認、およびデータベースが変換可能かどうかの確認の両方で有効です。 変換プロセスで使用するこれらのサブプログラムの様々な使用方法の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。
このパッケージのサブプログラムは、単純にTRUEまたはFALSEを結果として戻し、データベース転送が可能かどうかを示します。転送できない原因を示すメッセージを受け取るには、SERVEROUTPUT ONを指定してサブプログラムを使用します。
表135-2 DBMS_TDBパッケージのサブプログラム
| サブプログラム | 説明 |
|---|---|
|
|
データベースをターゲット・プラットフォームに転送できるかどうかを確認します。 |
|
|
データベースに外部表、ディレクトリまたはBFILEが含まれているかどうかを確認します。 |
このファンクションは、データベースをターゲット・プラットフォームに転送できるかどうかを確認します。指定したソース・プラットフォームおよび宛先プラットフォームに対して転送が完全にサポートされているかどうか、またデータベースが現在転送に適切な状態にあるかどうかがテストされます。
データベースの読取り専用またはオフラインの部分を転送しない場合、これらをスキップするかどうかを指定できます。
このファンクションはオーバーロードされています。複数の機能を構文形式ごとに、定義とともに示します。
構文
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;
パラメータ
表135-3 CHECK_DBファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
接続先プラットフォームの名前。 |
|
|
データベース転送が可能かどうかを確認する際に、スキップするデータベースの部分がある場合は、そのスキップする部分を指定します。 このプロパティに指定できる値は、表135-1「DBMS_TDBの定数」を参照してください。 |
戻り値
データベースをターゲット・プラットフォームに転送できない場合、またはデータベースが転送可能な状態でない場合は、FALSEを戻します。データベースが転送可能な状態の場合は、TRUEを戻します。
使用上の注意
SERVEROUTPUTがONの場合、データベースが転送できない原因とその問題を修正する方法が出力に含まれます。 考えられる原因および修正の詳細は、表135-4「CHECK_DBファンクションでFALSEが戻される原因」を参照してください。
表135-4 CHECK_DBファンクションでFALSEが戻される原因
| 原因 | 処置 |
|---|---|
|
ターゲット・プラットフォーム名が認識されません。 |
認識可能なプラットフォーム名を |
|
ターゲット・プラットフォームのエンディアン形式が異なります。 |
変換はサポートされていません。 |
|
データベースが読取り専用でオープンしていません。 |
データベースを読取り専用モードでオープンし、再試行します。 |
|
データベース内にアクティブまたはインダウトなトランザクションが存在します。 |
データベースを読取り/書込みモードでオープンします。アクティブなトランザクションがロールバックされた後に、データベースを読取り専用モードでオープンし、操作を再試行します。 これは、ユーザーがデータベースをフラッシュバックし、読取り専用モードで開いた場合に発生します。データベースを読取り/書込みモードでオープンすると、アクティブなトランザクションはロールバックされます。 |
|
遅延トランザクション・ロールバックを実行する必要があります。 |
データベースを読取り/書込みモードでオープンし、必要な表領域をオンラインにします。遅延トランザクションのロールバックが完了した後に、データベースを読取り専用モードでオープンし、操作を再試行します。 |
|
データベースの互換性バージョンが10.0.0より低くなっています。 |
|
|
互換性バージョンが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.
このファンクションは、データベースに外部表、ディレクトリまたはBFILEが含まれているかどうかを確認します。
構文
DBMS_TDB.CHECK_EXTERNAL RETURN BOOLEAN;
戻り値
データベースに外部表、ディレクトリまたはBFILEが含まれている場合は、TRUEを戻します。それ以外の場合はFALSEを戻します。
使用上の注意
SERVEROUTPUTがONの場合、データベース内の外部表、ディレクトリまたは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.