MSDE FunClub | 最終更新日 : 2000/10/06 | |
Microsoft Data Engine FunClub |
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(下巻) | ||
【第17章292p 〜 294p掲載】 |
-- [SQL17_07R3.SQL] -- SQLServer7.0 Transact-SQL言語 -- 日本技術ソフト開発 堀川 明 -- http://www.horikawa.ne.jp/msde/ -- -- このSQLプログラムは、SQL17_07プログラムで作成した -- バックアップから、次を復元します -- -- (1)MySampleTestデータベースの完全データベースバック -- の復元 -- (2)第2回目の差分バックアップ情報を適用する -- (3)第1回目の差分バックアップ情報は無視する -- -- [注意] -- このプログラムの実行は 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を実行する --********************************* -- 差分情報の適用 -- ファイル番号3番 -- 2番ではなく、3番を適用する -- RECOVERY オプションを指定する --********************************* RESTORE DATABASE @dbname --復元したDBの名前 FROM @bkdvname --バックアップデバイス WITH FILE = 3 --差分情報 , 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 NOT EXISTS( SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE( (TABLE_NAME='TEST') AND (TABLE_TYPE='BASE TABLE')) ) BEGIN RAISERROR('エ?このテーブルが存在しないの?',16,127) RETURN END SELECT * FROM TEST PRINT '' PRINT 'MySampleTestの第2回差分を考慮した復旧ができました' GO