SQLNET EXPIRE TIMEを使用して、デッド接続をクリアします



Use Sqlnet Expire Time Clear Dead Connections



データベースに接続されているクライアントが異常に切断された後、対応する占有は解放されません。たとえば、v $ sessionビューから、対応するセッションが非アクティブであり、対応するサーバープロセスが解放されていないため、長期的なリソースが占有されていることがわかります。この状況に対処するにはどうすればよいですか。 SQLNET.EXPIRE_TIMEは、この問題の解決策を提供します。これは、異常なネットワークの中断、クライアントの異常な電源障害、異常な再起動などの異常な切断状況をクリーンアップするために特に使用されます。この記事では、SQLNET.EXPIRE_TIMEパラメーターの設定とデモンストレーションについて説明します。接続が切断され、リソースが解放されました。



1.SQLNET.EXPIRE_TIMEパラメーターを理解します
パラメータSQLNET.EXPIRE_TIMEを使用して、クライアント/サーバーを検証するためのプローブを送信する時間間隔を分単位で指定します
接続がアクティブです。
0より大きい値を設定すると、クライアントの異常終了が原因で接続が無期限に開いたままになることがなくなります。
プローブが終了した接続、または使用されなくなった接続を検出すると、エラーを返し、
終了するサーバープロセス。
このパラメータは、主にデータベースサーバーを対象としています。データベースサーバーは通常、一度に複数の接続を処理します。

パラメータをゼロ以外の値(分)に設定して、クライアントの異常な切断をチェックするための検出パケットを送信します。検出パッケージが異常な接続を検出すると、エラーを返し、対応するサーバープロセスをクリアします
以下は、パラメータの使用に関するいくつかの制限です。 (デフォルト値は0、最小値は0、推奨値は10です。SQLNET.EXPIRE_TIME= 10)
この終了した接続検出機能の使用に関する制限は次のとおりです。

遺贈された接続では許可されていません。
非常に小さいですが、プローブパケットは、ネットワークパフォーマンスを低下させる可能性のある追加のトラフィックを生成します。
使用しているオペレーティングシステムによっては、サーバーが区別するために追加の処理を実行する必要がある場合があります
発生する他のイベントからの接続プローブイベント。これにより、ネットワークパフォーマンスが低下する可能性もあります。



2.デッドコネクション検出(DCD)と非アクティブセッション

デッド接続:
これらは以前はデータベースとの有効な接続ですが、クライアントプロセスとサーバープロセス間の接続には
異常終了しました。
切断された接続の例:
-ユーザーは、ログオフしたりデータベースから切断したりせずに、マシンを再起動/電源オフします。
-ネットワークの問題により、クライアントとサーバー間の通信が妨げられています。

このような場合、サーバー上で実行されているシャドウプロセスとデータベース内のセッションが終了しない場合があります。

によって実装されます
* SQLNET.EXPIRE_TIME =をsqlnet.oraファイルに追加します

DCDが有効になっている場合、サーバー側プロセスは、次の期間が経過した後、小さな10バイトのパケットをクライアントプロセスに送信します。
SQLNET.EXPIRE_TIMEパラメーターで分単位で指定された時間間隔。

クライアント側の接続がまだ接続されて応答している場合、クライアントは応答パケットをデータベースに送り返します
サーバー、タイマーをリセットします。次の間隔が経過すると、別のパケットが送信されます(他のアクティビティがない場合)
接続)。

クライアントがDCDプローブパケットに応答しない場合
*サーバー側のプロセスは接続切れとしてマークされ、
* PMONは、データベースプロセス/リソースのクリーンアップを実行します
*クライアントOSプロセスは終了します

注:SQLNET.RECV_TIMEOUTは、サーバー側のsqlnet.oraファイルで設定できます。これにより、サーバープロセスのタイムアウトが設定されます
クライアントプロセスからのデータを待機します。

非アクティブなセッション:
これらは、v $ sessionのステータスがINACTIVEでデータベースに接続されたままのセッションです。
INACTIVEセッションの例:
-ユーザーはプログラム/セッションを開始し、それを長時間実行してアイドル状態のままにします。



