in

Darkthread

黑暗執行緒
All Tags » ORACLE (RSS)

Browse by Tags

  • ODP.NET 無法讀取 Oracle 欄位計算結果

    同事報案,使用 Dapper + ODP.NET 呼叫某 Procedure,以 Ref Cursor 取資料時出現型別轉換錯誤,一路深入追查,發現問題跟是否用了 Procedure、Ref Cursor、 Dapper 都沒有關係,錯誤發生在 ODP.NET 層。 有問題的查詢涉及幾個高精確度的欄位運動,經過一番簡化,我先找出用下列查詢可重現問題。 使用 PL/SQL Developer 查詢不會出錯,但使用 ODP.NET OracleDataReader dr["N"]、dr.GetDecimal(0)、dr.GetValue() 都會出現「指定的轉換無效」( Invalid...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 04-26-2017
  • MS OracleClient 改用 ODP.NET 之數字型別差異

    System.Data.OracleClient 被微軟宣告為 過時不建議使用 ,是你知道我知道連獨眼龍都知道的事,硬要繼續用甚至會有 效能懲罰 。所以在維護舊專案時,看到還在用 System.Data.OracleClient 的程式,我都會順手換成 Managed ODP.NET 。(若為 .NET 3.5 平台則只能用 Unmanaged ODP.NET) 近日踩到小鐵釘一根。 如下圖,程式原本使用 System.Data.OracleClient,執行正常: 改 using Oracle.ManagedDataAccess.Client 換用 Managed ODP.NET,出現型別轉換錯誤...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 04-20-2017
  • 使用 Dapper 接收 Oracle Ref Cursor

    沒實際遇到,但接連兩次被問到使用 Dapper 如何從 Ref Cursor 讀取結果,看來上天已強烈暗示我沒 PO 文分享,趕緊補上以免逆天遭譴。 爬文找到的做法都是靠自訂 OracleDynamicParameter 處理 Ref Cursor 對應轉換,循著 Stackoverlow 討論 找到一個 Gist 分享的 現成版本 ,將 OracleDynamicParameter.cs 加入專案,便可使用 OracleDynamicParameters 物件 .Add("cursor_name", dbType: OracleDbType.RefCursor, direction...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 04-17-2017
  • ODP.NET 12.1/11.2 並存環境發生找不到 OraOps12.dll 錯誤

    是的,Oracle 問題又來了!(沒錯,我桌子旁邊的羚羊又更多惹…) Windows 2012R2 跑多個網站,從 ASP.NET 2.0、3.5、4.0 到 4.5.2 都有,還涉及多台 SQL、Oracle,Oracle 版本有舊有新,部分程式還用到了分散式交易。考慮 ODP.NET 12.1 無法與 Oracle 10.2 進行分散式交易 ,而新版共用元件多已改用 ODP.NET 12.1,只好 11.2、12.1 兩種版本 Oracle Client 都裝,並 移除發行者原則檔 ,允許不同 ASP.NET 專案使用不同版本。 此種做法經驗證可行,但今天發現有台機器使用 ODP.NET 12...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 04-13-2017
  • 【茶包射手日記】Oracle DBLink 遇分散式交易出錯

    Oracle 問題又來惹… Orz 某 Package 原本執行正常,當被包入 TransactionScope 範圍啟動分散式交易會出現 ORA-24777: use of non-migratable database link not allowed 錯誤,爬文找到 Rico 的 文章 ,提到 Procedure 使用 Non-Shared Database Link 會導致類似錯誤。 我在測試環境寫了一個使用 Non-Shared DBLink 的 Procedure: create or replace procedure SP_AccessDBLink( p_Count out number...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 04-07-2017
  • ODP.NET 無法顯示 raise_application_error 自訂訊息

    接獲報案,某 Oracle Package 使用 raise_application_error 抛回自訂錯誤代碼與錯誤訊息(其中包含輸入參數以利偵錯),使用 ODP.NET 呼叫時理應可在 Exception.Message 看到自訂錯誤訊息,但某支程式出錯時卻只傳回錯誤代碼並抱怨找不到該代碼對應訊息:ORA-20001: Message 20001 not found;  product=RDBMS; facility=ORA 經過調查與對照測試,發現與程式被包在 TransactionScope 有關。用以下程式重現與驗證問題: using Oracle.DataAccess.Client;...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 03-27-2017
  • OracleParameter 型別不符導致 ORA-03111 通訊中斷錯誤

    記錄在 Oracle 遇到的古怪錯誤。 Oracle Server 版本 10.2.0.4 64bit,Client 端用 Managed ODP.NET 12.1.24160719(取自 NuGet),某段程式碼誤傳 Varchar2 OracleParameter 與 DATE 欄位進行比對,預期應出現型別不符錯誤,但得到錯誤訊息為 ORA-03111 在通訊通道上收到中斷訊號( Break received on communication channel ): 該資料表有其他 DATE 欄位,將 WHERE 條件換成其他 DATE 欄位,也會觸發 ORA-03111。 另一個資料表也有類似...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 03-22-2017
  • ODP.NET 發行者原則檔經驗一則

    之前處理過一個 鳥問題 ,使用 ODP.NET 12.1 連線 Oracle Server 10.2.0.4 時無法參與分散式交易,傳回「Unable to enlist in a distributed transaction /無法列於分散式交易中」錯誤。依網路討論 Server 升級到 10.2.0.5 以上可解決,當時決定將資料庫移至另一台 Oracle Server 11.2 成功脫逃,安全下莊。 半年後鳥問題捲土重來,一樣是 ODP.NET 12.1 連 Oracle 10.2.0.4 無法分散式交易,但這回資料庫沒得搬也很難升級,只能乖乖面對。 確認其他機器曾有 ODP.NET 11...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 01-05-2017
  • 核武級ODP.NET版本暴力破解工具

    最近又遇到 ODP.NET 版本問題。(警告:本文涉及邪門歪道雞鳴狗盜之技,正義魔人與衛道人士請自行迴避) 古老 ASP.NET 網站參照 ODP.NET 9207 版,移到 x64 平台必須改用新版 ODP.NET,而 ODP.NET 存在版號從 9.2 10.1 降回 2.102 的鬼問題,新版號比舊版號數字小在 某些情況 下會讓「bindingRedirect 大絕」破功。很無奈,必須調整參照版號才能解決,重新取原始檔編譯太麻煩,於是我找到 ildasm 反組譯成 MSIL 程式碼,修改參數版號再 ilasm 編譯回 DLL 的 奧步 妙招 ,後來更進一步寫了自動化 懶人工具 。 多年後再遇老茶包...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 12-29-2016
  • Oracle故障後續處理經驗一則

    不經一事不長一智,以下經驗價值1.5小時。 接獲回報,部分 ASP.NET 網頁出現資料庫錯誤,錯誤指向某 Oracle 資料庫,使用 Telnet oracel_server_ip 1521 測試無反應,通報系統人員,查出為資料庫主機網路異常,並在隨後修復。 真正的茶包在 Oracle 資料庫主機恢復後才現身,部分使用者通報他們還是無法使用網頁,但我測試是成功的,而有問題的使用者「多試幾次」也會成功。網站為 Web Farm 架構,參雜使用者連上主機可能不同的因素,歷經一番追查彙整,才理頭緒: 網頁連線 Oracle 資料的動作時好時壞,失敗時出現連線錯誤或 Timeout 問題集中在 Web...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 10-04-2016
第1頁,共11頁 (101個項目) 1 2 3 4 5 下一頁 > ... 最後一頁 »
Powered by Community Server (Non-Commercial Edition), by Telligent Systems