Browse by Tags

惱人的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 | 3 comment(s) 4,975
Filed under: ,
Hacking樂無窮:修正Dapper+ODP.NET無法寫入Unicode問題
歷經一段時間摸索歷練,確立「新増修改用EF/ORM,查詢一律用Dapper」的最高指導原則,Dapper的簡潔、效能與彈性無可挑剔,一切看似完美,直到我膝蓋中了一箭… 無意間發現,使用Dapper+ODP.NET無法寫入Unicode字元 跟Oracle Unicode問題奮戰 超過10年 ,以為妖孽已被降伏,用OracleDbType.NVarChar2應該就萬無一失,甚至要在CommandText中用N'…'也 不是問題 ,萬萬沒想到Oracle Unicode問題今天又跑出來咬我屁股...
Posted 21 August 2016 09:56 PMJeffrey | with no comments 6,401
Filed under: , ,
Entity Framework筆記:使用Oracle Synonym
遇到EF使用Oracle Synonym問題,查了資料做了實驗,整理筆記如後。 先說我們在Oracle使用Synonym(別名,有人翻成「同義詞」,我覺得別名順口)的情境:例如人事系統使用"HR"帳號登入Oracle並在自己的HR Schema建立資料表並擁有HR Schema所有資料表的讀寫權限。之後ERP系統要讀存HR Schema下的員工基本資料,當然不能直接用HR帳號密碼連Oracle,而會另開HRQRY之類的帳號,再授與其HR.Employee資料表的讀取權限。這種場景在SQL...
Posted 31 July 2016 09:09 AMJeffrey | with no comments 4,014
Filed under: ,
使用Oracle資料表保存GUID屬性
大家都知道我隸屬 GUID PK幫 .NET分舵,最近寫了個小模組,Model理所當然地使用GUID當作Primary Key,由於想同時支援SQL Server跟Oracle,第一次挑戰SQL跟Oracle共用Model。先前的GUID PK經驗都在SQL,SQL有 Uniqueidentifier型別 ,跟C#端的Guid型別能整到天衣無縫;同樣的情場搬到Oracle,就需要動點腦筋解決。 歷經一番摸索,心得如下: 該用什麼型別? Oracle沒有Uniqueidentifier可用,我心中的兩個選項是CHAR...
Posted 20 July 2016 06:17 AMJeffrey | with no comments 5,299
Filed under: ,
【茶包射手日記】程式當掉時Oracle Transaction未自動Rollback
同事報案,稍早發生Oracle錯誤導致有一批排程作業失敗,很快找到錯誤,修正後重新執行排程卻出現更新資料庫發生Timeout,而Oracle錯誤後才新増的項目則可順利執行無誤。 由以上線索,推測最可能的原因是「出問題的資料被鎖定了」。檢查程式碼,啟動Transaction但未使用try…catch主動於出錯時Rollback。依據過去經驗,Oracle的Transaction在Client Process意外結束後不會自動Rollback,過程產生的資料鎖定也一直留在特定資料上,如此即能解釋為何出錯的一批資料重新執行會Timeout...
Posted 06 July 2016 06:36 AMJeffrey | with no comments 3,999
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 AMJeffrey | with no comments 4,861
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 PMJeffrey | 2 comment(s) 3,141
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 AMJeffrey | 5 comment(s) 16,956
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 PMJeffrey | 2 comment(s) 11,590
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 AMJeffrey | with no comments 4,038
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 AMJeffrey | with no comments 11,037
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 PMJeffrey | 1 comment(s) 9,749
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 PMJeffrey | 9 comment(s) 32,343
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 PMJeffrey | with no comments 9,356
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 PMJeffrey | 2 comment(s) 5,294
Filed under:
更多文章 « 上一頁 - 下一頁 »

搜尋

Go

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

Tags 分類檢視
關於作者

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

文章典藏
其他功能

這個部落格


Syndication