在Sybase ASE上利用job scheduler定时调度作业
Job Scheduler 提供了定义和调度数据库管理和维护任务的能力,从而简化了 ASE 的管理。有了 Job Scheduler,就可以将通常需要数据库管理员干预的作业安排为在合适的时间以无人值守的方式运行,从而让数据库管理员腾出手来关注其它问题。
先介绍四个属于:作业、日程表、作业历史、预定作业、Job Scheduler任务、Job Scheduler代理、目标服务器、模板。
作业:在一次数据库操作中,例如备份、更新统计信息和转储数据库,对数据库执行的一个或多个系列操作。
日程表:定义了执行作业的时间以及如何重复执行作业。
作业历史:曾经执行过的预定作业。
预定作业:是指已绑定到某个日程表的作业。只有经过调度的作业才会执行。
Job Scheduler 任务(JS 任务):是功能性组件,负责管理日程表和及时通知 Job Scheduler 代理执行某个特定作业。
Job Scheduler 代理(JS 代理):是功能性组件,负责在接到 JS 任务通知时执行某个作业。
重复执行的日程表:是将要多次执行的日程表。所有重复执行的日程表都必须有开始和结束时间。
目标服务器:是预定要在其上运行业务的 Adaptive Server。
模板:是一组带有参数的 Transact-SQL (T-SQL) 语句,可用于在 Job Scheduler 中创建作业。
-
配置和运行 Job Scheduler
在安装Sybase数据库服务器的时候,如果安装方式选择"定制"安装,那么会出现如下图所示的功能部件选择窗口。建议选择"Job Scheduler"这个组件。
如果选择了"Job Scheduler"这个组件,则安装程序会创建数据库sybmgmtdb并在数据库sybmgmtdb内建立job scheduler需要的表和存储过程。
-
安装sybmgmtdb数据库
在安装Sybase ASE的过程中选择了"Job Scheduler"选项,则请跳过该步骤:"安装sybmgmtdb数据库"。如果在安装ASE的过程中没有选择Job Scheduler,则需要手动安装sybmgmtdb数据库。
-
创建数据库sybmgmtdb所需要的设备sybmgmtdev
可以通过两种方式来创建数据库sybmgmtdb:手动创建或者脚本自动创建。如果通过脚本来创建数据库sybmgmtdb,那么必须事先创建名称为:sybmgmtdev的设备。设备sybmgmtdev需要至少75MB的空间,建议配置设备sybmgmtdev的大小为:150MB。
在isql命令行下创建设备sybmgmtdev的语法为:
disk init
name='sybmgmtdev',
physname='/sybase/sybmgmtdev.dat',
size='150M'
go
上面的命令将设备sybmgmtdev创建在目录/sybase下,请根据具体情况来指定sybmgmtdev的设备文件路径,确保sybase用户对指定的目录具有写的权限即可。
-
创建 job scheduler 依赖的表和存储过程
通过运行脚本installjsdb来自动创建job scheduler工作所依赖的表和存储过程。脚本文件installjsdb在unix或linux平台下位于:$SYBASE/$SYBASE_ASE/scripts/installjsdb ,
在windows平台下位于:%SYBASE%\%SYBASE_ASE%\scripts\installjsdb
运行installjsdb脚本:
unix或linux平台:
isql –Usa –Psa_password –Sservername –i$SYBASE/$SYBASE_ASE/scripts/installjsdb -o$SYBASE/$SYBASE_ASE/scripts/job_scheduler.log
windows平台:
isql –Usa –Psa_password –Sservername –i%SYBASE%\%SYBASE_ASE%\scripts\installjsdb –o%SYBASE%\%SYBASE_ASE%\scripts\job_scheduler.log
脚本执行完毕后,检查生成的日志文件job_scheduler.log,确保数据库sybmgmtdb以及表、存储过程成功执行。
检查是否安装了sybmgmtdb数据库?
用isql登录ASE数据库,执行:
sp_helpdb sybmgmtdb
go
-
为JS代理创建目录服务条目
在目录服务条目中增加servername_JSAGENT,servername表示Sybase ASE数据库服务器名称。如果在安装Sybase ASE的过程中选择了"job scheduler"部件,则不需要再次添加JS服务条目。
确保在ASE的目录服务条目文件:
windows下为:%SYBASE%\ini\sql.ini
unix或linux下为:$SYBASE/interfaces
中存在servername_JSAGENT。假如Sybase ASE的服务器名称为:syb155,则在interfaces中存在如下内容即可。
syb155_JSAGENT
master tcp ether v880yf 4901
query tcp ether v880yf 4901
-
使用sp_addserver 在 sysservers 表中创建一个条
命令格式为:sp_addserver SYB_JSAGENT, null,<servername_JSAGENT>
假如ASE服务器名称为:syb155,则在上一步中增加的JS目录服务条目名称应该为:syb155_JSAGENT。
此时,执行如下的命令添加一条链接服务器信息:
sp_addserver SYB_JSAGENT,null, syb155_JSAGENT
-
配置自动启用 Job Scheduler
在isql命令行下执行:
sp_configure "enable job scheduler",1
或者:
在Sybase Central左边文件夹中的预定作业上点右键,
选择 管理 菜单
选中"在启动时启用 Job Scheduler"选项,表示Sybase ASE启动的时候会自动启动Job Sscheduler任务代理进程。
其中:Job Scheduler间隔参数表示Job Scheduler进程检查预定作业的频率;
并发执行的最大作业数量参数表示能够同时执行的预定作业数。
-
启动 Job Scheduler
用isql登录ASE服务器,执行:
use sybmgmtdb
go
sp_js_wakeup "start_js",1
go
或者在窗口中:
点 启动 按钮也能启动Job Scheduler任务进程。
-
设置Job Scheduler用户
设置用户以使他们可以在 sybmgmtdb 数据库中创建、管理或执行作业和日程表。
如果在安装ASE的过程中选择了"Job Scheduler"部件,则系统会自动创建登录jstask并在数据库sybmgmtdb中创建用户jstask。自动创建的登录jstask也被授予了js_admin_role和js_user_role两个角色。此时可以跳过该步骤"设置Job Scheduler用户"而用系统默认创建的登录jstask。
如果忘记了jstask登录的密码,请用下面的命令修改:
sp_password <sa_password>,<new_password>,jstask
比如:sa的密码为空,将登录jstask的密码设置成myjstask的命令为:
sp_password NULL,myjstask,jstask
go
创建登录jsuser
将登录jsuser的密码设定为jsuser,默认数据库为sybmgmtdb
use master
go
sp_addlogin jsuser,jsuser,sybmgmtdb
go
将用户jsuser添加到 sybmgmtdb 数据库
use sybmgmtdb
go
sp_adduser jsuser
go
此时用户名jsuser和上一步中建立的登录名jsuser是一样的。
为用户jsuser授予适当的角色
为用户jsuser授予任务调用的权限
sp_role 'grant', js_admin_role, jsuser
go
sp_modifylogin jsuser, 'add default role',js_admin_role
go
sp_role 'grant', js_user_role, jsuser
go
sp_modifylogin jsuser,'add default role',js_user_role
go
-
设置对目标服务器的访问权限
需要注意的两个概念:
一个是任务调度服务器,就是Job Scheduler安装运行的ASE服务器;
另外一个就是目的服务器,就是要调用的对象如SQL或者存储过程所在的服务器。
Job Scheduler将所有的目的服务器作为远程服务器对待。所以,这里要设置Job Scheduler对目的服务器的访问。
我们这个例子中使用的目的服务器和任务调度服务器在同一台ASE服务器上,将目的服务器换个别名syb155_js作为任务调度服务器的目的服务器。
sp_addserver syb155_js,ASEnterprise,syb155
go
实际上syb155_js还是指向了服务器syb155自己。
如果用任务调度服务器管理另外的ASE服务器作为目的服务器,则需要将另外ASE服务器作为链接服务器添加到任务调度服务器所在ASE服务器。
首先在任务调度服务器所在ASE服务器的interfaces文件中添加被管理的ASE服务器信息:然后执行:
sp_addserver target_servername, ASEnterprise,directoryservices_name
go
其中:target_servername 是在本地服务器的别名;
directoryservices_name 是目录服务文件中用于本地服务器的名称。
-
使用 sp_addexternlogin 为Job Scheduler用户jsuser添加登录名
使用存储过程sp_addexternlogin来添加用户在目标服务器上的外部登录名。
sp_addexternlogin target_servername, localname,remotename, remotepwd
其中:
target_servername 是您要在其上调度和运行作业的服务器。
localname 是用户在 Job Scheduler 服务器上的登录名。
remotename 是用户在目标服务器上的登录名。
remotepwd 是用户在目标服务器上的口令。
我们使用命令:
sp_addexternlogin syb155_js,jsuser,jsuser,jsuser
go
将任务调度服务器syb155上的登录jsuser映射到目的服务器(在同一台ASE服务器)syb155_js的登录jsuser上。目的服务器(在同一台ASE服务器)syb155_js的登录jsuser的密码也是jsuser。
-
通过Sybase Central图形界面管理Job Scheduler
先添加作业,再添加日程表,最后将作业绑定到日程表上,这样就生成了一个预定作业。
-
添加作业
在Sybase Central左边文件夹列表中选择预定作业下的作业,点右键,依次选择新建 作业
弹出如下所示作业创建向导
在命令文本框中输入作业的名称,如:backup_db_master,在说明文本框中输入该作业的描述信息。
点 下一步 继续
在作业命令中输入执行作业时所调用的SQL命令。作业中所有的T-SQL都是支持的。
点 装载 按钮,从sql脚本文件中加载SQL命令。
注意:登录必须被授予oper_role角色才能执行备份数据库的操作。
授予登录jsuser角色oper_role:
grant role oper_role to jsuser
go
点 下一步 继续,
保持默认,继续
预览作业的摘要信息,确认可以添加该作业,点 完成 按钮完成该作业backup_db_master的添加过程。
-
添加日程表
选择 新建 日程表
打开如下图所示日程表创建向导
点 下一步 继续,
设定日程时间段为:23:00~23:59
日程开始日期为当天:2010-11-11
该日程没有结束日期,表示每天都会执行。
日程的重复间隔为:1天。表示每天执行的意思。
预览日程表的摘要信息,确认没有问题,点 完成 按钮完成该日程的创建过程。
-
关联作业到日程表
选择刚才新建的作业:bacpup_db_master,右键选择 日程表
打开向导将作业关联到已经定义好的日程表上,
从日程表列表中选择:sche_backup_db_daily
选择目标ASE服务器为:syb155
保持默认选项即可,点 下一步 继续,
显示摘要信息:
点 完成 按钮,完成作业与日程表的关联。
-
添加预定作业
创建预定作业有两种方法:一种是在一个操作中同时指定作业信息和日程表信息;另外一种方法是,分别定义作业和日程表,然后将它们合并到一个预定作业中。
添加预定作业操作表示在添加作业的过程中能够关联到已有的日程表上,集成了作业添加、关联日程表等操作。
添加预定作业的过程和上面介绍的添加作业、添加日程表、关联作业到日程表这三个步骤类似,不再赘述。
-
手动执行预定作业
预定作业会在关联的日程表所指定的时间段内被执行。
如果想手动执行某个预定作业,可以选择预定作业,如backup_db_master,
在预定作业ID上点右键,选择 立即运行 菜单
-
查看作业历史
在Sybase Central左边文件夹列表中选择作业历史,在右边的作业历史详细信息中选择作业历史ID,点右键,选择 查看日志
作业日志信息如下:
-
通过命令行管理Job Scheduler
Job Scheduler中可用的存储过程及其用途如下表所示:
过程名称 |
过程用途 |
创建、修改、删除: |
|
sp_sjobcreate |
创建预定作业、作业或日程表 |
sp_sjobcmd |
管理作业的 SQL 命令文本 |
sp_sjobmodify |
修改预定作业、作业和日程表 |
sp_sjobdrop |
删除预定作业、作业和日程表 |
报告、列表: |
|
sp_sjobhelp |
报告并列出预定的和正在运行的作业 |
运行作业: |
|
sp_sjobcontrol |
利用 Job Scheduler 来管理和控制预定的或正在运行的作业 |
作业历史记录、输出: |
|
sp_sjobhistory |
查看和管理作业历史记录和输出 |
过程sp_sjobcreate的语法为:
sp_sjobcreate @name='jsname',@option='server,jname,jdesc,jcmd,sname,sdesc,repeats,properties,starttime,enddate,endtime,days,dates'
有两个参数:@name和@option,
@name (jname, sname, sjname),表示:新作业、日程表或预定作业的名称。
@option,表示:用于创建作业、日程表或预定作业的字段名称和值的按逗号分隔的列
表。这些值为:
-
server:运行作业的服务器名称。缺省为本地服务器。
-
jname:作业的名称,该名称必须是唯一的。
-
jdesc:描述作业的注释。
-
jcmd:SQL文本,当便于直接提供文本时,用于简单作业。
-
sname:日程表的名称,该名称必须是唯一的。
-
default_timeout:允许执行作业的最长时间。如果未设置预定作业的超时属性,则预定作业使用此值。
-
sdesc:描述日程表的注释。
-
timeout:预定作业可执行的最长时间。此值将取代作业的default_timeout 值。
-
repeats:日程表重复的时间间隔。0 或 NULL 表示不重复。该值为数字,其后跟随:
-
day 或 d
-
days 或 dd
-
hour 或 h
-
hours 或 hh
-
minute 或 m
-
minutes 或 mm
-
-
properties:作业、日程表或预定作业的属性:分别为 jproperties、sproperties 或 sjproperties。
-
startdate:日程表转入活动状态的日期。
-
starttime:预定作业开始执行的一天中的时间。
-
enddate:日程表转入不活动状态的日期。
-
endtime:日程表在此时间之后转入不活动状态。
-
days:以冒号分隔的天的列表。服务器现场环境中可能会使用全名或缩写。
-
dates:一个月中日期的列表,从 1 到 31,以冒号分隔。数字 32代表任何一个月的最后一天。
请注意:
-
在Sybase ASE中利用存储过程来管理Job Scheduler不像Sybase Central中的图形界面那样直观简单。除非Sybase Central不能使用时才建议用存储过程来管理调度作业计划;虽然Sybase Central在管理Job Scheduler的时候也是调用了这些存储过程,但是在命令行下直接执行存储过程来管理Job Scheduler费劲且容易出错。用存储过程来管理Job Scheduler会增加大量的管理成本。
-
本章:通过命令行管理Job Scheduler和上一章:通过Sybase Central图形界面管理Job Scheduler是并行的关系,也就是说:本章是上一章的替补。只有在具备第一章:配置和运行Job Scheduler所要求的条件后才能用命令行下的存储过程来管理Job Scheduler。
-
执行sp_sjobcreate以及sp_sjobcmd,sp_sjobmodify,sp_sjobdrop等其它过程必须具有:js_user_role或js_admin_role二者之一的角色;
-
过程sp_sjobcreate有两个参数:@name和@option,都是字符串类型的参数。可以采用如下两种形式来使用:
sp_sjobcreate @name='这是名称参数',@option='这是选项参数'
或者
sp_sjobcreate '这是名称参数','这是选项参数'
也就是说:@option和@name要么都写要么都不写。
-
可以简单的认为Job Scheduler只有三种对象类型:作业、日程表、已被调度的作业。已被调度的作业是作业和日程表的结合。
-
sp_sjobcreate,sp_sjobmodify,sp_sjobdrop,sp_sjobhelp等存储过程一般具有两个参数:@name和@option,第一个参数表示对象的类型,作业、日程表、已被调度的作业分别用jname,sname,sjname表示;第二个参数表示对第一个参数指定的对象所进行的操作类型。第一个参数如果不指定对象类型,默认是已被调度的作业sjname类型。
-
@name和@option这两个参数的值分别要用单引号对圈起来,单引号对内部允许使用单引号和双引号,但是单引号对内部的单引号必须进行转义。两个相邻的单引号可以转义成一个单引号。在用存储过程来创建作业的使用,务必注意单引号的匹配问题。建议在作业的命令语句统一用双引号。
-
存储过程的参数允许作业中命令语句有换行。
-
必须切换到系统数据库sybmgmtdb里才能执行这些存储过程,使用use sybmgmtdb命令。
-
建议参数@name 和@option的值使用单引号包起来,命令语法中的单引号利用成对的形式进行转义,双引号不用转义。
-
约定:作业名称以j_开头,日程表以s_开头,预定作业以sj_开头。
下面在命令行下用存储过程来执行和上一章在Sybase Central图形界面管理Job Scheduler相类似的操作。
-
添加作业
作业名称: |
j_backup_db_master |
作业说明: |
backup master database daily |
作业命令: |
declare @currentdate char(8),@dbname varchar(255) select @currentdate=convert(char(8),getdate(),112) select @dbname='d:\syb_data\master'+@currentdate+'.dmp' dump database master to @dbname go |
选项: |
允许其他人使用此作业 |
分两步:
第一步:先添加一个不包含命令语法的作业:backup_db_master
use sybmgmtdb
go
sp_sjobcreate @name='jname=j_backup_db_master',@option='jdesc=backup master database daily,jproperties=shared'
go
第二步:为新添加的作业追加命令语法
use sybmgmtdb
go
sp_sjobcmd @name='jname=j_backup_db_master',@option='add',@text='
declare @currentdate char(8)
declare @dbname varchar(255)
select @currentdate=convert(char(8),getdate(),112)
select @dbname="d:\syb_data\master"+@currentdate+".dmp"
dump database master to @dbname
go'
go
需要注意:
-
必须用sp_sjobcreate创建一个作业,才能用sp_sjobcmd为其添加命令语法。
-
过程sp_sjobcreate的第二个参数@option允许使用jcmd选项来添加命令语法,但是参数@option中的各个选项是用逗号进行分隔的,所以在命令语法中不能有逗号,否则解析错误。如果作业的命令语法中不包含逗号,可以使用sp_sjobcreate一行命令来完成作业的添加工作。
-
注意第二步中蓝色标记的内容来作业要执行的命令语法。过程sp_sjobcmd的第三个参数是@text,这个参数允许换行,允许包含逗号,允许语法中包含单引号和双引号。建议使用单引号来包含@text表示的内容,这样的话:如果命令参数中有单引号,通过两个单引号进行转义,双引号不用转义。
-
添加日程表
上面步骤中添加的备份master数据库的作业,每周六晚上23:00备份一次。日程表名称为:s_backup_db_master。使用存储过程来实现上述要求如下:
use sybmgmtdb
go
sp_sjobcreate @name='sname= s_backup_db_master',@option='starttime=23:00,endtime=23:00,days=Saturday'
go
添加一个日程表,每天的00:00至23:59,每三小时执行一次。日程表名称为:s_AGGRE_info
请使用下面的语句:
use sybmgmtdb
go
sp_sjobcreate @name='sname=s_AGGRE_info',@option='repeats=3hours,starttime=00:00,endtime=23:59'
go
注意:
-
日程表中days表示每周中的哪天,dates表示一月中日期的列表。
- 每周的天的列表需要用英文单词表示,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday,之间用冒号分隔。
-
dates一个月中日期的列表,从 1 到 31,以冒号分隔。数字 32代表任何一个月的最后一天。
-
days和dates不能同时使用。
-
关联作业到日程表
将上面添加的作业j_backup_db_master绑定到日程表s_backup_db_master上,来生成一个预定作业sj_backup_db_master。这样作业j_backup_db_master中的备份master数据库的命令就在会每周六的23点进行执行了。
use sybmgmtdb
go
sp_sjobcreate @name='sjname=sj_backup_db_master',@option='server=TEST,jname=j_backup_db_master,sname=s_backup_db_master'
go
-
添加预定作业
将上面三个步骤中的任务一次执行,命令如下:
use sybmgmtdb
go
sp_sjobcreate @name='sjname=sj_backup_db_master',@option='server=TEST,jname=j_backup_db_master,sname=s_backup_db_master,jdesc=backup_master_database_daily,jproperties=shared,starttime=23:00,endtime=23:00,days=Saturday'
go
sp_sjobcmd @name='jname=j_backup_db_master',@option='add',@text='
declare @currentdate char(8)
declare @dbname varchar(255)
select @currentdate=convert(char(8),getdate(),112)
select @dbname="d:\syb_data\master"+@currentdate+".dmp"
dump database master to @dbname
go'
go
-
用命令执行预定作业
用存储过程来执行上面添加的预定作业:sj_backup_db_master,使用:
use sybmgmtdb
go
sp_sjobcontrol @name='sjname=sj_backup_db_master',@option='run_now'
go
-
查看作业、日程表、预定作业、作业历史
查询Job Scheduler中的作业、日程表、预定作业使用存储过程:sp_sjobhelp,查看作业历史信息使用过程sp_sjobhistory,这两个过程都有两个参数:@name和@option,一般使用第一个参数@name即可。
-
查看作业信息
比如查看作业j_backup_db_master的信息,使用如下命令:
exec sybmgmtdb.dbo.sp_sjobhelp @name='jname=j_backup_db_master'
go
可以看到如下信息:
如果想查看作业j_backup_db_master执行的命令语法,需要使用另外一个存储过程:sp_sjobhelp,方法如下:
use sybmgmtdb
go
sp_sjobcmd @name='jname=j_backup_db_master'
go
也可以在interactive SQL中查看作业、日程表、预定作业等信息。
-
查看日程表信息
查看日程表s_backup_db_master 的信息使用如下语句:
use sybmgmtdb
go
sp_sjobhelp @name='sname=s_backup_db_master'
go
该日程为每周六的23:00执行。
-
查看预定作业信息
查看预定作业sj_backup_db_master的信息使用如下命令:
use sybmgmtdb
go
sp_sjobhelp @name='sjname=sj_backup_db_master'
go
输出结果中会显示作业以及日程表的信息。
-
查看作业历史信息
查看预定作业sj_backup_db_master的执行历史信息,使用如下命令:
use sybmgmtdb
go
sp_sjobhistory @name='sjname=sj_backup_db_master'
go
也可以在参数@option中加list_short 或者 list_output。如:
sp_sjobhistory @name='sjname=sj_backup_db_master',@option='list_output'
go
输出为:
jsout_run_id jsout_seqno jsout_size jsout_text
------------ ----------- ----------- ----------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------
16 0 900 Changed database context to 'master'.
WARNING: In order to LOAD the master database, the ASE must run in single-user mode. If the master database dump uses mu
ltiple volumes, you must execute sp_volchanged on another ASE at LOAD time in order to signal volume changes.
Backup Server session id is: 28. Use this value when executing the 'sp_volchanged' system stored procedure after fulfi
lling any volume change request from the Backup Server.
Backup Server: 6.28.1.1: Dumpfile name 'master10362119D9 ' section number 1 mounted on disk file 'd:\syb_data\master2010
1228.dmp'
Backup Server: 4.188.1.1: Database master: 2732 kilobytes (18%) DUMPED.
Backup Server: 4.188.1.1: Database master: 11858 kilobytes (100%) DUMPED.
Backup Server: 3.43.1.1: Dump phase number 1 completed.
Backup Server: 3.43.1.1: Dump phase number 2 completed.
Backup Server: 3.43.1.1: Dump phase number 3 completed.
Bac
16 1 900 kup Server: 4.188.1.1: Database master: 11868 kilobytes (100%) DUMPED.
Backup Server: 3.42.1.1: DUMP is complete (database master).
(2 rows affected)
(return status = 0)
1>
-
删除预定作业、日程表、作业,作业历史信息
使用过程sp_sjobdrop来删除预定作业、日程表、作业。删除作业历史需要使用过程:sp_sjobhistory。如果作业或者日程表上有关联的预定作业,必须先删除预定作业后才允许删除作业或者日程表。
-
删除预定作业
use sybmgmtdb
go
sp_sjobdrop @name='sjname=sj_backup_db_master'
go
-
删除日程表
use sybmgmtdb
go
sp_sjobdrop @name='sname=s_backup_db_master'
go
-
删除作业
use sybmgmtdb
go
sp_sjobdrop @name='jname=j_backup_db_master'
go
-
删除作业历史记录
为了防止意外删除所有作业历史记录或输出日志,当您使用 drop 选项但不使用过滤参数调用 sp_sjobhistory 时,将发生错误;必须至少提供一个过滤参数。
删除sa用户的作业历史记录,
use sybmgmtdb
go
sp_sjobhistory @option='drop,user=sa'
go
或者删除预定作业sj_backup_db_master的所有预定作业历史记录,使用如下命令:
use sybmgmtdb
go
sp_sjobhistory @name='sjname=sj_backup_db_master',@option='drop'
go
-
注意事项
-
Sybase Central的版本问题
Sybase ASE15.0.3自带的Sybase Central客户端工具在添加日程表的过程中,会报java堆栈溢出的错误,导致不能用图形界面来完成job scheduler的管理操作。这很可能是Sybase Central的bug。
解决办法:
使用Sybase ASE15.5自带的Sybase Central工具。
-
配置参数
cis rpc handling 参数为远程过程调用 (RPC) 处理指定了缺省方法。将 cis rpc handling 设置为 0 表示将 Adaptive Server 节点处理器设置为缺省的RPC 处理机制。将该参数设置为 1 将强制 RPC 处理使用组件集成服务访问方法。
sp_configure "cis rpc handling",1
go
我依照博主的步骤来创建预定作业,完成后执行,可它的状态显示为unknown,也没有相应的作业历史。我并没有修改sql.ini文件,只是直接地用sp_addserver来指向本机,也赋予了相应的用户及角色,问题感觉是出现在这部分,请问能提出一些排查的建议吗?谢谢。
你设置的目标服务器是本地服务器吧。使用sp_addexternlogin 映射远程服务器的登录名到本地登录了吗?
job scheduler启动了吗?job scheduler启动后会有jsagent进程,你执行:ps -ef|grep jsagent
不好意思,这么晚才回复。
我没有修改过sql.ini文件,设置的target ASE也是指向本机,所以也是本机的服务器的。 Job scheduler启动了,查询到有jsagent的进程。
现在貌似可以了!一开始我用sa建schedule job,可是在配置过程中没有勾选allow other user to run this job/ schedule. 然后我配置的external login对应回用户jsuser. 所以估计这样Jsuser跑不了sa建的schedule job。 第二次,我继续用sa建,也配置了允许其他用户来跑,jsuser 的external login 也配置为sa, 可还是跑不了。。。第三次我用jsuser 自建也映射回自己,最后可以跑了,也有Job history!!太感谢你了!!!谢谢。
请教启动 Job Scheduler時errorlog中出现以下信息会是什么问题?
03:00000:00129:2013/02/28 15:59:40.30 kernel Initializing Job Scheduler Task
03:00000:00129:2013/02/28 15:59:40.33 kernel Installed Job Scheduler sequencer code version 0.27 – 27 tokens
03:00000:00129:2013/02/28 15:59:41.36 kernel Job Scheduler Task state set to running, startcount 14.
03:00000:00129:2013/02/28 15:59:42.36 kernel Job Scheduler Task connected with Agent on port 4900
03:00000:00129:2013/02/28 15:59:42.36 server Error: 571, Severity: 16, State: 1
03:00000:00129:2013/02/28 15:59:42.36 server Invalid user specified, password left unchanged.
03:00000:00129:2013/02/28 15:59:42.39 kernel Job Scheduler Task lost its Agent connection (No error)
03:00000:00129:2013/02/28 15:59:50.56 kernel Job Scheduler Task failed (re)connecting to its Agent (No error)
03:00000:00129:2013/02/28 15:59:50.56 kernel Job Scheduler Task state set to stop
Error: 571, Severity: 16, State: 1 Invalid user specified, password left unchanged.
你使用哪个登录启动的JS,该登录是否具有js_admin的权限呢?
按你上面說的新建一個用戶授權也出現同樣的問題。