ジョブ ステップの作成
ジョブ ステップは、ジョブがデータベースまたはサーバーで行う処理です。すべてのジョブには、最低 1 つのジョブ ステップを含める必要があります。ジョブ ステップには次のような種類があります。
- 実行可能プログラムまたはオペレーティング システムのコマンド。
- Transact-SQL ステートメント。ストアド プロシージャと拡張ストアド プロシージャを含みます。
- Microsoft ActiveX スクリプト。
- レプリケーション タスク。
- Analysis Services タスク。
- Integration Services パッケージ。
各ジョブ ステップは特定のセキュリティ コンテキストで実行されます。ジョブ ステップがプロキシを指定している場合、このジョブ ステップは指定されたプロキシの資格情報のセキュリティ コンテキストで実行されます。ジョブ ステップがプロキシを指定していない場合、このジョブ ステップは SQL Server エージェント サービス アカウントのコンテキストで実行されます。プロキシを明示的に指定せずにジョブを作成できるのは、sysadmin 固定サーバー ロールのメンバのみです。
ジョブ ステップは特定の Microsoft Windows ユーザーのコンテキストで実行されるので、ユーザーには、ジョブ ステップの実行に必要なアクセス許可と構成が必要です。たとえば、ドライブ文字または汎用名前付け規則 (UNC) パスを必要とするようなジョブを作成した場合、タスクのテスト時にはジョブ ステップを作成者の Microsoft Windows ユーザー アカウントで実行していることがあります。ところが、このジョブ ステップの Windows ユーザーにも、このジョブ ステップを実行するためのアクセス許可、ドライブ文字構成、指定ドライブへのアクセスが必要になります。そうでなければ、このジョブ ステップは失敗します。この問題を回避するには、各ジョブ ステップのプロキシに、ジョブ ステップで実行するタスクに対して必要なアクセス許可が設定されていることを確認してください。詳細については、「SQL Server のセキュリティに関する注意点」を参照してください。
ジョブ ステップのログ
SQL Server エージェントは、オペレーティング システム ファイルまたは msdb データベースの sysjobstepslogs テーブルに、一部のジョブ ステップからの出力を書き込むことができます。両方の出力先に出力を書き込めるジョブ ステップの種類は次のとおりです。
- 実行可能プログラムまたはオペレーティング システムのコマンド。
- Transact-SQL ステートメント。
- Analysis Services タスク。
ジョブ ステップの出力をオペレーティング システム ファイルに書き込めるのは、sysadmin 固定サーバー ロールのメンバであるユーザーが実行するジョブ ステップのみです。ジョブ ステップを実行するユーザーが、msdb データベースの SQLAgentUserRole 固定データベース ロール、SQLAgentReaderRole 固定データベース ロール、または SQLAgentOperatorRole 固定データベース ロールのメンバである場合、ジョブ ステップの出力は sysjobstepslogs テーブルにのみ書き込むことができます。
ジョブ ステップのログは、ジョブまたはジョブ ステップが削除されると自動的に削除されます。
メモ : |
---|
レプリケーション タスクと Integration Services パッケージのジョブ ステップのログ記録は、それぞれのサブシステムによって処理されます。これらのタイプのジョブ ステップについては、SQL Server エージェントを使用してジョブ ステップのログ記録を構成することはできません。 |
ジョブ ステップとしての実行可能プログラムとオペレーティング システム コマンド
実行可能プログラムとオペレーティング システム コマンドは、ジョブ ステップとして使用できます。これらのファイルの拡張子は、.bat、.cmd、.com、または .exe です。
実行可能プログラムまたはオペレーティング システム コマンドをジョブ ステップとして使用する場合は、次の項目を指定する必要があります。
- コマンドが正常に終了した場合に返されるプロセス終了コード。
- 実行するコマンド。オペレーティング システム コマンドを実行する場合、これはコマンド自体を指します。外部プログラムの場合は、C:\Program Files\Microsoft SQL Server\90\Tools\Binn\sqlcmd.exe -e -q "sp_who" など、プログラム名とそのプログラムの引数を指します。
メモ : システム パスまたはジョブ ステップの実行ユーザーのパスで指定されたディレクトリ内に、実行可能ファイルが存在しない場合は、実行可能ファイルの完全パスを指定する必要があります。
実行可能プログラムを使用してジョブ ステップを作成するには
- CmdExec ジョブ ステップを作成する方法 (SQL Server Management Studio)
- sp_add_jobstep (Transact-SQL)
- SQL Server 管理オブジェクト (SMO)
SQL Server エージェントのアクセス許可をリセットするには
Transact-SQL ジョブ ステップ
Transact-SQL ジョブ ステップを作成するには、次の操作を行う必要があります。
- ジョブを実行するデータベースを特定します。
- 実行する Transact-SQL ステートメントを入力します。このステートメントで、ストアド プロシージャまたは拡張ストアド プロシージャを呼び出すことができます。
必要に応じて、ジョブ ステップのコマンドとして既存の Transact-SQL ファイルを開くことができます。
Transact-SQL ジョブ ステップでは SQL Server エージェント プロキシを使用しません。このジョブ ステップはジョブ ステップの所有者として実行されるか、ジョブ ステップの所有者が sysadmin 固定サーバー ロールのメンバの場合には SQL Server エージェント サービス アカウントとして実行されます。sysadmin 固定サーバー ロールのメンバは、sp_add_jobstep ストアド プロシージャの database_user_name パラメータを使用して、別のユーザーのコンテキストで Transact-SQL ジョブ ステップが実行されるように指定することもできます。詳細については、「sp_add_jobstep (Transact-SQL)」を参照してください。
メモ : |
---|
1 つの Transact-SQL ジョブ ステップに複数のバッチを含めることができます。Transact-SQL ジョブ ステップには埋め込み GO コマンドを含めることができます。 |
Transact-SQL ジョブ テップを作成するには
- Transact-SQL ジョブ ステップを作成する方法 (SQL Server Management Studio)
- sp_add_jobstep (Transact-SQL)
- SQL 管理オブジェクト (SMO)
Transact-SQL ジョブ ステップのオプションを定義するには
ActiveX スクリプティング ジョブ ステップ
ActiveX スクリプティング ジョブ ステップを作成するには、次の操作を行う必要があります。
- ジョブ ステップを記述するスクリプティング言語を特定します。
- ActiveX スクリプトを記述します。
ジョブ ステップのコマンドとして既存の ActiveX スクリプト ファイルを開くこともできます。ActiveX スクリプト コマンドは、Microsoft Visual Basic などを使用して外部でコンパイルし、実行可能プログラムとして実行することもできます。
ジョブ ステップ コマンドが ActiveX スクリプトの場合は、SQLActiveScriptHost オブジェクトを使用してジョブ ステップ履歴ログに出力するか、COM オブジェクトを作成することができます。SQLActiveScriptHost は、SQL Server エージェントのホスト システムによってスクリプト名前空間に導入されるグローバル オブジェクトです。このオブジェクトには、Print および CreateObject という 2 つのメソッドがあります。次の例は、Visual Basic Scripting Edition (VBScript) での ActiveX スクリプティングの動作を示しています。
' VBScript example for ActiveX Scripting job step
Sub main()
' Create a Smo.Server object. The object connects to the
' server on which the script is running.
Set SmoServer = _
CreateObject ("Microsoft.SqlServer.Management.Smo.Server")
' Check the number of active connections for AdventureWorks.
ConnectionCount = _
SmoServer.GetActiveDbConnectionCount("AdventureWorks")
' If there are active connections, close the connections.
If ConnectionCount > 0 Then
' Log in the job history that this job step dropped
' connections to AdventureWorks.
Print ("Dropping connections to AdventureWorks." + crLf )
' Drop all active connections to AdventureWorks.
SmoServer.DropAllActiveDbConnections("AdventureWorks")
End If
End Sub
次の例は、JScript での同様の動作を示しています。
// JScript example for ActiveX job step
function main() {
// Create a Smo.Server object. The object connects to the
// server on which the script is running.
var SmoServer =
CreateObject("Microsoft.SqlServer.Management.Smo.Server");
// Check the number of active connections for AdventureWorks.
var ConnectionCount =
SmoServer.GetActiveDbConnectionCount("AdventureWorks");
// If there are active connections, close the connections.
if (ConnectionCount > 0) {
// Log in the job history that this job step dropped
// connections to AdventureWorks.
Print ("Dropping connections to AdventureWorks.\n");
// Drop all active connections to AdventureWorks.
SmoServer.DropAllActiveDbConnections("AdventureWorks");
}
}
ActiveX スクリプト ジョブ ステップを作成するには
- ActiveX スクリプト ジョブ ステップを作成する方法 (SQL Server Management Studio)
- sp_add_jobstep (Transact-SQL)
- SQL 管理オブジェクト (SMO)
レプリケーション ジョブ ステップ
レプリケーションを使用してパブリケーションとサブスクリプションを作成した場合、既定でレプリケーション ジョブが作成されます。作成されるジョブの種類は、レプリケーションの種類 (スナップショット レプリケーション、トランザクション レプリケーション、またはマージ レプリケーション) と使用するオプションによって決まります。
レプリケーション ジョブ ステップでは、次のレプリケーション エージェントのいずれかがアクティブになります。
- スナップショット エージェント (スナップショット ジョブ)
- ログ リーダー エージェント (LogReader ジョブ)
- ディストリビューション エージェント (ディストリビューション ジョブ)
- マージ エージェント (マージ ジョブ)
- キュー リーダー エージェント (QueueReader ジョブ)
レプリケーションのセットアップ時には、レプリケーション エージェントを SQL Server エージェント起動後に連続的に実行するか、要求に応じて実行するか、またはスケジュールに従って実行するかを指定できます。レプリケーション エージェントの詳細については、「レプリケーション エージェントの概要」を参照してください。
Analysis Services ジョブ ステップ
SQL Server エージェントでは、コマンド ジョブ ステップとクエリ ジョブ ステップという 2 種類の Analysis Services ジョブ ステップがサポートされます。
Analysis Services コマンド ジョブ ステップ
Analysis Services コマンド ジョブ ステップを作成するには、次の操作を行う必要があります。
- ジョブ ステップが実行される OLAP サーバーのデータベースを特定します。
- 実行するステートメントを入力します。このステートメントでは、XML for Analysis Services の Execute メソッドを使用する必要があります。完全な SOAP エンベロープまたは XML for Analysis Services Discover メソッドをステートメントに含めることはできません。SQL Server Management Studio では完全な SOAP エンベロープと XML for Analysis Services の Discover メソッドがサポートされますが、SQL Server エージェント ジョブ ステップではサポートされないことに注意してください。
XML for Analysis Services の詳細については、「XML for Analysis の概要 (XMLA)」を参照してください。
Analysis Services クエリ ジョブ ステップ
Analysis Services クエリ ジョブ ステップを作成するには、次の操作を行う必要があります。
- ジョブ ステップが実行される OLAP サーバーのデータベースを特定します。
- 実行するステートメントを入力します。このステートメントでは、多次元式 (MDX) クエリを使用する必要があります。
MDX の詳細については、「MDX クエリの基礎 (MDX)」を参照してください。
Integration Services パッケージ
Integration Services パッケージを作成するには、次の操作を行う必要があります。
- パッケージのソースを特定します。
- パッケージの場所を特定します。
- パッケージに構成ファイルが必要な場合は、構成ファイルを特定します。
- パッケージにコマンド ファイルが必要な場合は、コマンド ファイルを特定します。
- パッケージに使用する検証方法を特定します。たとえば、パッケージに署名や特定のパッケージ ID が必要であることを指定できます。
- パッケージのデータ ソースを特定します。
- ログ プロバイダを特定します。
- パッケージを実行する前に、変数と値を指定します。
- 実行オプションを特定します。
- コマンド ライン オプションを追加または変更します。
Integration Services パッケージを実行するジョブ ステップの作成に関する詳細については、「SQL Server エージェント ジョブを使用してパッケージを実行する方法」を参照してください。
参照
概念
その他の技術情報
sysjobstepslogs (Transact-SQL)
sp_add_job (Transact-SQL)