通过子进程备份 SQL 数据库时出现操作系统错误 123
Operating System Error 123 On Backup of SQL Database Via Subprocess
我目前正在尝试使用 Python 3.7 应用程序 运行 后台自动备份数据库。我设法使用以下查询字符串备份数据库。
SQLCommand = ("sqlcmd -E -S %s -Q \"BACKUP DATABASE %s TO DISK=\'%s\%02d-%02d-%02d-%02d:%02d:%02d.bak\'\"" %
("MYSERVER\SQLSERVICE", "MyDatabase",
"C:\Users\Malek\Documents\PYSQLBS\Backups",
CDT.year, CDT.month, CDT.day, CDT.hour, CDT.minute, CDT.second))
...
print(subprocess.Popen(SQLCommand, shell=True, stdout=subprocess.PIPE).stdout.read())
但是,我遇到了这个错误。我 100% 确定文件夹 C:\Users\Malek\Documents\PYSQLBS\Backups
存在,因为我直接在命令行中测试了该命令,它运行良好。
Msg 3201, Level 16, State 1, Server MYSERVER\SQLSERVICE, Line 1
Cannot open backup device 'C:\Users\Malek\Documents\PYSQLBS\Backups19-09
-09-16:24:46.bak'. Operating system error 123(The filename, directory name, or volume label syntax is incorrect.).
Msg 3013, Level 16, State 1, Server MYSERVER\SQLSERVICE,
Line 1
BACKUP DATABASE is terminating abnormally.
问题是备份文件名称中的 :
个字符:2019-09 -09-16:24:46.bak
Windows 文件夹和文件路径不能包含 :
个字符,除非分隔驱动器号,例如:C:\foo\bar.txt
可以。 C:\foo\bar:::baz.txt
不是。
我目前正在尝试使用 Python 3.7 应用程序 运行 后台自动备份数据库。我设法使用以下查询字符串备份数据库。
SQLCommand = ("sqlcmd -E -S %s -Q \"BACKUP DATABASE %s TO DISK=\'%s\%02d-%02d-%02d-%02d:%02d:%02d.bak\'\"" %
("MYSERVER\SQLSERVICE", "MyDatabase",
"C:\Users\Malek\Documents\PYSQLBS\Backups",
CDT.year, CDT.month, CDT.day, CDT.hour, CDT.minute, CDT.second))
...
print(subprocess.Popen(SQLCommand, shell=True, stdout=subprocess.PIPE).stdout.read())
但是,我遇到了这个错误。我 100% 确定文件夹 C:\Users\Malek\Documents\PYSQLBS\Backups
存在,因为我直接在命令行中测试了该命令,它运行良好。
Msg 3201, Level 16, State 1, Server MYSERVER\SQLSERVICE, Line 1
Cannot open backup device 'C:\Users\Malek\Documents\PYSQLBS\Backups19-09 -09-16:24:46.bak'. Operating system error 123(The filename, directory name, or volume label syntax is incorrect.).
Msg 3013, Level 16, State 1, Server MYSERVER\SQLSERVICE, Line 1
BACKUP DATABASE is terminating abnormally.
问题是备份文件名称中的 :
个字符:2019-09 -09-16:24:46.bak
Windows 文件夹和文件路径不能包含 :
个字符,除非分隔驱动器号,例如:C:\foo\bar.txt
可以。 C:\foo\bar:::baz.txt
不是。