ヘッダーをスキップ
Oracle® Streams概要および管理
11gリリース2 (11.2)
B61351-03
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

18 ルールの管理

Oracle Streams環境では、ルールを使用してOracle Streamsクライアント(取得プロセス伝播適用プロセスおよびメッセージ・クライアント)の動作を制御します。また、ルール・エンジンのクライアントであるカスタム・アプリケーションも作成できます。この章では、ルール・セット、ルールおよびルールに関連する権限の管理手順について説明します。

次の各項では、ルールの管理について説明します。

この章で説明する各タスクは、特に明記されていないかぎり、適切な権限を付与されているOracle Streams管理者が完了する必要があります。


注意:

Oracle Streamsクライアントで使用されるルールおよびルール・セットを変更すると、Oracle Streamsクライアントの動作が変化します。


注意:

この章では、評価コンテキストの作成例およびDBMS_RULE.EVALUATEプロシージャを使用したイベントの評価例は説明していません。これらの例については、『Oracle Streams拡張例』を参照してください。

ルール・セットの管理

ルール・セットの変更は、そのルール・セットを使用するOracle Streams取得プロセス伝播および適用プロセスを停止せずに行うことができます。Oracle Streamsはコミットされた直後の変更を検出します。新しいバージョンのルール・セットが使用されるメッセージについて厳密に制御する必要がある場合は、次の手順を実行します。

  1. 対応する取得プロセス、伝播および適用プロセスを停止します。

  2. ルール・セットを変更します。

  3. 手順1で停止したOracle Streamsクライアントを再起動します。

この項では、次のタスクの実行手順を説明します。

ルール・セットの作成

次の例では、DBMS_RULE_ADMパッケージのCREATE_RULE_SETプロシージャを実行してルール・セットを作成します。

BEGIN
  DBMS_RULE_ADM.CREATE_RULE_SET(
    rule_set_name       => 'strmadmin.hr_capture_rules',
    evaluation_context  => 'SYS.STREAMS$_EVALUATION_CONTEXT');
END;
/

このプロシージャを実行すると、次のアクションが実行されます。

  • strmadminスキーマにルール・セットhr_capture_rulesが作成されます。同じ名前と所有者を持つルール・セットは作成できません。

  • ルール・セットが、SYS.STREAMS$_EVALUATION_CONTEXT評価コンテキストに関連付けられます。これは、Oracleが提供するOracle Streams用の評価コンテキストです。

また、DBMS_STREAMS_ADMパッケージの次のプロシージャを使用すると、Oracle Streamsの取得プロセス伝播適用プロセスまたはメッセージ・クライアントにルール・セットが存在しない場合に自動的にルール・セットを作成できます。

  • ADD_MESSAGE_PROPAGATION_RULE

  • ADD_MESSAGE_RULE

  • ADD_TABLE_PROPAGATION_RULES

  • ADD_TABLE_RULES

  • ADD_SUBSET_PROPAGATION_RULES

  • ADD_SUBSET_RULES

  • ADD_SCHEMA_PROPAGATION_RULES

  • ADD_SCHEMA_RULES

  • ADD_GLOBAL_PROPAGATION_RULES

  • ADD_GLOBAL_RULES

ADD_SUBSET_PROPAGATION_RULESおよびADD_SUBSET_RULESを除き、前述のプロシージャは、Oracle Streamsクライアントポジティブ・ルール・セットまたはネガティブ・ルール・セットを作成できます。ADD_SUBSET_PROPAGATION_RULESおよびADD_SUBSET_RULESは、Oracle Streamsクライアントのポジティブ・ルール・セットのみを作成できます。


関連項目:

Streamsクライアントを作成する方法の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照

ルール・セットへのルールの追加

ルール・セットルールを追加すると、そのルール・セットを使用するOracle Streamsクライアントの動作が変化します。手順を実行する前に、ルール・セットにルールを追加した場合のOracle Streamsクライアントへの影響を理解する必要があります。

次の例では、DBMS_RULE_ADMパッケージのADD_RULEプロシージャを実行して、hr_capture_rulesルール・セットにhr_dmlルールを追加します。

