在SQL Server啟動時自動執(zhí)行存儲過程。
USE MASTER
GO
CREATE DATABASE SERVER_METRICS
GO
USE SERVER_METRICS
GO
CREATE table DBO.SERVER_STARTUP_LOG
(
LOGID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
START_TIME DATETIME NOT NULL
CONSTRAINT DF_START_TIME DEFAULT GETDATE()
)
GO
USE MASTER
GO
CREATE PROCEDURE DBO.LOG_SERVER_START
AS
SET NOCOUNT ON
PRINT '*** LOGGING SERVER STARTUP TIME ***'
INSERT INTO SERVER_METRICS.DBO.SERVER_STARTUP_LOG DEFAULT VALUES
GO
既然必要的對象已經(jīng)創(chuàng)建,那么我們需要在服務器啟動時把創(chuàng)建的存儲過程設置為自動啟動。執(zhí)行下面的查詢,我們可以看到sp_configure高級選項'scan for startup procs'需要被設置。這些操作不需要手動去做,運行sp_procoption會自動為你設置。
USE MASTER
GO
SELECT VALUE, VALUE_IN_USE, DESCRIPTION
FROM SYS.CONFIGURATIONS
WHERE NAME = 'scan for startup procs'
GO

現(xiàn)在,我們可以用sp_procoption標志自動存儲的過程。
USE MASTER GO EXEC SP_PROCOPTION LOG_SERVER_START, 'STARTUP', 'ON' GO |
重新運行我們的配置檢查,現(xiàn)在我們可以看到,服務器配置成查看啟動過程(VALUE = 1),但是運行值目前實際上仍然設置成沒有查看啟動過程(VALUE_IN_USE = 0)。我們需要重新啟動SQL server服務來使改動生效。
USE MASTER GO SELECT VALUE, VALUE_IN_USE, DESCRIPTION FROM SYS.CONFIGURATIONS WHERE NAME = 'scan for startup procs' GO |

如果我們重啟SQL Server服務,我們會看到配置值現(xiàn)在生效了?!?/P>

此外,查看之前創(chuàng)建的SERVER_STARTUP_LOG表,我們看到服務器啟動時間已經(jīng)被記錄到表中。
USE SERVER_METRICS GO SELECT * FROM SERVER_STARTUP_LOG GO |

最后,查看SQL server錯誤日志也可以證明這個存儲過程是自動運行的。
USE MASTER GO EXEC XP_READERRORLOG GO |

現(xiàn)在,讓我們把自動執(zhí)行服務關(guān)掉,下次SQL Server啟動時,這個存儲過程將不會運行。
USE MASTER GO EXEC SP_PROCOPTION LOG_SERVER_START, 'STARTUP', 'OFF' GO |
如果你不確定你創(chuàng)建的哪個存儲過程已經(jīng)被標成自動執(zhí)行,你可以運行以下的查詢:
SELECT ROUTINE_NAME FROM MASTER.INFORMATION_SCHEMA.ROUTINES WHERE OBJECTPROPERTY(OBJECT_ID(ROUTINE_NAME),'ExecIsStartup') = 1 |
有件事你必須意識到:刪除和重新創(chuàng)建標記的存儲過程將會要求重新運行sp_procoption。刪除一個存儲過程會導致存儲過程變成“沒有標記”的自動執(zhí)行。如果你刪除存儲過程但是不打算重新創(chuàng)建它,那么系統(tǒng)配置設置'scan for startup procs'將會被遺棄成“on”,直到你通過sp_configure手動把它設置為“off”或者使用sp_procoption把存儲過程的自動執(zhí)行關(guān)掉。把存儲過程自動執(zhí)行關(guān)掉或啟動的過程會保持系統(tǒng)配置設置自動執(zhí)行。
相關(guān)文章
分享一下SQL Server執(zhí)行動態(tài)SQL的正確方式
這篇文章主要介紹了SQL Server執(zhí)行動態(tài)SQL正確方式,需要的朋友可以參考下2017-06-06
Mybatis4 之Mybatis動態(tài)sql的實現(xiàn)代碼
這篇文章主要介紹了Mybatis4 之Mybatis動態(tài)sql的實現(xiàn)代碼,本文給大家提到了靜態(tài)sql與動態(tài)sql有什么區(qū)別,通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03
SQL?server修改表錯誤提示:阻止保存需要重新創(chuàng)建表的更改解決辦法
這篇文章主要給大家介紹了關(guān)于SQL?server修改表錯誤提示:阻止保存需要重新創(chuàng)建表的更改的解決辦法,文中將解決的辦法介紹的非常詳細,對同樣遇到的朋友具有一定的參考解決價值,需要的朋友可以參考下2024-06-06
通過T-SQL語句創(chuàng)建游標與實現(xiàn)數(shù)據(jù)庫加解密功能
這篇文章介紹了通過T-SQL語句創(chuàng)建游標與實現(xiàn)數(shù)據(jù)庫加解密功能的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-03-03
sql?server如何去除數(shù)據(jù)中的一些無用的空格
這篇文章主要介紹了sql?server去除數(shù)據(jù)中的一些無用的空格,本文給大家提到了一些常用的函數(shù),結(jié)合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05

