ADMIN_REVALIDATE_DB_OBJECTS プロシージャー - 無効なデータベース・オブジェクトを再有効化する

ADMIN_REVALIDATE_DB_OBJECTS プロシージャーは、データベース・オブジェクトを再検証します。

このプロシージャーは、実行する再検証のレベルを制御するさまざまな入力パラメーターを使用します。
  • データベースの無効なオブジェクトをすべて再検証するには、すべてのパラメーターに NULL を指定するか、 パラメーターを指定せずにプロシージャーを呼び出します。
  • 特定のスキーマの下の無効なデータベース・オブジェクトをすべて再検証するには、object_schema に値を指定し、object_name および object_type に NULL を指定します。
  • 特定の無効なデータベース・オブジェクトを再検証するには、最初のパラメーターに有効な値を指定します。
  • 現在の状態が有効か無効かにかかわらず、コンパイル済み SQL PL または PL/SQL オブジェクトの再検証を強制的に実行するには、object_typeobject_schemaobject_name に値を指定し、force に 'Y' を指定します。
  • 再検証されているコンパイル済み SQL PL または PL/SQL オブジェクトのデバッグを使用可能または使用不可にするには、debug_flag に 'Y' または 'N' を指定します。

構文

Read syntax diagramSkip visual syntax diagramADMIN_REVALIDATE_DB_OBJECTS(object_type ,object_schema,object_name,force, debug_flag)

スキーマは SYSPROC です。

プロシージャー・パラメーター

オブジェクト・タイプ
データベース・オブジェクトのタイプを識別する、タイプ VARCHAR (30) の 入力引数。 以下のタイプが有効です。
  • FUNCTION
  • GLOBAL_VARIABLE
  • MASK
  • METHOD
  • MODULE
  • PERMISSION
  • PROCEDURE
  • SPECIFIC
  • テーブル
  • TRIGGER
  • TYPE
  • USAGELIST
  • VIEW
この値は大/小文字が区別されません。 この値は NULL 値にすることができます。そうした場合、すべてのオブジェクト・タイプが考慮されます。

これらの タイプのいずれかが指定された場合は、プロシージャーは、MODULE に属するオブジェクトを除いて、 そのタイプの無効なオブジェクトをすべて再検証します。 モジュール内のオブジェクトを 再検証する場合は、特定のモジュールの名前を指定して MODULE タイプを使用すると、 そのモジュール内のすべての無効なオブジェクトが再検証されます。

複数のパラメーター・シグニチャー を持つルーチンがあり、それらのうちの 1 つのみを再検証する場合は、再検証するルーチンの名前を指定して SPECIFIC タイプを使用します。

TABLE タイプを使用すると、 指定された表が再編成され、その統計が収集されます。 プロシージャーは、REORG ペンディング状態にある 正規またはマテリアライズ照会表に対して、REORG ユーティリティー、RUNSTATS ユーティリティーの順に 呼び出します。 プロシージャーは、RUNSTATS のユーザー・プロファイルが存在する場合は、 これを使用することを試みます。 存在しない場合は、デフォルトの RUNSTATS 操作が呼び出されます。

object_schema
データベース・オブジェクト・リファレンスの修飾に使用されるスキーマ名を識別する、タイプ VARCHAR (128) の入力引数。 この名前は大文字小文字が区別されます。 この値を NULL にすることができます。
object_name
データベース・オブジェクトを識別する、タイプ VARCHAR(128) の 入力引数。 この名前は大文字小文字が区別されます。 この値は、型付き表または 行関数の値とすることはできません。これは、プロシージャーがこれらのタイプの オブジェクトをサポートしていないからです。そのようなオブジェクトの名前が指定されると、 エラーが戻されます。 この値を NULL にすることができます。
force
以下のオブジェクトについて (その現在の状態にかかわらずに) 再検証を強制的に実行するかどうかを示す、タイプ CHAR(1) の入力引数。
  • 呼び出し元のユーザーが DBADM 権限を持つ場合は、すべての SQL PL および PL/SQL オブジェクト。
  • 呼び出し元のユーザーが所有している SQL PL および PL/SQL オブジェクト。
上記にリストした基準を満たしていない SQL PL および PL/SQL オブジェクトと、SQL PL オブジェクトでも PL/SQL オブジェクトでもないオブジェクトについては、この引数は無視されます。
次の値があります。
  • 'Y' または 'y' - すべてのコンパイル済み SQL PL および PL/SQL オブジェクトが再検証されます。
  • 'N'、'n'、または NULL - デフォルトの動作 (無効なオブジェクトだけが再検証される) が実行されます。
デバッグ・フラグ
このプロシージャーが処理する以下のオブジェクトについてデバッグ・モードを使用可能または使用不可にすることを示す、タイプ CHAR(1) の入力引数。
  • 呼び出し元のユーザーが DBADM 権限を持っているか、組み込み役割 SYSDEBUG のメンバーである場合は、すべての SQL PL および PL/SQL オブジェクト。
  • 呼び出し元のユーザーが所有している SQL PL および PL/SQL オブジェクト。
上記にリストした基準を満たしていない SQL PL および PL/SQL オブジェクトと、SQL PL オブジェクトでも PL/SQL オブジェクトでもないオブジェクトについては、この引数は無視されます。
次の値があります。
  • Y または y - コンパイル済み SQL PL および PL/SQL オブジェクトが、デバッグ・モードを有効にして再検証されます。
  • N または n - コンパイル済み SQL PL および PL/SQL オブジェクトが、デバッグ・モードを無効にして再検証されます。
  • NULL - コンパイル済み SQL PL および PL/SQL オブジェクトが、デバッグ・モードを変更せずに再検証されます。 これがデフォルトの動作です。

