SQL SERVER SQL Agent服务使用小结

1.在查询分析器理启动或停止SQL Agent服务
  启动

  use master
  go
  xp_cmdshell 'net start SQLSERVERAGENT'


  停止

  use master
  go
  xp_cmdshell 'net stop SQLSERVERAGENT'


  将服务的启动从手工方式改为自动启动方式

  exec xp_cmdshell 'scm -Action 7 -Service MSSQLserver -SVCStartType 2'


  直接用命令行执行引号内的内容也可以。

  2、启动不正常原因和处理
  表面上看SQL Server agent 服务启动正常,但在查看作业的属性与作业历史记录时都出现如下错误:
  错误14258:当SQLServerAgent正在启动时,无法执行此操作。请稍后再试。

  可能原因:
  选择了"使用 Windows NT 纤程",具体原因不明。

  解决方法:
  企业管理器--右键SQL实例--属性--处理器--取消选择"使用 Windows NT 纤程"
  然后重新启动sql服务

  修改了系统密码
  解决方法:
  a. 我的电脑--控制面板--管理工具--服务--右键 MSSQLSERVER--属性--登陆--登陆身份--选择"本地系统帐户"
  或:
  b.我的电脑--控制面板--管理工具--服务--右键 MSSQLSERVER--属性--登陆--登陆身份--选择"此帐户"--选择 administrator ,密码和确认密码中输入你的administrator密码.

  两者的区别:
  选择第一种方式,以后修改了administrator密码,不用再调整(但要求登陆操作系统的是系统管理员)

  数据库非法DOWN机出现故障
  解决方法:
  用安装光盘重新安装,然后选择‘高级选项’—‘重建注册表’,然后一路下去……

/*
**取得某项服务是否启动

HOME
haoK.Y

**2004-10-20
根据 net start返回的结果判断某项服务是否启动

**示例
DECLARE @IsOnWorking BIT
EXEC spServiceIsOnWorking 'MSSQL$NEWINSTANCE', @IsOnWorking OUTPUT
SELECT @IsOnWorking

*/
CREATE PROCEDURE spServiceIsOnWorking
(
@ServiceName VARCHAR(100),
@IsOnWorking BIT OUTPUT
)
AS
SET NOCOUNT ON

CREATE TABLE #Output
(
OT VARCHAR(100)
)

INSERT INTO #Output
EXEC master..xp_cmdshell 'net start'

SET @IsOnWorking =
CASE
WHEN EXISTS (
SELECT TOP 1 1
FROM #Output
WHERE OT LIKE '%' + @ServiceName + '%'
) THEN 1
ELSE 0
END

DROP TABLE #Output

SET NOCOUNT OFF
GO


SQL的分布式关系对象(SQL-DMO)库允许你的VB6应用程序自动地同SQL服务器进行交互操作。这对于获取关于SQL服务器的信息很有用,例如服务器的状态或者网络上的可用服务器。

<a href="http://ad.cn.doubleclick.net/click%3Bh=v5|3396|3|0|%2a|t%3B27671752%3B0-0%3B0%3B6694709%3B31-1|1%3B15038075|15055971|1%3B%3B%7Esscs%3D%3fhttp%3a%2f%2fwww.site.com" target="_blank"><IMG SRC="http://m2.cn.doubleclick.net/123456/banner.gif" WIDTH=468 HEIGHT=60 BORDER=0 ></a>

要使用SQL-DMO库,就要设置一个对“微软SQL-DMO对象库”的参照。

Application对象的ListAvailableSQLServers方法会返回一个NameList对象,它包含有网络上可用服务器的列表。下面的代码显示了一个使用这个方法来填充列表框控件的方法:

Dim objSQLApp As SQLDMO.Application
Dim objNameList As SQLDMO.NameList
Dim intCount As Integer

Set objSQLApp = New SQLDMO.Application

Set objNameList = objSQLApp.ListAvailableSQLServers()

For intCount = 1 To objNameList.Count
    Call List1.AddItem(objNameList.Item(intCount))
Next

SQL-DMO库里另外一个有用的对象是SQLServer对象。这个对象能够被用来获取关于特定SQL服务器的信息。Connect方法会建立到数据库服务器的连接并接受三个参数:数据库名、用户名和密码。一旦对象的连接成功了,关于服务器的信息就能够被取回:

Dim objSQLServer As SQLDMO.SQLServer

Set objSQLServer = New SQLDMO.SQLServer
objSQLServer.LoginSecure = True
Call objSQLServer.Connect("MyServerName", "username", "password")

Debug.PrintobjSQLServer.Name
Debug.PrintobjSQLServer.HostName
Debug.PrintobjSQLServer.Status


恢复使用 xp_cmdshell

前提需要工具:SQL Query Analyzer和SqlExec Sunx Version
  
第一部分:
  
有关去掉xp_cmdshell来保护系统的分析总结:
首先知道一下语句:
1.去掉xp_cmdshell扩展过程的方法是使用如下语句:

if exists (select * from dbo.sysobjects where id=object_id(N'[dbo].[xpcmdshell]') and 
OBJECTPROPERTY(id,N'IsExtendedProc')=1)exec sp_dropextendedproc N'[dbo].[xp_cmdshell]'

2.添加xp_cmdshell扩展过程的方法是使用如下语句:
sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll'

现在看看现象:
我们在取得SA权限后远程用Sqlexec执行cmd命令,出现提示SQL_ERROR,那么很可能是去掉了xp_cmdshell。
现在来看看被去掉xp_cmdshell后恢复的两种方法:
  
方法一、使用SQL Query Analyzer连接对方后直接写入,挺方便sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll'
方法二、使用SqlExec Sunx Version首先在SqlExec Sunx Version的Format选项里填上%s,在CMD选项里输入sp_addextendedproc 'xp_cmdshell','xpsql70.dll'或者对Sql2000情况下使用sp_addextendedproc 'xp_cmdshell','xplog70.dll'另外使用SqlExec Sunx Version来去除xp_cmdshell的方法和加的时候选择条件一样,然后输入sp_dropextendedproc 'xp_cmdshell'就可以了
posted @ 2006-02-24 09:40  facewater  阅读(1841)  评论(0编辑  收藏  举报