【发布时间】:2018-12-25 04:35:26
【问题描述】:
我想在 SQL Server 2017 Express 实例上创建一些数据库的自动备份,所以我使用了这个:How to schedule and automate backups of SQL Server databases in SQL Server Express。
我以为我只需通过任务计划程序通过 PowerShell 脚本运行生成的 sp_BackupDatabases,因为备份还有其他自动化操作。
我创建了一个 PowerShell 脚本来执行sp_BackupDatabases,如下所示:
sqlcmd -S .\MYSQLEXPRESS2017INSTANCE -E -Q "EXEC sp_BackupDatabases @backupLocation='C:\MAYBACKUPLOCATION\', @databaseName='MYDB', @backupType='F'"
这确实会在指定位置创建备份文件,但不会按照存储过程的定义附加日期和时间或.BAK 扩展名。我只是得到一个没有扩展名为“MYDB_FULL”的文件。该文件除此之外都很好,即我可以将其重命名为“MYDB_FULL_MYDATE.BAK”。未报告任何错误。
如果我使用调试器通过 SQL Server Management Studio (SMS) 执行此操作,我可以看到一切正常,并且创建了完整的文件名以及 .BAK 扩展名。
我试验并创建了一个与存储过程完全一样的 SQL 脚本。同样,通过 SSMS 执行一切正常,但通过 sqlcmd(在 PowerShell 中或从命令提示符处)调用时就不行了。
如果我重命名文件并通过 SSMS 检查它,它已正确命名(使用 @BackupName 变量),因此我知道它正在生成时间和日期变量并根据脚本附加它们。
如果有任何区别,SQL Server 2017 Express 实例与 Windows Server 2012R2(不是 DC)上的 SQL Server 2014 Express 实例一起运行。
重命名文件是一件小事,但我错过了什么?!
【问题讨论】:
-
sp_BackupDatabases的 sql 是什么?如果您说它在那里进行重命名,那就是我们需要查看的 SQL。 -
谢谢 Larnu - Microsoft 链接有完整的代码,所以为了节省空间我把它省略了,事后看来是错误的......!
标签: sql-server powershell sqlcmd