SQL ServerおよびOracleでのjobの作成

5411 ワード

まずms serverについてお話しします.私も初心者なので、まずエンタープライズマネージャを使用してタスク設定を行い、設計されたタスクスクリプトをエクスポートします.これにより、他のデータベースでスクリプトを実行する形式でタスクを新規作成できます(タスク名やデータベース名などの値を変更する必要があります).次に、具体的な操作手順とタスクスクリプトを説明します.
1.ms serverの「SQL Serverプロキシサービス」(agent service)の起動を保証する
2.Enterprise Managerを開く->データサーバを接続する->SQL Server agentノードの下にある「jobs」を右クリックし、「New Job」を選択します.詳細なタスクページでは、「一般」、「手順」、「計画」、「アラート」、「通知」、「目標」など、多くの設定オプションが表示されます.ここでは、簡単なので、非常に詳細なタスク設定を行うことができます.データベース内のストレージ・プロシージャを時間通りに実行するので、通常、ステップ、計画の3つの内容を簡単に設定します.ここでは、ステップでデータベースの操作と順序を設定し、「計画」でボディの操作スキームを設定します.sql文を直接書くよりも、初心者に適しています.
3.作成したばかりのジョブを右クリックし、「Script job as->CREATE TO」を選択し、スクリプトをファイルに保存するか、エディタで直接開くかを選択して保存します.システムが自動的に生成するスクリプトは複雑に見える.設定パラメータを設定しているため、sqlスクリプトで多くのデフォルトパラメータを省略できるかもしれないが、jobが作成したいくつかの重要なステップを明確に見ることができる.個人例のsqlスクリプトは後述する.簡略化されたコードは次のとおりです.
 
  
DECLARE @jobId BINARY(16)
--create the job
EXEC msdb.dbo.sp_add_job @job_name = 'update table of Sys_PageInfo',
        @job_id = @jobId OUTPUT
--create the step of the job
EXEC msdb.dbo.sp_add_jobstep @job_id = @jobId,
@step_name = 'just one step',
@subsystem = 'TSQL',
@command = 'EXEC dbo.BatchUpdateArchListTotalNum',
        @database_name=N'Exchanger_2'
--create the schedual of the job
EXEC msdb.dbo.sp_add_jobschedule @job_id = @jobId,
@name = 'the schedual',
@freq_type = 4,
@freq_interval = 1,
@active_start_time = 10000
--create the server of the job
EXEC msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'

次にoracleでjobを作成する方法を見てみましょう.今回はsqlスクリプトを直接使用して作成します.一般的なsql文は次のとおりです.
一、データベース内のタスクselect*from user_を表示するjobs
二、データベースで指定されたタスクを削除する
begin
dbms_job.remove(50);
end;
三、5分おきに実行するタスクを作成する
DECLARE
jobid NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT(job => jobid,
what => 'BatchUpdateArchListTotalNum();',//ストアド・プロシージャは、パラメータがない場合はカッコを省略できますが、セミコロンは省略できません.
next_date => sysdate,
interval => 'sysdate+1/24/12');
COMMIT;
END;
添付:SQL serverタスクスクリプト:
 
  
USE [msdb]
GO
/****** : Job [ ] : 05/12/2009 18:14:14 ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** : JobCategory [Database Maintenance] : 05/12/2009 18:14:14 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'Database Maintenance' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'Database Maintenance'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'job ',
        @enabled=0,
        @notify_level_eventlog=0,
        @notify_level_email=0,
        @notify_level_netsend=0,
        @notify_level_page=0,
        @delete_level=0,
        @description=N' 。',
        @category_name=N'Database Maintenance',
        @owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** : Step [ Sys_PageInfo ] : 05/12/2009 18:14:15 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N' ',
        @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=0,
        @retry_interval=0,
        @os_run_priority=0, @subsystem=N'TSQL',
        @command=N'EXEC dbo.BatchUpdateArchListTotalNum',
        @database_name=N'Exchanger_2',
        @database_user_name=N'dbo',
        @flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N' ',
        @enabled=1,
        @freq_type=4,
        @freq_interval=1,
        @freq_subday_type=1,
        @freq_subday_interval=1,
        @freq_relative_interval=0,
        @freq_recurrence_factor=0,
        @active_start_date=20090512,
        @active_end_date=99991231,
        @active_start_time=0,
        @active_end_time=235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave: