在SSIS中使用变量db名进行备份。

问题描述 投票:0回答:1

我有一个SSIS流程,它从一个变量中创建一个数据库(并改变了一些设置)。

现在,我需要为该数据库创建一个初始备份(然后将其添加到备份计划中)。

问:我如何使用我用来创建数据库的变量也运行初始备份? (我正试图使用备份任务......但如果执行SQL任务更好,我愿意接受)。

variables ssis backup
1个回答
0
投票

假设你有一个SSIS变量,名为 @[User::DatabaseName]

鉴于备份命令的内容如下

BACKUP DATABASE [MyDB] TO DISK = N'\\Server\backup\MyDB\MyDB_backup_2020_05_06_020003.bak' WITH NOFORMAT,
NOINIT,  
NAME = N'MyDb-Full Database Backup', 
SKIP, NOREWIND, NOUNLOAD,  STATS = 10

我会创建SSIS变量。

@[User::BackupTimestamp] 字符串 Expression 类似于

(DT_WSTR, 4) YEAR(@[System::StartTime])
+ "_"
+ RIGHT("0" + (DT_WSTR, 2) MONTH(@[System::StartTime]), 2)
+ "_"
+ RIGHT("0" + (DT_WSTR, 2) DAY(@[System::StartTime]), 2)
+ "_"
... repeat the above pattern to slice out hours, minutes, seconds into 2 digit entities

这样做的目的是为了生成一个字符串,表示包的开始时间,并以我们想要的时间日期精度来表示我们的备份。

@[User::BackupCommand] 这将会被其他变量连接起来,以建立正确的 TSQL 命令。

"BACKUP DATABASE [" 
+ @[User::DatabaseName] 
+ "] TO DISK = N'\\\\double\\escape\\slashes\\" 
+ @[User::DatabaseName] 
+ "\\" + @[User::DatabaseName] 
+ "_" + @[User::BackupTimestamp]
+ ".bak WITH NOFORMAT, NOINIT, NAME= N'" 
+ @[User::DatabaseName] 
+ "-Full Database Backup', SKIP, NOREWIND, STATS=10;"

正如你所看到的,斜线有点麻烦,因为你必须在Expressions里面把它们加倍。我通常会创建一个名为 BackupPath 从而简化了这一点。

拿着生成的命令,通过SSMS运行它,如果有效,那么你可以简单地将SqlCommandText(属性名aproximate)接入该变量。

至于 "将其添加到备份计划中",我不知道你的组织使用什么计划。我喜欢任何它发现的数据库备份的东西,因为机械地把东西添加到一个过程中,是在最不恰当的时候会有遗漏的步骤。Ola的备份脚本,Minionware等。

© www.soinside.com 2019 - 2024. All rights reserved.