我有一个SSIS流,它从变量创建数据库(并更改一些设置(。
现在,我需要创建该数据库的初始备份(然后将其添加到备份计划中(。
问:如何使用用于创建数据库的变量来运行初始备份?(我正在尝试使用备份任务……但如果执行SQL任务更好,我对此持开放态度。(
假设您有一个名为@[User::DatabaseName]
的SSIS变量
假设备份命令看起来像
BACKUP DATABASE [MyDB] TO DISK = N'\ServerbackupMyDBMyDB_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
这样做的目的是生成包的开始时间的字符串表示,该字符串表示具有我们备份所需的时间/日期精度级别。
@[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(属性名称近似值(连接到该变量。
至于"将其添加到备份计划中",我不知道您的组织使用的是什么计划。我喜欢任何备份它发现的任何数据库的东西,因为在最不合时宜的时候,机械地向过程中添加一些东西是一个会被错过的步骤。Ola的备份脚本、Minionware等