165 DBMS_SERVICE
DBMS_SERVICE
パッケージを使用して、シングル・インスタンスのサービスを作成、削除、アクティブ化および非アクティブ化できます。
この章の内容は次のとおりです。
-
参照:
Real Application Clustersの管理サービスについては、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。
165.1 DBMS_SERVICEの概要
DBMS_SERVICE
は、ワークロードの測定、管理、優先順位付け、およびXAトランザクションと分散トランザクションの管理を目的として、RDBMSでの高可用性に関する操作、サービス品質に関する操作、ジョブ・スケジューリングに関する操作およびその他の計画済操作のワークロード管理をサポートします。
SRVCTL
を使用した場合と同じように、サービス名を複数のインスタンスにまたがって管理できます。DBMS_SERVICE
パッケージを使用すると、シングル・インスタンスでサービスを作成、削除、開始および停止できます。また、サービス名でインスタンスに接続するすべてのセッションを切断することもできます。
参照:
Oracle Real Application Clustersの詳細は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。
165.2 DBMS_SERVICEのセキュリティ・モデル
DBMS_SERVICE
パッケージには、特定のセキュリティ要件があります。
権限
このパッケージを使用するクライアントは、ALTER
SYSTEM
実行権限、およびV$SESSION
表読込み権限を持っている必要があります。
スキーマ
このパッケージは、SYS
スキーマの下に作成する必要があります。
ロール
このパッケージのEXECUTE
権限は、DBA
ロールにのみ付与されます。
165.3 DBMS_SERVICEの定数
DBMS_SERVICE
パッケージは、パラメータ値の指定に使用できる定数を提供します。
表165-1 引数のコール時に使用される定数
名前 | タイプ | 値 | 説明 |
---|---|---|---|
|
|
|
ロード・バランシング・アドバイザを無効にします。 |
|
|
|
ロード・バランシング・アドバイザは、サービスでの処理の実行に要する時間およびサービスで使用可能な帯域幅に基づきます。 |
|
|
|
ロード・バランシング・アドバイザは、サービスで処理が実行される速度およびサービスで使用可能な帯域幅に基づきます。 |
表165-2 接続バランシング目標引数で使用される定数
名前 | タイプ | 値 | 説明 |
---|---|---|---|
|
|
|
接続ロード・バランシングでは、ロード・バランシング・アドバイザ( |
|
|
|
サービスごとのセッション数を使用して、インスタンスごとの接続数を平均化します。フォームなどの接続時間が長いアプリケーションには、この設定をお薦めします。この設定は、(接続を追加または削除せずに)接続プール自体の負荷に対応するためにそのサイズを調整する場合、ロード・バランシング・アドバイザで使用できます。これは、最も効果的な設定です。 |
表165-3 FAN、アプリケーション・コンティニュイティ、トランザクション・ガードおよびTAF用に高可用性属性の引数で使用される定数
名前 | タイプ | 値 | 説明 |
---|---|---|---|
|
|
|
このサービスでは、サーバー側のTAFが有効になっていません。 |
|
|
|
|
|
|
サーバー側のTAFタイプは |
|
|
|
サーバー側のTAFフェイルオーバー・タイプは |
|
|
|
サーバー側のTAFフェイルオーバー・タイプは |
|
|
|
フェイルオーバーが発生する際の接続試行回数です。アプリケーション・コンティニュイティとTAFが再接続と再認証のペアを試行する回数を指定します。0より大きい整数値を指定する必要があります。Oracle Database 12cリリース1 (12.1)でのアプリケーション・コンティニュイティに対するデフォルト値は30です。 |
|
|
|
|
初期状態は、アプリケーション・コンティニュイティおよびTAFでのリプレイ前にはリストアされません。この値は、アプリケーション・コンティニュイティを使用してリクエストの独自の状態を作成するOCIアプリケーションに使用することをお薦めします。たとえば、SQLPLUSがあります。 |
|
|
|
この値は、アプリケーション・コンティニュイティを使用するJavaおよびODP.NETアプリケーションに使用することをお薦めします。ユーザーが認識している初期状態は、リプレイ前に自動的にリストアされます。追加の状態が必要な場合は、コールバックを登録する必要があります。 |
|
|
次の接続試行までの遅延秒数です。これは、再接続と再認証が失敗した場合に、アプリケーション・コンティニュイティとTAFが待機する遅延時間です。0より大きい整数値を指定する必要があります。アプリケーション・コンティニュイティを使用する場合、Oracle Database 12cリリース1 (12.1)でのデフォルト値は10秒です。 |
|
|
|
セッションは切断されません。 |
|
|
|
セッションは、 |
|
|
セッションは、 |
||
|
|
アプリケーション・コンティニュイティの場合は、非トランザクションのセッション状態をリクエストの実行中にアプリケーションで変更するかどうかをこのパラメータで指定します。すべてのアプリケーションで |
使用上のノート
-
TAFコールバックが登録されている場合は、フェイルオーバーが再試行され、フェイルオーバーの遅延は無視されます。エラーが発生した場合、コールバックによって
OCI_FO_RETRY
の値が戻されるかぎり、TAFは接続および認証の再試行を継続します。遅延は、コールバックのロジックにコーディングする必要があります。 -
クライアント側のTAF設定がTNS接続記述子に設定されている場合、サーバー側のTAF設定によって上書きされます。TAFがクライアント側に設定されていない場合は、少なくとも、TAFが有効になるようにフェイルオーバー・タイプを設定する必要があります。フェイルオーバー・タイプがサーバー側に設定されている場合、フェイルオーバー・メソッドは
BASIC
にデフォルト設定されます。遅延および再試行はオプションとなっており、個別に指定できます。
165.4 DBMS_SERVICEのプロシージャの使用
次のプロシージャは、Oracle Real Applications Clusterware、Oracle RestartおよびOracle Global Data Servicesとともには使用できません。
-
Oracle Database 12cリリース1の場合は、サービス関連のすべてのサブプログラム内にあるパラメータ・インタフェースの使用をお薦めします。
-
単一インスタンス内でプラガブル・データベース(PDB)に対して
DBMS_SERVICE
を使用する場合は、まずそのPDBに接続する必要があります。
165.5 DBMS_SERVICEの例外
次の表に、DBMS_SERVICE
パッケージで発生する例外を示します。
表165-4 DBMS_SERVICEの例外
例外 | エラー・コード | 説明 |
---|---|---|
|
44301 |
サービス名引数が |
|
44302 |
ネットワーク名引数が |
|
44303 |
サービス名はすでに存在します。 |
|
44304 |
指定したサービスは存在しません。 |
|
44305 |
指定したサービスは実行中です。 |
|
44306 |
サービス名が長すぎます。 |
|
44307 |
ネットワーク名(ドメインを除く)が長すぎます。 |
|
44308 |
サービス・レイヤーが初期化されていません。 |
|
44309 |
不明な失敗です。 |
|
44310 |
サービスが最大数に達しています。 |
|
44311 |
指定したサービスは実行されていません。 |
|
44312 |
データベースはクローズされています。 |
|
44313 |
インスタンス名引数が無効です。 |
|
44314 |
ネットワーク名がすでに存在します。 |
|
44315 |
すべての属性が |
|
44316 |
無効な引数が指定されています。 |
|
44317 |
データベースは読取り専用で開かれています。 |
|
44318 |
実行中のすべてのサービス・ネットワーク名の合計長が、最大許容長を超えました。 |
|
44319 |
AQサービスを削除できません。 |
|
44320 |
グローバル・サービスを削除できません。 |
|
44771 |
プラガブル・データベース名が無効です。 |
|
44772 |
Cluster Ready Service(CRS)の操作が失敗しました。 |
|
44773 |
要求された操作を実行できません。 |
|
44774 |
プラガブル・データベースの属性を変更できません。 |
|
44775 |
プラガブル・データベースのサービスを作成できません。 |
|
44776 |
プラガブル・データベースのサービスを削除できません。 |
|
44777 |
プラガブル・データベースのサービスを開始できません。 |
165.6 DBMS_SERVICEサブプログラムの要約
この表は、DBMS_SERVICE
サブプログラムを示し、簡単に説明しています。
表165-5 DBMS_SERVICEパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
サービスを作成します。 |
|
サービスを削除します。 |
|
このサービスの下に実行されているセッションを切断します。 |
|
サービスを変更します。 |
|
サービスをアクティブにします。 |
|
サービスを停止します。 |
165.6.1 CREATE_SERVICEプロシージャ
このプロシージャは、データ・ディクショナリにサービス名を作成します。service_name
パラメータまたはALTER
SYSTEM
SET
SERVICE_NAMES
コマンドによってサービスを設定すると、サービスはデータ・ディクショナリにも暗黙的に作成されます。
ノート:
SESSION_STATE_CONSISTENCY = STATICが指定されたセッション属性値FAILOVER_TYPE = TRANSACTIONは、サポートされているサービス属性の組合せではなくなりました。以前のリリースでは、サービス・パラメータsession_state
を使用して、session_state
をDYNAMIC
またはSTATIC
に設定することにより、透過的アプリケーション・コンティニュイティを使用してセッション状態を自動的に管理できました。しかし、Oracle Database 23c以降、STATIC
オプションを使用できなくなりました。かわりに、次のいずれかのフェイルオーバー・オプションを使用します。
FAILOVER_TYPE = AUTO
とSESSION_STATE_CONSISTENCY = AUTO
またはHYBRID
FAILOVER_TYPE = TRANSACTION
およびSESSION_STATE_CONSISTENCY = DYNAMIC
これらの構成により、Oracle Databaseでのセッション状態トラッキングが強制され、セッション移行およびセッションのフェイルオーバー時にセッション状態が維持されます。
構文
DBMS_SERVICE.CREATE_SERVICE( service_name IN VARCHAR2, network_name IN VARCHAR2, parameter_array IN TABLE OF VARCHAR2(100));
このオーバーロードは、下位互換性を維持する目的で保持されています。
DBMS_SERVICE.CREATE_SERVICE( service_name IN VARCHAR2, network_name IN VARCHAR2, goal IN NUMBER DEFAULT NULL, dtp IN BOOLEAN DEFAULT NULL, aq_ha_notifications IN BOOLEAN DEFAULT NULL, failover_method IN VARCHAR2 DEFAULT NULL, failover_type IN VARCHAR2 DEFAULT NULL, failover_retries IN NUMBER DEFAULT NULL, failover_delay IN NUMBER DEFAULT NULL, clb_goal IN NUMBER DEFAULT NULL, edition IN VARCHAR2 DEFAULT NULL);
パラメータ
表165-6 CREATE_SERVICEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
データ・ディクショナリでのサービスの名前です(64文字まで使用可能)。 |
|
クライアント接続用にSQLNet接続記述子で使用されるサービスのネットワーク名です。これは、NET |
|
サービス属性の名前/値ペアに関連付けられた配列です。次の名前がサポートされています。
|
|
サービスのワークロード管理目標ディレクティブ。有効な値は次のとおりです。
|
|
サービスの対象がX/Open分散トランザクション処理(DTP)または任意の分散トランザクション(特にXA)であることを宣言します。 |
|
OCI/OCCI/ODPでFast Application Notification(FAN)を使用できるかどうかを指定します。Oracle Database12cでは、FANはOracle Notification Services(ONS)を使用します。このパラメータは、FANを有効にするために引き続き使用されます。FANはすべての高可用性システムで推奨されているため、アプリケーション・コンティニュイティではデフォルトで有効になっています。 |
|
アプリケーション・コンティニュイティとTAFに使用するサービスのフェイルオーバー |
|
アプリケーション・コンティニュイティには |
|
アプリケーション・コンティニュイティとTAFが接続を再試行する回数です。 |
|
アプリケーション・コンティニュイティとTAFが接続を再試行するまでの遅延秒数です。アプリケーション・コンティニュイティに対するデフォルト値は10秒です。サービスによるフェイルオーバーと登録に時間がかかる場合は、遅延時間を0秒に指定しないでください。長い遅延時間は、計画済停止やData Guardへのフェイルオーバーでは有効です。サービスがすでに提供されているRACでは、短い遅延時間が効率的です。 |
|
この引数が サービスの作成中または変更中に、このパラメータの検証は行われません。 接続時に、接続ユーザーがエディションに対する |
|
このパラメータを定義した場合、サービスに接続されているすべてのセッションは、Fast Connection Failover (FCF)を使用するクライアント・ドライバおよびプールによって排出されます。 |
|
セッションを終了するオプションを指定します。サポートされる値は次のとおりです。
ただし、これらのパラメータ値は、コマンドラインを使用して上書きできます。 |
|
トランザクション
|
reset_state |
リクエスト間でセッション・ステートの使用状況をクリアし、新しいリクエストごとに(使用状況Webおよびステートレス・アプリケーションが)クリーンな状態で始まるようにします。 |
|
|
|
アプリケーション・コンティニュイティの場合、 |
|
リクエスト中に非トランザクションがどのように変化するかを示します( |
|
SQL翻訳プロファイルの名前。 |
|
接続ロード・バランシングに使用されるメソッド(表165-2を参照) |
|
サービスの配置ポリシー。有効な値は、次のとおりです。
ノート: 0 以外の値は、Oracle RAC環境のATP専用クラウドでのみ適用可能です。
|
例
DBMS_SERVICE.CREATE_SERVICE('ernie.example.com','ernie.example.com'); DECLARE params dbms_service.svc_parameter_array; BEGIN params('FAILOVER_TYPE') :='TRANSACTION'; params('REPLAY_INITIATION_TIMEOUT'):=1800; params('RETENTION_TIMEOUT') :=86400; params('FAILOVER_DELAY') :=10; params('FAILOVER_RETRIES') :=30; params('DRAIN_TIMEOUT') :=60; params('STOP_OPTION') :='DBMS_SERVICE.STOP_OPTION_IMMEDIATE'; params('FAILOVER_RESTORE') :='DBMS_SERVICE.FAILOVER_RESTORE_BASIC'; params('commit_outcome') :='true'; params('aq_ha_notifications') :='true'; DBMS_SERVICE.MODIFY_SERVICE('GOLD',params); END;
165.6.2 DELETE_SERVICEプロシージャ
このプロシージャは、データ・ディクショナリからサービスを削除します。
ノート:
Oracle Database 19c以降、SERVICE_NAME
パラメータをお客様が使用することは非推奨になりました。今後のリリースでサポートが終了する可能性があります。高可用性(HA)デプロイメントでは使用しないでください。HA操作ではサービス名パラメータの使用はサポートされません。この制限には、FAN、ロード・バランシング、FAILOVER_TYPE
、FAILOVER_RESTORE
、SESSION_STATE_CONSISTENCY
などの用途が含まれます。
サービスがOracle Clusterware、Oracle RestartまたはOracle Global Data Servicesによって管理されている場合は、このサブプログラムは使用できません。
構文
DBMS_SERVICE.DELETE_SERVICE( service_name IN VARCHAR2);
パラメータ
表165-7 DELETE_SERVICEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
データ・ディクショナリでのサービスの名前です(64文字まで使用可能)。 |
例
DBMS_SERVICE.DELETE_SERVICE('ernie.example.com');
165.6.3 DISCONNECT_SESSIONプロシージャ
このプロシージャは、現行のインスタンスにおいて指定したサービスからセッションを切断します。
構文
DBMS_SERVICE.DISCONNECT_SESSION( service_name IN VARCHAR2, disconnect_option IN NUMBER DEFAULT POST_TRANSACTION;
パラメータ
表165-8 DISCONNECT_SESSIONプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
データ・ディクショナリでのサービスの名前です(64文字まで使用可能)。 |
|
パッケージ定数である次のオプションは、
ノート: |
使用上のノート
-
このプロシージャは、Oracle Real Application Clustersとともにシングル・インスタンスのコンテキストでも使用できます。
-
このサブプログラムは、対応するセッションがすべて切断されるまで戻りません。したがって、コール元は、対応するすべてのセッションが切断されるまで待機しないようにする場合、
DBMS_JOB
パッケージを使用するか、バックグラウンドでSQLセッションを設定します。
例
service_name
'ernie.example.com'
からセッションを切断します。
DBMS_SERVICE.DISCONNECT_SESSION('ernie.example.com');
サービスがアプリケーション・コンティニュイティを使用している状態で、セッションをリプレイせず単に終了する必要がある場合、次の項目を使用します。
EXECUTE DBMS_SERVICE.DISCONNECT_SESSION('service name', DBMS_SERVICE.NOREPLAY);
165.6.4 MODIFY_SERVICEプロシージャ
このプロシージャは、既存のサービスを変更します。
ノート:
サービスがOracle Clusterware、Oracle RestartまたはOracle Global Data Servicesによって管理されている場合は、サブプログラムの2番目のバージョンは使用できません。Oracle Clusterware、Oracle RestartまたはOracle Global Data Servicesで管理されていないデータベースには、パラメータの配列インタフェースを含むバージョンが適用されます。新しい属性は、パラメータ・インタフェースを使用する場合のみ使用できます。
構文
DBMS_SERVICE.MODIFY_SERVICE( service_name IN VARCHAR2, parameter_array IN svc_parameter_array);
このオーバーロードは、下位互換性を維持する目的で保持されています。
DBMS_SERVICE.MODIFY_SERVICE( service_name IN VARCHAR2, goal IN NUMBER DEFAULT NULL, dtp IN BOOLEAN DEFAULT NULL, aq_ha_notifications IN BOOLEAN DEFAULT NULL, failover_method IN VARCHAR2 DEFAULT NULL, failover_type IN VARCHAR2 DEFAULT NULL, failover_retries IN NUMBER DEFAULT NULL, failover_delay IN NUMBER DEFAULT NULL, clb_goal IN NUMBER DEFAULT NULL, edition IN VARCHAR2 DEFAULT NULL, modify_edition IN BOOLEAN DEFAULT FALSE;
パラメータ
表165-9 MODIFY_SERVICEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
データ・ディクショナリでのサービスの名前です(64文字まで使用可能)。 |
|
サービス属性の名前/値ペアに関連付けられた配列。次の名前がサポートされています。
|
|
サービスのワークロード管理目標ディレクティブ。有効な値は次のとおりです。
|
|
サービスの対象がX/Open分散トランザクション処理(DTP)または任意の分散トランザクション(特にXA)であることを宣言します。 |
|
OCI/OCCI/ODPでFast Application Notification(FAN)を使用できるかどうかを指定します。Oracle Database12cでは、FANはOracle Notification Services(ONS)を使用します。このパラメータは、FANを有効にするために引き続き使用されます。FANはすべての高可用性システムで推奨されているため、アプリケーション・コンティニュイティではデフォルトで有効になっています。 |
|
アプリケーション・コンティニュイティとTAFに使用するサービスのフェイルオーバー |
|
アプリケーション・コンティニュイティとTAFに使用するサービスのフェイルオーバー |
|
アプリケーション・コンティニュイティの場合、 AC OCIの場合、 |
|
アプリケーション・コンティニュイティとTAFが接続を再試行する回数です。 |
|
アプリケーション・コンティニュイティとTAFが接続を再試行するまでの遅延秒数です。アプリケーション・コンティニュイティに対するデフォルト値は10秒です。サービスによるフェイルオーバーと登録に時間がかかる場合は、遅延時間を0秒に指定しないでください。長い遅延時間は、計画済停止やData Guardへのフェイルオーバーでは有効です。サービスがすでに提供されているOracle RACでは、短い遅延時間が効率的です。 |
|
このパラメータを設定した場合、サービスに接続されているすべてのセッションは、Fast Connection Failover (FCF)を使用するクライアント・ドライバおよびプールによって排出されます。 |
|
この引数が サービスの作成中または変更中に、このパラメータの検証は行われません。 接続時に、接続ユーザーがエディションに対する |
|
トランザクション
|
|
|
|
アプリケーション・コンティニュイティの場合、 |
|
リクエスト中に非トランザクションがどのように変化するかを示します。このパラメータが考慮されるのは、アプリケーション・コンティニュイティの |
|
SQL翻訳プロファイルの名前。 |
|
|
|
接続ロード・バランシングに使用されるメソッド(表165-2を参照) |
|
サービスの配置ポリシー。有効な値は、次のとおりです。
ノート: 0 以外の値は、Oracle RAC環境のATP専用クラウドでのみ適用可能です。
|
使用上のノート
-
Oracle ClusterwareでClustered Managed Servicesを使用している場合、またはシングル・インスタンス・データベースでOracle Restartを使用している場合、
DBMS_SERVICE
ではなく、srvctl
コマンドを使用して、サービスを変更する必要があります。サービスがOracle ClusterwareまたはOracle Restartによって開始された場合、サービスはOracle ClusterwareまたはOracle Restartに対して定義されたリソースに一致するようにデータベースで変更されます。DBMS_SERVICE
で行われた変更は、対応するsrvctl
コマンドでも行わなければ、失われます。srvctl
によってサービスが開始または変更されると、11.2.0.2以上ではサービス属性の変更が即座に反映されます。 -
ユーザーは、サービスが起動して実行中の場合でもエディション属性を変更できますが、この操作は安全性に問題があります。この操作では、既存の接続が影響を受けないまま新しいエディションで新規接続が確立されるため、ユーザーは注意して作業を進める必要があります。中間層の操作で、間違ったエディションへの接続が取得される可能性もあります。
165.6.5 START_SERVICEプロシージャ
このプロシージャは、サービスを開始します。Oracle RACでは、このオプションを実装すると、指定したインスタンスに影響があります。
ノート:
サービスがOracle Clusterware、Oracle RestartまたはOracle Global Data Servicesによって管理されている場合は、このサブプログラムは使用できません。
構文
DBMS_SERVICE.START_SERVICE( service_name IN VARCHAR2, instance_name IN VARCHAR2);
パラメータ
表165-10 START_SERVICEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
データ・ディクショナリでのサービスの名前(64文字まで使用可能)。 |
|
サービスをアクティブ化する必要のあるインスタンスの名前(オプション)。 |
例
DBMS_SERVICE.START_SERVICE('ernie.example.com');
165.6.6 STOP_SERVICEプロシージャ
このプロシージャは、サービスを停止します。
ノート:
サービスがOracle Clusterware、Oracle RestartまたはOracle Global Data Servicesによって管理されている場合は、このサブプログラムは使用できません。
構文
DBMS_SERVICE.STOP_SERVICE( service_name IN VARCHAR2, instance_name IN VARCHAR2 DEFAULT NULL, stop_option IN VARCHAR2 DEFAULT NULL, drain_timeout IN NUMBER DEFAULT NULL, replay IN BOOLEAN DEFAULT TRUE);
パラメータ
表165-11 STOP_SERVICEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
データ・ディクショナリでのサービスの名前(64文字まで使用可能)。 |
|
サービスを停止する必要のあるインスタンスの名前(オプション)。 |
stop_option |
排出によるセッションの停止方法を指定します。指定可能な値は次のとおりです。
これらの値は、コマンドラインで |
|
セッションが排出されるまでの時間(秒)。 |
|
アプリケーション・コンティニュイティのリプレイを有効にします。 |
例
DBMS_SERVICE.STOP_SERVICE('ernie.example.com');