簡體   English   中英

OracleBulkCopy:Oracle 12c 和 19c 之間的不同行為

[英]OracleBulkCopy: different behavior between Oracle 12c and 19c

從官方 Oracle 論壇交叉發布:
我正在將數據從 SQLite 數據庫傳輸到具有完全托管的 ODP.NET 4.122.19.1 的 Oracle 數據庫。 到目前為止, 12c一直運行良好,但在寫入 Oracle 19c時出現錯誤“ ORA-39822 :當前事務中不允許新的直接路徑操作。”
程序流程基本上是這樣的(為簡潔起見省略了細節):

using (var transaction = oracleConnection.BeginTransaction())
{
    foreach (var dataTable in dataTables)  // dataTables is a collection of - well, DataTables
    {
         using (var bulkCopy = new OracleBulkCopy(oracleConnection))
         {
             bulkCopy.WriteToServer(dataTable);
         }
    }
    transaction.Commit();
}

當嘗試編寫第二個 DataTable 時,我得到了上述錯誤,這很容易解釋:我想我應該為每個 DataTable 啟動一個新事務。 因為我希望整個傳輸是一個全有或全無的操作,所以我猶豫要相應地更改代碼。 那么 - Oracle 19c 中是否有任何設置可以重新啟用我在 Oracle 12c 中看到的行為?

來自 Oracle 的 Alex Keh 確認每個WriteToServer()調用都必須在其自己的Transaction內,因此程序流程必須是:

    foreach (var dataTable in dataTables)
    {
         using (var bulkCopy = new OracleBulkCopy(connection))
         {
             using (var transaction = connection.BeginTransaction())
             {
                   bulkCopy.WriteToServer(dataTable);
                   transaction.Commit();
             }
         }
    }

在這里討論

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM