データベースからの切断
最初に正しい順序でアプリケーションの接続を切断することで、データベースを停止またはアンロードできます。
強制切断オプションは、アイドル状態または応答しないものを含め、接続されているすべてのアプリケーションをデータベースから非同期的に切断します。
-
データベースの共有メモリー・セグメントから安全に切断およびデタッチします。
-
アイドル状態か応答のない接続を正常に切断します。
次の項では、TimesTenデータベースから接続を切断する方法について説明します。
TimesTen Scaleoutでのデータベースからの切断
TimesTen Scaleoutデータベースからすべてのアプリケーションを個別に切断できない場合は、ttGridAdmin dbDisconnect
コマンドを使用して、データベースからすべてのユーザー接続を切断します。
『Oracle TimesTen In-Memory Database Scaleoutユーザーズ・ガイド』のメモリーからのデータベースのアンロードを参照してください。
TimesTen Classicでのデータベースからの切断
ttAdmin -disconnect
コマンドを使用してTimesTen Classicデータベースへのすべての接続を切断できます。
ただし、sys.odbc.ini
ファイル内のDSN定義でForceDisconnectEnabled
接続属性を1に設定することで、最初に強制切断の機能を有効にする必要があります。Oracle TimesTen In-Memory DatabaseリファレンスのForceDisconnectEnabledを参照してください。
制御はコマンド・プロンプトに戻りますが、強制切断操作は完了までに数秒(または数分)かかることがあります。ttStatus
ユーティリティで、強制切断操作のステータスを確認します。
強制切断操作の進行中は、新しい接続リクエストはメイン・デーモンによって拒否されます。強制切断操作が完了すると、新しい接続が受け入れられます。
緊急度レベルで、どのくらい緊急に接続を強制切断する必要があるかを指定できます。
-
-transactional
オプションは、オープン状態のトランザクションがコミットまたはロールバックされるまで待機してから切断します。アイドル状態の接続には影響しません。 -
-immediate
オプションは、オープン状態のトランザクションをロールバックしてから即座に切断します。このオプションでは、アイドル状態の接続も切断されます。 -
-abort
オプションは、切断のためにダイレクト・モードのすべてのアプリケーション・プロセスおよびクライアント/サーバー・プロセス(ttcserver
)を中止します。
ほとんどの場合は、-transactional
および-immediate
オプションを使用する必要があります。必要に応じて-disconnect
コマンドを2回実行することをお薦めします。最初にtransactional緊急度レベルを使用します。その後、しばらくしてから、ttStatus
を使用して、接続が閉じられたかどうかを確認します。まだすべての接続が閉じられたわけではない場合は、immediate緊急度レベルを使用します。
-abort
オプションを使用する必要があるのは、transactional緊急度レベルとimmediate緊急度レベルのどちらでも、指定された接続すべてを正常に切断できなかった場合のみです。-abort
オプションを使用すると、この操作によって、データベースに接続されているすべてのユーザーとttcserver
プロセスが終了するため、トランザクションが失われる可能性があります。
粒度レベルで、切断する接続のタイプを指定できます。
-
-users
オプション(デフォルト)は、データベースへのすべてのユーザー接続を切断します。たとえば、データベース・メンテナンスの実行準備時にこの粒度レベルを使用します。 -
-unload
オプションは、サブデーモン接続を含め、データベースへのすべての接続を切断します。たとえば、データベースのアンロード試行時にこの粒度レベルを使用します。
ノート:
always
RAMポリシーは、unload
粒度レベルと競合します。これらを同時に使用すると、エラーが返されます。
たとえば、次のスクリプトは、まずtransactional緊急度レベルを指定してttAdmin -disconnect
を実行することで、すべての接続を切断し、TimesTen Classicデータベースをアンロードします。その後、このスクリプトはしばらく待機し、immediate緊急度レベルを試す前に、接続が切断されたかどうかを評価します。
#!/bin/sh # disconnect users and unload the database with the transactional urgency level ttAdmin -disconnect -transactional -unload database1 # wait 10 seconds for the forced disconnect to finish COUNT = 0 while [ ttStatus | grep "pending disconnection" ] || [ $COUNT -ne 10 ] do sleep 1 COUNT=$((COUNT+1)) done # increase the urgency level to immediate if [ ttStatus | grep "pending disconnection" ]; then ttAdmin -disconnect -immediate -unload database1 fi
ttStatus
ユーティリティを使用して進行状況を確認します。強制切断操作の間に、出力において、保留中の切断が示されます。
TimesTen status report
Daemon pid 10457 port 6627 instance user1
TimesTen server pid 10464 started on port 6629
------------------------------------------------------------------------
------------------------------------------------------------------------
Data store /disk1/databases/database1
Daemon pid 10457 port 6627 instance user1
TimesTen server pid 10464 started on port 6629
There are 14 connections to the data store, ***14 pending disconnection***
Shared Memory KEY 0x0210679b ID 949092358
PL/SQL Memory KEY 0x0310679b ID 949125127 Address 0x5000000000
Type PID Context Connection Name ConnID
Process 10484 0x00007f3ddfeb4010 tt_181 1
...