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

-- [SQL17_11.SQL]
--             SQLServer7.0  Transact-SQL言語
--             日本技術ソフト開発  堀川 明
--            http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、
--   (1)MySampleTestデータベースをバックアップします
--   (2)レコード操作を行います
--   (3)トランザクションログのバックアップを行います
--
--  復元作業では、自由な位置に戻れるようにします。
--  そのための時刻管理をグローバル一時テーブルに記録します
--
-- [注意]
--   このプログラムの実行は db_owner または db_backupoperator
--   の権限が必要です
--
--   このプログラムはグローバル一時テーブルを使います
--   SQL17_11Rプログラムに情報を受け渡します
--   osqlコマンドではその都度接続が切れますので、せっかく作成した
--   グローバル一時テーブルも削除されます
--   クエリアナライザによってSQL17_11とSQL17_11Rを実行してください
--

-- これから操作する既定のデータベースを MySampleTest にします
    USE MySampleTest
GO

-- ( 件処理されました)のメッセージの表示を抑止します
    SET NOCOUNT ON
GO
    --** お掃除 **
    --[社員]テーブルは、AccessのNorthwindデータベース
    --を移行したもの
     DELETE FROM 社員 WHERE( 社員コード BETWEEN 10 AND 20 )

     --TESTテーブルの削除
    IF( (object_id('TEST') IS NOT NULL ) AND
        OBJECTPROPERTY(object_id('TEST'),'IsTable') = 1 )
      BEGIN
              DROP TABLE TEST
      END

    --グローバル一時テーブルを削除します
    --tempdbにカレント接続先を変更します
    --OBJECTPROPERTY関数は、現在のデータベースに関する調査を行なう
    USE tempdb
    IF( (object_id('tempdb..##EndOfExecTime') IS NOT NULL ) AND
        OBJECTPROPERTY(object_id('tempdb..##EndOfExecTime'),'IsTable') = 1 )
      BEGIN
              DROP TABLE ##EndOfExecTime
      END

    --グローバル一時テーブルの作成
    CREATE TABLE ##EndOfExecTime(
         POINT_NO  int  ,                        --時刻計測位置番号
         time      datetime DEFAULT GETDATE()    --計測時間
    )
GO

--*******************************
--       【スクリプト開始】
--*******************************
    USe MySampleTest   --接続先DBを元に戻す
    DECLARE @dbname    varchar(20)
    DECLARE @bkdvname  varchar(40)
  
    -- バックアップを行うデータベースの名前
    SELECT  @dbname   = 'MySampleTest'

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

    --*************************************
    --     【完全バックアップの実行】
    --*************************************

    BACKUP  DATABASE  @dbname    --バックアップDBの名前
      TO    @bkdvname            --バックアップデバイス名
     WITH
           DESCRIPTION = 'MySampleTestのフルバックアップの実行'
         , INIT                  --既存の内容を破棄する

    --************
    --  修正変更
    --************
    --データベースに対してレコード操作を行う
    INSERT INTO 社員(社員コード,氏名) VALUES( 10 , '山田 一郎' )
    INSERT INTO 社員(社員コード,氏名) VALUES( 11 , '山田 二郎' )
    INSERT INTO 社員(社員コード,氏名) VALUES( 12 , '山田 三郎' )
    INSERT INTO 社員(社員コード,氏名) VALUES( 13 , '山田 四郎' )

    --今の日付け時刻を記憶します
    INSERT INTO ##EndOfExecTime(POINT_NO)  VALUES( 1 )

    --確実に時間をずらす
    WAITFOR DELAY '00:00:02'

    --データベースに対してレコード操作を行う
    INSERT INTO 社員(社員コード,氏名) VALUES( 14 , '上田 花子' )
    INSERT INTO 社員(社員コード,氏名) VALUES( 15 , '上田 恵子' )
    INSERT INTO 社員(社員コード,氏名) VALUES( 16 , '上田 良子' )
    INSERT INTO 社員(社員コード,氏名) VALUES( 17 , '上田 優子' )

    --今の日付け時刻を表示します
    INSERT INTO ##EndOfExecTime(POINT_NO)  VALUES( 2 )

    --確実に時間をずらす
    WAITFOR DELAY '00:00:02'

    --************
    --  修正変更
    --************
    CREATE TABLE TEST(
             ID   int  NOT NULL PRIMARY KEY , 
             DT   varchar(20)
    )
    INSERT INTO TEST VALUES( 1 , '0001' )
    INSERT INTO TEST VALUES( 2 , '0002' )
    INSERT INTO TEST VALUES( 3 , '0003' )
    INSERT INTO TEST VALUES( 4 , '0004' )
    INSERT INTO TEST VALUES( 5 , '0005' )

    --今の日付け時刻を表示します
    INSERT INTO ##EndOfExecTime(POINT_NO)  VALUES( 3 )

    --復元操作で一番最後のログ書き込み時刻より後の時刻指定は許されない
    --上の時刻が、一番最後のログより後になってしまう
    --これを防ぐため、1レコードダミーを挿入してログを作ります

    --確実に時間をずらす
    WAITFOR DELAY '00:00:02'
    INSERT INTO TEST VALUES( 999 , 'DummyRecord' )


    --**********************************************
    --   【トランザクションログのバックアップ】
    --**********************************************
    BACKUP  LOG   @dbname        --ログのバックアップDBの名前
      TO    @bkdvname            --バックアップデバイス名
     WITH
           DESCRIPTION = 'トランザクションログバックアップの実行'

    PRINT ''
    PRINt '終了しました'
    --MySampleTestから別の接続にする
    --SQL17_11Rプログラムがすぐに実行できる配慮
    USE master
GO
技術評論社の書籍ガイドへ
下巻:ISBN4-7741-0966-5

ウィンドウを閉じる


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


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