BEGIN
  DBMS_RULE_ADM.ADD_RULE(
    rule_name          => 'strmadmin.hr_dml', 
    rule_set_name      => 'strmadmin.hr_capture_rules',
    evaluation_context => NULL);
END;
/

この例では、ADD_RULEプロシージャの実行時には評価コンテキストは指定されていません。したがって、ルールに独自の評価コンテキストがなければ、hr_capture_rulesルール・セットの評価コンテキストを継承します。ルール・セットに指定した以外の評価コンテキストをルールで使用する場合は、ADD_RULEプロシージャの実行時にevaluation_contextパラメータをその評価コンテキストに設定できます。

ルール・セットからのルールの削除

ルール・セットからルールを削除すると、そのルール・セットを使用するOracle Streamsクライアントの動作が変化します。手順を実行する前に、ルール・セットからルールを削除した場合のOracle Streamsクライアントへの影響を理解する必要があります。

次の例では、DBMS_RULE_ADMパッケージのREMOVE_RULEプロシージャを実行して、hr_capture_rulesルール・セットからhr_dmlルールを削除します。

BEGIN
  DBMS_RULE_ADM.REMOVE_RULE(
    rule_name     => 'strmadmin.hr_dml', 
    rule_set_name => 'strmadmin.hr_capture_rules');
END;
/

REMOVE_RULEプロシージャの実行後も、ルールはデータベース内に存在し、他のルール・セットに含まれていた場合は、そのルール・セットに残ります。


関連項目:

「ルールの削除」

ルール・セットの削除

次の例では、DBMS_RULE_ADMパッケージのDROP_RULE_SETプロシージャを実行して、データベースからhr_capture_rulesルール・セットを削除します。

BEGIN
  DBMS_RULE_ADM.DROP_RULE_SET(
    rule_set_name => 'strmadmin.hr_capture_rules', 
    delete_rules  => FALSE);
END;
/

この例では、DROP_RULE_SETプロシージャのdelete_rulesパラメータがFALSEに設定されています。これはデフォルト設定です。したがって、このルール・セットにルールが含まれている場合、そのルールは削除されません。delete_rulesパラメータをTRUEに設定すると、指定したルール・セットに含まれるルールのうち、他のルール・セットには含まれていないルールは、データベースから自動的に削除されます。ルール・セットのルールのうち、1つ以上の他のルール・セットに含まれているルールは削除されません。

ルールの管理

ルールの変更は、そのルールを使用するOracle Streamsの取得プロセス伝播および適用プロセスを停止せずに行うことができます。Oracle Streamsはコミットされた直後の変更を検出します。新しいバージョンのルールが使用されるメッセージについて厳密に制御する必要がある場合は、次の手順を実行します。

  1. 対応する取得プロセス、伝播および適用プロセスを停止します。

  2. ルールを変更します。

  3. 手順1で停止したOracle Streamsクライアントを再起動します。

この項では、次のタスクの実行手順を説明します。

ルールの作成

次の例では、DBMS_RULE_ADMパッケージのCREATE_RULEプロシージャを使用して、アクション・コンテキストを持たないルールおよびアクション・コンテキストを持つルールを作成します。

アクション・コンテキストを持たないルールの作成

アクション・コンテキストを持たないルールを作成するには、次の例のように、CREATE_RULEプロシージャを実行し、rule_nameパラメータを使用してルールの名前、conditionパラメータを使用してルール条件を指定します。

BEGIN  
  DBMS_RULE_ADM.CREATE_RULE(
    rule_name  => 'strmadmin.hr_dml',
    condition  => ' :dml.get_object_owner() = ''HR'' ');
END;
/

このプロシージャを実行すると、次のアクションが実行されます。

  • strmadminスキーマにルールhr_dmlが作成されます。同じ名前と所有者を持つルールは作成できません。

  • hrスキーマ内の表に対するDML変更について、TRUEと評価される条件が作成されます。

