0

トランザクションがコミットもロールバックもされていない場合はどうなりますか。SQL Server や Oracle に関する回答を探しています。以下のコードを参照してください。

Public Sub TransactionTest()
        Try
            Dim intCount As Integer
            Dim sql As SqlTransaction
            Dim objCon As New SqlConnection("Data Source=IANSCOMPUTER;Initial Catalog=Test;Integrated Security=True;MultipleActiveResultSets=true")
            objCon.Open()
            Dim trans As SqlTransaction
            trans = objCon.BeginTransaction
            Dim paramValues(0) As SqlParameter
            paramValues(0) = New SqlParameter("@ID", 1)
            Using (objCon)
                intCount = SqlHelper.ExecuteNonQuery(trans, CommandType.Text, "UPDATE person SET URN=1 WHERE ID2=@ID", paramValues)
                paramValues(0) = New SqlParameter("@ID", 2)
                intCount = SqlHelper.ExecuteNonQuery(trans, CommandType.Text, "UPDATE person SET URN=2 WHERE ID2=@ID", paramValues)
                paramValues(0) = New SqlParameter("@ID", 3)
                intCount = SqlHelper.ExecuteNonQuery(trans, CommandType.Text, "UPDATE person SET URN=3 WHERE ID2=@ID", paramValues)
            End Using
        Catch ex As Exception
            'I do not swallow transactions
        End Try
    End Sub

コミットもロールバックもされていないことに注意してください。上記の場合、ロールバックするように見えます。

自宅の SQL Server 2005 Express サーバーで、コンソールで直接クエリを実行すると、上記のプログラムが終了するまで SQL Studio Manager がハングすることに気付きました。私の作業環境では、これは当てはまりません。つまり、クエリを同時に実行できます。これは分離レベルのためですか?したがって、私は2つの質問があります:

  1. トランザクションがコミットもロールバックもされていない場合はどうなりますか。私は次のような記事を読みました:データベース (SQL Server など) でトランザクションをコミットしない場合はどうなりますか。SQL Server と Oracle でトランザクションがロールバックされると想定できますか?
  2. ある環境ではトランザクションがアクティブなときに SQL サーバーがハングし、別の環境ではそうでないのはなぜですか?

特に質問2の答えを探しています。

4

1 に答える 1

1

トランザクションをコミットしない場合、コードに問題が発生したと仮定して、接続を閉じるとデータベースはトランザクションをロールバックします。これは、深刻なデータベースの動作です。

2 番目の質問については、ロックに関係していると思いますが、環境とその使用者について詳しく知らなければ、何とも言えません。

于 2013-01-25T23:26:34.297 に答える