我一直试图找出这个错误,绝对没有运气。我已经完成了SO,找到了一些零碎的东西来帮助我解决这个问题。
我需要创建一个预定的作业,该作业将在1月1日复制并重命名数据库,因此没有人需要手动完成。
这是完美运作的代码:
lvAddedDevices.ItemsSource = USBHandler.GetUSBDevices();
但是,新数据库名称需要包含年份。所以,它应该是例如'ugocity2017'。所以,在网上搜索了三个小时后,我想出了这个:
EXEC sp_renamedb 'ugocity', 'ugocity1'
GO
EXEC sp_detach_db @dbname = 'ugocity1'
GO
EXEC sp_configure 'show advanced options' , 1
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell' , 1
RECONFIGURE
GO
EXEC xp_cmdshell
'md C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\'
GO
EXEC xp_cmdshell
'RENAME "C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\ugocity2017.mdf", "ugocity1.mdf"'
GO
EXEC xp_cmdshell
'RENAME "C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\ugocity2017_1.ldf", "ugocity1_log.ldf"'
GO
EXEC sp_configure 'xp_cmdshell' , 0
RECONFIGURE
GO
EXEC sp_configure 'show advanced options' , 0
RECONFIGURE
GO
EXEC sp_attach_db @dbname = 'ugocity1'
, @filename1 = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\ugocity1.mdf'
, @filename2 = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\ugocity1_log.ldf'
GO
当我运行第一个时,数据库及其物理文件被重命名,没有错误。当我运行第二个代码时,数据库和.mdf文件被重命名,但.ldf保持不变,我得到:
Msg 5120,Level 16,State 101,Line 1 无法打开物理文件“C:\ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ ugocitylog.ldf”。操作系统错误2:“2(系统找不到指定的文件。)”
从字面上看,权限是完全控制权。
有没有其他人遇到此错误?我只是想不出来。
答案 0 :(得分:1)
是的 - 问题可能不在您的代码中,所以请查看其他地方。您有5个不同的命令字符串。你实际执行了哪些?但是,为什么要麻烦复杂的脚本,你太急于调试。您可以使用restore命令完成所需的一切。这包括更改数据库名称和重命名物理文件。 SSMS将为您执行此操作,您可以查看/使用它生成的脚本。
在常规页面中,选择" device"并选择备份文件。为目标中的数据库指定新名称。在“文件”页面中,更改还原列表中所有实际文件的物理文件名。然后单击对话框顶部的“脚本”按钮,而不是底部的“确定”按钮。