この例では、ルールの評価コンテキストは指定されていません。したがって、このルールは追加先となるルール・セットの評価コンテキストを継承します。または、DBMS_RULE_ADM.ADD_RULEプロシージャを実行してこのルールをルール・セットに追加するときに、明示的に評価コンテキストが割り当てられます。この時点では、ルールはどのルール・セットにも属していないため、このルールは評価できません。

また、DBMS_STREAMS_ADMパッケージの次のプロシージャを使用すると、自動的にルールを作成してルール・セットに追加できます。

  • ADD_MESSAGE_PROPAGATION_RULE

  • ADD_MESSAGE_RULE

  • ADD_TABLE_PROPAGATION_RULES

  • ADD_TABLE_RULES

  • ADD_SUBSET_PROPAGATION_RULES

  • ADD_SUBSET_RULES

  • ADD_SCHEMA_PROPAGATION_RULES

  • ADD_SCHEMA_RULES

  • ADD_GLOBAL_PROPAGATION_RULES

  • ADD_GLOBAL_RULES

ADD_SUBSET_PROPAGATION_RULESおよびADD_SUBSET_RULESを除き、前述のプロシージャは、Oracle Streamsクライアントポジティブ・ルール・セットまたはネガティブ・ルール・セットにルールを追加できます。ADD_SUBSET_PROPAGATION_RULESおよびADD_SUBSET_RULESは、Oracle Streamsクライアントのポジティブ・ルール・セットのみにルールを追加できます。


関連項目:

Streamsクライアントを作成する方法の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照

アクション・コンテキストを持つルールの作成

アクション・コンテキストを持つルールを作成するには、CREATE_RULEプロシージャを実行し、rule_nameパラメータを使用してルールの名前、conditionパラメータを使用してルール条件、action_contextパラメータを使用してルールのアクション・コンテキストを指定します。RE$NV_LIST型のADD_PAIRメンバー・プロシージャを使用すると、アクション・コンテキストに名前/値ペアを追加できます。

次の例では、非NULLのアクション・コンテキストを持つルールを作成します。

DECLARE
  ac  SYS.RE$NV_LIST;
BEGIN
  ac := SYS.RE$NV_LIST(NULL);
  ac.ADD_PAIR('course_number', ANYDATA.CONVERTNUMBER(1057));
  DBMS_RULE_ADM.CREATE_RULE(
    rule_name      => 'strmadmin.rule_dep_10',
    condition      => ' :dml.get_object_owner()=''HR'' AND ' || 
       ' :dml.get_object_name()=''EMPLOYEES'' AND ' || 
       ' (:dml.get_value(''NEW'', ''DEPARTMENT_ID'').AccessNumber()=10) AND ' || 
       ' :dml.get_command_type() = ''INSERT'' ',
    action_context => ac);
END;
/

このプロシージャを実行すると、次のアクションが実行されます。

  • strmadminスキーマにルールrule_dep_10が作成されます。同じ名前と所有者を持つルールは作成できません。

  • department_id10hr.employees表への挿入についてTRUEと評価される条件が作成されます。

  • 名前がcourse_numberで、値が1057の名前/値ペアを持つアクション・コンテキストが作成されます。


関連項目:

アクション・コンテキストにこのような名前/値ペアを使用する例については、「ルール・アクション・コンテキスト」を参照

ルールの変更

DBMS_RULE_ADMパッケージのALTER_RULEプロシージャを使用すると、既存のルールを変更できます。具体的には、このプロシージャを使用すると次のことができます。

  • ルール条件の変更

  • ルールの評価コンテキストの変更

  • ルールの評価コンテキストの削除

  • ルールのアクション・コンテキストの名前/値ペアの変更

  • ルールのアクション・コンテキストへの名前/値ペアの追加

  • ルールのアクション・コンテキストからの名前/値ペアの削除

  • ルールに関するコメントの変更

  • ルールに関するコメントの削除

ここでは、これらの変更の例をいくつか示します。

ルール条件の変更

