0

TransactionScope内でADO.NETを使用して、Oracleデータベースに10万以上のアイテムをバッチ挿入しようとしています。このような:

using (TransactionScope transaction = new TransactionScope())
{
    while(/* Pagination logic - send insertion command on every 250 items */)
    {
        using (OracleCommand command = new OracleCommand(query, connection))
        {
            command.ArrayBindCount = 250;

            //Add parameters
            command.Parameters.Add(":BLAH", OracleDbType.Long);
            command.Parameters[0].Value = LUC.ToArray();

            command.ExecuteNonQuery(); //Error occurs here after N-times inside while
        }
    }
    transaction.Complete();
}

これより低いアイテム (10k-30k) の場合、トランザクションは正常に完了します。ただし、より高い項目 (100k など)の場合は、 ORA-00604: エラーが再帰 SQL レベル %s で発生しました

TransactionScope を完全に削除すると、アイテムのサイズにエラーは発生せず、機能します。

TransactionScope を膨大な数のアイテムで動作させるにはどうすればよいですか?

4

1 に答える 1

0

結局のところ、それはトランザクションのタイムアウトの問題でした。

タイムアウトを増やした後、リストを正常に挿入しました。

using (TransactionScope transaction = 
         new TransactionScope(TransactionScopeOption.Required, 
                 new TimeSpan(0, 30, 0))) //30 minute timeout limit
于 2015-11-04T11:15:44.223 に答える