ヘッダーをスキップ

Oracle Enterprise Manager拡張ガイド 10gリリース5（10.2.0.5） B54134-01 |
| 目次 | 索引

戻る | 次へ |

# 8 ポリシーの定義

Enterprise Managerには、即時利用可能な多数のポリシーが用意されていますが、必要に応じて、独自の監視ニーズを満たす追加のポリシーを定義できます。Enterprise Managerでは、MGMT_USER_DEFINED_POLICYパッケージという形でこの機能を提供しています。

MGMT_USER_DEFINED_POLICYパッケージを使用すると、ポリシーの作成と削除、およびターゲットへのポリシーの追加およびターゲットからのポリシーの削除を行えます。

関連項目: 『Oracle Database概要』（パッケージ、SQLおよびPL/SQLの詳細） 『Oracle Enterprise Manager概要』（ポリシーの詳細）

この章の内容は次のとおりです。

- 概要

- ユーザー定義ポリシーの作成

- 既存のターゲットへのユーザー定義ポリシーの追加

- ユーザー定義ポリシーの削除

- 既存のターゲットからのユーザー定義ポリシーの削除

注意: この章の内容は、PL/SQLパッケージおよびEnterprise Managerポリシーに精通しているユーザーを対象としています。

## 概要

ポリシーは、システムに要求される動作を定義するもので、1つ以上のターゲットまたはグループに関連付けられます。ポリシー・ルールは、条件に対してターゲットからの値をテストする条件式です。たとえば、データベース・プロファイル制限が適切に設定されていることを検証します。

ポリシーはOracle Management Repositoryに対して実行された問合せから取得したデータをテストします。管理対象ターゲットが実際には要求された状態と一致すると判断された場合、つまり、ポリシーのテストによって違反が特定されなかった場合、ポリシーはコンプライアンスであるとみなされます。反対に、1つ以上のポリシー違反があった場合は、ポリシーは非コンプライアンスであるとみなされます。

Enterprise Managerには、即時利用可能なポリシーの拡張機能として、サブプログラムのコンテキストでユーザー定義ポリシーをサポートするMGMT_USER_DEFINED_POLICYパッケージが用意されています。

これらのサブプログラムを使用するには、SQL*Plusを使用して、管理リポジトリ所有者として管理リポジトリ・データベースに接続します。デフォルトの管理リポジトリ所有者はSYSMANです。

### MGMT_USER_DEFINED_POLICYパッケージ

MGMT_USER_DEFINED_POLICYパッケージは次のサブプログラムで構成されます。

サブプログラム | 説明
--- | ---
CREATE_POLICY | ユーザー定義ポリシーを作成します。
DELETE_POLICY | ユーザー定義ポリシーを削除します。
ADD_POLICY_TO_TARGET | 既存のターゲットにポリシーを追加します。
REMOVE_POLICY_FROM_TARGET | 既存のターゲットからポリシーを削除します。

次に、サブプログラムで使用される定数およびデータ型について説明します。

#### 定数

MGMT_USER_DEFINED_POLICYパッケージによって定義される定数を次に示します。これらの定数は、指定されたサブプログラムをコールする際に使用できます。表8-1を参照してください。

表8-1 MGMT_USER_DEFINED_POLICYパッケージで使用される定数

