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

MSSQL
细化解析:SQL Server数据库的集群设计
解析SQL server与asp 互操作的时间处理
深入浅出SQL嵌套SELECT语句
如何制定自己的SQL Server 2000触发器
帮你完全了解SQL Server 2000视图问题
实例解析用SQL Server处理物料清单规则
SQL Server 2005 数据库镜像简单介绍
从SQL Server备份文件导入现存数据库
分析 SQL Server 的内存为何不断增加
SQL Server数据仓库相关概念及构建流程
如何用VB存取SQL Server中的图像数据
精华推荐:SQL Server的空值处理策略
客户端备份和恢复MSSQL Server数据库
VB实现SQL Server 2000存储过程调用
改善SQL Server数据库的内存管理方法
SQL Server 数据挖掘在商业智能中的应用
影响SQL Server性能的关键三个方面
SQL Server中单引号的两种处理技巧
SQL Server 2000中生成XML的小技巧
SQL Server跟踪数据实现索引优化向导

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 128 ::
收藏到网摘: 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把存储过程的自动执行关掉。把存储过程自动执行关掉或启动的过程会保持系统配置设置自动执行。