シングルユーザーモード

サーバーが「シングルユーザーモード」で動作している場合、サーバーの可用性が制限されることを意味します。

大容量の VQL ファイルのインポート、サーバーの設定の変更などのメンテナンス操作を実行する場合は、サーバーを「シングルユーザーモード」に切り替えることが推奨されます。また、他のアクションと同時に実行できないアクションを実行するために、サーバーが単独でシングルユーザーモードに切り替わることもあります。

シングルユーザーモードでの動作中は、サーバーはリクエストを一切処理しません。つまり、以下を処理しません。

  • クエリ。つまり、 SELECT および CALL の各ステートメント。

  • データ定義言語 (DDL) ステートメント。つまり CREATE/ALTER DATA SOURCECREATE/ALTER VIEW など。

  • データ変更言語 (DML) ステートメント。つまり、 INSERT INTOUPDATE 、または DELETE

  • ...

サーバーが「シングルユーザーモード」での動作中に受信したリクエストはすべてキューに入れられます。

シングルユーザーモードの終了後、サーバーは、キューに入っているリクエストを受信順に実行します。

サーバーがシングルユーザーモードのときに、切り替えをトリガーしたコネクションとは異なるコネクションからステートメントを実行した場合、そのステートメントはキューに入れられます。そのステートメントを Administration Tool から実行した場合、「待機中ダイアログ」が開き、「Waiting for single user mode to finish」というメッセージが表示されます。

シングルユーザーモードには、以下の 2 つのタイプがあります。

  1. 明示的 シングルユーザーモードまたは グローバル シングルユーザーモード: ユーザーがサーバーにこのモードへの移行を要求します。「 明示的シングルユーザーモード 」を参照してください。

  2. 自動 シングルユーザーモード: サーバーが自動的にシングルユーザーモードに移行し、そのモードを終了します。「 自動シングルユーザーモード 」を参照してください。

明示的シングルユーザーモード

構成変更や VQL ファイルのインポートを実行する場合、管理者ユーザーは「明示的シングルユーザーモード」に切り替えるようサーバーに要求できます。サーバーをシングルユーザーモードに切り替えることができるのは、管理者ユーザーのみです。

管理者が以下のいずれかのアクションを実行すると、サーバーは明示的シングルユーザーモードに切り替わります。

  1. ENTER SINGLE USER MODE ステートメントを実行する。このモードを終了するには、 EXIT SINGLE USER MODE を実行します。

  2. --singleuser オプションを使用して import スクリプトを実行する (このスクリプトの詳細については、「 import スクリプト 」を参照)。

    変更中のビューに対して他のクライアントがクエリを実行したことが原因でエラーが発生するのを防ぐために、 --singleuser オプションを使用してこのスクリプトを実行することが強く推奨されます。

  3. ENTER SINGLE USER MODE ステートメントを含む VQL スクリプトをインポートする。

管理者がサーバーにシングルユーザーモードへの切り替えを要求すると、サーバーは、切り替えを実行する前に、以下を実行します。

  1. 現在実行中のリクエストがすべて完了するまで待機します。

  2. 実行中のリクエストが完了するのを待機している間に受信したリクエストをすべてキューに入れます。

  3. すべての操作の完了後、シングルユーザーモードに切り替えます。

「シングルユーザーモード」のサーバーは、 ENTER SINGLE USER MODE が実行されたコネクションから 実行されたステートメントしか処理しません。たとえば、管理者が Administration Tool にログインして VQL シェルを 2 つ開いているとします。1 つ目のシェルで ENTER SINGLE USER MODE を実行した場合、そのシェルでのみクエリを実行できます。後で 2 つ目の VQL シェルでコマンドを実行した場合、そのコマンドは、1 つ目の VQL シェルで EXIT SINGLE USER MODE を実行するか、または 1 つ目の VQL シェルを終了するまで、キューに入れられます。なぜなら、各 VQL シェルはサーバーに対して固有のコネクションを開くからです。

