Oracle Databaseにおいて、トランザクション中に通信ができなくなり、例外処理のロールバックもできないときコネクションも切れロックされてしまう問題。


Oracle Database
において、トランザクション中に通信ができなくなり、例外処理のロールバックもできないときコネクションも切れロックされてしまった際に、どのように、再度そのトランザクションのロールバックを行えばよいのでしょうか？

トランザクションにIDみたいのを持たせるようなことはできないのでしょうか？




無理やりできたので載せておきます。

以下のようにプロセスkillをトランザクションの前に毎回行えば、ロックは防げるようです。

`ALTER`を使っているので、扱いは難しいですが...

[code]

    SELECT SID, SERIAL#,  MACHINE , PROGRAM,  PREV_EXEC_START, LOGON_TIME FROM V$SESSION WHERE MACHINE ='ComputerName';
    
    ALTER SYSTEM KILL SESSION 'SID, SERIAL#' IMMEDIATE;
    
[/code]

### 別解 sqlnet.oraファイルを編集

sqlnet.oraの
[SQLNET.EXPIRE_TIME](https://docs.oracle.com/cd/E16338_01/network.112/b56287/sqlnet.htm#BIIEEGJH)
でセッションの時間を設定できるらしいので、それをデフォルトの `0` (無期限)から `10` (単位: 分)
とかに変更しておくと自動でセッションが閉じるようです。




無理やりできたので載せておきます。

以下のようにプロセスkillをトランザクションの前に毎回行えば、ロックは防げるようです。

`ALTER`を使っているので、扱いは難しいですが...

[code]

    SELECT SID, SERIAL#,  MACHINE , PROGRAM,  PREV_EXEC_START, LOGON_TIME FROM V$SESSION WHERE MACHINE ='ComputerName';
    
    ALTER SYSTEM KILL SESSION 'SID, SERIAL#' IMMEDIATE;
    
[/code]

### 別解 sqlnet.oraファイルを編集

sqlnet.oraの
[SQLNET.EXPIRE_TIME](https://docs.oracle.com/cd/E16338_01/network.112/b56287/sqlnet.htm#BIIEEGJH)
でセッションの時間を設定できるらしいので、それをデフォルトの `0` (無期限)から `10` (単位: 分)
とかに変更しておくと自動でセッションが閉じるようです。

