首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 啟動時自動執行預存程序設定指南

     編輯:關於SqlServer

兩種設定啟動預存程序的方法

方法一:企業管理器圖形介面

  1. 在 master 資料庫中建立預存程序
  2. 企業管理器中找到該預存程序 → 右鍵 → 內容
  3. 勾選 「每當 SQL Server 啟動時執行」

方法二:T-SQL 指令設定

USE master
GO

EXEC sp_procoption '預存程序名稱', 'startup', 'on'
GO

關閉自動執行將 'on' 改為 'off'。

啟動預存程序運作機制

  • 必須由系統管理員 (sysadmin 固定伺服器角色) 在 master 資料庫建立
  • 以背景程序身分執行,不可有任何輸入參數
  • 啟動時在最後一個資料庫恢復完成後開始執行
  • 無數量限制,但每個啟動程序佔用一個連線

多重啟動程序最佳化策略

若需啟動執行多個程序但不需平行執行:

  1. 指定一個程序為啟動程序
  2. 該程序內部呼叫其他程序
  3. 如此僅佔用一個連線

跳過啟動程序執行的情況

  • 啟動參數指定追蹤旗標 4022
  • 以最低組態啟動 SQL Server (使用 -f 旗標)

建立啟動預存程序權限需求

  • 以 sysadmin 固定伺服器角色成員登入
  • 在 master 資料庫中建立預存程序

sp_procoption 完整功能

  • 將現有預存程序指定為啟動程序
  • 停止程序在 SQL Server 啟動時執行

實務應用範例

範例:啟動時檢查資料庫完整性並記錄

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

注意事項總結

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
項目說明
參數限制啟動程序不可有輸入參數
執行內容sysadmin 權限、背景執行緒
連線佔用每個啟動程序佔用一個連線
錯誤處理程序內部需自行 TRY-CATCH,錯誤不會中斷其他啟動程序
除錯困難啟動階段執行,難以互動式除錯,建議寫入記錄表