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服务器的信息很有用,例如服务器的状态或者网络上的可用服务器。
要使用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'就可以了