2017-07-04 7 views
2

一意の名前形式の日次バックアップスクリプトを作成する方法:Demo_YYYYMMDD_XX ここで、XXはバックアップ履歴に基づく増分数値です。形式:Demo_YYYYMMDD_XX.bakでSQL DBバックアップスクリプトを書き込む方法

例は次のとおりです。

  1. 第一バックアップ:Demo_20170704_01.bak
  2. 第二のバックアップ:Demo_20170704_02.bak
  3. 第三バックアップ:Demo_20170704_03.bak

XXが+1にバックアッププロセスが上で実行されるたびに増加します同じ日と同じフォルダ(パス)。

下のスクリプトで管理することができました。どんな改善が必要ですか?ありがとう

DECLARE @path VARCHAR(500) 
DECLARE @name VARCHAR(500) 
DECLARE @pathwithname VARCHAR(500) 
DECLARE @time DATETIME 
DECLARE @year VARCHAR(4) 
DECLARE @month VARCHAR(2) 
DECLARE @day VARCHAR(2) 
DECLARE @counter varchar(10) 

SET @path = 'C:\Backup Path\' 

SELECT @time = GETDATE() 
SELECT @year = (SELECT CONVERT(VARCHAR(4), DATEPART(yy, @time))) 
SELECT @month = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(mm,@time),'00'))) 
SELECT @day = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(dd,@time),'00'))) 
SELECT @counter = (
select format(count(A.database_name),'000') 
from msdb.dbo.backupset A join msdb.dbo.backupmediafamily B 
on A.media_set_id = B.media_set_id 
where A.database_name = 'Demo' 
and (select convert(date,A.backup_start_date, 120)) = (select convert(date,getdate(), 120)) 
) 

SELECT @name ='Demo' + '_' + @year + @month + @day + '_' + @counter 
SET @pathwithname = @path + @name + '.bak' 

BACKUP DATABASE Demo 
TO DISK = @pathwithname WITH NOFORMAT, NOINIT, SKIP, REWIND, NOUNLOAD, STATS = 10 

答えて

0

2つの選択肢があります。

    あなたのパターン(日付)と一致するディレクトリ内
  • リストファイル、データベースを持っているので、あなたが毎日作るどのように多くのバックアップのカウント(インクリメント)

を保つ

  • をカウントし、インクリメントとそのデータベースをバックアップしていますが、なぜ後者をしないのですか?そして、あなたが複数のデータベース(dbnameは、dbback)のエントリを記録するペア(デシベル、backdb)を記録することができ、持っているテーブルに

    create table backups (
        dbback DATE NOT NULL DEFAULT GETDATE() 
        ,dbname varchar(99) NOT NULL 
        ,name varchar(99) NOT NULL 
        ,index int NOT NULL 
        ,primary key(db,backdb) 
    ) ; 
    

    をあなたの毎日のバックアップを記録します。

    WITH t as (select (backups.index+1) as nextnum 
    from backups where dbname = 'database_name' and dbback = CAST(GETDATE() AS DATE) 
    union select 1 as nextnum from dual) 
    insert into backups (dbback,dbname,name,index) 
    values (CAST(GETDATE() AS DATE),'database_name','yourname',t.nextnum) ; 
    

    組合を使用することによって、あなたは一時テーブル

    にベース(最初の)行を取得することを保証することに注意してください
  • 関連する問題