MSDE FunClub
Microsoft Data Engine FunClub
現在までのアクセスカウント数
Since 2005.10.25
最終更新日:2007/07/06
 
 [MSDE FunClub TOP]  > [MSDE 技術サポート情報]   > [MSDE2000 バックアップ ジョブ ]
 
【 MSDE 2000 バックアップ ジョブ 】
 
 

 
 
MSDE FunClub
メニュー
■ MSDE 2000
技術情報一覧に
戻る
■ MSDE 2000
初心者向け
メーリングリスト
ご案内
■ MSDE 2000
技術者向け
メーリングリスト
ご案内
■ MSDE FunClub
HOME へ戻る
 
マイクロソフト
関連ページ
■ 文書番号:241397
Transact-SQL を使用した
MSDE データベースの
バックアップ方法
■ 文書番号:283811
SQL Server 2000 で
 SQL Enterprise Manager
を使用せずに SQL Server
アカウントと
SQL Server エージェント
サービス アカウントを
変更する方法
■ 文書番号:321824
SQL Server 2000 に
SQL Server 7.0 MSDB
データベースをアタッチした後に、 SQL Server エージェントは開始できません。
■ 文書番号:281642
サーバーの名前を変更した後で SQL Server エージェント ジョブを更新するとエラー 14274 が発生する
■ 文書番号:269074
定期ジョブとして DTS パッケージを実行する方法
■ 文書番号:321835
SQL Server で sp_OA ストアド プロシージャと SQL 分散管理オブジェクト (SQL-DMO) を使用してジョブのスクリプトを作成する方法
■ 文書番号:310639
SP_ADD_JOBSTEP は、30文字を超えるサーバー名を認識しません
■ 文書番号:834124
SQL Server の 8198 エラーのトラブルシューティング方法
 
 
MSDE2000 バックアップ ジョブ
 
[ 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 版の使用は困難です。

 
 
 
 
MSDE FunClubに関するご意見・ご要望等ございましたら、
msdefun@horikawa.ne.jp までご連絡下さい。
MSDE や SQL Server を始めとする各種データベースシステムの開発や、
システムコンサルタントに関するご要望は、
msdedev@horikawa.ne.jp までご連絡下さい。