程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 使用SQL Server代理運行CmdExec命令

使用SQL Server代理運行CmdExec命令

編輯:關於SqlServer

需求:調用網服務器(SMS SQL Server)上的短信發送接口(是一個存儲過程)來發送(Stage SQL Server)上的數據內容到本Team 成員的手機上。這兩台服務器,本地在撥VPN後可以訪問。要求以本地的SQL Server做跳轉,同時調用這兩台服務器的數據接口。

實現方法與步驟(在本地的SQL Server環境):

1、創建一個SQL Server Job

2、創建一個調用 操作系統(CmdExec)命令的Job步驟,調用命令以完成自動撥VPN的功能。

代碼如:

rasdial idc_name user_name user_password

3、創建鏈接服務器SMS SQL Server和Stage SQL Server。

4、創建一個讀取Stage SQL Server上需要發送的數據內容,並調度SMS SQL Server的短信發送接口,完成短信發送的Job步驟(T-SQL)。

5、創建一個CmdExec的Job步驟,調用命令完成自動斷開VPN的功能。

代碼如:

rasdial idc_name /disconnect

6、設置這三個步驟的先後順序(2,4,5)。並設置調度頻率為每天早上9點。

該過程中可能涉及到兩個問題,如下:

1、分別調用兩個服務器上的存儲過程,可能需要打開分布式事務。簡要步驟如下:

運行dcomcnfg命令,組件服務,計算機,我的電腦,屬性,MSDTC,安全配置

選中“網絡DTC訪問”

在客戶端管理中選中“允許遠程客戶端”“允許遠程管理”

在事務管理通訊中選“允許入站”“允許出站”“不要求進行驗證”

保證DTC登陸賬戶為:NT Authority\NetworkService

2、執行CmdExec步驟的默認帳號是SQL Server代理的啟動帳號,一般是 NT AUTHORITY\NetworkService,該帳號不是sysadmin組,

不具備執行該命令的權限。所以可能需要修改代理的啟動帳號為有權限的帳號。

總結:本文總結問題的關鍵在於把握分布式事務的正確開啟以及SQL Server代理中,通常執行Job的帳號AUTHORITY\NetworkService並不屬於系統管理員組,代理執行一些任務失敗時,注意觀察所執行操作需要的權限,例如本文的執行CmdExec命令,就需要sysadmin或者操作系統管理員的權限。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved