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

-- [SQL17_11R.SQL]
--             SQLServer7.0  Transact-SQL言語
--             日本技術ソフト開発  堀川 明
--            http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、SQL17_11プログラムで作成した
-- バックアップから、次を復元します
--
--   (1)MySampleTestデータベースの完全データベースバック
--      の復元
--   (2)トランザクションログを利用して、指定された時刻の状態
--
-- [注意]
--   このプログラムの実行は db_owner または db_backupoperator
--   の権限が必要です
--

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

--*****************************************
--    【MySampleTestデータベースを削除】
--*****************************************
   IF EXISTS( SELECT name FROM master..sysdatabases
                 WHERE( name = 'MySampleTest' ) )
      BEGIN
             DROP  DATABASE  MySampleTest
      END
GO

--*****************************************
--         【データベースの復元】
--*****************************************
    DECLARE @dbname    varchar(20)
    DECLARE @bkdvname  varchar(40)
    DECLARE @pt        int
    DECLARE @rt        datetime

    --復元位置(=1,2,3)
    --この時刻にデータベースの状態を復帰させます
    SELECT @pt = 3

    -- 復元を行う日付け時刻の設定
    -- グローバルテーブルからその値を取得する
    SELECT @rt = time FROM ##EndOfExecTime WHERE( POINT_NO  = @pt )

    -- バックアップを行うデータベースの名前
    SELECT  @dbname   = 'MySampleTest'

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

    --************************
    -- 完全データベースの復元
    --  ファイル番号1番です
    --************************
    RESTORE  DATABASE  @dbname   --復元したDBの名前
       FROM    @bkdvname         --バックアップデバイス
       WITH
             FILE = 1
           , NORECOVERY          --忘れずに!!

    --****************************
    -- トランザクションログの復元
    --   ファイル番号2番です
    --   復帰日付け指定を行う
    --****************************
    RESTORE  LOG  @dbname        --ログを適用するDBの名前
       FROM    @bkdvname         --バックアップデバイス
       WITH
             FILE = 2
           , STOPAT = @rt        --復元時間
GO


--*******************
--  復元内容チェック
--*******************
    USE MySampleTest

    PRINT ''
    PRINT 'POINT-1  :社員コード10から13までです'
    PRINT 'POINT-2,3:社員コード10から17までです'

    SELECT 社員コード , 氏名  FROM  社員
            WHERE( 社員コード BETWEEN 10 AND 20 )

    --POINT-1と2では、[TEST]テーブルは存在しません
    IF EXISTS( SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
               WHERE( (TABLE_NAME='TEST') AND (TABLE_TYPE='BASE TABLE')) )
      BEGIN
            SELECT * FROM TEST
      END
    ELSE
      BEGIN
            PRINT '[TEST]テーブルは存在しません'
      END

    --接続先変更
    USE master
GO
技術評論社の書籍ガイドへ
下巻:ISBN4-7741-0966-5

ウィンドウを閉じる


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


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