定数 | 説明
--- | ---
カテゴリ | タイプの異なるポリシー
G_CATEGORY_FAULT | コンポーネントの機能停止、または一部のコンポーネントやユーザーが処理を正常に実行できないことを示すエラーの発生（たとえばデータベースの停止）
G_CATEGORY_WORKLOAD_VOL | ユーザー数またはシステムに対して実行されるバッチ・ジョブ数に比例して発生するシステム上のワークロード（たとえばユーザー・コール数）
G_CATEGORY_WORKLOAD_TYPE | 需要とは無関係の、システム上のワークロードのタイプ（たとえばCPU使用率）
G_CATEGORY_PERFORMANCE | システムのパフォーマンス（たとえばレスポンス時間）
G_CATEGORY_CAPACITY | 固定リソースの使用量（たとえば表領域の使用量）
G_CATEGORY_CONFIGURATION | 推奨されるベスト・プラクティスの構成に反するターゲットの構成（たとえば制御ファイル数の不足）
G_CATEGORY_SECURITY | セキュリティの設定および問題（たとえばオープン・ポート）
G_CATEGORY_STORAGE | 記憶域（たとえば永続表領域および一時表領域）
G_CATEGORY_UNCLASSIFIED | ポリシーが特定のカテゴリに分類されない場合に使用するデフォルト・カテゴリ
違反の重大度レベル | 違反の深刻度
G_SEVERITY_INFORMATIONAL | 違反の事実を提供します。
G_SEVERITY_WARNING | 違反に適時に対応しないと深刻な結果につながることを警告します。
G_SEVERITY_CRITICAL | 違反にすぐに対処するように要求します。
パラメータ・データ型 | ポリシー関連のパラメータのデータ型
G_PARAM_TYPE_NUMBER | Number
G_PARAM_TYPE_STRING | String
ターゲット・タイプ | Enterprise Managerで監視されるエンティティ
G_HOST_TARGET_TYPE | ホスト
G_DATABASE_TARGET_TYPE | Oracleデータベース・インスタンス
G_LISTENER_TARGET_TYPE | Oracleリスナー
G_CLUSTER_TARGET_TYPE | 独立したサーバーのグループ
G_RAC_DATABASE_TARGET_TYPE | Real Application Cluster（RAC）データベース・インスタンス
G_REDUNDANCY_GROUP_TARGET_TYPE | 1つのユニットとして一括で機能する同じタイプのメンバーを含むグループ
G_COMPOSITE_TARGET_TYPE | ある目的（たとえばビジネス機能）のためにグループ化された多数のターゲット
G_HOST_GROUP_TARGET_TYPE | 多数のホストで構成されるグループ
G_DATABASE_GROUP_TARGET_TYPE | 多数のOracleデータベース・インスタンスで構成されるグループ
G_IAS_TARGET_TYPE | Oracle Application Server
G_WEBSITE_TARGET_TYPE | Webアプリケーション
G_FORMSAPP_TARGET_TYPE | Oracle Forms
G_HTTP_SERVER_TARGET_TYPE | Oracle HTTP Server
G_WEBCACHE_TARGET_TYPE | OracleAS Web Cache
G_OC4J_TARGET_TYPE | Oracle Application Server Containers for J2EE
G_BC4J_TARGET_TYPE | ADF Business Components for Java
G_LDAP_TARGET_TYPE | Lightweight Directory Access Protocol（LDAP）
G_PORTAL_TARGET_TYPE | OracleAS Portal
G_APPLICATION_TARGET_TYPE | Oracleアプリケーション
G_APPS_SYSTEM_TARGET_TYPE | Oracleアプリケーション・システム
G_ASM_TARGET_TYPE | 自動ストレージ管理
条件演算子 | 監視対象メトリック値の比較対象境界値であるしきい値を操作する際に使用します。
G_THRESHOLD_EQ | 等しい（=）
G_THRESHOLD_LT | より小さい（<）
G_THRESHOLD_GT | より大きい（>）
G_THRESHOLD_LE | 以下（< =）
G_THRESHOLD_GE | 以上（> =）
G_THRESHOLD_NE | 等しくない（≠）
G_THRESHOLD_CONTAINS | 部分一致
G_THRESHOLD_MATCH | 完全一致

#### データ型

MGMT_USER_DEFINED_POLICYサブプログラムでは、表8-2に示すデータ型が使用されます。

表8-2 MGMT_USER_DEFINED_POLICYパッケージで使用されるデータ型

型 | 説明
--- | ---
UDP_PARAMETERS | ユーザー定義ポリシー（UDP）で使用されるパラメータの集まりを表します。
UDP_PARAMETER | 単一のパラメータを表します。

