USE master
GO
EXEC sp_procoption '預存程序名稱', 'startup', 'on'
GO
關閉自動執行將 'on' 改為 'off'。
sysadmin 固定伺服器角色) 在 master 資料庫建立若需啟動執行多個程序但不需平行執行:
USE master
GO
CREATE PROCEDURE sp_StartupIntegrityCheck
AS
BEGIN
SET NOCOUNT ON
DECLARE @dbname sysname
DECLARE @sql nvarchar(4000)
-- 建立記錄表 (若不存在)
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'StartupCheckLog')
CREATE TABLE StartupCheckLog (
CheckTime DATETIME DEFAULT GETDATE(),
DatabaseName SYSNAME,
Result NVARCHAR(4000)
)
-- 逐一檢查線上資料庫
DECLARE db_cursor CURSOR FOR
SELECT name FROM sysdatabases
WHERE status & 512 = 0 -- 排除離線/緊急模式
AND name NOT IN ('tempdb', 'model') -- 排除系統資料庫
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @dbname
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'DBCC CHECKDB([' + @dbname + ']) WITH NO_INFOMSGS'
BEGIN TRY
EXEC (@sql)
INSERT INTO StartupCheckLog (DatabaseName, Result)
VALUES (@dbname, 'OK')
END TRY
BEGIN CATCH
INSERT INTO StartupCheckLog (DatabaseName, Result)
VALUES (@dbname, ERROR_MESSAGE())
END CATCH
FETCH NEXT FROM db_cursor INTO @dbname
END
CLOSE db_cursor
DEALLOCATE db_cursor
END
GO
-- 設為啟動程序
EXEC sp_procoption 'sp_StartupIntegrityCheck', 'startup', 'on'
GO
| 項目 | 說明 |
|---|---|
| 參數限制 | 啟動程序不可有輸入參數 |
| 執行內容 | sysadmin 權限、背景執行緒 |
| 連線佔用 | 每個啟動程序佔用一個連線 |
| 錯誤處理 | 程序內部需自行 TRY-CATCH,錯誤不會中斷其他啟動程序 |
| 除錯困難 | 啟動階段執行,難以互動式除錯,建議寫入記錄表 |