variables - 使用变量数据库名称在 SSIS 中备份
问题描述
我有一个 SSIS 流,它从一个变量创建一个数据库(并更改了几个设置)。
现在,我需要创建该数据库的初始备份(然后将其添加到备份计划中)。
问:如何使用我用来创建数据库的变量来运行初始备份?(我正在尝试使用备份任务......但如果执行 SQL 任务更好,我愿意接受。)
解决方案
假设您有一个名为的 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]
字符串表达式类似于
(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 等
推荐阅读
- c++ - 排序数组如何帮助找到 min(Arr[i] xor Arr[j]) (其中 i 不等于 j)?
- android - 反应本机应用程序的缓慢
- flutter - 无法在初始化程序中访问实例成员“userEmail”
- python - 如何将 MLB 的起始阵容抓取到 Pandas DataFrame 中?
- swift - 无法通过 Xcode 12 中的 CocoaPods 安装 AudioKit 4.11
- sql - 如何将具有数组合并值的一列拆分为数组并加入其他表然后合并回来
- bash - 遍历 awk 中的匹配值
- macos - 有没有办法通过指定语义版本通过 Homebrew 在 Mac OS X 上安装 golang?
- java - 如何在spring oauth2安全中登录successHandler后获取访问令牌?
- r - R - 如果一个值 = x,则删除“配对”数据框中的两行