如何告诉 Microsoft SQL Server Management Studio 数据库重命名必须完全完成

Dom*_*que 0 sql-server ssms restore rename

我有一个旧的数据库副本。我通过备份从客户系统中检索它并将其恢复到我的本地 PC 上。我想查看同一数据库的最新副本。显然我不能这样做,在同一个数据库上工作,因为我的旧副本将被覆盖,所以我首先将我的数据库从“Firm_Customer”重命名为“Firm_Customer_orig”。

现在我想恢复数据库的最新副本,但失败了,如以下错误消息中所述:

System.Data.SqlClient.SqlError:无法覆盖文件“C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS01\MSSQL\DATA\Firm_Customer.mdf”。它正在由数据库“Firm_Customer_orig”使用。(Microsoft.SqlServer.SmoExtended)

我期望数据库从“Firm_Customer”重命名为“Firm_Customer_orig”也会导致文件“C:\Program Files\Microsoft SQL Server...\Firm_Customer.mdf”的重命名,但显然数据库重命名只是“部分” ”。

有没有办法强制数据库重命名以执行完整重命名(与“Firm_Customer”相关的所有内容都必须重命名为“Firm_Customer_orig”)?

哦,在我忘记之前:我正在使用 Microsoft SQL Server Management Studio,版本“v18.12”。

提前致谢

Lea*_*min 5

这就是 Microsoft 的设计方式,如果您重命名数据库,则仅更改数据库名称,而不更改逻辑名称或物理名称。文档重命名数据库 - 限制和限制(已添加重点)对此进行了描述:

  • 当其他用户正在访问数据库时,无法更改数据库名称。
  • 重命名数据库不会更改磁盘上数据库文件的物理名称或文件的逻辑名称。有关详细信息,请参阅数据库文件和文件组

要更改物理/逻辑路径或文件名,您需要使数据库脱机,然后更改位置和详细信息,执行更改数据库并将其重新联机。

Manvendra Singh 的《重命名 SQL Server 数据库的物理数据库文件名》中对此进行了逐步描述。


Bre*_*rey 5

听起来每个数据库的名称并不重要,正如您所提到的,它们是您恢复到本地 PC 的副本。如果是这种情况,更简单的方法可能是在恢复时重命名传入数据库。

  1. 在命令中指定数据库的新名称RESTORE DATABASE。例如:RESTORE DATABASE [Database_new] FROM ...

  2. 使用WITH MOVE同一恢复命令中的选项添加_new到所有文件名。例如:WITH MOVE 'DataFile1' TO D:\data\DataFile1_new.mdf。您必须对每个文件执行此操作。

如果您不确定要重命名的所有文件,可以使用该RESTORE FILELISTONLY命令。

RESTORE FILELISTONLY FROM DISK = 'D:\Backups\yourbackup.bak'
Run Code Online (Sandbox Code Playgroud)