165 DBMS_SERVICE

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

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

165.1 DBMS_SERVICEの概要

DBMS_SERVICEは、ワークロードの測定、管理、優先順位付け、およびXAトランザクションと分散トランザクションの管理を目的として、RDBMSでの高可用性に関する操作、サービス品質に関する操作、ジョブ・スケジューリングに関する操作およびその他の計画済操作のワークロード管理をサポートします。

Oracle Real Application Clusters(RAC)は、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を参照してください。

  • TAFフェイルオーバー属性引数で使用される定数は、表165-3を参照してください

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

名前 タイプ 説明

GOAL_NONE

NUMBER

0

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

GOAL_SERVICE_TIME

NUMBER

1

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

GOAL_THROUGHPUT

NUMBER

2

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

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

名前 タイプ 説明

CLB_GOAL_SHORT

NUMBER

1

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

CLB_GOAL_LONG

NUMBER

2

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

表165-3 FAN、アプリケーション・コンティニュイティ、トランザクション・ガードおよびTAF用に高可用性属性の引数で使用される定数

名前 タイプ 説明

FAILOVER_METHOD_NONE

VARCHAR2

0

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

FAILOVER_METHOD_BASIC

VARCHAR2

1

サーバー側のTAFメソッドはBASICです。BASICのみが、現在サポートされています。これは、障害時に新しい接続が確立されるということです。

FAILOVER_TYPE_NONE

VARCHAR

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

FAILOVER_TYPE_SESSION

VARCHAR

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

FAILOVER_TYPE_SELECT

VARCHAR

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

FAILOVER_RETRIES

NUMBER

フェイルオーバーが発生する際の接続試行回数です。アプリケーション・コンティニュイティとTAFが再接続と再認証のペアを試行する回数を指定します。0より大きい整数値を指定する必要があります。Oracle Database 12cリリース1 (12.1)でのアプリケーション・コンティニュイティに対するデフォルト値は30です。

FAILOVER_RESTORE_NONE

CONSTANT VARCHAR2

NONE

初期状態は、アプリケーション・コンティニュイティおよびTAFでのリプレイ前にはリストアされません。この値は、アプリケーション・コンティニュイティを使用してリクエストの独自の状態を作成するOCIアプリケーションに使用することをお薦めします。たとえば、SQLPLUSがあります。

FAILOVER_RESTORE_BASIC

VARCHAR2

LEVEL1

この値は、アプリケーション・コンティニュイティを使用するJavaおよびODP.NETアプリケーションに使用することをお薦めします。ユーザーが認識している初期状態は、リプレイ前に自動的にリストアされます。追加の状態が必要な場合は、コールバックを登録する必要があります。

FAILOVER_DELAY

NUMBER

次の接続試行までの遅延秒数です。これは、再接続と再認証が失敗した場合に、アプリケーション・コンティニュイティとTAFが待機する遅延時間です。0より大きい整数値を指定する必要があります。アプリケーション・コンティニュイティを使用する場合、Oracle Database 12cリリース1 (12.1)でのデフォルト値は10秒です。FAILOVER_DELAYを使用すると、次にサービスが使用可能になるまでフェイルオーバーを遅延させることができます。これは、サービスが一時的に(たとえば数分)使用できなくなる計画済停止で使用すると効果的です。

STOP_OPTION_NONE

VARCHAR

セッションは切断されません。

STOP_OPTION_IMMEDIATE

VARCHAR

セッションは、drain_timeoutの経過後すぐに切断されます。

STOP_OPTION_TRANSACTIONAL

セッションは、drain_timeoutの間はトランザクションの後で切断されます。drain_timeoutが経過すると、セッションはすぐに切断されます。

DYNAMIC

NUMBER

アプリケーション・コンティニュイティの場合は、非トランザクションのセッション状態をリクエストの実行中にアプリケーションで変更するかどうかをこのパラメータで指定します。すべてのアプリケーションでDYNAMICの値にすることをお薦めします。確信がない場合や、アプリケーションをカスタマイズできる場合は、DYNAMICを使用する必要があります。

