Browse by Tags

【茶包射手日記】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 3,317
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,282
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 1,854
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 2,973
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,306
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 2,782
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) 2,305
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,286
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,453
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) 1,905
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 3,570
Filed under: ,
核武級ODP.NET版本暴力破解工具
最近又遇到 ODP.NET 版本問題。(警告:本文涉及邪門歪道雞鳴狗盜之技,正義魔人與衛道人士請自行迴避) 古老 ASP.NET 網站參照 ODP.NET 9207 版,移到 x64 平台必須改用新版 ODP.NET,而 ODP.NET 存在版號從 9.2 10.1 降回 2.102 的鬼問題,新版號比舊版號數字小在 某些情況 下會讓「bindingRedirect 大絕」破功。很無奈,必須調整參照版號才能解決,重新取原始檔編譯太麻煩,於是我找到 ildasm 反組譯成 MSIL 程式碼,修改參數版號再...
Posted 30 December 2016 06:20 AMJeffrey | with no comments 6,887
Filed under: ,
Oracle故障後續處理經驗一則
不經一事不長一智,以下經驗價值1.5小時。 接獲回報,部分 ASP.NET 網頁出現資料庫錯誤,錯誤指向某 Oracle 資料庫,使用 Telnet oracel_server_ip 1521 測試無反應,通報系統人員,查出為資料庫主機網路異常,並在隨後修復。 真正的茶包在 Oracle 資料庫主機恢復後才現身,部分使用者通報他們還是無法使用網頁,但我測試是成功的,而有問題的使用者「多試幾次」也會成功。網站為 Web Farm 架構,參雜使用者連上主機可能不同的因素,歷經一番追查彙整,才理頭緒:...
Posted 05 October 2016 12:18 AMJeffrey | with no comments 3,481
Filed under: ,
【茶包射手日記】System.Data.OracleClient更新中文變問號
同事報案,某支在Windows 2003主機運作良好的轉檔程式,移至開發機執行更新Oracle資料庫時,中文變成問號。 比較原本執行正常的環境為Windows 2003 x86英文版 + Oracle Client 9207(真實世界永遠不乏這種與時代嚴重脫節卻維繫日常營運的中流砥柱啊),開發機則為Windows 7 x64英文版 + Oracle Client 12.1,二者存在不少差異。 寫了一段測試程式嘗試驗證問題,在我的機器(Windows 8.1 x64中文版 + Oracle Client...
Posted 15 September 2016 01:28 PMJeffrey | with no comments 2,473
Filed under: ,
惱人的Managed ODP.NET ConfigSection問題
自從學會 Managed ODP.NET ,它馬上成為我的奧林匹克指定資料庫元件。不用額外安裝Oracle Client,管它x86還是x64,只要在主機設好TNSNAMES.ORA(我慣用的做法是用%TNS_ADMIN%環境參數提供路徑,一台主機只要設一次,部署到不同主機時不需改config),用NuGet下載安裝好一切搞定,十分方便。比起傳統ODP.NET常常糾結於x84與x64與Oracle Client版號高低,Managed ODP.NET高雅先進,用過之後就回不去了。 不過,我常遇到一個小問題...
Posted 10 September 2016 05:49 AMJeffrey | with no comments 3,905
Filed under: ,
更多文章 下一頁 »

搜尋

Go

<September 2017>
SunMonTueWedThuFriSat
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

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

文章典藏
其他功能

這個部落格


Syndication