自动定时重启sql server回收内存

本文介绍了如何通过Windows计划任务和批处理文件自动定时重启SQL Server服务,以实现内存回收。文中提供了创建批处理文件的示例,并讨论了不同方法,包括使用NET命令和Delphi编写的函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自动定时重启sql server回收内存  [转自 http://www.chinaz.com/Program/MSSQL/11264E512008.html]

 

我突然想到了windows自带的计划任务,我们可不可以利用计划任务来定时重新启动sqlserver呢?

现在脉络基本清楚,基于平时重新启动sqlserver 时经常提示要关闭自动备份功能(也就是sqlserver代理),于是我新建一个记事本,然后重命名为sql.bat ,单击右键编辑输入以下内容

以下为引用的内容:

  net stop sqlserveragent

  net stop mssqlserver

  net start mssqlserver

  net start sqlserveragent

基于这样的内容,自动运行时不会出现任何提示,不信大家可以试试看更换或者删减下上面的4个语句,运行后应该都会有提示,需要手工操作才可以。

下面就是在控制面板里面新建一个计划任务了,这里省掉。

 

 

http://www.itpub.net/thread-271710-1-1.html

1、使用dos命令做个批处理;
2、执行批处理文件(或做到计划任务里,定时执行)

 

用xp_cmdshell 重启SQL服务应该可以

-------------------------------------------------------------------------------------

god,都是被win惯坏的孩子。

dos是操作系统。现在一般说Use DOS command 就是要你用命令行。

楼住要代码吗?用delphi编译

// W3SVC ---Web Service      MSSQLSERVER --- MS SQL Service  OverTime 为超时处理,单位秒
Function CtrlService(ServiceName: string; Status: Boolean; OverTime:Integer): Boolean;  //控制WINDOWS的服务启动与停止
var
  lpServiceArgVectors: Pchar;
  hscmanager, hService: SC_HANDLE;
  returnstatus: TServiceStatus;
  i:Integer;
begin
  Result := True;
  lpServiceArgVectors := nil;
  hscmanager := OpenSCManager(nil, nil, SC_MANAGER_ENUMERATE_SERVICE); // 打开service control manager database
  if hscmanager = 0 then begin Result := False; exit; end;
  hService := OpenService(hscmanager, Pchar(ServiceName), SERVICE_ALL_ACCESS); //打开W3SVC服务
  if hService = 0 then
  begin
    CloseServiceHandle(hscmanager);
    CloseServiceHandle(hService);
    Result := False;
    exit;
  end;
  if not QueryServiceStatus(hService, returnstatus) then
  begin
    CloseServiceHandle(hscmanager);
    CloseServiceHandle(hService);
    Result := False;
    exit;
  end; //查看该Service的状态
  i:=0;
  if Status then //如果是启动服务
  begin
    if (returnstatus.dwCurrentState = SERVICE_STOPPED) and (not StartService(hService, 0, lpServiceArgVectors)) then
      Result := False
    else
      while (i<OverTime) and (returnstatus.dwCurrentState <> SERVICE_RUNNING) do
      begin
        Sleep(1000);
        QueryServiceStatus(hService, returnstatus);
        Application.ProcessMessages;
        inc(i);
      end;
    CloseServiceHandle(hscmanager);
    CloseServiceHandle(hService);
    exit;
  end
  else //如果是停止服务
  begin
    if (returnstatus.dwCurrentState = SERVICE_RUNNING) and (not ControlService(hService, SERVICE_CONTROL_STOP, returnstatus)) then
      Result := False
    else
      while (i<OverTime) and (returnstatus.dwCurrentState <> SERVICE_STOPPED) do
      begin
        Sleep(1000);
        QueryServiceStatus(hService, returnstatus);
        Application.ProcessMessages;
        inc(i);
      end;
    CloseServiceHandle(hscmanager);
    CloseServiceHandle(hService);
    exit;
  end;
end;
-------------------------------------------------------------------------------------

我这有个简单的:
1、写批处理语句:(停止服务)
NET STOP MSSQLSERVER
NET STOP SQLEXECUTIVE
net stop "SQLSERVERAGENT"
将语句保存在.bat文件中(比如stop.bat)
2、写批处理语句:(启动服务)
NET START MSSQLSERVER
NET START SQLEXECUTIVE
net start "SQLSERVERAGENT"
将将语句保存在.bat文件中(比如start.ba't)
3、这两个.bat文件可以直接执行,也可以放在计划任务中调度。

-------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值