ヘッダーをスキップ
Oracle® Database PL/SQLパッケージおよびタイプ・リファレンス
11g リリース2(11.2)
B56262-06
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

131 DBMS_SERVICE

DBMS_SERVICEパッケージを使用して、シングル・インスタンスのサービスを作成、削除、アクティブ化および非アクティブ化できます。

この章では、次の項目について説明します。


DBMS_SERVICEの使用方法

この項では、DBMS_SERVICEパッケージの使用に関連する項目について説明します。


概要

DBMS_SERVICEは、ワークロードの測定、管理、優先順位付け、およびXAトランザクションまたは分散トランザクション(あるいはこの両方)の管理を目的としたRDBMSでのサービスの管理をサポートします。

Oracle Real Application Clusters(Oracle RAC)には、インスタンス間でサービス名を管理する機能があります。このパッケージを使用すると、Oracle RACおよびシングル・インスタンスの両方でサービスを作成、削除、開始および停止できます。また、Oracle RACによってインスタンスからサービス名が削除された場合、そのサービス名を含むインスタンスに接続しているすべてのセッションを切断する機能を備えています。


関連項目:

Oracle Real Application Clustersの詳細は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。


セキュリティ・モデル

権限

このパッケージを使用するクライアントは、ALTER SYSTEM実行権限、およびV$SESSION表読込み権限を持っている必要があります。

スキーマ

このパッケージは、SYSスキーマの下に作成する必要があります。

ロール

このパッケージのEXECUTE権限は、DBAロールにのみ付与されます。


定数

DBMS_SERVICEパッケージでは、次の表に示す定数が使用されます。

表131-1 引数のコール時に使用される定数

名前 タイプ 説明

GOAL_NONE

NUMBER

0

ロード・バランシング・アドバイザを無効にします。

GOAL_SERVICE_TIME

NUMBER

1

ロード・バランシング・アドバイザは、サービスでの処理の実行に要する時間およびサービスで使用可能な帯域幅に基づきます。

GOAL_THROUGHPUT

NUMBER

2

ロード・バランシング・アドバイザは、サービスで処理が実行される速度およびサービスで使用可能な帯域幅に基づきます。


表131-2 接続バランシング目標引数で使用される定数

名前 タイプ 説明

CLB_GOAL_SHORT

NUMBER

1

接続ロード・バランシングでは、ロード・バランシング・アドバイザ(goal_service_timeまたはgoal_throughputのいずれか)が有効になっている場合、ロード・バランシング・アドバイザが使用されます。GOAL=NONE(ロード・バランシング・アドバイザなし)に設定すると、CPU使用率に基づいた簡略アドバイスが使用されます。

CLB_GOAL_LONG

NUMBER

2

サービスごとのセッション数を使用してインスタンスごとの接続数を平均化します。フォームなどの接続時間が長いアプリケーションには、この設定をお薦めします。この設定は、(接続を追加または削除せずに)接続プール自体の負荷に対応するためにそのサイズを調整する場合、ロード・バランシング・アドバイザで使用できます。これは、最も効果的な設定です。


表131-3 TAFフェイルオーバー属性引数で使用される定数

名前 タイプ 説明

FAILOVER_METHOD_NONE

VARCHAR2

0

このサービスでは、サーバー側のTAFが有効になっていません。

FAILOVER_METHOD_BASIC

VARCHAR2

1

サーバー側のTAFメソッドはBASICです。BASICのみが、現在サポートされています。これは、障害時に新しい接続が確立されるということです。バックアップ接続を事前に確立することはできません。(すなわち、PRECONNECTはサポートされていません)

FAILOVER_TYPE_NONE

NUMBER


サーバー側のTAFタイプはNONEです。

FAILOVER_TYPE_SESSION

NUMBER


サーバー側のTAFフェイルオーバー・タイプはSESSIONです。フェイルオーバー・タイプがSESSIONの場合に障害が発生すると、TAFは残っているノードに再接続し、基本機能のみを備えたデータベース接続を再確立します。フェイルオーバー・コールバックで、カスタマイズ(ALTER SESSIONなど)を再度実行する必要があります。

FAILOVER_TYPE_SELECT

NUMBER


サーバー側のTAFフェイルオーバー・タイプはSELECTです。

FAILOVER_RETRIES

NUMBER


フェイルオーバー時の再試行回数。TAFが再接続と再認証の組合せを試行する場合の回数を指定します。この値は1以上の整数にする必要があります。最大値はUB4MAXVALです。

FAILOVER_DELAY