ユーザー定義ポリシーを作成する際には、UDP_PARAMETERSオブジェクトを使用してパラメータ情報が渡されます。

##### UDP_PARAMETERS型およびUDP_PARAMETER型

これらのPL/SQLタイプを使用して、ユーザー定義ポリシーで使用されるパラメータのリストを表します。

構文

    TYPE UDP_PARAMETER IS RECORD
    (
         param_name          VARCHAR2(64),
         param_type          NUMBER(1),
         threshold_value     VARCHARS(4000)
    );

    TYPE UDP_PARAMETERS IS TABLE of UDP_PARAMETER;

パラメータ

パラメータ | 説明
--- | ---
param_name | 作成するパラメータの名前
param_type | パラメータのタイプ 次に例を示します。 G_PARAM_TYPE_NUMBER G_PARAM_TYPE_STRING
threshold_value | パラメータのデフォルト値

## ユーザー定義ポリシーの作成

ユーザー定義ポリシーの作成手順の一部として、テストする情報を管理リポジトリから抽出するためのSQLを指定します。Enterprise Managerには、ベース表から読み取らずに管理リポジトリからデータを安全に抽出するために使用できる管理ビューが用意されています。

管理リポジトリ・ビューを使用すると、次の利点があります。

- 将来のリリースで発生する可能性がある管理リポジトリ・スキーマへの変更から問合せが保護されます。

- ポリシー定義が引き続き機能することが保証されます。

管理リポジトリ・ビューの完全なリストは、第9章「管理リポジトリ・ビュー」に記載されています。

CREATE_POLICYプロシージャ

CREATE_POLICYプロシージャは、ユーザー定義ポリシーを作成します。ポリシーの一部として、次のものを識別する必要があります。

- ポリシーの名前

- 評価対象のデータ

- 現在のデータの状態をテストするための（オプションでパラメータ化される）テスト

- テストに代入するデフォルトのパラメータ値（存在する場合）

スクリプトが実行されると、ポリシーは自動的にポリシー・ライブラリ格納され、表示可能になります。

CREATE_POLICYプロシージャでサポートされるテスト

次のタイプのテストがCREATE_POLICYプロシージャでサポートされます。

- しきい値条件または単純条件

  選択された単一の列の値が、指定されたテスト演算子を使用してテストされます。

- SQL式

  リテラル、選択した列およびポリシー・パラメータへの参照を含むことができるSQL式。選択した列およびポリシー・パラメータはバインド変数として名前が付けれられます。また、任意の組込みSQLファンクションを使用できます。次の例では、SQLファンクション（length）、選択した列（PASSWORD）およびポリシー・パラメータ（MIN_PWD_LENGTH）が使用されています。

  `length(:PASSWORD) <= :MIN_PWD_LENGTH`

次の構文は、ポリシーの作成に使用されるプロシージャを示しています。ポリシーが作成されなかった場合は、RAISE_APPLICATION_ERRORプロシージャを使用してエラー・メッセージが表示されます。エラー番号およびメッセージは、Oracleエラーのように、処理のためにトラップできます。

構文

しきい値条件または単純条件

    PROCEDURE create_policy
    (
        p_policy_name           IN VARCHAR2,
        p_target_type           IN VARCHAR2,
        p_sql_text              IN VARCHAR2,
        p_column_name           IN VARCHAR2,
        p_test_operator         IN VARCHAR2,
        p_threshold_value       IN VARCHAR2,
        p_threshold_data_type   IN NUMBER       DEFAULT G_PARAM_TYPE_NUMBER,
        p_num_keys              IN NUMBER       DEFAULT 1,
        p_description           IN VARCHAR2     DEFAULT ' ',
        p_impact                IN VARCHAR2     DEFAULT ' ',
        p_recommendation        IN VARCHAR2     DEFAULT ' ',
        p_severity_level        IN NUMBER       DEFAULT G_SEVERITY_INFORMATIONAL,
        p_category              IN VARCHAR2     DEFAULT G_CATEGORY_UNCLASSIFIED,
        p_url_link              IN VARCHAR2     DEFAULT NULL,
        p_violation_message     IN VARCHAR2     DEFAULT NULL,
        p_clear_message         IN VARCHAR2     DEFAULT NULL,
        p_eval_interval         IN NUMBER       DEFAULT 24
    );