3.SQLNET.EXPIRE_TIMEを構成します

#For the configuration of SQLNET.EXPIRE_TIME, you need to modify sqlnet.ora, and then add the SQLNET.EXPIRE_TIME item[root@xxxxx admin]$ more sqlnet.orasqlnet.expire_time = 1 #Only need to configure this item, the following items are only for generating trace log, can be omittedTRACE_LEVEL_SERVER = 16 TRACE_FILE_SERVER = SERVERTRACE_DIRECTORY_SERVER= /u01/app/oracle/network/trace TRACE_TIMESTAMP_ SERVER = ON TRACE_UNIQUE_SERVER = ONDIAG_ADR_ENABLED=OFF

4.DCD接続をシミュレートしてテストします

C:Users obinson.cheng>sqlplus scott/root@xxxxx --->Initiate a connection from the windows clientSQL*Plus: Release 11.2.0.1.0 Production on Tue Jun 25 09:57:59 2013Copyright (c) 1982, 2010, Oracle. All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options---Issued the sql to hold a lockSQL> update emp set sal=sal*1.1 where deptno=20 5 rows updated.--disabled the network adapter in VM settingSQL> select * from dualselect * from dual *ERROR at line 1:ORA-03113: end-of-file on communication channelProcess ID: 29522Session ID: 15 Serial number: 447--Server-side environment SQL> select * from v$version where rownum<2 BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production --Check the session status on the server side, the session status of the SCOTT user is INACTIVESQL> @comm_sess_users+----------------------------------------------------+| User Sessions (All) |+----------------------------------------------------+Instance SID Serial ID Status Oracle User O/S User O/S PID Session Program Terminal Machine--------- ------ --------- --------- ----------- ------------ ------- -------------------------- ---------- -------------ora11g 15 447 INACTIVE SCOTT Robinson.Che 29522 sqlplus.exe PC39 TRADESZPC39 125 5 INACTIVE SYS oracle 4734 root@xxxxx (TNS V1 pts/0 orasrv.com 139 9 ACTIVE SYS oracle 29447 root@xxxxx (TNS V1 pts/4 orasrv.com--Get the spid for user scott by SIDSQL> @my_spid_from_sidEnter value for input_sid: 15old 4: AND s.sid = &input_sidnew 4: AND s.sid = 15 SID SERIAL# SPID------ ---------- ------------------------ 15 447 29522--To find the locked objectSQL> @lock_objOBJECT_NAME||''||LOCKED_MODE||''||CTIME||''||C.SID||''||SERIAL#------------------------------------------------------------------EMP 3 14 15 447EMP 3 83 15 447--The trace file existsSQL> ho ls -hltr /u01/app/oracle/network/trace/s*29522*-rw-r----- 1 oracle oinstall 241K Jun 25 09:59 /u01/app/oracle/network/trace/server_29522.trc--->try to issue another sql. the sql is blockedSQL> set time on10:03:46 SQL> delete scott.emp where deptno=20 delete scott.emp where deptno=20 *ERROR at line 1:ORA-01013: user requested cancel of current operation--Check the server process for scott 10:04:37 SQL> ho ps -ef | grep 29522 | grep -v greporacle 29522 1 0 09:58 ? 00:00:00 oracleora11g (LOCAL=NO)--Could not reach to client from server.10:06:51 SQL> ho ping 192.168.7.133PING 192.168.7.133 (192.168.7.133) 56(84) bytes of data.From 192.168.7.40 icmp_seq=2 Destination Host UnreachableFrom 192.168.7.40 icmp_seq=3 Destination Host UnreachableFrom 192.168.7.40 icmp_seq=4 Destination Host UnreachableFrom 192.168.7.40 icmp_seq=6 Destination Host UnreachableFrom 192.168.7.40 icmp_seq=7 Destination Host UnreachableFrom 192.168.7.40 icmp_seq=8 Destination Host Unreachable--At this time, the total number of processes is 2710:15:08 SQL> select count(*) from v$process COUNT(*)---------- 27--From the start of the process at 09:58 to 10:17:59 the process is still not released10:17:59 SQL> ho ps -ef | grep 29522 | grep -v greporacle 29522 1 0 09:58 ? 00:00:00 oracleora11g (LOCAL=NO)-->At this time the server process was released10:18:08 SQL> ho ps -ef | grep 29522 | grep -v grep--After the process is released, the total number of processes at this time becomes 2610:19:45 SQL> select count(*) from v$process COUNT(*)---------- 26-->the lock was released10:19:54 SQL> @lock_objno rows selected--Author : Robinson--Blog : http://blog.csdn.net/robinson_0612--scott user's session has been removed from v$session10:20:03 SQL> @comm_sess_users+----------------------------------------------------+| User Sessions (All) |+----------------------------------------------------+Instance SID Serial ID Status Oracle User O/S User O/S PID Session Program Terminal Machine--------- ------ --------- --------- -------------- ------------ ------- -------------------------- -------- ----------ora11g 125 5 INACTIVE SYS oracle 4734 root@xxxxx (TNS V1 pts/0 orasrv.com 139 9 ACTIVE SYS oracle 29447 root@xxxxx (TNS V1 pts/4 orasrv.com

5.SQLNET.EXPIRE_TIMEが有効になっているかどうかを確認します

#Follow the tracking log filtering, you can see the prompt to open dead connection detection in 09:58:02:853[root@xxxxx trace]$ cat -n server_29522.trc |grep dead 78 [25-JUN-2013 09:58:02:853] niotns: Enabling dead connection detection (1 min)#In the query below, the timer is started at 09:58:03 and the connection is completely closed after 10:18:26 (including server process) [root@xxxxx trace]$ cat -n server_29522.trc |grep timer 447 [25-JUN-2013 09:58:03:050] nstimstart: starting timer at 25-JUN-2013 09:58:03 451 [25-JUN-2013 09:58:03:051] nsconbrok: timer created for connection 4092 [25-JUN-2013 10:18:26:173] nstimarmed: timer is armed, with value 3833#The following is the detailed information of starting timer [root@xxxxx trace]$ head -451 server_29522.trc | tail -5[25-JUN-2013 09:58:03:050] nstimstart: starting timer at 25-JUN-2013 09:58:03[25-JUN-2013 09:58:03:051] nstimset: entry[25-JUN-2013 09:58:03:051] nstimset: normal exit[25-JUN-2013 09:58:03:051] nstimstart: normal exit[25-JUN-2013 09:58:03:051] nsconbrok: timer created for connection #The following is the detailed information after the timer is cleared nstimclear: normal exit[root@xxxxx trace]$ head -4097 server_29522.trc | tail -7[25-JUN-2013 10:18:26:173] nstimarmed: entry[25-JUN-2013 10:18:26:173] nstimarmed: timer is armed, with value 3833[25-JUN-2013 10:18:26:173] nstimarmed: normal exit[25-JUN-2013 10:18:26:173] nstimclear: entry[25-JUN-2013 10:18:26:173] nstimclear: normal exit[25-JUN-2013 10:18:26:173] nttctl: entry[25-JUN-2013 10:18:26:173] nttctl: entry

6.まとめ
a。 DCD接続とは、通常、ユーザーが正常に切断せずにクライアントを再起動し、シャットダウンし、ネットワークの問題が発生してクライアントがサーバーと正常に通信できなくなることによって発生する接続を指します。
b。 DCD接続と比較して、INACTIVEセッションとは、ユーザーが接続を確立した後、操作が実行されていないか、操作が完了したが切断されていないことを意味します。これは、アイドル状態にあることと同じです。
c。 DCD接続であろうとアイドル状態のINACTIVEセッションであろうと、INACTIVE状態はv $ sessionビューに表示されます
d。 resource_limitとプロファイル構成を使用した後、ユーザーセッションがidle_timeを超える状況の場合、スナイプされた状態がv $ sessionビューに表示されます。
e。 sqlnet.ora構成ファイルでSQLNET.EXPIRE_TIMEパラメーターがゼロ以外の値に設定されている場合、EXPIRE_TIMEで指定された時間が経過するとゾンビ接続がクリアされます。
f。デモンストレーションでは、EXPIRE_TIMEのみが1分に設定されていますが、実際のリリース時間は約20分に近いです。理由は明確ではなく、さらなるテストが必要です。
g。 SQLNET.EXPIRE_TIMEをゼロ以外の値に設定した後、システムは余分なオーバーヘッドを生成し、ネットワークパフォーマンスを低下させる必要があります
h。 OSおよびDBリソースのタイムリーなリリースが必要な状況では、Oracleが推奨します resource_limitとprofileを使用して、ユーザー接続を制限します 同時に、SQLNET.EXPIRE_TIMEをゼロ以外の値に設定します
i、参照:[ID 206007.1] [ID 395505.1] [ID 601605.1] [ID 151972.1]

オラクル

その他の参考資料

Oracle RACについては、を参照してください。
crs_setpermを使用して、RACリソースの所有者と権限を変更します
crs_profileを使用してRACリソースプロファイルを管理します
RACデータベースの起動とシャットダウン
OracleRACサービスについて話しましょう
Oracle Database10gのサービス
データベースを単一インスタンスからOracleRACに移行します
OracleRACは指定されたインスタンスに接続します
Oracle RAC負荷分散テスト(サーバーとクライアントの組み合わせ)
Oracle RACサーバー側接続の負荷分散(負荷分散)
Oracle RACクライアント接続のロードバランス(ロードバランス)
ORACLE RACでのデフォルト以外のポート監視構成(listener.ora tnsnames.ora)
ORACLE RACモニター構成(listener.ora tnsnames.ora)
RACロードバランシングとフェイルオーバーを構成する
CRS-1006、CRS-0215の失敗の例
LinuxベースのOracle10g RACをインストールします(RHEL 5.5)
runcluvfyを使用して、OracleRACのインストール環境を確認します

Oracleネットワーク構成に関連する基本的および概念的な問題については、以下を参照してください。
デフォルト以外のポートの動的サービス登録を構成する
OracleへのIPアクセスを制限するようにsqlnet.oraを構成します
Oracleリスナーログの構成と管理
Oracleリスナーのパスワードを設定します(LISTENER)
データベースに接続するようにORACLEクライアントを構成します

ユーザー管理に基づくバックアップとバックアップリカバリの概念については、以下を参照してください。
Oracleコールドバックアップ
Oracleホットバックアップ
Oracleのバックアップとリカバリの概念
Oracleインスタンスのリカバリ
Oracleベースのユーザー管理リカバリ処理
SYSTEM表スペースの管理とバックアップおよびリカバリー
SYSAUX表スペースの管理とリカバリー
バックアップ制御ファイルのリカバリに基づくOracle(バックアップ制御ファイルのアンシング)

RMANのバックアップ、リカバリ、および管理については、を参照してください。
RMANの概要とそのアーキテクチャ
RMANの構成、監視、および管理
RMANバックアップの詳細
RMANの復元と回復
RMANカタログの作成と使用
カタログに基づいてRMANストレージスクリプトを作成する
カタログに基づくRMANのバックアップとリカバリ
RMANバックアップパスが混乱している
RMANを使用して、さまざまなマシンのバックアップとリカバリを実現します(WINプラットフォーム)
RMANを使用してファイルシステムデータベースをASMに移行します
LinuxでのRMANバックアップシェルスクリプト
RMANを使用して、データベースを別のマシンに移行します

ORACLEアーキテクチャについては、を参照してください。
Oracleの表スペースとデータファイル
Oracleパスワードファイル
Oracleパラメータファイル
OracleオンラインREDOログファイル(ONLINE LOG FILE)
Oracle制御ファイル(CONTROLFILE)
Oracleアーカイブログ
Oracleのロールバック(ROLLBACK)と元に戻す(UNDO)
Oracleデータベースインスタンスの起動およびシャットダウンプロセス
Oracle 10gSGAの自動管理
OracleインスタンスとOracleデータベース(Oracleアーキテクチャ)

先生の人工知能のチュートリアルを共有しましょう。ゼロベース!わかりやすい!面白くてユーモラス!黄色いジョークも持ってきてください!あなたも私たちの人工知能チームに参加してください! https://blog.csdn.net/jiangjunshow