使用上のノート

  • 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とともには使用できません。

165.5 DBMS_SERVICEの例外

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

表165-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

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

ERR_AQ_SERVICE

44319

AQサービスを削除できません。

ERR_GLB_SERVICE

44320

グローバル・サービスを削除できません。

ERR_INVALID_PDB_NAME

44771

プラガブル・データベース名が無効です。

ERR_CRS_API

44772

Cluster Ready Service(CRS)の操作が失敗しました。

ERR_PDB_CLOSED

44773

要求された操作を実行できません。

ERR_PDB_INVALID

44774

プラガブル・データベースの属性を変更できません。

ERR_PDB_NAME

44775

プラガブル・データベースのサービスを作成できません。

ERR_PDB_EXP

44776

プラガブル・データベースのサービスを削除できません。

ERR_PDB_FAIL

44777

プラガブル・データベースのサービスを開始できません。

165.6 DBMS_SERVICEサブプログラムの要約

この表は、DBMS_SERVICEサブプログラムを示し、簡単に説明しています。

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

サブプログラム 説明

CREATE_SERVICEプロシージャ

サービスを作成します。

DELETE_SERVICEプロシージャ

サービスを削除します。

DISCONNECT_SESSIONプロシージャ

このサービスの下に実行されているセッションを切断します。

MODIFY_SERVICEプロシージャ

サービスを変更します。

START_SERVICEプロシージャ

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

STOP_SERVICEプロシージャ

サービスを停止します。

165.6.1 CREATE_SERVICEプロシージャ

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

ノート:

SESSION_STATE_CONSISTENCY = STATICが指定されたセッション属性値FAILOVER_TYPE = TRANSACTIONは、サポートされているサービス属性の組合せではなくなりました。

以前のリリースでは、サービス・パラメータsession_stateを使用して、session_stateDYNAMICまたはSTATICに設定することにより、透過的アプリケーション・コンティニュイティを使用してセッション状態を自動的に管理できました。しかし、Oracle Database 23c以降、STATICオプションを使用できなくなりました。かわりに、次のいずれかのフェイルオーバー・オプションを使用します。

  • FAILOVER_TYPE = AUTOSESSION_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プロシージャのパラメータ

パラメータ 説明

service_name

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

network_name

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

parameter_array

サービス属性の名前/値ペアに関連付けられた配列です。次の名前がサポートされています。

  • goal

  • dtp

  • aq_ha_notifications

  • failover_method

  • failover_type

  • failover_retries

  • failover_restore

  • failover_delay

  • clb_goal

  • edition

  • commit_outcome

  • reset_state

  • retention_timeout

  • replay_initiation_timeout

  • session_state_consistency

  • sql_translation_profile

  • drain_timeout

  • stop_option

  • placement_policy

goal

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

  • DBMS_SERVICE.GOAL_SERVICE_TIME

  • DBMS_SERVICE.GOAL_THROUGHPUT

  • DBMS_SERVICE.GOAL_NONE

dtp

サービスの対象がX/Open分散トランザクション処理(DTP)または任意の分散トランザクション(特にXA)であることを宣言します。

aq_ha_notifications

OCI/OCCI/ODPでFast Application Notification(FAN)を使用できるかどうかを指定します。Oracle Database12cでは、FANはOracle Notification Services(ONS)を使用します。このパラメータは、FANを有効にするために引き続き使用されます。FANはすべての高可用性システムで推奨されているため、アプリケーション・コンティニュイティではデフォルトで有効になっています。

failover_method

アプリケーション・コンティニュイティとTAFに使用するサービスのフェイルオーバーTYPEです。サービスのfailover_typeTRANSACTIONに設定されている場合、COMMIT_OUTCOMEは自動的にTRUEに設定されます。JDBCリプレイ・ドライバは、TRANSACTIONFAILOVER_TYPEサービス属性設定をTRANSACTIONのフェイルオーバーに使用します。OCIは、SELECTSESSIONの以前の設定を使用します。サーバーでは、TRANSACTIONの設定として、FAILOVER_METHOD = BASICのみが許容されます。

