Browse by Tags

【茶包射手日記】程式當掉時Oracle Transaction未自動Rollback
同事報案,稍早發生Oracle錯誤導致有一批排程作業失敗,很快找到錯誤,修正後重新執行排程卻出現更新資料庫發生Timeout,而Oracle錯誤後才新増的項目則可順利執行無誤。 由以上線索,推測最可能的原因是「出問題的資料被鎖定了」。檢查程式碼,啟動Transaction但未使用try…catch主動於出錯時Rollback。依據過去經驗,Oracle的Transaction在Client Process意外結束後不會自動Rollback,過程產生的資料鎖定也一直留在特定資料上,如此即能解釋為何出錯的一批資料重新執行會Timeout...
Posted 06 July 2016 06:36 AM by Jeffrey | with no comments 3,407
Filed under:
【茶包射手日記】詭異的Oracle Client 32/64版本錯誤
同事報案,某台測試機器原本只裝Oracle Client 32位元版本,因該主機上的SQL Server x64需建Linked Server連Oracle,故加裝了Oracle Client 64位元版本[ 參考 ]。不料,同主機用System.Data.OracleClient讀資料的網頁,在安裝Oracle Client 64位元版後,忽然冒出Oracle 32/64版本不符的經典錯誤:An attempt was made to load a program with an incorrect...
Posted 21 May 2016 07:24 AM by Jeffrey | with no comments 3,964
Filed under: ,
【茶包射手日記】Oracle Client版本與分散式交易
接獲報案,同事欲將測試網站移至新主機,遇到Oracle無法進行分散式交易的情況,得到以下錯誤訊息:     Oracle.DataAccess.Client.OracleException     Unable to enlist in a distributed transaction /無法列於分散式交易中 該網站尚有其他SQL分散式交易正常,單獨連線Oracle不參與分散式交易也正常,主機Oracle Client版本為ODAC121024...
Posted 05 May 2016 09:26 PM by Jeffrey | 2 comment(s) 2,755
Filed under:
將複合字串拆成多欄位-以ORACLE及SQL為例
先說說我的需求。某資料表使用複合欄位當Primary Key,例如:由OrgId、DeptId、UserId三欄組成唯一鍵值。當要查詢特定資料,理論上應寫成WHERE OrgId='…' AND DeptId = '…' AND UserId = '…'。為求簡便,在.NET程式端以及某些資料表我發明了一種複合代碼字串"OrgId-DeptId-UserId",只用一個參數或一個欄位就搞定關聯,省時又省力。不過,每個做法總有黑暗面...
Posted 09 March 2016 06:32 AM by Jeffrey | 5 comment(s) 12,860
Filed under: ,
【茶包射手日記】ORA-12514鬼打牆記
接獲報案,本機測試無誤的程式部署到測試台,Managed ODP.NET開啟連線時冒出ORA-12514錯誤,依照上回處理 經驗 ,直覺又是IIS/machine.config相關的問題。 ORA-12514: TNS: 監聽器目前不知道連線描述區中要求的服務. ORA-12514: TNS:listener does not currently know of service requested in connect descriptor 同事有提到錯誤代碼與文章所寫不同,12514 vs 12154...
Posted 10 June 2015 11:10 PM by Jeffrey | 2 comment(s) 9,273
Filed under:
【茶包射手日記】LINQ Contains查詢引發ORA-01425錯誤
網友報案:使用 ODAC112030 與 Visual Studio 建立 Entity Framework Model ,在 C# 使用 LINQ 語法.Where(o => o.ColName.Contains(someVar)),被轉換成以下SQL語法: WHERE ("Extend1"."FOO" LIKE :p__linq__0 ESCAPE '\') 送到Oracle 9i執行(是的,侏儸紀時代的Oracle 9),冒出ORA...
Posted 09 May 2015 07:55 AM by Jeffrey | with no comments 3,505
Filed under: ,
【茶包射手日記】Managed ODP.NET在ASP.NET發生ORA-12154錯誤
故事要從前幾天學會 讓ODP.NET查詢加速10倍的密技 說起,原始問題在於 Dapper 查詢效能不佳,正想把新發現套用在Dapper上… 登楞!Dapper透過IDbConnection擴充方法提供功能,根本沒機會對OracleCommand或OracleDataReader動手腳啊!(抱頭) 打開Dapper原始碼,想研究有沒有地方傳FetchSize參數(還在裡面看到華麗的Emit特技,嘆為觀止),由於FetchSize非通用ADO.NET屬性,無功而返。 另一條路從環境設定著手,倒有點收獲...
Posted 01 May 2015 08:25 AM by Jeffrey | with no comments 9,048
Filed under: ,
讓ODP.NET查詢快10倍的小密技-FetchSize
同事報案,某專案使用ODP.NET+ Dapper 查詢一萬筆資料要耗時三分鐘,而同樣查詢丟到PL/SQL Developer跑只要15秒。為了洗刷.NET效能不佳的罪名,立刻出發調查。 我實做一個簡單測試重現問題,在我的i7機器執行,查詢取回10,691筆耗時34.794秒;用PL/SQL Developer查詢測得11.453秒,足足慢了3倍。 using Oracle.DataAccess.Client; using System; using System.Collections.Generic;...
Posted 28 April 2015 09:05 PM by Jeffrey | 1 comment(s) 8,975
Filed under:
Managed ODP.NET簡介
被 Oracle Client版本問題 困擾過很多次,之前由網友回饋得知Managed ODP.NET,一直沒深入研究過,直到今天完成評估,新武器一枚入手。 過去我們常用的Oracle.DataAccess(ODP.NET),骨子裡其實是走Unmanaged,得靠oci.dll那堆程式庫才能連上資料庫,因此安裝時必須一併安裝Oracle Client,而Unmanaged Oracle Client有32位元跟64位元之分,許多開發者還因此學會IIS Application Pool啟用32位元模式的技巧呢...
Posted 31 March 2015 09:46 PM by Jeffrey | 9 comment(s) 24,723
Filed under:
【茶包射手日記】ODP.NET如何找對Oracle Client檔案?
同事報案,某網站部署至新主機出現錯誤: [OracleException (0x80004005): 提供者與 Oracle 從屬端版本不相容]    Oracle.DataAccess.Client.OracleInit.Initialize() +517    Oracle.DataAccess.Client.OracleParameter..cctor() +29 [TypeInitializationException: The type initializer...
Posted 17 March 2015 09:20 PM by Jeffrey | with no comments 7,905
Filed under: ,
【茶包射手日記】OracleDataReader數字型別對應陷阱(ODP.NET)
接獲報案,由Oracle資料庫讀取NUMBER(14,6)欄位,原值為1.997748,JSON轉換送至Client端變成1.9977479999999999! 判斷這是典型浮點數問題(順便複習: 算錢用浮點,遲早被人扁 ),但檢視程式,OracleCommand執行查詢,由NUMBER(14,6)欄位直接SELECT取值,未經過任何計算,資料由OracleDataReader讀取交給JsonConvert轉換,程式寫法沒有可議之處,決定使用浮點型別(double)的犯人--顯然是OracleDataReader...
Posted 25 June 2014 10:17 PM by Jeffrey | 2 comment(s) 4,764
Filed under:
Let It Go吧! System.Data.OracleClient
記得四年前微軟就 正式宣告 建議大家不要再用System.Data.OracleClient,改用ODP.NET。當時Oracle對LINQ支援還不太好,想用LINQ或EF得尋求3rd Party解決方案,從 ODAC 11.2 起,Entity Framework已是ODP.NET標準配備,System.Data.OracleClient的存在就更只剩下向前相容。 今天幫忙射掉茶包一枚: 使用SQLPlus執行SELECT * FROM BIGTABLE查詢約3萬6千筆資料耗時50秒,執行以下...
Posted 20 June 2014 09:25 PM by Jeffrey | with no comments 4,441
Filed under:
SQLPlus執行UTF-8編碼指令檔
作業環境有個需求: 有一些PL/SQL DDL指令需先匯成sql檔,再透過程式呼叫SQLPlus.exe執行。 SQLPlus.exe可讀入SQL Script檔案直接執行,例如: sqlplus –s user/pwd @script.sql,而透過程式啟動外部EXE也不是問題,一切看似小菜一碟... BUT! 人生最厲(ㄐㄧ)害(ㄨㄞ)的就是這個BUT! 問題出在SQLPlus在命令提示視窗(Command Prompt)執行,只支援ANSI編碼,而script.sql可能包含Unicode文字...
Posted 24 May 2014 09:40 AM by Jeffrey | with no comments 14,348
Filed under: ,
SQL Server x64建立Oracle Linked Server筆記
過去已有很多在SQL 2005/SQL 2008建立Oracle Linked Server的經驗,本屬稀鬆平常小事,今天第一次在SQL 2008 R2 x64執行,發現有些眉角,特筆記之。 需安裝64位元版Oracle Provider for OLE DB 明明機器每天在跑.NET程式連Oracle,卻發現Linked Server的Provider中沒有Oracle Provider for OLE DB可選! 這才想到,原本只裝了32位元版ODAC 11.2,.NET程式也都切成x86執行...
Posted 26 October 2012 11:23 PM by Jeffrey | 2 comment(s) 20,973
Filed under: ,
【茶包射手日記】安裝ODAC 11.2 Release 5後Visual Studio無法使用Oracle資料來源
使用Visual Studio 2012已經好一陣子,手上的專案也逐一改用VS2012維護開發。今天處理的專案剛好涉及Oracle,想當然爾,要用 Entity Framework 才是王道! 此時發現原先安裝的ODAC 11.2 Release 4,只支援到VS2010,在VS2012新增ADO.NET Entity Data Model時,Data source沒有"Oracle Database (Oracle ODP.NET)"可選,所幸Oracle已於9/11推出 ODAC...
More Posts « Previous page - Next page »

Search

Go

<June 2017>
SunMonTueWedThuFriSat
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

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

文章典藏
其他功能

This Blog


Syndication