Browse by Tags

【茶包射手日記】老 Bug 新感受之 ODP.NET 版本問題
同事報案。某個使用 Managed ODP.NET 的測試網站吐出以下錯誤 Error: The type initializer for 'OracleInternal.Common.ProviderConfig' threw an exception. 同事一度懷疑跟 ODP.NET 版本有關,但依經驗,如為版本問題錯誤訊息會確指出所需元件全名、版號等資訊。為調查問題,我直接在 IIS主機 現場撰寫 Tets.aspx 偵錯 ,測試程式一用到 new Oracel.ManagedDataAccess...
Posted 10 February 2018 08:15 AMJeffrey | with no comments 1,138
Filed under: ,
C# 讀取 dbms_output 效能強化版
前文 介紹過使用 C# 讀取 dbms_output 寫入內容,範例留了一個小尾巴,跑迴圈連資料庫犯了效能大忌,應改成一次執行或查詢取回才上道。 dbms_output.get_lines() 允許一次取得多筆訊息,但傳回型別為 TYPE DBMSOUTPUT_LINESARRAY IS VARRAY(2147483647) OF VARCHAR2(32767); 讀取要費點手腳,Oracle 生手經過一番研究,試出四種不同做法,就當練功吧。 使用 ODP.NET OracleParameter...
Posted 12 January 2018 10:32 PMJeffrey | 1 comment(s) 2,454
Filed under: ,
TIPS - C# 讀取 Oracle dbms_output.put_line 輸出資訊
使用 dbms_output.put_line() 列印執行資訊是常用的 Oracle Stored Procedure 偵錯技巧,以下 Procedure 範例在DELETE 及 INSERT 後透過 dbms_output.put_line() 印出影響資料筆數,概念跟在程式碼裡塞入一堆 Debug.Print、MsgBox、alert() 差不多,是執行期間追查問題的重要線索: create or replace procedure JeffDBJobTest1 is begin delete...
Posted 12 January 2018 07:01 AMJeffrey | with no comments 2,050
Filed under: , ,
Oracle 自訂函式查詢加速密技–Scalar Subquery Caching
在 SELECT 指令對欄位執行自訂函式行運算通常很傷效能,但實務上無法完全避免。查詢一萬筆資料代表要呼叫自訂函式一萬次,若函式包含資料表查詢,如同在迴圈裡跑 SQL,是典型的效能殺手,經驗裡也是許多複雜查詢逾時的主因。 見識到同事露了一手,簡單加幾個字元一口氣將內含自訂函式的 Oracle SELECT 加速數十倍! 瞠目結舌之餘,立馬實驗證明效果驚人,特筆記並分享如下。 以下為實驗環境,JeffTest 資料表有 IDX, N 兩個 NUMBER 欄位,先塞入 256 筆資料,IDX 由 0...
Posted 30 October 2017 07:51 AMJeffrey | 1 comment(s) 8,219
Filed under:
【茶包射手日記】ORACLE JOIN GROUP BY 子查詢爆慢疑案
接獲同事報案,某段 Oracle 查詢偶發嚴重效能問題。查詢時資料表經由 JOIN 自身的 GROUP BY 子查詢挑出某日期前客戶最新的一筆資料: SELECT ccb.Key1, ccb.Key2, ccb.Key3, ccb.Key4, ccb.Key5, ccb.Col1, ccb.Col2, ccb.Col3, ccb.Col4, --...略... ccb.Col20 FROM MyTable ccb INNER JOIN ( SELECT Key0,Key1,Key2, Key3,...
Posted 20 July 2017 09:49 PMJeffrey | with no comments 4,107
Filed under: ,
KB-當 WHERE AND/OR 條件遇上 NULL
在 SQL 世界裡 NULL 性質特殊,行為獨特,過去就曾討論過: KB-詭異的NOT IN查詢,原來是NULL搞鬼 ORACLE, 你把空字串怎麼了 自以為至此對 NULL 認識已足,不料前兩天在 WHERE LIKE AND/OR 情境中遇上 NULL,一時意志動搖陷入迷惘,想必是認知還不夠深刻,再補篇 KB 吧! 先別急著看答案,大家猜猜以下 SQL 指令會得到什麼結果? select 'T1' , 'MATCH' from dual where null like...
Posted 19 July 2017 11:04 PMJeffrey | with no comments 3,742
Filed under: , ,
COALESCE 發生字元設定不符合錯誤
同事報案,Dapper 查詢 ORACLE 時使用 COALESCE() 遇到 ORA-12704: character set mismatch(字元設定不符) 錯誤。 我用以下程式成功重現問題:(jefftest2.t 欄位為 NVARCHAR2) static void Main( string [] args) { using (var cn = new OracleConnection(csStr)) { var list = cn.Query( "select 1 from...
Posted 18 July 2017 10:35 PMJeffrey | with no comments 2,476
Filed under: , ,
ODP.NET 無法讀取 Oracle 欄位計算結果
同事報案,使用 Dapper + ODP.NET 呼叫某 Procedure,以 Ref Cursor 取資料時出現型別轉換錯誤,一路深入追查,發現問題跟是否用了 Procedure、Ref Cursor、 Dapper 都沒有關係,錯誤發生在 ODP.NET 層。 有問題的查詢涉及幾個高精確度的欄位運動,經過一番簡化,我先找出用下列查詢可重現問題。 使用 PL/SQL Developer 查詢不會出錯,但使用 ODP.NET OracleDataReader dr["N"]...
Posted 27 April 2017 07:41 AMJeffrey | with no comments 3,530
Filed under:
MS OracleClient 改用 ODP.NET 之數字型別差異
System.Data.OracleClient 被微軟宣告為 過時不建議使用 ,是你知道我知道連獨眼龍都知道的事,硬要繼續用甚至會有 效能懲罰 。所以在維護舊專案時,看到還在用 System.Data.OracleClient 的程式,我都會順手換成 Managed ODP.NET 。(若為 .NET 3.5 平台則只能用 Unmanaged ODP.NET) 近日踩到小鐵釘一根。 如下圖,程式原本使用 System.Data.OracleClient,執行正常: 改 using Oracle...
Posted 21 April 2017 07:25 AMJeffrey | with no comments 3,819
Filed under: ,
使用 Dapper 接收 Oracle Ref Cursor
沒實際遇到,但接連兩次被問到使用 Dapper 如何從 Ref Cursor 讀取結果,看來上天已強烈暗示我沒 PO 文分享,趕緊補上以免逆天遭譴。 爬文找到的做法都是靠自訂 OracleDynamicParameter 處理 Ref Cursor 對應轉換,循著 Stackoverlow 討論 找到一個 Gist 分享的 現成版本 ,將 OracleDynamicParameter.cs 加入專案,便可使用 OracleDynamicParameters 物件 .Add("cursor_name"...
Posted 17 April 2017 10:05 PMJeffrey | with no comments 3,340
Filed under: ,
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 都裝,並 移除發行者原則檔 ,允許不同...
Posted 13 April 2017 11:17 PMJeffrey | 1 comment(s) 3,104
Filed under:
【茶包射手日記】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...
Posted 07 April 2017 06:38 PMJeffrey | with no comments 3,784
Filed under:
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...
Posted 28 March 2017 07:20 AMJeffrey | with no comments 2,900
Filed under:
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 欄位...
Posted 22 March 2017 10:05 PMJeffrey | 2 comment(s) 2,399
Filed under: ,
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...
Posted 06 January 2017 06:39 AMJeffrey | with no comments 4,154
Filed under: ,
更多文章 下一頁 »

搜尋

Go

<February 2018>
SunMonTueWedThuFriSat
28293031123
45678910
11121314151617
18192021222324
25262728123
45678910
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication