分散データベースでの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文と同じ方法でいずれかのプロシージャを実行するには、次のステップを実行します。

  1. gsm_pooladmin_roleを持つデータベース・ユーザーとしてSQL*Plusを使用して、シャード・カタログ・データベースに接続します。

  2. ALTER SESSION ENABLE SHARD DDLを使用してシャードDDLを有効にします。

  3. 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の場合と同じ方法で追跡できます。