在SQL Server啟動(dòng)時(shí)自動(dòng)執(zhí)行存儲(chǔ)過程。第2/2頁
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
既然必要的對(duì)象已經(jīng)創(chuàng)建,那么我們需要在服務(wù)器啟動(dòng)時(shí)把創(chuàng)建的存儲(chǔ)過程設(shè)置為自動(dòng)啟動(dòng)。執(zhí)行下面的查詢,我們可以看到sp_configure高級(jí)選項(xiàng)'scan for startup procs'需要被設(shè)置。這些操作不需要手動(dòng)去做,運(yùn)行sp_procoption會(huì)自動(dòng)為你設(shè)置。
USE MASTER
GO
SELECT VALUE, VALUE_IN_USE, DESCRIPTION
FROM SYS.CONFIGURATIONS
WHERE NAME = 'scan for startup procs'
GO

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

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

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

最后,查看SQL server錯(cuò)誤日志也可以證明這個(gè)存儲(chǔ)過程是自動(dòng)運(yùn)行的。
USE MASTER GO EXEC XP_READERRORLOG GO |

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

