トップページへ PASSJ ブログへ
トップページへ
分科会
特集!
コミュニケーション
資格
セミナー・コンファレンス
インフォメーション
エラーでおぼえる!? SQL Server 2000 管理運用術
文=鈴木智行(NEC Eラーニング事業部)
第4回
ジョブが失敗する?
データベース管理作業は1回限りではなく、定期的に繰り返し行う場合がほとんどです。そういった場合、SQL Serverでは「ジョブ」を使用することで定期的なタスクをスケジューリングできます。今回は、ジョブに絡んだエラーの要因や注意すべき点をご紹介しましょう。

目次
ジョブの実行権限は「所有者」が重要
「Transact-SQL」のタスクの場合
「オペレーティングシステムコマンド」および「ActiveX スクリプト」のタスクの場合
SQLServerAgent のサービスアカウント
〜最後に〜

ジョブの実行権限は「所有者」が重要


ジョブの管理作業(タスク)として 、「Transact-SQL」、「オペレーティングシステムコマンド(CmdExec)」、「ActiveX スクリプト」を登録することができますが、もちろん登録したタスクは権限がなければ実行できません。では、誰の権限でタスクが実行されるかというと、「ジョブの所有者」が重要なファクターとなります。ジョブの所有者は、SQL Server Enterprise Manager で登録されているジョブを右クリックし、[プロパティ]- [全般] タブで確認できます(画面1)。

■ 画面1 ジョブの所有者を確認
(図)ジョブの所有者を確認


「Transact-SQL」のタスクの場合


Transact-SQLの場合の実行ユーザーは、【画面 1】で指定したジョブの所有者自身、もしくはジョブの所有者がジョブステップの [詳細設定] タブで特定のユーザーを[実行時のユーザー]として指定することができます(画面2)。

■ 画面2 Transact-SQLのタスクの実行ユーザー指定
(図)Transact-SQLのタスクの実行ユーザー指定

たとえば、コンピュータBRISBANE上に下記のようなジョブを作成します。

ジョブ名 週末処理
所有者 BRISBANE\UserA
ジョブステップ Insert t_新製品 Select * from t_新製品差分

上記のジョブステップでは、t_新製品テーブルのInsert権限、t_新製品差分テーブルのSelect権限が必要になりますが、これらのオブジェクト権限を持たないユーザーを所有者にした場合、ジョブは失敗します。失敗の状況は[ジョブヒストリ]で確認できます(画面3)。この例では所有者を設定しましたが、ジョブステップでデータベースユーザーを指定した場合も同様です。

■ 画面3 [ジョブヒストリ]で失敗の状況を確認
(図)[ジョブヒストリ]で失敗の状況を確認


「オペレーティングシステムコマンド」および「ActiveX スクリプト」のタスクの場合


オペレーティングシステムコマンドおよび ActiveX スクリプトの場合の実行ユーザーは、ジョブの所有者が sysadmin 固定サーバーロールのメンバかどうかで異なります。

sysadmin 固定サーバーロールのメンバの場合は、 SQLServerAgent のサービスアカウントが適切な権限を持っている必要があります。

sysadmin 固定サーバーロールのメンバでない場合、デフォルトではジョブを実行できません。これは [SQL Server エージェント] を右クリックし、[プロパティ]- [ジョブシステム] タブで確認できます(画面4)。

■ 画面4 SQL Serverエージェントのプロパティ- [ジョブシステム]
(図)SQL Serverエージェントのプロパティ- [ジョブシステム]

たとえば、所有者に「BRISBANE\UserA」という一般ユーザーを指定して、ジョブステップをCmdExecにするとジョブは失敗します(画面5)。

■ 画面5 オペレーティングシステムコマンド(CmdExec)のジョブステップに失敗
(図)オペレーティングシステムコマンド(CmdExec)のジョブステップに失敗

ただし、Windows 管理者アカウントであれば sysadmin 固定サーバーロールのメンバ以外のドメインユーザーアカウントにオペレーティングシステムコマンドおよび ActiveX スクリプトの実行を許可することができます。このドメインユーザーアカウントのことを 「SQL Serverエージェントプロキシアカウント」 といい、【画面4】のチェックをはずすことでプロキシアカウントの設定が可能です(画面6)。

■ 画面6 プロキシアカウントの設定画面
(図)プロキシアカウントの設定画面


SQLServerAgent のサービスアカウント


SQL Server のセットアップ時には、 SQLServerAgent に対してサービスアカウントを割り当てます。このとき、ローカルシステムアカウントまたはドメインユーザーアカウントを使用することができ、デフォルトの設定では MSSQLServer と同じアカウントが使用されます(画面7)。

■ 画面7 サービスアカウントの設定画面
(図)サービスアカウントの設定画面


ローカルシステムアカウントを指定した場合は、ユーザー名およびパスワードの指定は必要ありませんが、SQLServerAgent がネットワークアクセス権をもたず、以下のような処理を実行できなくなります。

別なネットワーク上のリソースにアクセスする
マルチサーバージョブをセットアップする
メールで通知を行う
レプリケーション など


したがって、特別な事情がない限りは Administrators ローカルグループのメンバであるユーザーをドメインユーザーアカウントに指定した方が、余計なトラブルを防いで管理を簡単にすることができます。

サービスアカウントは、SQL Serverのセットアップ後にも変更することができます。SQL Server エージェントを右クリックし、[プロパティ]‐[全般]タブの「サービス開始アカウント」で設定します(画面8)。ただし、サービスアカウントは「サービスとしてログオン」の権限が必要になり、この権限はSQL Server Enterprise Managerのインタフェースでは自動設定されないので、注意してください。

■ 画面8 サービスアカウントの変更
(図)サービスアカウントの変更


〜最後に〜


ジョブは非常に優れた機能であり、これを活用すればタスクの自動実行が可能となるのですが、だからといって管理者は何もしなくていいわけではありません。上記のようなトラブルを早急に解決するためには、ジョブの終了ステータスを監視する必要があります。ジョブにはオペレータへの通知機能もありますので、SQL Serverの管理で「楽をしたい方」は、ぜひジョブを深く勉強してください。




・ 第1回 リモートからSQL Server 2000にアクセスできない?
・ 第2回 ディスクの空き領域がなくなる?
・ 第3回 権限があるのにアクセスできない?
・ 第4回 ジョブが失敗する?
・ 第5回 ログは自動でアーカイブされないの?
・ 第6回 メモリサイズは調整できないの?


著者プロフィール
鈴木 智行(SUZUKI, Tomoyuki)
NEC Eラーニング事業部
http://www.sw.nec.co.jp/el/

入社以来、インストラクタとして教育業務に従事。SQL Serverには、4.21aから携わる。最近はデータベースグループの一員として、より大きな見地からデータベースを担当。

← 特集!DBバイリンガル 目次

PASSJメールニュース 著作権ついて プライバシーポリシー リンクポリシー お問い合わせ
(C) 2005 Professional Association for SQL Server Japan. All rights reserved.