我正在使用 SQL-Server,使用 SQL-Server Management Studio (SSMS)。
为了执行备份恢复,我通过 SSMS 创建了一个名为的 SQL Server 登录PORT-DDM\SQLEXPRESS
,这是连接 SQL-Server 数据库的典型方式。
我还创建了第二个实例,名为PORT-DDM\SQLEXPRESS01
(其中PORT-DDM
是我的 PC 的名称),现在我想将PORT-DDM\SQLEXPRESS
实例中的备份还原到PORT-DDM\SQLEXPRESS01
实例中。我已进行PORT-DDM\SQLEXPRESS
备份并将其存储在本地目录中C:\Temp_Folder\<filename>.bak
,但在执行还原操作时,出现以下错误消息:
===================================
Restore of database '<Prod>_<Customer>' failed. (Microsoft.SqlServer.Management.RelationalEngineTasks)
------------------------------
Program Location:
at Microsoft.SqlServer.Management.RelationalEngineTasks.RestoreDatabaseTaskFormComponent.PerformTask(ITaskExecutionContext context)
at Microsoft.SqlServer.Management.RelationalEngineTasks.RestoreDatabaseTaskFormComponent.Perform(ITaskExecutionContext context)
at Microsoft.SqlServer.Management.TaskForms.TaskExecutionManager.ExecuteTaskSequence(ISfcScriptCollector collector)
===================================
System.Data.SqlClient.SqlError: The operating system returned the error '5(Access is denied.)' while attempting 'RestoreContainer::ValidateTargetForCreation' on 'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\DATA\<Prod>_<Customer>.mdf'. (Microsoft.SqlServer.SmoExtended)
------------------------------
For help, click: https://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=16.100.47021.0&LinkId=20476
------------------------------
Program Location:
at Microsoft.SqlServer.Management.Smo.RestorePlan.Execute()
at Microsoft.SqlServer.Management.RelationalEngineTasks.RestoreDatabaseTaskFormComponent.PerformTask(ITaskExecutionContext context)
(所提及的链接似乎已失效。)
我该怎么办?
哦,我忘了说了:我的备份所在的位置可供我的电脑的每个用户访问:
我已将完全控制权授予所有人,使用icalcs
。现在我陷入困境,因为 SQL-Server 正在使用以下文件:C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\DATA\<Prod>_<Cust>.mdf
。
为了避免这种情况,我重新启动了我的 SQL-Server 会话,甚至重新启动了我的整个 PC,但问题仍然存在。
根据要求,“恢复数据库屏幕”的图像:
这正在变成一场血腥的噩梦:
- 首先,我收到错误消息,说他需要文件的管理员访问权限。
- 然后他抱怨说文件正在使用中,所以我必须重新启动计算机。
- 然后他抱怨说还有其他文件需要管理员权限。
- 一旦管理好这些,他又抱怨文件正在使用中,所以我需要重新启动计算机。
- 最后他说“但是你不能这样做:你正在将数据库恢复到原来的位置。”
=> 最后一件事是我创建“SQLExpress 01 ”登录的确切原因:为了能够拥有相同数据库的不同实例:一个用于运行时测试,一个用于恢复从客户站点检索的备份。通常,后者工作正常,但现在我正在处理一个数据库服务器无法访问的客户,所以我使用“生成脚本”来获取±备份。我的想法是再次备份我的计算机(在“SQLEXPRESS”登录下),在“SQLEXPRESS01”登录下恢复,并将其用于提到的“生成脚本”场景。