ストアド プロシージャの自動実行

自動実行が設定されているストアド プロシージャは、SQL Server が起動するたびに実行されます。自動実行は、定期的に処理を実行する場合や、ストアド プロシージャをバックグラウンド プロセスとして動作させ、常に実行しておく必要がある場合に便利です。ストアド プロシージャの自動実行は、グローバル一時テーブルの作成など、tempdb のシステム タスクまたはメンテナンス タスクを行う場合にも使用できます。このようにすると、SQL Server のスタートアップ時に tempdb が再作成されても、グローバル一時テーブルの存在が保証されます。

自動実行されるストアド プロシージャは、固定サーバー ロール sysadmin と同じ権限で操作を行います。これらのストアド プロシージャが生成するエラー メッセージは、SQL Server のエラー ログに書き込まれます。自動実行されるストアド プロシージャからは、結果セットを返さないでください。自動実行されるストアド プロシージャは、ユーザーではなく SQL Server が実行するので、結果セットを返す先がないためです。

ストアド プロシージャの実行は、起動時に master データベースが復旧された時点で開始されます。

自動実行の設定、解除、および制御

自動実行されるようにストアド プロシージャを設定できるのは、システム管理者 (sa) だけです。また、このストアド プロシージャは、master データベースに格納されていて、sa により所有されている必要があり、入出力パラメータを受け渡すことはできません。

次の操作を実行するには、sp_procoption を使用します。

  • 既存のストアド プロシージャをスタートアップ プロシージャとして指定する。

  • SQL Server のスタートアップ時にプロシージャが実行されないようにする。

ストアド プロシージャの自動実行はプロシージャごとに設定しますが、sp_configure を使用して SQL Server の scan for startup procs 構成オプションを使用すると、SQL Server のスタートアップ時にストアド プロシージャが 1 つも自動的に実行されないように設定できます。これらのストアド プロシージャの起動を省略するには、トレース フラグ 4022 をスタートアップ パラメータとして指定します。SQL Server を最小構成で起動する場合 (-f フラグを使用)、スタートアップ ストアド プロシージャは実行されません。詳細については、「トレース フラグ (Transact-SQL)」を参照してください。

推奨事項

スタートアップ プロシージャの数に制限はありませんが、実行中、プロシージャ 1 つにつき 1 つのワーカー スレッドが使用されます。スタートアップ時に複数のプロシージャを実行する場合でも、並列に実行する必要がないときは 1 つのプロシージャをスタートアップ プロシージャとし、そのプロシージャが残りのプロシージャを呼び出すようにします。この場合は、全体で 1 つのワーカー スレッドしか使用されません。

ストアド プロシージャの自動実行を設定または解除するには

scan for startup procs 構成オプションを設定または解除するには