ALTER_RULEプロシージャのconditionパラメータを使用すると、既存のルールの条件を変更できます。たとえば、「ルールの作成」で作成したルールの条件を変更する必要がある場合を考えます。既存のhr_dmlルールの条件は、hrスキーマ内の任意のオブジェクトに対する任意のDML変更についてTRUEと評価されます。このスキーマ内のemployees表に対する変更を除外する必要がある場合は、hr.employees表に対するDML変更についてはFALSEと評価されるが、このスキーマの他の表に対するDML変更については引き続きTRUEと評価されるように、このルールを変更できます。次のプロシージャを実行すると、ルールが前述のとおり変更されます。

BEGIN  
  DBMS_RULE_ADM.ALTER_RULE(
    rule_name          => 'strmadmin.hr_dml',
    condition          => ' :dml.get_object_owner() = ''HR'' AND NOT ' ||
                          ' :dml.get_object_name() = ''EMPLOYEES'' ',
    evaluation_context => NULL);
END;
/

注意:

  • ルールの条件を変更すると、そのルールを含むすべてのルール・セットに影響します。

  • ルールのアクション・コンテキストを保持しながらルールを変更するには、ALTER_RULEプロシージャのaction_contextパラメータにNULLを指定します。NULLは、action_contextパラメータのデフォルト値です。

  • ルールが同期取得のルール・セットに含まれている場合、ルールの条件:dml.get_object_nameおよび:dml.get_object_ownerは変更しないでください。これらの条件を変更すると、同期取得でデータベース・オブジェクトの変更が取得されなくなる場合があります。同期取得のルールに含まれる他の条件は変更できます。


ルールのアクション・コンテキストの名前/値ペアの変更

ルールのアクション・コンテキストの名前/値ペアを変更するには、最初にルールのアクション・コンテキストから名前/値ペアを削除し、次にルールのアクション・コンテキストに異なる名前/値ペアを追加します。

この例では、ルールrule_dep_10の名前/値ペアを変更します。そのために、最初にこのルールのアクション・コンテキストから名前course_nameを持つ名前/値ペアを削除し、次に名前は同じ(course_name)で値は異なる名前/値ペアを追加します。この変更される名前/値ペアは「アクション・コンテキストを持つツールの作成」の例でルールに追加したものです。

アクション・コンテキストに、変更する名前/値ペアの他にも名前/値ペアが含まれている場合、アクション・コンテキストを変更するときには、他の名前/値ペアを変更または削除しないように注意してください。

次の手順に従って、アクション・コンテキストの名前/値ペアを変更します。

  1. 次の問合せを実行すると、ルールのアクション・コンテキスト内の名前/値ペアを表示できます。

    COLUMN ACTION_CONTEXT_NAME HEADING 'Action Context Name' FORMAT A25
    COLUMN AC_VALUE_NUMBER HEADING 'Action Context Number Value' FORMAT 9999
    
    SELECT 
        AC.NVN_NAME ACTION_CONTEXT_NAME, 
        AC.NVN_VALUE.ACCESSNUMBER() AC_VALUE_NUMBER
      FROM DBA_RULES R, TABLE(R.RULE_ACTION_CONTEXT.ACTX_LIST) AC
      WHERE RULE_NAME = 'RULE_DEP_10';
    

    この問合せでは、次のような出力が表示されます。

    Action Context Name       Action Context Number Value
    ------------------------- ---------------------------
    course_number                                    1057
    
  2. 名前/値ペアを変更します。他のユーザーがアクション・コンテキストを同時に変更していないことを確認してください。この手順では、最初にRE$NV_LIST型のREMOVE_PAIRメンバー・プロシージャを使用して、名前course_numberを含む名前/値ペアをrule_dep_10ルールのアクション・コンテキストから削除します。次に、この手順では、同じ型のADD_PAIRメンバー・プロシージャを使用して、新しい名前/値ペアを含む名前/値ペアをこのルールのアクション・コンテキストに追加します。この場合、追加する名前/値ペアの名前はcourse_number、値は1108になります。

    この例では、ルールのアクション・コンテキストの既存の名前/値ペアを保持するために、変更前にルールのアクション・コンテキストを選択して変数に挿入しています。

    DECLARE
      action_ctx       SYS.RE$NV_LIST;
      ac_name          VARCHAR2(30) := 'course_number';
    BEGIN
      SELECT RULE_ACTION_CONTEXT
        INTO action_ctx
        FROM DBA_RULES R
        WHERE RULE_OWNER='STRMADMIN' AND RULE_NAME='RULE_DEP_10';
      action_ctx.REMOVE_PAIR(ac_name);
      action_ctx.ADD_PAIR(ac_name,
                     ANYDATA.CONVERTNUMBER(1108));
      DBMS_RULE_ADM.ALTER_RULE(
        rule_name       =>  'strmadmin.rule_dep_10',
        action_context  => action_ctx);
    END;
    /
    

    名前/値ペアが正しく変更されたかどうかを確認するには、手順1の問合せを再実行できます。この問合せでは、次のような出力が表示されます。

    Action Context Name       Action Context Number Value
    ------------------------- ---------------------------
    course_number                                    1108
    

