使用可变数据库名称在 SSIS 中备份

Backup in SSIS using a Variable db name

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

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

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

假设您有一个名为 @[User::DatabaseName]

的 SSIS 变量

鉴于备份命令看起来像

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] 字符串表达式类似于

(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

这样做的目的是生成包开始时间的字符串表示形式,其精度达到我们备份所需的 time/date 级别。

@[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;"

如您所见,斜线有点麻烦,因为您必须在表达式中将它们加倍。我通常会创建一个名为 BackupPath 的变量来简化该位。

获取生成的命令,运行 通过 SSMS,如果它有效,那么您可以简单地将 SqlCommand/Text(属性 名称近似值)连接到该变量。

至于"add it to a backup plan",我不知道你的组织使用什么计划。我喜欢任何备份它发现的任何数据库的东西,因为机械地向流程添加一些东西是在最不合时宜的时候会错过的一个步骤。 Ola 的备份脚本、Minionware 等