failover_type

アプリケーション・コンティニュイティにはTRANSACTIONを使用します。TAFにはSELECTまたはBASICを使用します。

failover_retries

アプリケーション・コンティニュイティとTAFが接続を再試行する回数です。failover_retriesおよびfailover_delayパラメータを使用すると、次にサービスが使用可能になるまでフェイルオーバーを遅延させることができます。このパラメータは、接続を対象としています。フェイルオーバー数は制御できません。アプリケーション・コンティニュイティの場合、この数はインシデントごとに3回です。

failover_delay

アプリケーション・コンティニュイティとTAFが接続を再試行するまでの遅延秒数です。アプリケーション・コンティニュイティに対するデフォルト値は10秒です。サービスによるフェイルオーバーと登録に時間がかかる場合は、遅延時間を0秒に指定しないでください。長い遅延時間は、計画済停止やData Guardへのフェイルオーバーでは有効です。サービスがすでに提供されているRACでは、短い遅延時間が効率的です。

edition

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

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

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

drain_timeout

このパラメータを定義した場合、サービスに接続されているすべてのセッションは、Fast Connection Failover (FCF)を使用するクライアント・ドライバおよびプールによって排出されます。drain_timeoutはサービスに対して設定でき、デフォルトではこの期間排出を停止および再配置します。

stop_option

セッションを終了するオプションを指定します。サポートされる値は次のとおりです。

  • TRANSACTIONAL

    drain_timeoutはトランザクションに適用されます。drain_timeoutが経過すると、セッションはすぐに強制終了されます。

  • IMMEDIATE

    セッションはdrain_timeoutの経過後に強制終了されます。

  • NONE

    セッションは終了しません。

ただし、これらのパラメータ値は、コマンドラインを使用して上書きできます。

commit_outcome

トランザクションCOMMITが実行された後に、COMMITの結果にアクセスできるかどうかを指定します。COMMITが永続的であることはデータベースによって保証されますが、これによってCOMMITの結果も永続的であることが保証されます。アプリケーションでは、停止後にこの機能を使用して、最後に実行されたコミットのステータスを調べて、その結果を確認できます。ノート:

  • DBMS_APP_CONT パッケージのGET_LTXID_OUTCOMEプロシージャを起動するには、commit_outcome属性が設定されている必要があります。

  • commit_outcomeは、アクティブなData Guardデータベースと読取り専用データベースには影響を及ぼしません。

  • commit_outcomeは、データベース・サービスおよびユーザー定義のデータベース・サービスでのみ使用できます。

reset_state

リクエスト間でセッション・ステートの使用状況をクリアし、新しいリクエストごとに(使用状況Webおよびステートレス・アプリケーションが)クリーンな状態で始まるようにします。

retention_timeout

commit_outcomeと組み合せて使用すると、COMMIT_OUTCOMEを保持する時間(秒単位)を指定できます。デフォルトは24時間(86400)です。最大値は30日(2592000)です。

replay_initiation_timeout

アプリケーション・コンティニュイティの場合、replay_initiation_timeoutは、要求の最初の操作を実行してから、再接続が成功し、リプレイを開始する準備が整うまでの時間を表します。リプレイ開始時間は、要求が最初に送信されてから、リプレイが接続され、それを開始する準備が整うまでの時間を計測したものです。リプレイが予期される場合は、大きな値を設定します。デフォルトは900秒です。

session_state_consistency

リクエスト中に非トランザクションがどのように変化するかを示します(DYNAMIC)。このパラメータが考慮されるのは、アプリケーション・コンティニュイティのfailover_typeTRANSACTIONに設定された場合のみです。セッション状態の例としては、NLS設定、オプティマイザのプリファレンス、イベントの設定、PL/SQLグローバル変数、一時表、アドバンスト・キュー、LOBおよび結果キャッシュがあります。要求が開始された後にこれらの値が変化する場合は、DYNAMIC(デフォルト)に設定します。ほぼすべてのアプリケーションでは、DYNAMICモードを使用する必要があります。確信がない場合は、DYNAMICモードを使用します。

