活着的死人 发表于 2015-1-16 14:09:00

使用SQL SERVER功课主动启动盘算机服务

支持多线程,充分利用CPU资源成绩缘故原由:
由于本人地点的项目必要一个服务来撑持运转,但在完成服务代码后发明该服务在一些电脑上其实不能主动运转,找了良多天的bug,也未找出成绩地点。终极想到一个折衷的办法,就是在SQLSERVER中增加一个功课,然后在该功课中启动服务,并设置该功课为SQLSERVER服务启动时运转。如许就能够办理服务不克不及主动启动的成绩了。

在该功课顶用到六个体系存储历程:
1,sp_add_job--增加由SQLServerAgent服务实行的新功课。
2,sp_add_jobstep--在功课中增加一个步骤(操纵)。
3,sp_update_job--变动功课的属性。
4,sp_add_jobschedule--创立功课企图。
5,sp_add_jobserver--在指定的服务器中,以指定的功课为方针。
6,sp_add_category--将指定的功课、警报或操纵员种别增加到服务器中。

以上体系存储历程详细用法请参看MSDN匡助文档。

示例代码:
/******工具:Job[启动Custom_SERVER服务]剧本日期:09/14/201111:13:01******/
BEGINTRANSACTION
DECLARE@ReturnCodeINT
SELECT@ReturnCode=0
/******工具:JobCategory[]]剧本日期:09/14/201111:13:01******/
IFNOTEXISTS(SELECTnameFROMmsdb.dbo.syscategoriesWHEREname=NANDcategory_class=1)
BEGIN

EXEC@ReturnCode=msdb.dbo.sp_add_category@class=NJOB,@type=NLOCAL,@name=N
IF(@@ERROR0OR@ReturnCode0)GOTOQuitWithRollback

END

DECLARE@jobIdBINARY(16)
EXEC@ReturnCode=msdb.dbo.sp_add_job@job_name=N启动Custom_SERVER服务,
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N无形貌。,
@category_name=N,
@owner_login_name=NSERVERAdministrator,@job_id=@jobIdOUTPUT
IF(@@ERROR0OR@ReturnCode0)GOTOQuitWithRollback

/******工具:Step[启动Custom_SERVER服务]剧本日期:09/14/201111:13:02******/
EXEC@ReturnCode=msdb.dbo.sp_add_jobstep@job_id=@jobId,@step_name=N启动Custom_SERVER服务,
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=5,
@retry_interval=1,
@os_run_priority=0,@subsystem=NTSQL,
@command=Nexecmaster..xp_cmdshellnetstartCustom_SERVER,
@database_name=Nmaster,
@flags=0
IF(@@ERROR0OR@ReturnCode0)GOTOQuitWithRollback

EXEC@ReturnCode=msdb.dbo.sp_update_job@job_id=@jobId,@start_step_id=1
IF(@@ERROR0OR@ReturnCode0)GOTOQuitWithRollback

EXEC@ReturnCode=msdb.dbo.sp_add_jobschedule@job_id=@jobId,@name=N启动Custom_SERVER服务,
@enabled=1,
@freq_type=64,
@freq_interval=0,
@freq_subday_type=0,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20110511,
@active_end_date=99991231,
@active_start_time=0,
@active_end_time=235959
IF(@@ERROR0OR@ReturnCode0)GOTOQuitWithRollback

EXEC@ReturnCode=msdb.dbo.sp_add_jobserver@job_id=@jobId,@server_name=N(local)
IF(@@ERROR0OR@ReturnCode0)GOTOQuitWithRollback
COMMITTRANSACTION
GOTOEndSave
QuitWithRollback:
IF(@@TRANCOUNT>0)ROLLBACKTRANSACTION
EndSave:
提供多语言支持,常见的编码如中文的GB2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。

飘飘悠悠 发表于 2015-1-18 12:17:05

我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!

冷月葬花魂 发表于 2015-1-26 16:48:56

也可谈一下你是怎么优化存储过程的?

只想知道 发表于 2015-2-4 20:47:07

现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.

兰色精灵 发表于 2015-3-1 09:43:11

一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)

金色的骷髅 发表于 2015-3-10 17:01:00

习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。

因胸联盟 发表于 2015-3-17 09:11:30

无法深入到数据库系统层面去了解和探究

蒙在股里 发表于 2015-3-24 05:47:03

可以动态传入参数,省却了动态SQL的拼写。
页: [1]
查看完整版本: 使用SQL SERVER功课主动启动盘算机服务