分散データベースでの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_STATS
GATHER_TABLE_STATS
GATHER_SCHEMA_STATS
GATHER_DATABASE_STATS
GATHER_SYSTEM_STATS
-
DBMS_GOLDENGATE_ADM
パッケージの次のプロシージャ:ADD_AUTO_CDR
ADD_AUTO_CDR_COLUMN_GROUP
ADD_AUTO_CDR_DELTA_RES
ALTER_AUTO_CDR
ALTER_AUTO_CDR_COLUMN_GROUP
PURGE_TOMBSTONES
REMOVE_AUTO_CDR
REMOVE_AUTO_CDR_COLUMN_GROUP
REMOVE_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の場合と同じ方法で追跡できます。