SQL式

    PROCEDURE create_policy
    (
        p_policy_name           IN VARCHAR2,
        p_target_type           IN VARCHAR2,
        p_sql_text              IN VARCHAR2,
        p_test                  IN VARCHAR2,
        p_parameters            IN UDP_PARAMETERS  DEFAULT NULL,
        p_num_keys              IN NUMBER          DEFAULT 1,
        p_description           IN VARCHAR2        DEFAULT ' ',
        p_impact                IN VARCHAR2        DEFAULT ' ',
        p_recommendation        IN VARCHAR2        DEFAULT ' ',
        p_severity_level        IN NUMBER          DEFAULT G_SEVERITY_INFORMATIONAL,
        p_category              IN VARCHAR2        DEFAULT G_CATEGORY_UNCLASSIFIED,
        p_url_link              IN VARCHAR2        DEFAULT NULL,
        p_violation_message     IN VARCHAR2        DEFAULT NULL,
        p_clear_message         IN VARCHAR2        DEFAULT NULL,
        p_eval_interval         IN NUMBER          DEFAULT 24
    );

パラメータ

パラメータ | 説明
--- | ---
p_policy_name | 作成するポリシーの名前
p_target_type | このポリシーが適用されるターゲットのタイプ 次に例を示します。 G_HOST_TARGET_TYPE（ホスト） G_DATABASE_TARGET_TYPE（Oracleデータベース・インスタンス）
p_sql_text | テストするデータを管理リポジトリから取得するためのSQL 指定するSQLは、次の要件を満たす必要があります。 選択した最初のn列（nはp_num_keysと等しい）は、行を一意に識別するために使用される列です。SQL問合せは、同じキーを使用して複数の行を戻すことはできません。さらに、キー列の1つはTARGET_GUIDという名前の列であり、この列にターゲットのターゲットGUIDが含まれ、この列にポリシー違反が関連付けられている必要があります。 選択した残りの列（最低1つは必要）は、後でポリシーのテストによってテストされる値を戻します。
p_column_name | p_threshold_valueの比較対象となる、選択したリストの列の名前
p_test_operator | 実行する比較のタイプ。有効な値は次のとおりです。 G_THRESHOLD_EQ G_THRESHOLD_NE G_THRESHOLD_LT G_THRESHOLD_LE G_THRESHOLD_GT G_THRESHOLD_GE G_THRESHOLD_CONTAINS G_THRESHOLD_MATCH
p_threshold_value | 比較の実行対象となる値
p_threshold_data_type | しきい値のデータ型。有効な値は次のとおりです。 G_PARAM_TYPE_NUMBER G_PARAM_TYPE_STRING
p_test | ポリシー違反を特定するためにp_sql_textによって戻された行に適用するテスト。このテストには任意の有効なSQL式を使用できます。また、p_sql_textからの選択リストの列またはp_parametersで指定したパラメータ、もしくはその両方を参照できます。列の選択リストの列またはパラメータを参照するには、名前の接頭辞としてコロン（:）を使用します。
p_parameters | ポリシーを評価する際に使用するパラメータのリストおよびデフォルト値を含むタプル
p_num_keys | キー列である選択リストの列、つまりp_sql_textによって戻された行を一意に識別する列の数
p_description | ポリシーを説明するテキストが含まれます。
p_impact | このポリシーが重要である理由を示すテキストを提供します。
p_recommendation | ターゲットにポリシーのコンプライアンスを回復させる方法についての情報が含まれます。
p_severity_level | 違反の重大度レベル。有効な値は次のとおりです。 G_SEVERITY_INFORMATIONAL G_SEVERITY_WARNING G_SEVERITY_CRITICAL
p_category | ポリシーのカテゴリ。有効な値は次のとおりです。 G_CATEGORY_FAULT G_CATEGORY_WORKLOAD_VOL G_CATEGORY_WORKLOAD_TYPE G_CATEGORY_PERFORMANCE G_CATEGORY_CAPACITY G_CATEGORY_CONFIGURATION G_CATEGORY_SECURITY G_CATEGORY_STORAGE G_CATEGORY_UNCLASSIFIED
p_url_link | このポリシーに関する追加の詳細情報に使用するURL
p_violation_message | 違反とともに記録されるメッセージ。電子メールやページングなど、新しい違反を検出した結果として発生する通知に使用されます。このメッセージは、p_sql_textからの選択リストの列またはp_parametersで指定したパラメータ、もしくはその両方を参照できます。列の選択リストの列またはパラメータを参照するには、名前をパーセント記号（%）で囲みます。
p_clear_message | 違反をクリアすると記録されるメッセージ。電子メールやページングなど、新しい違反を検出した結果として発生する通知に使用されます。このメッセージは、p_sql_textからの選択リストの列またはp_parametersで指定したパラメータ、もしくはその両方を参照できます。列の選択リストの列またはパラメータを参照するには、名前をパーセント記号（%）で囲みます。
p_eval_interval | 評価間隔の式（時間数）