NUMBER


フェイルオーバーが試行されるまでに遅延する秒数。再接続および再認証が失敗した場合に、TAFで発生する遅延(秒)を指定します。この値は1以上の整数にする必要があります。最大値はUB4MAXVALです。


使用上の注意

  • TAFコールバックが登録されている場合は、フェイルオーバーが再試行され、フェイルオーバーの遅延は無視されます。エラーが発生した場合、コールバックによってOCI_FO_RETRYの値が戻されるかぎり、TAFは接続および認証の再試行を継続します。遅延は、コールバックのロジックにコーディングする必要があります。

  • クライアント側のTAF設定がTNS接続記述子に設定されている場合、サーバー側のTAF設定によって上書きされます。TAFがクライアント側に設定されていない場合は、少なくとも、TAFが有効になるようにフェイルオーバー・タイプを設定する必要があります。フェイルオーバー・タイプがサーバー側に設定されている場合、フェイルオーバー・メソッドはBASICにデフォルト設定されます。遅延および再試行はオプションとなっており、個別に指定できます。


プロシージャの使用


例外

次の表に、DBMS_SERVICEパッケージで発生する例外を示します。

表131-4 DBMS_SERVICEの例外

例外 エラー・コード 説明

NULL_SERVICE_NAME

44301

サービス名引数がNULLです。

NULL_NETWORK_NAME

44302

ネットワーク名引数がNULLです。

SERVICE_EXISTS

44303

このサービス名はすでに存在します。

SERVICE_DOES_NOT_EXIST

44304

指定したサービスは存在しません。

SERVICE_IN_USE

44305

指定したサービスは実行中です。

SERVICE_NAME_TOO_LONG

44306

サービス名が長すぎます。

NETWORK_PREFIX_TOO_LONG

44307

ネットワーク名(ドメインを除く)が長すぎます。

NOT_INITIALIZED

44308

サービス・レイヤーが初期化されていません。

GENERAL_FAILURE

44309

不明な障害が発生しています。

MAX_SERVICES_EXCEEDED

44310

サービスが最大数に達しています。

SERVICE_NOT_RUNNING

44311

指定したサービスは実行されていません。

DATABASE_CLOSED

44312

データベースはクローズされています。

INVALID_INSTANCE

44313

インスタンス名引数が無効です。

NETWORK_EXISTS

44314

このネットワーク名はすでに存在します。

NULL_ATTRIBUTES

44315

すべての属性がNULLに設定されています。

INVALID_ARGUMENT

44316

無効な引数が指定されています。

DATABASE_READONLY

44317

データベースは読取り専用でオープンしています。

MAX_SN_LENGTH

44318

実行中のすべてのサービス・ネットワーク名の合計長が、最大許容長を超えました。



DBMS_SERVICEサブプログラムの要約

表131-5 DBMS_SERVICEパッケージのサブプログラム

サブプログラム 説明

CREATE_SERVICEプロシージャ


サービスを作成します。

DELETE_SERVICEプロシージャ


サービスを削除します。

DISCONNECT_SESSIONプロシージャ


サービスを切断します。

MODIFY_SERVICEプロシージャ


サービスを変更します。

START_SERVICEプロシージャ


サービスをアクティブにします。

STOP_SERVICEプロシージャ


サービスを停止します。



CREATE_SERVICEプロシージャ

このプロシージャは、データ・ディクショナリにサービス名を作成します。service_nameパラメータまたはALTER SYSTEM SET SERVICE_NAMESコマンドによってサービスを設定すると、サービスはデータ・ディクショナリにも暗黙的に作成されます。


注意:

サービスがOracle Clusterware、Oracle RestartまたはOracle GlobalData Servicesによって管理されている場合は、サブプログラムの2番目のバージョンは使用できません。Oracle Clusterware、Oracle RestartまたはOracle GlobalData Servicesで管理されていないデータベースには、パラメータの配列インタフェースを含むバージョンが適用されます。新しい属性は、パラメータ・インタフェースを使用する場合のみ使用できます。


注意:

edition引数に関連する機能は、Oracle Database 11gリリース2(11.2.0.2)以上で使用できます。

構文

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);

パラメータ

表131-6 CREATE_SERVICEプロシージャのパラメータ

パラメータ 説明

service_name

データ・ディクショナリでのサービスの名前(64文字まで使用可能)。

network_name

クライアント接続用にSQLNet接続記述子で使用されるサービスのネットワーク名。これは、NET service_namesキャラクタ・セットに限定されます(『Oracle Database Net Servicesリファレンス』を参照)。

