|
|
|
|
MSDE FunClub メニュー |
|
|
マイクロソフト 関連ページ |
|
|
|
|
|
[ MSDE 2000 バックアップ ジョブ:0010]
MSDE2000 では、指定された時刻に、指定された仕事(バッチジョブ)を、自動的に実行させることができますか?
|
はい、バッチジョブを、自動的に実行させることができます。MSDE2000 では、『 SQL Server Agent 』サービスが付属します。データベースサーバーのバッチジョブを実行するためには、このサービスを常時起動させて下さい。『 SQL Server Agent 』サービスが、自動実行ジョブの開始を制御します。
|
[ MSDE 2000 バックアップ ジョブ:0020]
MSDE2000 に、ジョブを登録するためには、まず最初に何をすればよいですか?
|
まず最初に、登録を行なうジョブの、『ジョブの名前』を考えて下さい。ジョブの名前は、日本語文字列などを使うことができます。Unicode型文字列で最大128文字の長さで、名前を考えて下さい。nvarchar(128)というデータ型で表されます。nvarchar(128)というデータ型は、sysnameというシステム提供データ型宣言子で宣言することができます。
ジョブの名前はわかりやすい英数字文字列で付けるとよいでしょう。例えばデータベースSampleをバックアップするジョブの名前は、
JOB:BACKUP DATABASE (SAMPLE) のような名前を付けるとよいでしょう。
もちろん、日本語文字列を使ってジョブの名前を定義することができます。
|
[ MSDE 2000 バックアップ ジョブ:0030]
MSDE2000 に登録を行なうジョブの名前を考えました。次に何をすればよいですか?
|
MSDE2000 に、同じ名前のジョブが登録されているかどうか、調査をします。ジョブが登録されているかどうか調べる次のSQL文を実行して下さい。
--
--指定された名前のジョブが存在しますか?
--
DECLARE @JOB_NM sysname
--ジョブの名前を定義する
SELECT @JOB_NM = 'JOB:BACKUP DATABASE (SAMPLE)'
--ジョブが存在しますか?
IF EXISTS(
SELECT * FROM msdb.dbo.sysjobs
WHERE( name = @JOB_NM )
)
BEGIN
SELECT 'ジョブが存在します:' + @JOB_NM AS 存在します
END
ELSE
BEGIN
SELECT 'ジョブは、ありません:' + @JOB_NM AS 存在しません
END
|
上記のSQL文を、saログインのようなシステム管理者権限で実行して下さい。同じ名前のジョブが存在しないことを確認して下さい。 (ジョブの名前を変更して下さい)
|
[ MSDE 2000 バックアップ ジョブ:0040]
MSDE2000 に、同じ名前の、以前に作成した古いジョブが存在しました。どうすればよいでしょうか?
|
MSDE2000 に登録されている、その不要になった、古いジョブを削除します。ジョブを削除するためには、次のSQL文を実行します(ジョブの名前を変更して下さい)。
--
--指定された名前のジョブが存在するときは、そのジョブを削除する
--
DECLARE @JOB_NM sysname
--ジョブの名前を定義する
SELECT @JOB_NM = 'JOB:BACKUP DATABASE (SAMPLE)'
--ジョブが存在しますか?
IF EXISTS(
SELECT * FROM msdb.dbo.sysjobs
WHERE( name = @JOB_NM )
)
BEGIN
--ジョブを削除します
EXECUTE msdb.dbo.sp_delete_job @job_name = @JOB_NM
SELECT 'ジョブを削除しました:' + @JOB_NM AS ジョブを削除しました
END
|
ジョブを削除するストアドプロシージャ sp_delete_job を実行して、不要になったジョブを削除します。
sp_delete_job ストアドプロシージャは、masterデータベースではなく、msdbデータベースの中に存在します。このためデータベース名msdbを、名前の前に付加して下さい。
|
[ MSDE 2000 バックアップ ジョブ:0050]
MSDE2000 に存在した、不要になったジョブを削除しました。 次に何をすれば、よろしいですか?
|
MSDE2000 に存在した、不要なジョブを削除した後で、同じ名前の新しいジョブを登録します。 ジョブの名前の新規登録処理です。
ジョブの名前を登録するためには、次のSQL文を実行します。 saログインのようなシステム管理者権限で実行して下さい。 実行する前に、ジョブの名前などを変更して下さい。
DECLARE @JOB_NM sysname
DECLARE @JOB_DESC nvarchar(512)
--登録を行なうジョブの名前です
SELECT @JOB_NM = 'JOB:BACKUP DATABASE (SAMPLE)'
--ジョブに付けるコメント(注釈文)です
SELECT @JOB_DESC = 'SAMPLEデータベースをバックアップするジョブです'
--新しいジョブの名前を登録します
EXEC msdb.dbo.sp_add_job
@job_name = @JOB_NM,
@description = @JOB_DESC
|
新しいジョブを登録する、 sp_add_job ストアドプロシージャを実行します。
このストアドプロシージャは、msdb データベースの中にあります。
|
[ MSDE 2000 バックアップ ジョブ:0060]
MSDE2000 に空っぽの、新しいジョブを登録しました。 次に何をすれば、よろしいですか?
|
新しいジョブの名前を登録したら、次に、ジョブの中で実行を行なうSQL文の、具体的な命令を登録します(ジョブステップの登録)。
次のSQL文を実行します。
saログインのようなシステム管理者権限で実行して下さい。
実行する前に、ジョブの名前などを変更して下さい。
DECLARE @JOB_NM sysname
DECLARE @SQL_CMD nvarchar(3200)
DECLARE @STEP_NM sysname
--すでに登録されたジョブの名前です
SELECT @JOB_NM = 'JOB:BACKUP DATABASE (SAMPLE)'
--ジョブの仕事の内容を、SQL文で定義します
SELECT @SQL_CMD = 'BACKUP DATABASE SAMPLE '
+ ' TO DISK=''D:\BACKUP\SAMPLE.BAK'' '
+ 'WITH INIT'
--上記仕事(ステップ)の名前を付けます
SELECT @STEP_NM = 'SAMPLE データベースのバックアップ'
--具体的なジョブの内容を登録します(ジョブステップの登録)
EXEC msdb.dbo.sp_add_jobstep
@job_name = @JOB_NM ,
@step_id = 1 ,
@step_name = @STEP_NM ,
@subsystem = N'TSQL' ,
@command = @SQL_CMD ,
@database_user_name = 'dbo'
|
新しいジョブステップを登録する、 sp_add_jobstep ストアドプロシージャを実行します。
このストアドプロシージャは、msdb データベースの中にあります。
@SQL_CMD 変数に、データベースをバックアップするためのコマンドをSQL文で表現します。
|
[ MSDE 2000 バックアップ ジョブ:0070]
MSDE2000 にジョブの内容(実行を行なうSQL文)を登録しました。 次に何をすれば、よろしいですか?
|
ジョブの内容(実行を行なうSQL文)を登録したら、次に、ジョブを実行する時間的なスケジュールの登録を行ないます(ジョブスケジュールの登録)。
次のSQL文を実行します。
saログインのようなシステム管理者権限で実行して下さい。
実行する前に、ジョブの名前などを変更して下さい。
DECLARE @JOB_NM sysname
DECLARE @SCH_NM sysname
--すでに登録されたジョブの名前です
SELECT @JOB_NM = 'JOB:BACKUP DATABASE (SAMPLE)'
--登録を行なうジョブスケジュールの名前です
SELECT @SCH_NM = '毎日3時間間隔で実行します'
-- ジョブ スケジュールの追加
EXEC msdb.dbo.sp_add_jobschedule
@job_name = @JOB_NM , --スケジュール登録を行なうジョブの名前
@name = @SCH_NM , --このスケジュールの名前
@enabled = 1, --必ず =1 とする(有効化の宣言)
@freq_type = 4, -- =4:毎日実行の指定
@freq_interval = 1, --ジョブの実行間隔は1日間(毎日の実行)
@freq_subday_type = 8, -- =8: 時間単位の指定
@freq_subday_interval = 3, -- 3時間間隔でジョブを実行する
@active_start_time = 0, --ジョブの実行開始時刻(午前0時)
@active_end_time = 235959, --ジョブスケジューリングの終了時刻(23時59分59秒)
@freq_relative_interval = 0, --無視(=0を指定する)
@freq_recurrence_factor = 0, --無視(=0を指定する)
@active_start_date = 20051004, --ジョブの実行開始日(2005年10月4日)
@active_end_date = 99991231 --ジョブスケジューリングの終了日(9999年12月31日。実質的に終了日なし)
|
ジョブスケジュールを追加する、 sp_add_jobschedule ストアドプロシージャを実行します。
このストアドプロシージャは、msdb データベースの中にあります。
上記のスケジュールでは、2005年10月4日の午前0時から3時間間隔で、ジョブの実行が行なわれます。
|
[ MSDE 2000 バックアップ ジョブ:0080]
MSDE2000 にジョブのスケジューリングを登録しました。 次に何をすれば、よろしいですか?
|
最後に、”おまじない”を実行します。
次のSQL文を実行します。
saログインのようなシステム管理者権限で実行して下さい。
実行する前に、ジョブの名前などを変更して下さい。
この『おまじない』を実行する前に、
『SQL Server Agent サービス』を必ず実行して下さい
『SQL Server Agent サービス』は、ストアドプロシージャの実行に関係なく、常時実行するように、心がけて下さい
DECLARE @JOB_NM sysname
--すでに登録されたジョブの名前です
SELECT @JOB_NM = 'JOB:BACKUP DATABASE (SAMPLE)'
--「おまじない」の実行
EXEC msdb.dbo.sp_add_jobserver @job_name = @JOB_NM , @server_name = N'(local)'
|
『おまじない』のストアドプロシージャ、 sp_add_jobserver を実行します。
以上の操作によって、バックアップジョブの登録が終わりました。
SQL Server Agent サービスを常時実行させることによって、登録されたスケジュール時刻に応じて指定されたバックアップジョブが実行されます。
|
[ MSDE 2000 バックアップ ジョブ:0090]
私は、SQL Server 2005 Express 版を使用しております。
SQL Server 2005 Express では、ジョブの作成はできないのでしょうか?
|
残念ながら、SQL Server 2005 Express 版には、データベースジョブを実行するための SQL Agent サービスが提供されておりません。
MSDE2000 ではこのAgentサービスが提供されているので、データベースジョブの組み込みができます。
実際のデータベースサーバーでは数多くの自動実行ジョブを作成します。
このようなシステムでは、SQL Server 2005 Express 版の使用は困難です。
|
|
|
|
|