例

これらの例は、ポリシーの作成方法を示しています。

例8-1 十分な制御ファイルのしきい値

    DECLARE
      l_sql         VARCHAR2(2000);
    BEGIN
      l_sql := 'SELECT target_guid, control_file_count ' ||
                   'FROM ' ||
                     '(SELECT target_guid, COUNT(file_name) control_file_count ' ||
                     'FROM mgmt$db_controlfiles ' ||
                     'GROUP BY target_guid)';
      MGMT_USER_DEFINED_POLICY.CREATE_POLICY
      (
        p_policy_name          => 'Insufficient Control Files',
        p_target_type          => mgmt_user_defined_policy.G_DATABASE_TARGET_TYPE,
        p_sql_text             => l_sql,
        p_column_name          => 'control_file_count',
        p_test_operator        => mgmt_user_defined_policy.G_THRESHOLD_LT,
        p_threshold_value      => 2,
        p_threshold_data_type  => mgmt_user_defined_policy.G_PARAM_TYPE_NUMBER,
        p_num_keys             => 1,       -- target_guid is key column
        p_description          => 'Ensures sufficient control files',
        p_impact         => 'The control file is one of the most important files '||
                            'in an Oracle database. It maintains many physical ' ||
                            'characteristics and important recovery information ' ||
                            'about the database. If you lose the only copy of the ' ||
                            'control file due to a media error, there will be ' ||
                            'unnecessary down time and other risks.'
        p_recommendation       => 'Use at least two control files that are ' ||
                                  'multiplexed on different disks.',
        p_severity_level       => mgmt_user_defined_policy.G_SEVERITY_CRITICAL,
        p_category             => mgmt_user_defined_policy.G_CATEGORY_CONFIGURATION,
        p_violation_message    => 'Insufficient control files: %control_file_count%',
        p_clear_message        => 'Sufficient control files'
     );
    COMMIT;
    END;
    /

