在SQL Server启动时自动执行存储过程。
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
既然必要的对象已经创建,那么我们需要在服务器启动时把创建的存储过程设置为自动启动。执行下面的查询,我们可以看到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
现在,我们可以用sp_procoption标志自动存储的过程。
USE MASTER GO EXEC SP_PROCOPTION LOG_SERVER_START, 'STARTUP', 'ON' GO |
重新运行我们的配置检查,现在我们可以看到,服务器配置成查看启动过程(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服务,我们会看到配置值现在生效了。
此外,查看之前创建的SERVER_STARTUP_LOG表,我们看到服务器启动时间已经被记录到表中。
USE SERVER_METRICS GO SELECT * FROM SERVER_STARTUP_LOG GO |
最后,查看SQL server错误日志也可以证明这个存储过程是自动运行的。
USE MASTER GO EXEC XP_READERRORLOG GO |
现在,让我们把自动执行服务关掉,下次SQL Server启动时,这个存储过程将不会运行。
USE MASTER GO EXEC SP_PROCOPTION LOG_SERVER_START, 'STARTUP', 'OFF' GO |
如果你不确定你创建的哪个存储过程已经被标成自动执行,你可以运行以下的查询:
SELECT ROUTINE_NAME FROM MASTER.INFORMATION_SCHEMA.ROUTINES WHERE OBJECTPROPERTY(OBJECT_ID(ROUTINE_NAME),'ExecIsStartup') = 1 |
有件事你必须意识到:删除和重新创建标记的存储过程将会要求重新运行sp_procoption。删除一个存储过程会导致存储过程变成“没有标记”的自动执行。如果你删除存储过程但是不打算重新创建它,那么系统配置设置'scan for startup procs'将会被遗弃成“on”,直到你通过sp_configure手动把它设置为“off”或者使用sp_procoption把存储过程的自动执行关掉。把存储过程自动执行关掉或启动的过程会保持系统配置设置自动执行。
相关文章
insert into tbl() select * from tb2中加入多个条件
insert into tbl() select * from tb2中加入多个条件2009-06-06sql server 还原数据库时提示数据库正在使用,无法进行操作的解决方法
sql server 还原数据库时提示:数据库正在使用,无法进行操作的解决方法2013-03-03sqlserver/mysql按天、按小时、按分钟统计连续时间段数据【推荐】
最近小编接到这样的需求,公司需要按天,按小时查看数据,可以直观的看到时间段的数据峰值。这篇文章主要介绍了sqlserver/mysql按天,按小时,按分钟统计连续时间段数据 ,需要的朋友可以参考下2019-06-06
最新评论