Browse by Tags

【茶包射手日記】SQLAgent 無法執行批次檔
燃燒一小時寶貴青春才查出問題 Orz,PO 文留念。 同事報案,某個用 SQL Agent 定期跑的批次檔 (.bat) 執行無效,原因不明。其寫法類似如下範例,看起來沒什麼問題: 實測開 DOS 視窗直接跑 ImportBOMFromSysA.bat 正常,於是我將偵察方向導向 SQL Agent 執行時工作目錄是 Windows\System32 所致,但檢查該批次檔有依 TIPS-指定主控台應用程式的工作目錄 一文所提使用 CD 改路徑技巧,加上其 Log 檔未輸出至 System32,初步排除可能...
Posted 28 May 2018 10:07 PMJeffrey | 1 comment(s) 3,912
Filed under:
SQL Server 使用者定義型別
在同事報案筆錄看到新鮮玩意兒,資料表的某個欄位型別不是 VARCHAR 不是 DATETIME 不是 INT,而是某個沒看過的名稱(如下圖示意),研究了一下,是所謂的 使用者定義型別 (User Defined Type, UDT),過去只在教材看過,首次觀察到活體。 使用 UDT 有什麼好處? UDT 可指定型別、資料長度及精確度、是否允許 NULL,還能定義預設值跟規則,定義一次可重複用於多個資料表、Stored Procedure,實現重用性並維持一致性,良好的 UDT 命名能望文生義,具自我說明...
Posted 14 May 2018 11:24 PMJeffrey | with no comments 2,293
Filed under:
SQL 最大伺服器記憶體設定值研究
SQL Server 預設會用光主機所有記憶體(預設上限為 2PB = 2048TB),除非整個資料庫容量小於總記憶體,否則把記憶體當成 Cache 能提升效能、減少磁碟 I/O 耗損,絕對利多於弊。如果同主機有多個資料庫執行個體,或是要與其他應用程式、服務分享記憶體,就必須透過 Max_Server_Memory 設定伺服器可用記憶體上限,保留一部分供其他程式使用。 最近被問到一個問題,針對專屬資料庫用途的 SQL Server 主機,剩餘記憶體的監控警戒值該怎麼抓?若依通用慣例抓 90% ,主機應該...
Posted 12 March 2018 10:18 PMJeffrey | 1 comment(s) 7,065
Filed under:
筆記-T-SQL 分頁查詢並傳回總筆數
資料庫查詢結果要做分頁,我較常用的做法是拉到 C# 端將物件陣列或 List<T> 存入 MemoryCache,用 .Length 可以取總筆數,用 Skip(pageSize  * (pageNo - 1)).Take(pageSize) 取回指定頁數資料,換頁或排序時從 MemoryCache 讀取以求迅速並減輕資料庫伺服器負擔,遇到變更查詢條件或按查詢鈕時再重新查詢資料庫。 最近遇到的案例,因使用者較多、單筆資料量也大,擔心 Cache 消耗過多記憶體,決定改用 T...
Posted 23 August 2017 09:33 PMJeffrey | 3 comment(s) 7,677
Filed under: ,
TIPS-調整 SQL Agent 作業記錄筆數限制
查詢 SQL Agent 排程執行問題時,發現一個狀況:使用 Log File Viewer 查詢作業記錄(Job History Log),大部分排程的執行歷程都是空的(如下圖),只有少數幾個排程有內容: 研究後學到一件事-SQL Agent Job History 有預設筆數限制,預設值為所有排程作業總共 1000 筆,每項排程作業最多 100 筆。在我們的排程作業中,有幾個排程每兩分鐘或五分鐘就執行一次,很快把 1000 筆配額用光光,因而產生作業記錄只剩下高頻率排程的記錄,超過一天的記錄全部被擠掉消失無蹤...
Posted 21 August 2017 11:14 PMJeffrey | with no comments 3,454
Filed under:
SQL 資料轉 INSERT 語法-使用 Visual Studio
將資料表內容轉成一連串 INSERT 語法,是蠻好用的跨伺服器搬資料表招式,之前我最愛用的工具是 SQL Dumper ,但昨天聽到不幸消息:官方網站人去樓空,連註冊的 DNS 網域都已棄守。 重新尋找替代方案,找到三種做法: SSMS 內建 Generate Script 功能 接著透過 Wizard 介面指定資料表並設定只輸出資料(Types of data to script: Data only) 由於當初設計可搬移整個 DB,故介面跟選項有點繁瑣,另外無法自訂查詢條件是一大缺點。 SSMS...
Posted 15 August 2017 08:43 PMJeffrey | 2 comment(s) 5,560
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 4,294
Filed under: , ,
【茶包射手筆記】SQL 錯誤-Server 'XXX' is not configured for RPC
在測試台運作正常,程式部署到正式環境後出現 SQL 錯誤: System.Data.SqlClient.SqlException (0x80131904): Server 'XXX' is not configured for RPC. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)...
Posted 12 July 2017 11:38 PMJeffrey | with no comments 4,060
Filed under: ,
Visual Studio 開啟專案出現 SQL Server Express 未安裝警告
在公司開啟某些工作專案時,我的 Visaul Studio 常會彈出像這樣的警告訊息: The Web project 'MyWeb' requires SQL Server Express LocalDB, whick is not installed on this computer. To upgrade the project database to use latest SQL Server Express LocalDB, double-click the database...
Posted 03 July 2017 07:47 AMJeffrey | with no comments 3,445
Filed under: , ,
查詢 SQL Server 詳細版本資訊
資安更新作業需確認 SQL Server 詳細版本資訊,需細到 Service Pack 及累積安全更新,爬文查到超好用的 SQL Server 版本資訊偵測腳本 。這組自動偵測腳本由微軟 OneScript Team 提供,可顯示版號、產品名稱、產品層級(Service Pack 版本)、版本別(Express、Enterprise、Developer…)、32 / 64 位元、Service Pack 版本、累積更新(Cumulative Update)等資訊。 更厲害的來了,偵測結果還包含後續若要更新...
Posted 08 March 2017 10:23 PMJeffrey | with no comments 7,655
Filed under:
【茶包射手筆記】在 View 使用 SELECT * 的風險
分享同事踩到的 SELECT * 地雷一枚。 大家應該在程式設計準則都看過這條-「避免使用 SELECT * FROM Table,應以 SELECT Col1, Col2… 明確列舉欄位…」。 如此建議必有其考量:第一個理由顯而易見,正向表列必要欄位,可避免在網路傳送用不到的資料浪費頻寬,並能減少客戶端、伺服器端處理多餘資料的資源損耗。再者,查詢欄位多寡也可能影響效能,SELECT * 時為牽就非必要欄位,資料庫可能改用較無效率的索引,不利效能最佳化。還有一種極端情境,若所需欄位都存在於 Non...
Posted 15 February 2017 10:26 PMJeffrey | 1 comment(s) 10,019
Filed under:
再談T-SQL複合字串鍵值比對-借用PARSENAME()
以下是我實際遇到的情境,複合鍵在某些資料表拆成兩個或三個欄位,但在某些資料表則用"."或"-"串接存成單一欄位。(不要問我為什麼搞出這種不一致的設計,誰沒有過去?) 如以下的例子,在JStock資料表的Market及Symbol欄位,在JReport則使用一個FullSymbol欄位,存成"Symbol.Market"。 問題來了,如果這兩個Table要JOIN怎麼辦?過去用過一種鳥方法: JReport R JOIN JStock S...
Posted 07 September 2016 10:19 PMJeffrey | 2 comment(s) 6,314
Filed under:
SQL效能調校經驗一則
使用者報案,某網頁效能變得奇慢無比,簡單的上線公告查詢耗時超過兩分鐘,追查後抓出問題查詢如下例: select case when convert ( varchar ,u.StartDate,108)= '00:00:00' and convert ( varchar ,u.EndDate,108)= '00:00:00' then convert (datetime, convert ( varchar ,u.EndDate,111))+1 else EndDate...
Posted 30 May 2016 10:23 PMJeffrey | with no comments 15,938
Filed under: ,
對付SQL Injection,換掉單引號到底夠不夠?
雖然現在遇到使用者輸入條件查詢DB,我一律都用參數化查詢(順推超好用的 Dapper )不再偷懶組裝SQL指令,但關於SQL Injection,我心中始終藏著一個疑問:流傳千古的… WHERE Col = '" + input.Replace("'", "''") + "'"換單引號大法,人人都知它不夠安全,但網路流傳一種說法,指稱換單引號只是自欺欺人根本無效,奇怪的是卻很少看到它被打穿的實例...
Posted 20 March 2016 11:22 PMJeffrey | 6 comment(s) 14,863
Filed under: ,
無法使用Windows帳號登入防火牆內的SQL Server
要穿過防火牆連上一台SQL(1433 Port有開,網路芳鄰NETBIOS封閉),發現用SQL帳號登入(SQL Authentication)可成功登入,若用AD帳號(Windows Authentication)則會出錯。 錯誤訊息為: 已超過連接逾時的設定。在嘗試使用登入前的信號交換確認時超過逾時等待的時間。這可能是登入前的信號交換發生失敗,或伺服器無法及時回應所造成。 Connection Timeout Expired. The timeout period elapsed while attempting...
Posted 17 March 2016 09:46 PMJeffrey | 2 comment(s) 6,758
Filed under:
更多文章 下一頁 »

搜尋

Go

<September 2018>
SunMonTueWedThuFriSat
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

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

文章典藏
其他功能

這個部落格


Syndication