例8-2 UDPパラメータを使用した十分な制御ファイル

    DECLARE
      l_sql         VARCHAR2(2000);
      l_test        VARCHAR2(2000);
      l_parameters  mgmt_user_defined_policy.udp_parameters;
    BEGIN
      l_sql := 'SELECT target_guid, control_file_count ' ||
               'FROM ' ||
                 '(SELECT target_guid, COUNT(file_name) control_file_count ' ||
                 'FROM mgmt$db_controlfiles ' ||
                 'GROUP BY target_guid)';

      l_test := ':control_file_count < :min_control_file_count';

      l_parameters := mgmt_user_defined_policy.udp_parameters();
      l_parameters.extend(1);
      l_parameters(1).param_name := 'min_control_file_count';
      l_parameters(1).param_type := mgmt_user_defined_policy.G_PARAM_TYPE_NUMBER;
      l_parameters(1).threshold_value :=2;

      MGMT_USER_DEFINED_POLICY.CREATE_POLICY
      (
        p_policy_name    => 'Insufficient Control Files',
        p_target_type    => mgmt_user_defined_policy.G_DATABASE_TARGET_TYPE,
        p_sql_text       => l_sql,
        p_test           => l_test,
        p_parameters     => l_parameters,
        p_num_keys       => 1,   -- target_guid is key column
        p_description    => 'Ensures sufficient control files',
        p_impact         => 'The control file is one of the most important files ' ||
                            'in an Oracle database. It maintains many physical ' ||
                            'characteristics and important recovery information ' ||
                            'about the database. If you lose the only copy of the ' ||
                            'control file due to a media error, there will be ' ||
                            'unnecessary down time and other risks.',
        p_recommendation      => 'Use at least two control files that are ' ||
                                 'multiplexed on different disks.',
        p_severity_level      => mgmt_user_defined_policy.G_SEVERITY_CRITICAL,
        p_category            => mgmt_user_defined_policy.G_CATEGORY_CONFIGURATION,
        p_violation_message   => 'Insufficient control files: %control_file_count%',
        p_clear_message       => 'Sufficient control files'
      );
      COMMIT;
    END;
    /

例8-3 データ・ディクショナリ保護のSQL式

    DECLARE
      l_sql   VARCHAR2(2000);
      l_test  VARCHAR2(2000);
    BEGIN
      l_sql := 'SELECT target_guid, name, value ' ||
                   'FROM mgmt$db_init_params ' ||
                   'WHERE name =''O7_DICTIONARY_ACCESSIBILITY''';
      l_test := 'UPPER(NVL(:value, ''TRUE'')) = ''TRUE''';
     MGMT_USER_DEFINED_POLICY.CREATE_POLICY
     (
        p_policy_name      => 'Data Dictionary Protected',
        p_target_type      => mgmt_user_defined_policy.G_DATABASE_TARGET_TYPE,
        p_sql_text         => l_sql,
        p_test             => l_test,
        p_num_keys         => 1,      -- target_guid is key column
        p_description      => 'Ensures data dictionary protection is enabled',
        p_impact           => 'Setting the 07_DICTIONARY_ACCESSIBILITY to TRUE ' ||
                              'allows users with ANY system privileges to access ' ||
                              'the data dictionary.  As a result, these user ' ||
                              'accounts can be exploited to gain unauthorized ' ||
                              'access to data. Instead the data dictionary should ' ||
                              'be protected such that only those authorized users ' ||
                              'making DBA-privileged connections can use the ANY ' ||
                              'system privilege to access the data dictionary.',
        p_recommendation       => 'Set O7_DICTIONARY_ACCESSIBILITY to TRUE',
        p_severity_level       => mgmt_user_defined_policy.G_SEVERITY_CRITICAL,
        p_category             => mgmt_user_defined_policy.G_CATEGORY_SECURITY,
        p_violation_message    => 'Data dictionary is not protected',
        p_clear_message        => 'Data dictionary is protected',
        p_eval_interval        => 12
     );
     COMMIT;
    END;
    /

## 既存のターゲットへのユーザー定義ポリシーの追加

ユーザー定義ポリシーを既存のターゲットに追加する方法は多数あります。次のような方法があります。

- 「メトリックとポリシー設定」UIを使用する。

- PL/SQLプロシージャを使用する。

### 「メトリックとポリシー設定」UIの使用方法