許可

以下のいずれかの権限が必要です。
  • ADMIN_REVALIDATE_DB_OBJECTS プロシージャーに対する EXECUTE 特権
  • object_type が MASK または PERMISSION である場合、SECADM 権限

force オプションの値が 'Y' である場合は、呼び出し元のユーザーが、再検証するオブジェクトの所有者であるか、DBADM 権限を持っている必要があります。

debug_flag オプションの値が 'Y' である場合は、呼び出し元のユーザーが、オブジェクトの所有者である、DBADM 権限を持っている、または SYSDEBUG システム定義役割のメンバーである必要があります。

デフォルトの PUBLIC 特権

制限のないデータベースでは、このプロシージャーが自動的に作成されると、EXECUTE 特権が PUBLIC に付与されます。

例 1: 現在のデータベースのすべてを 再検証します。
  CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS(NULL, NULL, NULL)
または、 パラメーターを指定せずにプロシージャーを呼び出します。
  CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS()
例 2: スキーマ MY_SCHEMA によって修飾されているすべてのオブジェクトを再検証します。
  CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS(NULL, 'MY_SCHEMA', NULL) 
例 3: データベース内のトリガー・オブジェクトをすべて再検証します。
  CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS('trigger', NULL, NULL) 
例 4: 特定のビュー・オブジェクトを再検証します。
  CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS('view', 'MY_SCHEMA', 'MY_VIEW') 
例 5: MY_SCHEMA の下にあるすべてのプロシージャーを再検証します。 この例では、このスキーマ の下に 3 つのプロシージャー (proc1、proc2、および proc3) があります。 proc1 によって使用された参照されたオブジェクトは存在しません。 以下の呼び出しによって、proc2 および proc3 を 再検証できますが、proc1 は無効のままです。 この状態の場合、呼び出しによって 警告が戻されます。
  CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS('procedure', 'MY_SCHEMA', NULL) 
例 6: 存在しないオブジェクトを再検証します。 この例では、 エラーが戻されます。
  CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS('procedure', 'MY_SCHEMA', 'MY_VIEW')
例 7: 名前付きパラメーター表記を使用して、MY_SCHEMA の下のすべてのプロシージャーを再検証します。
  CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS(
    object_type=>'PROCEDURE',object_schema=>'MY_SCHEMA')

使用上の注意

ADMIN_REVALIDATE_DB_OBJECTS プロシージャーに 渡される NULL 以外のパラメーター値は、すべて指定される必要があります。指定されない場合は、 プロシージャーは再検証が必要なオブジェクトを識別できません。 例えば、 ビュー名をトリガー・タイプで指定すると、タイプが一致しないので、プロシージャーは ビューを再検証しません。

このプロシージャーは、無効な オブジェクト、および REORG ペンディング状態の正規またはマテリアライズ照会表のみを 再検証します。 すべての無効なオブジェクトは SYSCAT.INVALIDOBJECTS で検出できます。 どの表が REORG ペンディング状態であるかを判別するには、ADMIN_GET_TAB_INFO 表関数を 使用します。

有効なオブジェクトが入力として指定された場合は、 プロシージャーはあらゆる操作を実行せず、成功コードを戻します。 表の再検証中に障害が発生すると、プロシージャーも 失敗します。 他のオブジェクトの再検証中に障害が発生すると、プロシージャーは、障害を無視し、 他のオブジェクトの再検証を続行します。 1 つでも障害が発生すると、プロシージャーは、警告 (SQLSTATE 0168B) を 戻します。 すべてのオブジェクトの再検証が失敗すると、プロシージャーはエラーを 戻します (SQLSTATE 429C4)。 表を除くオブジェクトのすべての再検証の失敗について 詳しくは、SYSCAT.INVALIDOBJECTS を参照してください。

無効なマスクまたは権限を再検証するためには、ADMIN_REVALIDATE_DB_OBJECTS を実行するユーザーに SECADM 権限が必要です。 少なくとも 1 つの障害があり、最初の障害が、マスクまたは許可の再妥当性検査中にユーザーが SECADM 権限を持っていないことが原因である場合、プロシージャーは警告 (SQLSTATE 0168B、SQLCODE + 361) を戻します。 msg-token2 には CREATE PERMISSION または CREATE MASK が含まれます。 すべてのオブジェクトの再検証が失敗して、最初の障害の原因が、マスクまたは権限の再検証を実行するときにユーザーに SECADM 権限がないためである場合、プロシージャーがエラー (SQLSTATE 42501、SQLCODE -551) を戻します。

グローバル変数が再検証 されると、現行セッションに対してもインスタンス化されます。

表の再検証の進行をモニターするには、 関連する表の REORG 操作の進行をモニターできます。 他のすべてのオブジェクトについては、SYSCAT.INVALIDOBJECTS カタログ・ビューを照会します。 オブジェクトは、正常に再検証されるとこのビューから削除され、 再検証が失敗すると、項目は更新されます。

カタログ・データの整合性を保つために、ADMIN_REVALIDATE_DB_OBJECTS ルーチンは明示的な COMMIT ステートメントを実行するように設計されています。 ADMIN_REVALIDATE_DB_OBJECTS ルーチンは明示的な COMMIT ステートメントを実行するため、ADMIN_REVALIDATE_DB_OBJECTS ルーチンを作業単位 (UOW) の一部として使用できない可能性があります。 例えば、UOW が ROLLBACK ステートメントを実行するとき、ROLLBACK ステートメントが実行される前に ADMIN_REVALIDATE_DB_OBJECTS ルーチンによって前にデータベース・オブジェクトに加えられた変更はその後も有効になります。