這篇文章描述如何查詢 SQL Server 的錯誤代碼,以及錯誤是「SQL Server 插入資料時回報容量不足」時,使用 Script 備份資料庫,再移除資料。
由於以前開發的一支程式會不斷地插入大量資料到資料庫,預期在 SQL Server 會遇到超過容量上限的問題,因此當時決定先找到對應的錯誤代碼,並從 C# 中檢查是否有該錯誤的存在。
「Database Engine Errors - SQL Server - Microsoft Docs」 列出了 SQL 的錯誤,以及相對應的描述 (和解決方法)。
我們可以從該網頁可以預先找到「錯誤代碼 1105:SQL Express 容量限制達到時發出的錯誤」。下一步需要能從 C# 檢查錯誤代號。
C# 執行 SQL 語法查詢,如 SqlCommand 類別的的 ExecuteNonQuery()
或 SqlDataReader 的 ExecuteReader()
時,可能會遇到產生 SqlException Class (System.Data.SqlClient) - Microsoft Docs 的狀況。此時可以查詢 SqlException.Number
,即對應的 SQL 錯誤代碼。
當 SqlException.Number
為 1105 時,表示 SQL Server Express 已超過容量限制,或是磁碟空間不足也可能造成這個問題。
接著我們可以透過程式執行以下 Script,或是由 SSMS (SQL Server Management Studio) 進行備份,完成後再將資料移除掉。([SQL Server]使用T-SQL來備份與還原資料庫 - F6 Team - 點部落)
BACKUP DATABASE test TO DISK = 'C:\test.bak' -- 可替換成其它磁碟區的路徑
GO
這個作法算是比較粗糙的做法,可能會造成系統因短暫容量不足導致不穩定,或新增資料時需要等待備份完成、資料移除的情形。
建議的做法,是建立離峰時刻的排程,定期備份和移除資料。