在SQL Server启动时自动执行存储过程。

 更新时间:2008年10月02日 01:02:05   作者:  
当sql server启动时,我很想运行一个存储过程。有没有一种方法可以在每次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

sql server存储过程


现在,我们可以用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存储过程

  如果我们重启SQL Server服务,我们会看到配置值现在生效了。 

sql server存储过程

  此外,查看之前创建的SERVER_STARTUP_LOG表,我们看到服务器启动时间已经被记录到表中。


  USE SERVER_METRICS
  GO
  SELECT * FROM SERVER_STARTUP_LOG
  GO
 

sql server存储过程

  最后,查看SQL server错误日志也可以证明这个存储过程是自动运行的。


  USE MASTER
  GO
  EXEC XP_READERRORLOG
  GO
 

sql server存储过程

  现在,让我们把自动执行服务关掉,下次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把存储过程的自动执行关掉。把存储过程自动执行关掉或启动的过程会保持系统配置设置自动执行。

相关文章

  • SQL中 and or in的用法小结

    SQL中 and or in的用法小结

    这篇文章主要介绍了SQL中 and or in的用法小结,IN运算符允许您在WHERE子句中指定多个值,IN运算符是多个OR条件的简写,本文结合实例代码介绍的非常详细,感兴趣的朋友一起看看吧
    2024-04-04
  • 分享一下SQL Server执行动态SQL的正确方式

    分享一下SQL Server执行动态SQL的正确方式

    这篇文章主要介绍了SQL Server执行动态SQL正确方式,需要的朋友可以参考下
    2017-06-06
  • Mybatis4 之Mybatis动态sql的实现代码

    Mybatis4 之Mybatis动态sql的实现代码

    这篇文章主要介绍了Mybatis4 之Mybatis动态sql的实现代码,本文给大家提到了静态sql与动态sql有什么区别,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Python版Mssql爆破小脚本

    Python版Mssql爆破小脚本

    本文给大家分享的是使用Python实现的暴力破解mssql用户密码的脚本的代码,配合上合适的字典非常好用,有需要的小伙伴可以参考下
    2016-10-10
  • SqlServer中查看当前Open的Cursor方法

    SqlServer中查看当前Open的Cursor方法

    这篇文章主要介绍了SqlServer中查看当前Open的Cursor方法,本文为了解决A cursor with thename ' ' already exists总结的几个方法,需要的朋友可以参考下
    2015-07-07
  • SQL server修改表错误提示:阻止保存需要重新创建表的更改解决办法

    SQL server修改表错误提示:阻止保存需要重新创建表的更改解决办法

    这篇文章主要给大家介绍了关于SQL server修改表错误提示:阻止保存需要重新创建表的更改的解决办法,文中将解决的办法介绍的非常详细,对同样遇到的朋友具有一定的参考解决价值,需要的朋友可以参考下
    2024-06-06
  • 关于SQL Server加密与解密的问题

    关于SQL Server加密与解密的问题

    这篇文章主要介绍了SQL Server加密与解密的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 通过T-SQL语句创建游标与实现数据库加解密功能

    通过T-SQL语句创建游标与实现数据库加解密功能

    这篇文章介绍了通过T-SQL语句创建游标与实现数据库加解密功能的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • Hive-SQL查询连续活跃登录用户思路详解

    Hive-SQL查询连续活跃登录用户思路详解

    这篇文章主要介绍了Hive-SQL查询连续活跃登陆的用户,活跃用户这里是指连续2天都活跃登录的用户,本文给大家分享解决思路及sql语句,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • sql server如何去除数据中的一些无用的空格

    sql server如何去除数据中的一些无用的空格

    这篇文章主要介绍了sql server去除数据中的一些无用的空格,本文给大家提到了一些常用的函数,结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05

最新评论