当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 在SQL Server启动时自动执行存储过程。

MSSQL
SQL Server中删除重复数据的几个方法
SQL Server 基础概念集
SQL Server导入导出
SQL SERVER实用技巧
sql server 常用函数
如何维护SQL Server的“交易日志”
SQL Server数据备份处理过程探讨
JSP中tomcat的SQL Server2000数据库连接池的配置
SQL Server服务器安装剖析
SQL Server 2005数据加密技术应用研究
SQL Server数据库的备份和恢复措施
SQL Server 2005性能测试实践
Jboss下MS SQL Server配置指导
Oracle和SQL Server 追求完美还是讲求实用
SQL Server服务器安装剖析
SQL Server:Oracle与SQL Server事务处理的比较
SQL Server:利用配置文件实现SQL Server与Oralce访问类的转换
SQL Server:测试SQL Server业务规则链接方法
SQL Server :SQL Server 2008高可用性解决方案优劣分析
SQLServer:数据库恢复

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 56 ::
收藏到网摘: n/a

当sql server启动时,我很想运行一个存储过程。有没有一种方法可以在每次SQL Server服务启动时都会自动执行这个存储过程呢? sql Server提供了系统存储过程sp_procoption,这个存储过程可以用于当SQL Server服务启动时指派一个或者多个存储过程自动执行。这是一个很不错的选择,它可以用于多种多样的用途。比如,你可能在你的数据库中有开销很大的查询,这个查询在首次执行时会花费一些时间。通过使用sp_procoption,你可以在服务器启动时运行这个查询以此来预先编译执行计划,由此,你的某个用户就不会成为第一个运行这个特殊查询的不幸的人。我曾经用这个功能建立了一个我自己写的概要分析器服务器端跟踪的自动执行功能,这个跟踪功能成为服务器启动时被设置成自动执行的存储过程的一部分。
复制代码 代码如下:
复制代码 代码如下:

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标志自动存储的过程。

  重新运行我们的配置检查,现在我们可以看到,服务器配置成查看启动过程(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把存储过程的自动执行关掉。把存储过程自动执行关掉或启动的过程会保持系统配置设置自动执行。