goal

サービスのワークロード管理目標ディレクティブ。有効な値は、次のとおりです。

  • DBMS_SERVICE.GOAL_SERVICE_TIME

  • DBMS_SERVICE.GOAL_THROUGHPUT

  • DBMS_SERVICE.GOAL_NONE

dtp

サービスをDTP用またはXAトランザクションを含む分散トランザクション用に宣言します。

aq_ha_notifications

HAイベントがAQ経由でこのサービスに送信されるかどうかを決定します。

failover_method

サービスのTAFフェイルオーバー・メソッド。

failover_type

サービスのTAFフェイルオーバー・タイプ。

failover_retries

サービスのTAFフェイルオーバー再試行。

failover_delay

サービスのTAFフェイルオーバー遅延。

clb_goal

接続ロード・バランシングで使用されるメソッド(表131-2「接続バランシング目標引数で使用される定数」を参照)。

edition

この引数がNULL以外の値の場合、エディションの指定がない(このサービスを使用する)後続のデータベース接続に対して初期セッション・エディションが指定されます。値を指定しない場合、この引数の効果はありません。

サービスの作成中または変更中に、このパラメータの検証は行われません。

接続時に、接続ユーザーがエディションに対するUSE権限を持っていないか、エディションが存在しない場合、ORA-38802エラー(エディションが存在しません)が発生します。


DBMS_SERVICE.CREATE_SERVICE('ernie.us.oracle.com','ernie.us.oracle.com');

DELETE_SERVICEプロシージャ

このプロシージャは、データ・ディクショナリからサービスを削除します。


注意:

サービスがOracle Clusterware、Oracle Restart、またはOracle GlobalData Servicesによって管理されている場合は、このサブプログラムは使用できません。

構文

DBMS_SERVICE.DELETE_SERVICE(
   service_name   IN VARCHAR2);

パラメータ

表131-7 DELETE_SERVICEプロシージャのパラメータ

パラメータ 説明

service_name

データ・ディクショナリでのサービスの名前(64文字まで使用可能)。


DBMS_SERVICE.DELETE_SERVICE('ernie.us.oracle.com');

DISCONNECT_SESSIONプロシージャ

このプロシージャは、現行のインスタンスにおいて指定したサービスからセッションを切断します。

構文

DBMS_SERVICE.DISCONNECT_SESSION(
   service_name         IN VARCHAR2,
   disconnect_option    IN NUMBER DEFAULT POST_TRANSACTION); 

パラメータ

表131-8 DISCONNECT_SESSIONプロシージャのパラメータ

パラメータ 説明

service_name

データ・ディクショナリでのサービスの名前(64文字まで使用可能)。

disconnect_option

次の2つのオプション(NUMBERで表現されるパッケージ定数)があります。

  • POST_TRANSACTION = 0: セッションは、現行トランザクションがコミットまたはロールバックされた後に切断されます。

  • IMMEDIATE = 1: セッションは、即時に切断されます。

注意: IMMEDIATEまたはPOST_TRANSACTIONは、それぞれ1および0に自動的に変換されます。ただし、("IMMEDIATE"'POST_TRANSACTION'のように'または"文字を使用して引用された)文字列リテラルを渡すと、エラーが発生します。


使用上の注意

  • このプロシージャは、Oracle Real Application Clustersとともにシングル・インスタンスのコンテキストでも使用できます。

  • このサブプログラムは、対応するセッションがすべて切断されるまで戻りません。したがって、コール元は、対応するすべてのセッションが切断されるまで待機しないようにする場合、DBMS_JOBパッケージを使用するか、バックグラウンドでSQLセッションを設定します。

service_name 'ernie.us.oracle.com'からセッションを切断します。

DBMS_SERVICE.DISCONNECT_SESSION('ernie.us.oracle.com');

MODIFY_SERVICEプロシージャ

このプロシージャは、既存のサービスを変更します。


注意:

サービスがOracle Clusterware、Oracle RestartまたはOracle GlobalData Servicesによって管理されている場合は、サブプログラムの2番目のバージョンは使用できません。Oracle Clusterware、Oracle RestartまたはOracle GlobalData Servicesで管理されていないデータベースには、パラメータの配列インタフェースを含むバージョンが適用されます。新しい属性は、パラメータ・インタフェースを使用する場合のみ使用できます。


注意:

edition引数およびmodify_edition引数に関連する機能は、Oracle Database 11gリリース2(11.2.0.2)以上で使用できます。

構文

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);