ルールのアクション・コンテキストへの名前/値ペアの追加

RE$NV_LIST型のADD_PAIRメンバー・プロシージャを使用して新しいペアを追加する前に、アクション・コンテキストを選択して変数に挿入すると、アクション・コンテキスト内の既存の名前/値ペアを保持できます。他のユーザーがアクション・コンテキストを同時に変更していないことを確認してください。次の例では、rule_dep_10ルールのアクション・コンテキスト内の既存の名前/値ペアが保持され、名前がdist_listで値がadmin_listの新しい名前/値ペアが追加されます。

DECLARE
  action_ctx       SYS.RE$NV_LIST;
  ac_name          VARCHAR2(30) := 'dist_list';
BEGIN
  action_ctx := SYS.RE$NV_LIST(SYS.RE$NV_ARRAY());
  SELECT RULE_ACTION_CONTEXT
    INTO action_ctx
    FROM DBA_RULES R
    WHERE RULE_OWNER='STRMADMIN' AND RULE_NAME='RULE_DEP_10';
  action_ctx.ADD_PAIR(ac_name,
                 ANYDATA.CONVERTVARCHAR2('admin_list'));
  DBMS_RULE_ADM.ALTER_RULE(
    rule_name       =>  'strmadmin.rule_dep_10',
    action_context  => action_ctx);
END;
/

名前/値ペアが正しく追加されたかどうかを確認するには、次の問合せを実行できます。

COLUMN ACTION_CONTEXT_NAME HEADING 'Action Context Name' FORMAT A25
COLUMN AC_VALUE_NUMBER HEADING 'Action Context|Number Value' FORMAT 9999
COLUMN AC_VALUE_VARCHAR2 HEADING 'Action Context|Text Value' FORMAT A25

SELECT 
    AC.NVN_NAME ACTION_CONTEXT_NAME, 
    AC.NVN_VALUE.ACCESSNUMBER() AC_VALUE_NUMBER,
    AC.NVN_VALUE.ACCESSVARCHAR2() AC_VALUE_VARCHAR2
  FROM DBA_RULES R, TABLE(R.RULE_ACTION_CONTEXT.ACTX_LIST) AC
  WHERE RULE_NAME = 'RULE_DEP_10';

この問合せでは、次のような出力が表示されます。

                          Action Context Action Context
Action Context Name         Number Value Text Value
------------------------- -------------- -------------------------
course_number                       1088
dist_list                                admin_list

関連項目:

アクション・コンテキストに同様の名前/値ペアを使用する例については、「ルール・アクション・コンテキスト」を参照

ルールのアクション・コンテキストからの名前/値ペアの削除

RE$NV_LIST型のREMOVE_PAIRメンバー・プロシージャを使用して、ルールのアクション・コンテキストから名前/値ペアを削除できます。他のユーザーがアクション・コンテキストを同時に変更していないことを確認してください。

名前/値ペアを削除すると、ルールのアクション・コンテキストが変更されます。アクション・コンテキストに、削除する名前/値ペアの他にも名前/値ペアが含まれている場合、アクション・コンテキストを変更するときには、他の名前/値ペアを変更または削除しないように注意してください。