sql_translation_profile

SQL翻訳プロファイルの名前。

clb_goal

接続ロード・バランシングに使用されるメソッド(表165-2を参照)

placement_policy

NUMBER

サービスの配置ポリシー。有効な値は、次のとおりです。

  • 0: PDB-NONE
  • 1: PDB-SINGLETON
  • 2: PDB-UNIFORM

ノート:

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_TYPEFAILOVER_RESTORESESSION_STATE_CONSISTENCYなどの用途が含まれます。

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

構文

DBMS_SERVICE.DELETE_SERVICE(
   service_name   IN VARCHAR2);

パラメータ

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

パラメータ 説明

service_name

データ・ディクショナリでのサービスの名前です(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プロシージャのパラメータ

パラメータ 説明

service_name

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

disconnect_option

パッケージ定数である次のオプションは、NUMBERで表現されます。

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

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

  • NOREPLAY = 2: セッションは即時に切断され、アプリケーション・コンティニュイティによってリプレイされないようにフラグ付けされます。つまり、IMMEDIATENOREPLAYの両方が指定された状態です。

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

使用上のノート

  • このプロシージャは、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プロシージャのパラメータ

パラメータ 説明

service_name

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

parameter_array

サービス属性の名前/値ペアに関連付けられた配列。次の名前がサポートされています。

  • goal

  • dtp

  • aq_ha_notifications

  • failover_method

  • failover_type

  • failover_restore

  • failover_retries

  • failover_delay

  • drain_timeout

  • stop_option

  • edition

  • commit_outcome

  • retention_timeout

  • replay_initiation_timeout

  • session_state_consistency

  • sql_translation_profile

  • placement_policy

goal

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

  • DBMS_SERVICE.GOAL_SERVICE_TIME

  • DBMS_SERVICE.GOAL_THROUGHPUT

  • DBMS_SERVICE.GOAL_NONE

dtp

サービスの対象がX/Open分散トランザクション処理(DTP)または任意の分散トランザクション(特にXA)であることを宣言します。

aq_ha_notifications

OCI/OCCI/ODPでFast Application Notification(FAN)を使用できるかどうかを指定します。Oracle Database12cでは、FANはOracle Notification Services(ONS)を使用します。このパラメータは、FANを有効にするために引き続き使用されます。FANはすべての高可用性システムで推奨されているため、アプリケーション・コンティニュイティではデフォルトで有効になっています。

failover_method

アプリケーション・コンティニュイティとTAFに使用するサービスのフェイルオーバーTYPEです。サービスのfailover_typeTRANSACTIONに設定されている場合、COMMIT_OUTCOMEは自動的にTRUEに設定されます。JDBCリプレイ・ドライバは、TRANSACTIONFAILOVER_TYPEサービス属性設定をTRANSACTIONのフェイルオーバーに使用します。OCIは、SELECTSESSIONの以前の設定を使用します。サーバーでは、TRANSACTIONの設定として、FAILOVER_METHOD = BASICのみが許容されます。

failover_type

アプリケーション・コンティニュイティとTAFに使用するサービスのフェイルオーバーTYPEです。

failover_restore

アプリケーション・コンティニュイティの場合、failover_restoreを設定すると、ODP.NETおよびJavaではリプレイ前にセッション状態がリストアされます。アプリケーション・コンティニュイティを使用するODP.NETおよびJavaにはLEVEL1を使用して初期状態をリストアします。

AC OCIの場合、STATICではないアプリケーションにはNONEを使用します。

failover_retries

アプリケーション・コンティニュイティとTAFが接続を再試行する回数です。failover_retriesおよびfailover_delayパラメータを使用すると、次にサービスが使用可能になるまでフェイルオーバーを遅延させることができます。このパラメータは、接続を対象としています。フェイルオーバー数は制御できません。アプリケーション・コンティニュイティの場合、この数はインシデントごとに3回です。

failover_delay

アプリケーション・コンティニュイティとTAFが接続を再試行するまでの遅延秒数です。アプリケーション・コンティニュイティに対するデフォルト値は10秒です。サービスによるフェイルオーバーと登録に時間がかかる場合は、遅延時間を0秒に指定しないでください。長い遅延時間は、計画済停止やData Guardへのフェイルオーバーでは有効です。サービスがすでに提供されているOracle RACでは、短い遅延時間が効率的です。

drain_timeout

このパラメータを設定した場合、サービスに接続されているすべてのセッションは、Fast Connection Failover (FCF)を使用するクライアント・ドライバおよびプールによって排出されます。drain_timeoutはサービスに対して設定でき、デフォルトではこの期間排出を停止および再配置します。

edition

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

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

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

commit_outcome

トランザクションCOMMITが実行された後に、COMMITの結果にアクセスできるかどうかを指定します。COMMITが永続的であることはデータベースによって保証されますが、これによってCOMMITの結果も永続的であることが保証されます。アプリケーションでは、停止後にこの機能を使用して、最後に実行されたコミットのステータスを調べて、その結果を確認できます。ノート:

  • DBMS_APP_CONT パッケージのGET_LTXID_OUTCOMEプロシージャを起動するには、commit_outcome属性が設定されている必要があります。

  • commit_outcomeは、アクティブなData Guardデータベースと読取り専用データベースには影響を及ぼしません。

  • commit_outcomeは、ユーザー定義データベース・サービスでのみ許可されます。

retention_timeout

commit_outcomeと組み合せて使用すると、COMMIT_OUTCOMEを保持する時間(秒単位)を指定できます。デフォルトは24時間(86400)です。最大値は30日(2592000)です。

replay_initiation_timeout

アプリケーション・コンティニュイティの場合、replay_initiation_timeoutは、要求の最初の操作を実行してから、再接続が成功し、リプレイを開始する準備が整うまでの時間を表します。リプレイ開始時間は、要求が最初に送信されてから、リプレイが接続され、それを開始する準備が整うまでの時間を計測したものです。リプレイが予期される場合は、大きな値を設定します。デフォルトは900秒です。

session_state_consistency

リクエスト中に非トランザクションがどのように変化するかを示します。このパラメータが考慮されるのは、アプリケーション・コンティニュイティのfailover_typeTRANSACTIONに設定された場合のみです。セッション状態の例としては、NLS設定、オプティマイザのプリファレンス、イベントの設定、PL/SQLグローバル変数、一時表、アドバンスト・キュー、LOBおよび結果キャッシュがあります。要求が開始された後にこれらの値が変化する場合は、DYNAMIC(デフォルト)に設定します。ほぼすべてのアプリケーションでは、DYNAMICモードを使用する必要があります。確信がない場合は、DYNAMICモードを使用します。

sql_translation_profile

SQL翻訳プロファイルの名前。

modify_edition

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

clb_goal

接続ロード・バランシングに使用されるメソッド(表165-2を参照)

placement_policy

NUMBER

サービスの配置ポリシー。有効な値は、次のとおりです。

  • 0: PDB-NONE
  • 1: PDB-SINGLETON
  • 2: PDB-UNIFORM

ノート:

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プロシージャのパラメータ

パラメータ 説明

service_name

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

instance_name

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

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プロシージャのパラメータ

パラメータ 説明

service_name

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

instance_name

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

stop_option

排出によるセッションの停止方法を指定します。指定可能な値は次のとおりです。

  • IMMEDIATE: セッションは、drain_timeoutで指定された時間の経過後すぐに終了します

  • TRANASCTIONAL: トランザクションに適用されます。トランザクションの有効期限が切れると、セッションはすぐに終了します。

  • NONE: セッションは終了しません。

これらの値は、コマンドラインでSRVCTLを使用して上書きできます。

drain_timeout

セッションが排出されるまでの時間(秒)。

replay

アプリケーション・コンティニュイティのリプレイを有効にします。

DBMS_SERVICE.STOP_SERVICE('ernie.example.com');