【发布时间】:2019-10-08 17:40:47
【问题描述】:
我的程序有这个更新工具。该工具使用此代码(vb 和 sql)更新 SQL Server 数据库。
Dim sql As Process = Process.Start("sqlcmd.exe", Param + " -i update.sql -o log.txt")
Param 包含 .bak 文件 myprogram_update.bak 等的名称。
update.sql 以
RESTORE DATABASE [myprogram_tmp]
FROM DISK = N'$(db_src)'
WITH FILE = 1,
MOVE N'myprogram_tmp' TO @mdf,
MOVE N'myprogram_tmp_log' TO @ldf,
NOUNLOAD, STATS = 5
@mdf 和 @ldf 是从 SQL Server 设置中读取的标准路径。
更新工具已交付给客户,问题是通常不允许 SQL Server 读取 Windows 的用户目录,例如 Desktop 或 Downloads。但是许多客户将存档解压缩到这些目录,然后他们会收到此错误。
无法访问 myprogram_update.bak / 访问被拒绝。
我无法更改每个客户服务器上的设置,那么有没有办法让它适用于这些目录?我的一个想法是先运行设置并将其解压缩到program files,但也许有更智能的解决方案。
编辑:该工具以管理员模式运行。
【问题讨论】:
-
考虑将您的更改和/或初始数据库作为 DACPAC 或 BACPAC 发送。部署只需要 SQL Server 本身的权限。这种方式只支持有限数量的数据,但它比脚本恢复更方便(通过 DacFx 支持以编程方式调用 DACPAC 部署)。一般来说,数据库项目是一个巨大的胜利,因为它们完全支持版本控制。
标签: sql-server restore database-backups