通过ASE本身的命令重新启动ASE[转]
sybase在自动管理方面真的很弱很弱,不管windows还是unix平台上都是一样的不好用。不过,我现在都已经习惯了sybase的不好用。
很早以前自己也想到了如何在sybase ase内部来实现自动启动ase服务器。今天看到echoaix写的这篇文档,和我的思路差不多。自己正好也懒得写了。
通过ASE本身重新启动ASE
ase本身没有重启命令,如何让ASE自己重启是一个问题,记得当时负责将近100个ase server,分布在全国各地,服务器还大多是PC server,windows环境,管理员口令经常不知道,远程登陆也很慢,可是当时ase版本较低,改个参数有的就要重启
要ase重启并不困难,还是要调用系统的东西,说白了使用的工具就是ase的扩展存储过程的xp_cmdshell,熟悉mssql server的人都知道xp_cmdshell,其实mssql server最早就是sybase买给微软的源码,不多说,看看如何实现吧。
前提:
1 XP server,一般windows上的ase创建都会带着。
2 XP server的条号(interfaces和sql.ini)
3 XP server在sysservers中的记录
select upper(@@servername)+'_XP',假定结果为TEST_XP,即为需要添加的XP sever信息 注意一定要全部大写,要不到时候回报”XP Server must be up for ESP to execute“ .
sp_addserver TEST_XP,NULL 添加XP server
4 "xp_cmdshell context"配置参数的设置,此参数为使用 xp_cmdshell 系统 ESP 执行的操作系统命令设置安全性环境,缺省值为1。如果 xp_cmdshell context 设置为 1,在Windows NT下,那么只有当 Adaptive Server 的登录用户的用户名是有效的 Windows NT 用户名(在运行 Adaptive Server 的系统上具有 Windows NT 系统管理权限)时,xp_cmdshell 才能成功。设置为0,sa就可执行。
sp_configure "xp_cmdshell context",0
5 调度服务运行 (不运行也没关系,用xp_cmdshell启动)
思路:
ase在windows上大多都是以服务的形式存在,服务名固定为SYBSQL_@@servername(假定为SYBSQL_test),停止ase 可以用net shop SYBSQL_test,启动ase用net start SYBSQL_test,当然也可以在isql中shutdown停ase和直接执行ase启动bat文件来启动ase。xp_cmdshell可以用来执行系统命令,可以创建一个关闭和启动ase的bat文件,然后再用xp_cmdshell把这个bat写入调度任务中就可以完成ase重启。
declare @todo varchar(250)
select @todo = "echo net stop SYBSQL_" + @@servername + " > c:\restartase.bat" + "&" + "echo net start SYBSQL_" + @@servername + " >> c:\restartase.bat"
exec xp_cmdshell @todo,no_output \\不要输出结果
go
这样在c:\生成一个restartase.bat文件,内容为net shop SYBSQL_test和net start SYBSQL_test。
declare @todo varchar(250)
select @todo = 'at ' + convert(char(5),dateadd(ss, 120, getdate()),8) + ' cmd /c "c:\restartase.bat"' \\在两分钟之后重启ase
exec xp_cmdshell @todo,no_output
go
总结:
原理很简单,最好在执行之前checkpoint,commit,总之还是shutdown然后登陆系统重启好。
UNIX上的应该差不多,用的较少,就先不写了。
可以转载 请注明作者 echoaix