ADMIN_REVALIDATE_DB_OBJECTS プロシージャー - 無効なデータベース・オブジェクトを再有効化する
ADMIN_REVALIDATE_DB_OBJECTS プロシージャーは、データベース・オブジェクトを再検証します。
- データベースの無効なオブジェクトをすべて再検証するには、すべてのパラメーターに NULL を指定するか、 パラメーターを指定せずにプロシージャーを呼び出します。
- 特定のスキーマの下の無効なデータベース・オブジェクトをすべて再検証するには、object_schema に値を指定し、object_name および object_type に NULL を指定します。
- 特定の無効なデータベース・オブジェクトを再検証するには、最初のパラメーターに有効な値を指定します。
- 現在の状態が有効か無効かにかかわらず、コンパイル済み SQL PL または PL/SQL オブジェクトの再検証を強制的に実行するには、object_type、object_schema、object_name に値を指定し、force に 'Y' を指定します。
- 再検証されているコンパイル済み SQL PL または PL/SQL オブジェクトのデバッグを使用可能または使用不可にするには、debug_flag に 'Y' または 'N' を指定します。
構文
スキーマは SYSPROC です。
プロシージャー・パラメーター
- オブジェクト・タイプ
- データベース・オブジェクトのタイプを識別する、タイプ VARCHAR (30) の
入力引数。 以下のタイプが有効です。
- FUNCTION
- GLOBAL_VARIABLE
- MASK
- METHOD
- MODULE
- PERMISSION
- PROCEDURE
- SPECIFIC
- テーブル
- TRIGGER
- TYPE
- USAGELIST
- VIEW
これらの タイプのいずれかが指定された場合は、プロシージャーは、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 オブジェクト。
次の値があります。- 'Y' または 'y' - すべてのコンパイル済み SQL PL および PL/SQL オブジェクトが再検証されます。
- 'N'、'n'、または NULL - デフォルトの動作 (無効なオブジェクトだけが再検証される) が実行されます。
デバッグ・フラグ - このプロシージャーが処理する以下のオブジェクトについてデバッグ・モードを使用可能または使用不可にすることを示す、タイプ CHAR(1) の入力引数。
- 呼び出し元のユーザーが DBADM 権限を持っているか、組み込み役割 SYSDEBUG のメンバーである場合は、すべての 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 に付与されます。
例
CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS(NULL, NULL, NULL)
または、
パラメーターを指定せずにプロシージャーを呼び出します。 CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS()
CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS(NULL, 'MY_SCHEMA', NULL)
CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS('trigger', NULL, NULL)
CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS('view', 'MY_SCHEMA', 'MY_VIEW')
CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS('procedure', 'MY_SCHEMA', NULL)
CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS('procedure', 'MY_SCHEMA', 'MY_VIEW')
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 ルーチンによって前にデータベース・オブジェクトに加えられた変更はその後も有効になります。