| 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