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

-- [SQL17_07R2.SQL]
--             SQLServer7.0  Transact-SQL言語
--             日本技術ソフト開発  堀川 明
--            http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、SQL17_07プログラムで作成した
-- バックアップから、次を復元します
--
--   (1)MySampleTestデータベースの完全データベースバック
--      の復元
--   (2)第1回目の差分バックアップ情報を適用する
--   (3)第2回目の差分バックアップ情報は無視する
--
-- [注意]
--   このプログラムの実行は db_owner または db_backupoperator
--   の権限が必要です
--

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

--*********************************
--  MySampleTestデータベースの削除
--*********************************
    DECLARE @ret  int
    DECLARE @dbname    varchar(20)
    SELECT  @dbname   = 'MySampleTest'
    
    EXEC @ret = master..InUse @dbname
    IF( @ret = 1 )
        BEGIN
            RAISERROR('%s は現在使用中です。RESTORE命令は中止です'
                      ,0,127,@dbname)
            RETURN
        END

    --InUseはデータベースの存在チェックまでは行わない
    --存在したら削除します
    IF EXISTS( SELECT name FROM master..sysdatabases
                 WHERE( name = 'MySampleTest' ) )
      BEGIN
             DROP  DATABASE  MySampleTest
      END
GO

--**************************************
--       【データベースの復元操作】
--**************************************

    DECLARE @dbname    varchar(20)
    DECLARE @bkdvname  varchar(40)
  
    -- バックアップを行うデータベースの名前
    SELECT  @dbname   = 'MySampleTest'

    -- バックアップデバイスの名前
    SELECT  @bkdvname = 'MySampleTest_BackupDev'

    --*********************************
    --     完全データベースの復元
    --       ファイル番号1番
    --  NORECOVERY オプションを指定する
    --*********************************

    RESTORE  DATABASE  @dbname   --復元したDBの名前
       FROM    @bkdvname         --バックアップデバイス
       WITH
             FILE = 1            --完全データベース
          ,  NORECOVERY          --2回目のRESTOREを実行する

    --*********************************
    --        差分情報の適用
    --       ファイル番号2番
    --   RECOVERY オプションを指定する
    --*********************************

    RESTORE  DATABASE  @dbname   --復元したDBの名前
       FROM    @bkdvname         --バックアップデバイス
       WITH
             FILE = 2            --差分情報
          ,  RECOVERY            --復旧完了
GO

--*******************
--  復元内容チェック
--*******************
    USE MySampleTest
GO
    IF NOT EXISTS( SELECT 社員コード FROM 社員
                 WHERE( 社員コード BETWEEN 10 AND 13 ) )
      BEGIN
            RAISERROR('エ?このレコードが存在しないの?',16,127)
            RETURN
      END
    SELECT 社員コード , 氏名  FROM 社員
                 WHERE( 社員コード BETWEEN 10 AND 13 )


    IF EXISTS( SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
               WHERE( (TABLE_NAME='TEST') AND (TABLE_TYPE='BASE TABLE')) )
      BEGIN
            RAISERROR('エ?このテーブルが存在してはおかしい!!',16,127)
            RETURN
      END
    PRINT ''
    PRINT 'MySampleTestの第1回差分を考慮した復旧ができました'
GO
技術評論社の書籍ガイドへ
下巻:ISBN4-7741-0966-5

ウィンドウを閉じる


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


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