データベースからの切断

最初に正しい順序でアプリケーションの接続を切断することで、データベースを停止またはアンロードできます。

強制切断オプションは、アイドル状態または応答しないものを含め、接続されているすべてのアプリケーションをデータベースから非同期的に切断します。

  • データベースの共有メモリー・セグメントから安全に切断およびデタッチします。

  • アイドル状態か応答のない接続を正常に切断します。

次の項では、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
...