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