MSDE FunClub 現在までのアクセスカウント数 最終更新日 : 2000/10/06
Microsoft Data Engine FunClub
Since 2000.10.06
SQLServer7.0/MSDE 完全トレーニングテキスト(下巻)
【第17章274p 〜 276p掲載】

-- [SQL17_04.SQL]
--             SQLServer7.0  Transact-SQL言語
--             日本技術ソフト開発  堀川 明
--            http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、
--   データベースの完全バックアップとその復旧を行います
--   バックアップ用メディアにDISKファイルを使います
--
-- [注意]
--   このプログラムの実行は db_owner または db_backupoperator
--   の権限が必要です
--

-- ( 件処理されました)のメッセージの表示を抑止します
    SET NOCOUNT ON
GO

    --******************************************************
    --  指定されたデータベースに接続があるかどうか確認する
    --       接続中は、データベースの復旧はできません
    -- このストアドプロシージャは、後の例題でも使うのでmaster
    -- に入れます
    --******************************************************
    USE master
GO
    IF ( (object_id('master..InUse') IS NOT NULL ) AND
         OBJECTPROPERTY(object_id('master..InUse'),'IsProcedure') = 1 )
      BEGIN
              DROP PROCEDURE InUse    --削除
      END
GO
    CREATE PROCEDURE InUse
             @dbname  sysname          --調査を行なうデータベース    
    AS
        --sp_whoの結果セットを受け取ります
        CREATE TABLE #SP_WHO(
                spid  smallint   ,  --システム プロセス ID
              status  nchar(30)  ,  --プロセスの状態
            loginame  nchar(128) ,  --ログイン名
            hostname  nchar(128) ,  --コンピュータ名 
               blk     char(5)   ,  --ブロック中のプロセス 
             dbname   nchar(128) ,  --プロセスで使用されているデータベース
               cmd    nchar(16)     --SQL Server コマンド 
        )

        --sp_who を実行します
        INSERT INTO #SP_WHO EXEC sp_who

        --データベースの接続を調べる
        IF EXISTS ( SELECT dbname FROM #SP_WHO WHERE( dbname = @dbname ) )
        BEGIN
            RETURN 1    --データベースを使用しているユーザがいます
        END

        RETURN 0        --誰も使用していません
GO


--*******************************
--       【スクリプト開始】
--*******************************

    DECLARE @mode      int
    DECLARE @ret       int
    DECLARE @dbname    varchar(20)
    DECLARE @bkfname   varchar(80)
    PRINT ''

    -- バックアップのときは=0  復旧のときは=1 です
    SELECT @mode = 0
   
    -- バックアップ/復旧を行うデータベースの名前
    SELECT  @dbname   = 'MySampleTest'

    -- 書き込み先/読み込み先のDISKのファイル名
    SELECT  @bkfname = 'D:\backup7\MySampleTest.DAT'


    IF( @mode = 0 )
      BEGIN
          --*********************************
          --   【完全バックアップの実行】
          --   DISKファイルに対して保存する
          --*********************************

          BACKUP  DATABASE  @dbname    --バックアップDBの名前
          TO  DISK = @bkfname          --保存先ファイル名

      END

    IF( @mode = 1 )
      BEGIN
          --*********************************
          --          【復旧操作】
          --*********************************

          --データベースが使用中のときは復元できません
          EXEC @ret = InUse @dbname
          IF( @ret = 1 )
            BEGIN
               RAISERROR('%s は現在使用中です。RESTORE命令は中止しました',0,127,@dbname)
               RETURN
            END

          --バックアップメディアの内容確認
          RESTORE  HEADERONLY
          FROM  DISK = @bkfname        --保存先ファイル名


          --復元操作
          --FILE番号は、同一メディア内の復元対象の元データ位置を表す
          RESTORE  DATABASE  @dbname   --復元したDBの名前
          FROM  DISK = @bkfname        --保存先ファイル名
          WITH
                FILE = 1               --復元対象のバックアップセット番号
              , REPLACE                --同じ名前のDBがあれば、既存を削除
      END
GO
技術評論社の書籍ガイドへ
下巻:ISBN4-7741-0966-5

ウィンドウを閉じる


(株)日本技術ソフト開発 責任編集:堀川 明
MSDE FunClubに関するご意見・ご要望等ございましたら、 msdefun@horikawa.ne.jp までご連絡下さい。
HOME: http://www.horikawa.ne.jp/msde/


MSDE FunClubの運営は、マイクロソフト社とは一切の関係はありません