ユーザー定義のポリシーを既存のターゲットに迅速に追加するには、「メトリックとポリシー設定」UIページを使用します。

1. Grid Controlのホームページで「ターゲット」タグをクリックします。

2. 結果ページで、ユーザー定義ポリシーを追加するターゲットのターゲット・タイプをクリックします。

3. ユーザー定義ポリシーを追加するターゲットの名前を選択します。

4. ターゲットの「ホーム」結果ページで「関連リンク」セクションまでスクロールし、「メトリックとポリシー設定」をクリックします。

5. 「ポリシー」サブタブを選択して「ポリシーの追加」をクリックします。

6. ポリシー・ライブラリから追加するポリシー・ルールを選択して「続行」をクリックします。

7. 確認ページで「はい」をクリックして、ターゲットにポリシー・ルールを追加します。さらに、「ポリシー」ページで「OK」をクリックします。これを行わないと変更が有効になりません。

### PL/SQLプロシージャの使用方法

次のプロシージャは、既存のユーザー定義ポリシーを管理リポジトリにすでに存在するターゲットに関連付けます。この関連が作成されなかった場合は、RAISE_APPLICATION_ERRORプロシージャを使用してエラー・メッセージが表示されます。エラー番号およびメッセージは、Oracleエラーのように、処理のためにトラップできます。

構文

    PROCEDURE add_policy_to_target
    (
        p_policy_name       IN VARCHAR2,
        p_target_type       IN VARCHAR2,
        p_target_name       IN VARCHAR2
    );

パラメータ

パラメータ | 説明
--- | ---
p_policy_name | 追加するポリシーの名前
p_target_type | このポリシーが適用されるターゲットのタイプ 次に例を示します。 G_HOST_TARGET_TYPE（ホスト） G_DATABASE_TARGET_TYPE（Oracleデータベース・インスタンス）
p_target_name | ターゲットの名前

例

これらの例は、ターゲットにポリシーを追加する方法を示しています。

例8-4 1つのターゲットへのポリシーの追加

    BEGIN
      MGMT_USER_DEFINED_POLICY.ADD_POLICY_TO_TARGET
      (
        p_policy_name     => 'Insufficient Control Files',
        p_target_type     => mgmt_user_defined_policy.G_DATABASE_TARGET_TYPE,
        p_target_name     => 'Finance'
      );
    COMMIT;
    END;
    /

例8-5 既存のすべてのターゲットへのポリシーの追加

    DECLARE
      l_target_names   MGMT_MEDIUM_STRING_ARRAY;
    BEGIN
     SELECT target_name BULK COLLECT INTO l_target_names
     FROM mgmt$target
     WHERE target_type = mgmt_user_defined_policy.G_DATABASE _TARGET_TYPE;

     IF (l_target_names IS NOT NULL) and (l_target_names.COUNT > 0)
     THEN
       FOR i in 1..l_target_names.COUNT LOOP
         mgmt_user_defined_policy.add_policy_to_target
          (
            p_policy_name  => 'Insufficient Control Files',
            p_target_type  => mgmt_user_defined_policy.G_DATABASE_TARGET_TYPE,
            p_target_name  => l_target_names(i)
          );
       END LOOP;
       COMMIT;
     END IF;

    END;
    /

### 監視テンプレートの使用方法

既存のターゲットにユーザー定義ポリシーを追加するもう1つの方法は、次のとおりです。

1. 監視テンプレートを作成します。

2. ユーザー定義ポリシーを監視テンプレートに追加します。

3. 監視テンプレートをターゲットに適用します。

## ユーザー定義ポリシーの削除

このプロシージャは、既存のユーザー定義ポリシーを削除します。ユーザー定義ポリシーの削除の一部として、次の処理が行われます。

- ポリシーとターゲットのすべての関連が自動的に削除されます。

- ポリシーの既存の評価結果がすべて削除されます。

- 既存の監視テンプレートに含まれるこのポリシーの参照がすべて削除されます。

