MSDE FunClub | 最終更新日 : 2000/10/06 | |
Microsoft Data Engine FunClub |
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(下巻) | ||
【第17章274p 〜 276p掲載】 |
-- [SQL17_04.SQL] -- SQLServer7.0 Transact-SQL言語 -- 日本技術ソフト開発 堀川 明 -- http://www.horikawa.ne.jp/msde/ -- -- このSQLプログラムは、 -- データベースの完全バックアップとその復旧を行います -- バックアップ用メディアにDISKファイルを使います -- -- [注意] -- このプログラムの実行は db_owner または db_backupoperator -- の権限が必要です -- -- ( 件処理されました)のメッセージの表示を抑止します SET NOCOUNT ON GO --****************************************************** -- 指定されたデータベースに接続があるかどうか確認する -- 接続中は、データベースの復旧はできません -- このストアドプロシージャは、後の例題でも使うのでmaster -- に入れます --****************************************************** USE master GO IF ( (object_id('master..InUse') IS NOT NULL ) AND OBJECTPROPERTY(object_id('master..InUse'),'IsProcedure') = 1 ) BEGIN DROP PROCEDURE InUse --削除 END GO CREATE PROCEDURE InUse @dbname sysname --調査を行なうデータベース AS --sp_whoの結果セットを受け取ります CREATE TABLE #SP_WHO( spid smallint , --システム プロセス ID status nchar(30) , --プロセスの状態 loginame nchar(128) , --ログイン名 hostname nchar(128) , --コンピュータ名 blk char(5) , --ブロック中のプロセス dbname nchar(128) , --プロセスで使用されているデータベース cmd nchar(16) --SQL Server コマンド ) --sp_who を実行します INSERT INTO #SP_WHO EXEC sp_who --データベースの接続を調べる IF EXISTS ( SELECT dbname FROM #SP_WHO WHERE( dbname = @dbname ) ) BEGIN RETURN 1 --データベースを使用しているユーザがいます END RETURN 0 --誰も使用していません GO --******************************* -- 【スクリプト開始】 --******************************* DECLARE @mode int DECLARE @ret int DECLARE @dbname varchar(20) DECLARE @bkfname varchar(80) PRINT '' -- バックアップのときは=0 復旧のときは=1 です SELECT @mode = 0 -- バックアップ/復旧を行うデータベースの名前 SELECT @dbname = 'MySampleTest' -- 書き込み先/読み込み先のDISKのファイル名 SELECT @bkfname = 'D:\backup7\MySampleTest.DAT' IF( @mode = 0 ) BEGIN --********************************* -- 【完全バックアップの実行】 -- DISKファイルに対して保存する --********************************* BACKUP DATABASE @dbname --バックアップDBの名前 TO DISK = @bkfname --保存先ファイル名 END IF( @mode = 1 ) BEGIN --********************************* -- 【復旧操作】 --********************************* --データベースが使用中のときは復元できません EXEC @ret = InUse @dbname IF( @ret = 1 ) BEGIN RAISERROR('%s は現在使用中です。RESTORE命令は中止しました',0,127,@dbname) RETURN END --バックアップメディアの内容確認 RESTORE HEADERONLY FROM DISK = @bkfname --保存先ファイル名 --復元操作 --FILE番号は、同一メディア内の復元対象の元データ位置を表す RESTORE DATABASE @dbname --復元したDBの名前 FROM DISK = @bkfname --保存先ファイル名 WITH FILE = 1 --復元対象のバックアップセット番号 , REPLACE --同じ名前のDBがあれば、既存を削除 END GO