この例では、rule_dep_10ルールに次の名前/値ペアが含まれていることを想定しています。

名前
course_number 1088
dist_list admin_list

この例では、既存のアクション・コンテキストを選択して変数に挿入し、名前がdist_listの名前/値ペアを削除します。これによって、rule_dep_10ルールのアクション・コンテキスト内の削除しない既存の名前/値ペアが保持されます。

DECLARE
  action_ctx       SYS.RE$NV_LIST;
  ac_name          VARCHAR2(30) := 'dist_list';
BEGIN
  SELECT RULE_ACTION_CONTEXT
    INTO action_ctx
    FROM DBA_RULES R
    WHERE RULE_OWNER='STRMADMIN' AND RULE_NAME='RULE_DEP_10';
  action_ctx.REMOVE_PAIR(ac_name);
  DBMS_RULE_ADM.ALTER_RULE(
    rule_name       =>  'strmadmin.rule_dep_10',
    action_context  =>  action_ctx);
END;
/

アクション・コンテキスト内の他の名前/値ペアを削除せずに名前/値ペアが正しく削除されたかどうかを確認するには、次の問合せを実行できます。

COLUMN ACTION_CONTEXT_NAME HEADING 'Action Context Name' FORMAT A25
COLUMN AC_VALUE_NUMBER HEADING 'Action Context|Number Value' FORMAT 9999
COLUMN AC_VALUE_VARCHAR2 HEADING 'Action Context|Text Value' FORMAT A25

SELECT 
    AC.NVN_NAME ACTION_CONTEXT_NAME, 
    AC.NVN_VALUE.ACCESSNUMBER() AC_VALUE_NUMBER,
    AC.NVN_VALUE.ACCESSVARCHAR2() AC_VALUE_VARCHAR2
  FROM DBA_RULES R, TABLE(R.RULE_ACTION_CONTEXT.ACTX_LIST) AC
  WHERE RULE_NAME = 'RULE_DEP_10';

この問合せでは、次のような出力が表示されます。

                          Action Context Action Context
Action Context Name         Number Value Text Value
------------------------- -------------- -------------------------
course_number                       1108

システム作成ルールの変更

システム作成ルールとは、DBMS_STREAMS_ADMパッケージのプロシージャを実行して作成するルールです。DBMS_STREAMS_ADMパッケージを使用して必要なルール条件を持つルールを作成できない場合は、次の一般的な手順に従って、システム作成ルールに基づく条件を持つルールを作成できます。

  1. システム作成ルールのルール条件をコピーします。DBA_STREAMS_RULESデータ・ディクショナリ・ビューを問い合せると、システム作成ルールのルール条件を表示できます。

  2. 条件を変更します。

  3. 変更した条件を持つルールを作成します。

  4. 新しいルールをOracle Streamsの取得プロセス伝播適用プロセスまたはメッセージ・クライアントルール・セットに追加します。

  5. 元のルールが不要になった場合は、DBMS_STREAMS_ADMパッケージのREMOVE_RULEプロシージャを使用して削除します。


関連項目:


ルールの削除

次の例では、DBMS_RULE_ADMパッケージのDROP_RULEプロシージャを実行して、データベースからhr_dmlルールを削除します。

BEGIN
  DBMS_RULE_ADM.DROP_RULE(
    rule_name => 'strmadmin.hr_dml', 
    force     => FALSE);
END;
/

この例では、DROP_RULEプロシージャのforceパラメータがFALSEに設定されています。これはデフォルト設定です。したがって、このルールが1つ以上のルール・セットに含まれている場合は削除できません。forceパラメータがTRUEに設定されている場合は、ルールがデータベースから削除され、それを含むルール・セットから自動的に削除されます。

評価コンテキスト、ルール・セットおよびルールに対する権限の管理

この項では、次のタスクの実行手順を説明します。


関連項目:


評価コンテキスト、ルール・セットおよびルールに対するシステム権限の付与

