Sql-Server

如何告訴 Microsoft SQL Server Management Studio 必須完全完成數據庫重命名

  • July 18, 2022

我有一個舊的數據庫副本。我通過備份從客戶系統中檢索它並在我的本地 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”。

提前致謝

這就是 Microsoft 設計的方式,如果您重命名數據庫,則僅更改數據庫名稱 - 邏輯名稱和物理名稱均不更改。這在這裡描述:

  • 當其他使用者正在訪問數據庫時,不能更改數據庫名稱。使用 SQL Server Management Studio 活動監視器查找到數據庫的其他連接,然後關閉它們。有關詳細資訊,請參閱在 SQL Server Management Studio (SSMS) 中打開活動監視器。
  • 在 SQL Server 中,您可以將數據庫設置為單使用者模式以關閉任何打開的連接。有關詳細資訊,請參閱將數據庫設置為單使用者模式。
  • 在 Azure SQL 數據庫中,您必須確保沒有其他使用者與要重命名的數據庫建立開放連接。
  • 重命名數據庫不會更改磁碟上數據庫文件的物理名稱或文件的邏輯名稱。

要更改物理/邏輯路徑或文件名,您需要使數據庫離線,然後更改位置和詳細資訊,執行 alter database 並使其重新聯機。

本文中也將逐步進行描述。

我希望這有幫助。

聽起來每個數據庫的名稱並不重要,正如您所提到的,它們是您恢復到本地 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'

引用自:https://dba.stackexchange.com/questions/314528