パラメータ

表131-9 MODIFY_SERVICEプロシージャのパラメータ

パラメータ 説明

service_name

データ・ディクショナリでのサービスの名前(64文字まで使用可能)。

goal

サービスのワークロード管理目標ディレクティブ。有効な値は、次のとおりです。

  • DBMS_SERVICE.GOAL_SERVICE_TIME

  • DBMS_SERVICE.GOAL_THROUGHPUT

  • DBMS_SERVICE.GOAL_NONE

dtp

サービスをDTP用またはXAトランザクションを含む分散トランザクション用に宣言します。

aq_ha_notifications

HAイベントがAQ経由でこのサービスに送信されるかどうかを決定します。

failover_method

サービスのTAFフェイルオーバー・メソッド。

failover_type

サービスのTAFフェイルオーバー・タイプ。

failover_retries

サービスのTAFフェイルオーバー再試行。

failover_delay

サービスのTAFフェイルオーバー遅延。

clb_goal

接続ロード・バランシングで使用されるメソッド(表131-2「接続バランシング目標引数で使用される定数」を参照)。

edition

この引数がNULL以外の値の場合、エディションの指定がない(このサービスを使用する)後続のデータベース接続に対して初期セッション・エディションが指定されます。値を指定しない場合、この引数の効果はありません。

サービスの作成中または変更中に、このパラメータの検証は行われません。

接続時に、接続ユーザーがエディションに対するUSE権限を持っていないか、エディションが存在しない場合、ORA-38802エラー(エディションが存在しません)が発生します。

modify_edition

TRUEの場合、エディション・サービス属性は、edition引数値を使用するように更新されます。FALSEまたはNULLの場合、エディション属性は更新されません。


使用上の注意

  • 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以上ではサービス属性の変更が即座に反映されます。

  • エディション属性は、サービスが起動して実行中の場合でも変更できますが、この操作は安全性に問題があります。この操作によって、既存の接続が影響を受けないまま新しい接続が新規エディションに接続されるため、ユーザーは注意して作業を進める必要があります。この場合、中間層の操作が間違ったエディションに接続される可能性もあります。


START_SERVICEプロシージャ

このプロシージャは、サービスを開始します。また、このプロシージャは、このservice_nameが含まれるようにservice_name IOPを変更します。Oracle RACでは、このオプションを実装すると、指定したインスタンスに影響があります。


注意:

サービスがOracle Clusterware、Oracle Restart、またはOracle GlobalData Servicesによって管理されている場合は、このサブプログラムは使用できません。

構文

DBMS_SERVICE.START_SERVICE(
   service_name  IN VARCHAR2, 
   instance_name IN VARCHAR2);

パラメータ

表131-10 START_SERVICEプロシージャのパラメータ

パラメータ 説明

service_name

データ・ディクショナリでのサービスの名前(64文字まで使用可能)。

instance_name

サービスをアクティブ化する必要のあるインスタンスの名前(オプション)。このインスタンスでサービスを開始します。NULLを指定すると、ローカル・インスタンスでサービスが開始します。シングル・インスタンスでは、現行のインスタンスまたはNULLのみを指定できます。構成したすべてのインスタンスでサービスを開始するには、DBMS_SERVICE.ALL_INSTANCESを指定します。


DBMS_SERVICE.START_SERVICE('ernie.us.oracle.com');

STOP_SERVICEプロシージャ

このプロシージャは、サービスを停止し、service_name IOPを変更してこのservice_nameを削除します。


注意:

サービスがOracle Clusterware、Oracle Restart、またはOracle GlobalData Servicesによって管理されている場合は、このサブプログラムは使用できません。

構文

DBMS_SERVICE.STOP_SERVICE(
   service_name   IN VARCHAR2,
   instance_name  IN VARCHAR2);

パラメータ

表131-11 STOP_SERVICEプロシージャのパラメータ

パラメータ 説明

service_name

データ・ディクショナリでのサービスの名前(64文字まで使用可能)。

instance_name

サービスを停止する必要のあるインスタンスの名前(オプション)。このインスタンスでサービスを停止します。NULLを指定すると、サービスがローカルに停止します。シングル・インスタンスでは、現行のインスタンスまたはNULLのみを指定できます。Oracle RACおよび排他モードの場合、デフォルトはNULLです。構成したすべてのインスタンスでサービスを停止するには、DBMS_SERVICE.ALL_INSTANCESを指定します。


DBMS_SERVICE.STOP_SERVICE('ernie.us.oracle.com');