- ポリシー・ライブラリからポリシーが削除されます。

ポリシーが削除されなかった場合は、RAISE_APPLICATION_ERRORプロシージャを使用してエラー・メッセージが表示されます。エラー番号およびメッセージは、Oracleエラーのように、処理のためにトラップできます。

管理リポジトリ所有者には、ポリシーを削除する権限があります。

構文

    PROCEDURE delete_policy(    p_policy_name           IN VARCHAR2,    p_target_type           IN VARCHAR2);

パラメータ

パラメータ | 説明
--- | ---
p_policy_name | 削除するポリシーの名前
p_target_type | このポリシーが適用されるターゲットのタイプ 次に例を示します。 G_HOST_TARGET_TYPE（ホスト） G_DATABASE_TARGET_TYPE（Oracleデータベース・インスタンス）

例

次の例は、ポリシーの削除方法を示しています。

例8-6 ユーザー定義ポリシーの削除

    BEGIN
       MGMT_USER_DEFINED_POLICY.DELETE_POLICY
       (
           p_policy_name  => 'Insufficient Control Files',
           p_target_type  => mgmt_user_defined_policy.G_DATABASE_TARGET_TYPE
        );
    COMMIT;
    END;
    /

## 既存のターゲットからのユーザー定義ポリシーの削除

ユーザー定義ポリシーを既存のターゲットから削除する方法は2つあります。

- 「メトリックとポリシー設定」UIを使用する。

- PL/SQLプロシージャを使用する。

### 「メトリックとポリシー設定」UIの使用方法

ユーザー定義のポリシーを既存のターゲットから迅速に削除するには、「メトリックとポリシー設定」UIページを使用します。

1. Grid Controlのホームページで「ターゲット」タグをクリックします。

2. 結果ページで、ユーザー定義ポリシーを削除するターゲットのターゲット・タイプをクリックします。

3. ユーザー定義ポリシーを削除するターゲットの名前を選択します。

4. ターゲットの「ホーム」結果ページで「関連リンク」セクションまでスクロールし、「メトリックとポリシー設定」をクリックします。

5. 「ポリシー」サブタブを選択して「削除」をクリックします。

6. 削除するポリシー・ルールを選択して「続行」をクリックします。

7. 確認ページで「はい」をクリックして、ターゲットからポリシー・ルールを削除します。さらに、「ポリシー」ページで「OK」をクリックします。これを行わないと変更が有効になりません。

### PL/SQLプロシージャの使用方法

次のプロシージャは、既存のユーザー定義ポリシーを管理リポジトリに存在するターゲットから削除するために使用されます。関連が削除されなかった場合は、RAISE_APPLICATION_ERRORプロシージャを使用してエラー・メッセージが表示されます。エラー番号およびメッセージは、Oracleエラーのように、処理のためにトラップできます。

構文

    PROCEDURE remove_policy_from_target
    (
        p_policy_name           IN VARCHAR2,
        p_target_type           IN VARCHAR2,
        p_target_name           IN VARCHAR2
    );

パラメータ

パラメータ | 説明
--- | ---
p_policy_name | 削除するポリシーの名前
p_target_type | このポリシーが適用されるターゲットのタイプ 次に例を示します。 G_HOST_TARGET_TYPE（ホスト） G_DATABASE_TARGET_TYPE（Oracleデータベース・インスタンス）
p_target_name | ターゲットの名前

例

次の例は、ユーザー定義ポリシーを既存のターゲットから削除する方法を示しています。

例8-7 既存のターゲットからのポリシーの削除

    BEGIN
      MGMT_USER_DEFINED_POLICY.REMOVE_POLICY_FROM_TARGET
      (
        p_policy_name        => 'Insufficient Control Files',
        p_target_type        => mgmt_user_defined_policy.G_DATABASE_TARGET_TYPE,
        p_target_name        => 'Finance'
      );
     COMMIT;
    END;
    /