在SQL Server啟動時自動執(zhí)行存儲過程。第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
既然必要的對象已經(jīng)創(chuàng)建,那么我們需要在服務(wù)器啟動時把創(chuàng)建的存儲過程設(shè)置為自動啟動。執(zhí)行下面的查詢,我們可以看到sp_configure高級選項'scan for startup procs'需要被設(shè)置。這些操作不需要手動去做,運行sp_procoption會自動為你設(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)志自動存儲的過程。
USE MASTER GO EXEC SP_PROCOPTION LOG_SERVER_START, 'STARTUP', 'ON' GO |
重新運行我們的配置檢查,現(xiàn)在我們可以看到,服務(wù)器配置成查看啟動過程(VALUE = 1),但是運行值目前實際上仍然設(shè)置成沒有查看啟動過程(VALUE_IN_USE = 0)。我們需要重新啟動SQL server服務(wù)來使改動生效。
USE MASTER GO SELECT VALUE, VALUE_IN_USE, DESCRIPTION FROM SYS.CONFIGURATIONS WHERE NAME = 'scan for startup procs' GO |
如果我們重啟SQL Server服務(wù),我們會看到配置值現(xiàn)在生效了?!?/P>
此外,查看之前創(chuàng)建的SERVER_STARTUP_LOG表,我們看到服務(wù)器啟動時間已經(jīng)被記錄到表中。
USE SERVER_METRICS GO SELECT * FROM SERVER_STARTUP_LOG GO |
最后,查看SQL server錯誤日志也可以證明這個存儲過程是自動運行的。
USE MASTER GO EXEC XP_READERRORLOG GO |
現(xiàn)在,讓我們把自動執(zhí)行服務(wù)關(guān)掉,下次SQL Server啟動時,這個存儲過程將不會運行。
USE MASTER GO EXEC SP_PROCOPTION LOG_SERVER_START, 'STARTUP', 'OFF' GO |
如果你不確定你創(chuàng)建的哪個存儲過程已經(jīng)被標(biāo)成自動執(zhí)行,你可以運行以下的查詢:
SELECT ROUTINE_NAME FROM MASTER.INFORMATION_SCHEMA.ROUTINES WHERE OBJECTPROPERTY(OBJECT_ID(ROUTINE_NAME),'ExecIsStartup') = 1 |
有件事你必須意識到:刪除和重新創(chuàng)建標(biāo)記的存儲過程將會要求重新運行sp_procoption。刪除一個存儲過程會導(dǎo)致存儲過程變成“沒有標(biāo)記”的自動執(zhí)行。如果你刪除存儲過程但是不打算重新創(chuàng)建它,那么系統(tǒng)配置設(shè)置'scan for startup procs'將會被遺棄成“on”,直到你通過sp_configure手動把它設(shè)置為“off”或者使用sp_procoption把存儲過程的自動執(zhí)行關(guān)掉。把存儲過程自動執(zhí)行關(guān)掉或啟動的過程會保持系統(tǒng)配置設(shè)置自動執(zhí)行。
相關(guān)文章
insert into tbl() select * from tb2中加入多個條件
insert into tbl() select * from tb2中加入多個條件2009-06-06sql server 還原數(shù)據(jù)庫時提示數(shù)據(jù)庫正在使用,無法進行操作的解決方法
sql server 還原數(shù)據(jù)庫時提示:數(shù)據(jù)庫正在使用,無法進行操作的解決方法2013-03-03sqlserver/mysql按天、按小時、按分鐘統(tǒng)計連續(xù)時間段數(shù)據(jù)【推薦】
最近小編接到這樣的需求,公司需要按天,按小時查看數(shù)據(jù),可以直觀的看到時間段的數(shù)據(jù)峰值。這篇文章主要介紹了sqlserver/mysql按天,按小時,按分鐘統(tǒng)計連續(xù)時間段數(shù)據(jù) ,需要的朋友可以參考下2019-06-06SQL?Server中的XML數(shù)據(jù)類型詳解
本文詳細講解了SQL?Server中的XML數(shù)據(jù)類型,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05SQLSERVER查詢所有數(shù)據(jù)庫名,表名,和字段名的語句
SQLSERVER查詢所有數(shù)據(jù)庫名,表名,和字段名的語句,需要的朋友可以參考下。2011-12-12