Powershell更改SQL Server的备份脚本

时间:2016-01-22 16:46:15

标签: sql-server powershell

我正在尝试通过编写带有参数的Powershell脚本来协助我的系统管理员,并将其转换为需要在部署之前和之后备份的多个SQL Server数据库的备份脚本。

我最好还是允许他输入这些参数:

@Database = 'Genesis'
@BackupName = 'Genesis_backup'
@BackupDate = '2016_01_20'
@BackupDateTime = '2016_01_20_01340_3181013'
@Location = 'E:\SQLBackup\TEST'

所以如果这是备用字符串

BACKUP DATABASE [@Database] TO  DISK = N'E:\SQLBackup\TEST - 20160120\Genesis_backup_2016_01_20_01340_3181013.bak' WITH NOFORMAT, NOINIT,  NAME = N'Genesis_backup_2016_01_20_01340_3181013', SKIP, REWIND, NOUNLOAD, COMPRESSION,  STATS = 10
GO

我希望Powershell将其构建为

BACKUP DATABASE [Genesis] TO  DISK = N'@Location - @BackupDate\@BackupName_@BackupDateTime.bak' WITH NOFORMAT, NOINIT,  NAME = N'@BackupName_@BackupDateTime', SKIP, REWIND, NOUNLOAD, COMPRESSION,  STATS = 10
GO

我将如何开始这样的事情?你会推荐我使用哪些功能?另外,我如何动态解析位置?

1 个答案:

答案 0 :(得分:0)

有两种方法:使用直接TSQL(受DBA人群青睐)或使用Sql Server的SMO API(更多Powershell-ish,模拟SSMS向导)。由于许多DBA人员更熟悉TSQL,因此更容易获得TSQL路径的帮助。

一种流行的方法是使用Ola Hallengren的maintenance solution而不是滚动自己的解决方案,其中包括经过验证的真实备份程序。 Ola的解决方案使用Sql Server Agent作业进行调度,因此Sql Express需要使用任务调度程序。使用Ola的东西,只需创建一个备份代理作业,备份您想要的数据库。可以通过执行sp_start_job sproc来启动代理作业。这可以通过sqlcmd或Powershell的Invoke-SqlCmd来完成。