サーバーをグローバルシングルユーザーモードに切り替えることができるのは、管理者ユーザーのみです。

JMX インターフェイスの VDBServerManagementInfo MBean を使用すると、 ENTER SINGLE USER MODE コマンドが実行されたコネクションの ID がわかります。この MBean の詳細については、「 VDBServerManagementInfo MBean の属性 」を参照してください。

自動シングルユーザーモード

ここでは、サーバーが自動的にシングルユーザーモードに一時的に切り替えて特定のアクションを実行し、実行後ただちにこのモードを終了する動作について説明します。これは、ユーザーのリクエストなしに動作するので、「自動シングルユーザーモード」と呼ばれます。

自動シングルユーザーモードと明示的シングルユーザーモードの違いは、サーバーが自動シングルユーザーモードに切り替える際に以下を待機 しない 点です。

  1. クエリの完了。つまり、 SELECT および CALL の各ステートメントの完了。

  2. データ変更言語 (DML) 操作の完了。つまり INSERTINSERT INTOUPDATE 、または DELETE の完了。

ただし、サーバーは、データ定義言語 (DDL) ステートメント (つまり、 CREATE/ALTER DATA SOURCECREATE/ALTER VIEW など) の完了は待機します。これは、サーバーのメタデータを変更する操作を 2 つ同時に実行できないようにするためです。

アクションを実行しているユーザーが管理者またはデータベースのローカル管理者のどちらでもなくても、サーバーは自動シングルユーザーモードに切り替わります。

実行される操作に応じて、サーバー全体がシングルユーザーモードに移行することも、操作が実行されるデータベースだけがシングルユーザーモードに移行することもあります。

現在のデータベースのみがブロックされる操作:

  1. ユーザーがデータベースに「属する」エレメントを作成、変更、または削除する操作。該当するエレメントを以下に示します。

    1. データソース。

    2. ビュー: 基本ビュー、派生ビュー、インターフェイスビュー、およびマテリアライズドテーブル

      マテリアライズドビューを CREATE MATERIALIZED TABLE AS SELECT ... 構文または SELECT ... INTO ... 構文で作成した場合、データベースは、そのクエリが完了するまでシングルユーザーモードのままです。マテリアライズドテーブルを CREATE MATERIALIZED TABLE ... ( <fields> ) 構文で作成した場合、このステートメントはただちに完了します。

      マテリアライズドビューの詳細については、『VQL ガイド』の「 マテリアライズドテーブルの作成 」を参照してください。

    3. JMS リスナー

    4. REST Web サービス、SOAP Web サービス、およびウィジェット

    5. ストアドプロシージャ

    6. アソシエーション

  2. データベースの構成を変更する操作。

  3. 特定のタイプのエレメントのリストを取得する操作。つまり、 LIST ステートメントの実行。

  4. エレメントの情報を取得する操作。つまり、 DESC ステートメントの実行。

これらの操作の処理中は、操作が完了するまで、このデータベースに送信されるリクエストはすべてキューに入れられます。しかし、 これ以外 のデータベースに送信されるリクエストは、ほとんどの場合、通常の方法でただちに実行されます。

1 つの操作によって複数のデータベースがブロックされる可能性があります。なぜなら、サーバーはその操作に関係するすべてのエレメントのデータベースをブロックするからです。たとえば、データベース DB1 内にビューを作成し、このビューがデータベース DB2 の別のビューから選択されたものである場合、 CREATE VIEW ステートメントを実行すると、データベース DB1 と DB2 がブロックされます。

サーバー全体がブロックされる操作

  1. 以下のエレメントのいずれかを作成、変更、または削除する操作。

    1. ロケールマップ

    2. Jar

    3. ユーザー

    4. ロール

    5. VCS 環境

  2. グローバル VCS 設定を変更する操作。

  3. キャッシュのグローバル設定を変更する操作。

ユーザーがトランザクションを開始した場合、これらの操作はトランザクションが完了するまでキューに入れられます。