0

こんにちは私はデータベースの再起動後に分散トランザクションへの参加に問題があります。

私の環境:

  • SP1を搭載したWindows7x64
  • Oracle Database 11g Express Edition
  • ODP.NET 4.112.3.0

私のプログラム:

const string connectionString = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=LOCALHOST)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)));User Id=system;Password=sasa;";

static void Main(string[] args)
{
    using (TransactionScope scope = new TransactionScope())
    {
        while (true)
        {
           using (OracleConnection connection = new OracleConnection(connectionString))
           {
               try
               {
                   connection.Open();
                   Console.WriteLine("Connection opened");
               }
               catch (Exception ex)
               {
                   Console.WriteLine(ex.Message);
               }
           }
           Thread.Sleep(1000);
        }
    }
}

アプリケーションの開始後、すべてがうまく機能します。データベースの停止を開始すると、NREが発生し、データベースのシャットダウンが進行中であることを示す例外が発生します。再度開始した後、エラーが発生します-分散トランザクションに参加できません。開いた接続は印刷されなくなります。

出力:

Connection opened
Connection opened
Connection opened
Connection opened
Connection opened
-- here I'm stopping database
ORA-12518: TNS:listener could not hand off client connection
ORA-12528: TNS:listener: all appropriate instances are blocking new connections
-- here database is stopped I suppose
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
-- here I'm starting database again
ORA-12528: TNS:listener: all appropriate instances are blocking new connections
ORA-1033: ORACLE initialization or shutdown in progress
Unable to enlist in a distributed transaction
Unable to enlist in a distributed transaction
Unable to enlist in a distributed transaction
Unable to enlist in a distributed transaction
Unable to enlist in a distributed transaction
...
  • その振る舞いの理由は何ですか?
  • 何が起こっているのかを診断する方法は?
4

1 に答える 1

1

無効なテストがあります。単一のトランザクションのコンテキストでループしています。データベースがダウンすると、進行中の分散トランザクションはすべて中止されます。あなたのループは、すでに死んでいるトランザクションの下で新しい接続を確立しようとしています。

何をテストしようとしているのか正確にはわかりませんが、TransactionScopeをwhileループ内に移動すると修正されるはずです。

于 2013-02-22T00:08:55.960 に答える