分散データベースでのPL/SQLプロシージャの実行
Oracle Globally Distributed Database構成のすべてのシャードでDDL文を実行するのと同じ方法で、Oracle提供の特定のPL/SQLプロシージャも実行できます。
これらの特定のプロシージャ・コールは、シャードDDL文であるかのように動作します。この場合、それらはすべてのシャードに伝播され、カタログによって追跡され、新しいシャードが構成に追加されるたびに実行されます。
次のプロシージャはすべて、シャードDDL文であるかのように動作します。
-
シャード・データベースでサポートされるAPI (Oracle Textアプリケーション開発者ガイド)にリストされているOracle Textの
CTXSYSプロシージャ -
DBMS_FGAパッケージのプロシージャ -
DBMS_RLSパッケージのプロシージャ -
DBMS_REDACTパッケージのプロシージャ -
DBMS_STATSパッケージの次のプロシージャ:GATHER_INDEX_STATSGATHER_TABLE_STATSGATHER_SCHEMA_STATSGATHER_DATABASE_STATSGATHER_SYSTEM_STATS
-
DBMS_GOLDENGATE_ADMパッケージの次のプロシージャ:ADD_AUTO_CDRADD_AUTO_CDR_COLUMN_GROUPADD_AUTO_CDR_DELTA_RESALTER_AUTO_CDRALTER_AUTO_CDR_COLUMN_GROUPPURGE_TOMBSTONESREMOVE_AUTO_CDRREMOVE_AUTO_CDR_COLUMN_GROUPREMOVE_AUTO_CDR_DELTA_RES
シャードDDL文と同じ方法でいずれかのプロシージャを実行するには、次のステップを実行します。
-
gsm_pooladmin_roleを持つデータベース・ユーザーとしてSQL*Plusを使用して、シャード・カタログ・データベースに接続します。 -
ALTER SESSION ENABLE SHARD DDLを使用してシャードDDLを有効にします。 -
SYS.EXEC_SHARD_PLSQLという名前のシャーディング固有のPL/SQLプロシージャを使用して、ターゲット・プロシージャを実行します。このプロシージャは、単一のCLOB引数を取ります。これは、完全修飾プロシージャ名とその引数を指定する文字列です。
EXEC_SHARD_PLSQLを使用せずにターゲット・プロシージャを実行すると、そのプロシージャはシャード・カタログでのみ実行され、すべてのシャードに伝播されません。完全修飾名(たとえば、SYS.DBMS_RLS.ADD_POLICY)を指定せずにプロシージャを実行すると、エラーが発生します。
たとえば、すべてのシャードでDBMS_RLS.ADD_POLICYを実行するには、SHARD DLLを有効にした後にSQL*Plusから次を実行します。
exec sys.exec_shard_plsql('sys.dbms_rls.add_policy(object_schema =>
''testuser1'',
object_name => ''DEPARTMENTS'',
policy_name => ''dept_vpd_pol'',
function_schema => ''testuser1'',
policy_function => ''authorized_emps'',
statement_types => ''INSERT, UPDATE, DELETE, SELECT, INDEX'',
update_check => TRUE)'
) ;コール仕様自体はEXEC_SHARD_PLSQLへの文字列パラメータであるため、ターゲット・プロシージャ・コール仕様内に2つの一重引用符が必要なことに注意してください。
ターゲット・プロシージャがシャード・カタログ・データベースで正しく実行されると、現在デプロイされているすべてのシャードでの処理用にキューに入れられます。シャード・カタログでのターゲット・プロシージャ実行のエラーは、SQL*Plusセッションに戻されます。シャードでの実行時のエラーは、DDLの場合と同じ方法で追跡できます。