DBMS_RULE_ADMパッケージのGRANT_SYSTEM_PRIVILEGEプロシージャを使用すると、評価コンテキストルール・セットおよびルールに対するシステム権限をユーザーおよびロールに付与できます。これらの権限によって、ユーザーは自分のスキーマ内で、またはANYバージョンの権限が付与されている場合は任意のスキーマ内で、これらのオブジェクトを作成、変更、実行または削除できます。

たとえば、hrユーザーに自分のスキーマ内で評価コンテキストを作成するための権限を付与するには、権限の付与およびユーザーの変更を行うことができるユーザーとして接続し、次のように入力します。

BEGIN 
  DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(
    privilege    => SYS.DBMS_RULE_ADM.CREATE_EVALUATION_CONTEXT_OBJ,
    grantee      => 'hr', 
    grant_option => FALSE);
END;
/

この例では、GRANT_SYSTEM_PRIVILEGEプロシージャのgrant_optionパラメータがFALSEに設定されています。これはデフォルト設定です。したがって、hrユーザーは、他のユーザーやロールにはCREATE_EVALUATION_CONTEXT_OBJシステム権限を付与できません。grant_optionパラメータをTRUEに設定した場合、hrユーザーはこのシステム権限を他のユーザーまたはロールに付与できます。

評価コンテキスト、ルール・セットまたはルールに対するオブジェクト権限の付与

DBMS_RULE_ADMパッケージのGRANT_OBJECT_PRIVILEGEプロシージャを使用すると、特定の評価コンテキストルール・セットまたはルールに対するオブジェクト権限を付与できます。これらの権限を付与されたユーザーは、指定されたオブジェクトを変更または実行できます。

たとえば、hrユーザーに、strmadminスキーマ内のルール・セットhr_capture_rulesを変更および実行するための権限を付与するには、次のように入力します。

BEGIN 
  DBMS_RULE_ADM.GRANT_OBJECT_PRIVILEGE(
    privilege    => SYS.DBMS_RULE_ADM.ALL_ON_RULE_SET,
    object_name  => 'strmadmin.hr_capture_rules',
    grantee      => 'hr', 
    grant_option => FALSE);
END;
/

この例では、GRANT_OBJECT_PRIVILEGEプロシージャのgrant_optionパラメータがFALSEに設定されています(デフォルト)。したがって、hrユーザーは、指定されたルール・セットに対するALL_ON_RULE_SETオブジェクト権限を他のユーザーやロールに付与できません。grant_optionパラメータをTRUEに設定した場合、hrユーザーはこのオブジェクト権限を他のユーザーまたはロールに付与できます。

評価コンテキスト、ルール・セットおよびルールに対するシステム権限の取消し

DBMS_RULE_ADMパッケージのREVOKE_SYSTEM_PRIVILEGEプロシージャを使用すると、評価コンテキストルール・セットおよびルールに対するシステム権限を取り消すことができます。

たとえば、hrユーザーが自分のスキーマ内で評価コンテキストを作成するための権限を取り消すには、権限の付与およびユーザーの変更を行うことができるユーザーとして接続し、次のように入力します。

BEGIN 
  DBMS_RULE_ADM.REVOKE_SYSTEM_PRIVILEGE(
    privilege    => SYS.DBMS_RULE_ADM.CREATE_EVALUATION_CONTEXT_OBJ,
    revokee      => 'hr');
END;
/

評価コンテキスト、ルール・セットまたはルールに対するオブジェクト権限の取消し

DBMS_RULE_ADMパッケージのREVOKE_OBJECT_PRIVILEGEプロシージャを使用すると、特定の評価コンテキストルール・セットまたはルールに対するオブジェクト権限を取り消すことができます。

たとえば、hrユーザーから、strmadminスキーマ内のルール・セットhr_capture_rulesを変更および実行するための権限を取り消すには、次のように入力します。

BEGIN 
  DBMS_RULE_ADM.REVOKE_OBJECT_PRIVILEGE(
    privilege    => SYS.DBMS_RULE_ADM.ALL_ON_RULE_SET,
    object_name  => 'strmadmin.hr_capture_rules',
    revokee      => 'hr');
END;
/