Sql-Server

有沒有辦法用新的 GUID 替換 sql server file_guid?

  • June 15, 2020

我有兩個具有相同 file_guid 的數據庫。嘗試在 Amazon RDS 中還原第二個數據庫時出現以下錯誤。

由於任務失敗或併發 RESTORE_DB 請求而中止任務。任務 ID 8 (RESTORE_DB) 異常:無法恢復數據庫 DATABASENAME,因為實例上已經存在具有相同 file_guids 的數據庫。

這是因為我已經恢復了另一個具有相同 file_guid 但不同物理名稱的數據庫),這是 Amazon RDS 的限制。如果有興趣在這里這裡找到詳細資訊。

sys.database_files 上的查詢結果

如何更新 sys.database_files 記錄?

我們必須這樣做——因為我們想將數據庫複製到新數據庫,同時更改名稱和文件 ID。

我們發現此處發布的原始過程不可重複,我想這取決於原始文件 ID 的創建方式。無論如何,我已經更新了以下程序,這是可重複的。

  1. 使用標準 RDS 數據庫備份將數據庫從 RDS 備份到 S3。
exec msdb.dbo.rds_backup_database
@source_db_name = '<database-name>',
@s3_arn_to_backup_to = 'arn:aws:s3:::<bucket-name>/<backup-filename>'
  1. 將 .bak 文件還原到本地電腦上的 SQL Server。我們有 MSDN 帳戶,所以我們剛剛下載並安裝了 SQL 2016,讓我們可以在本地電腦上完全訪問 SQL。但是,我相信您可以下載 SQL Express 並做同樣的事情,根據 SQL 引擎的源版本,某些功能可能會失去。
  2. 為數據庫執行導出數據層應用程序。這將創建一個 .bacpac 文件,其中包括架構、數據和程式碼(儲存過程等)。
  3. 刪除步驟 3 中導入 SQL Server 的原始數據。
  4. 執行導入數據層應用程序並指向在步驟 3 中創建的 .bacpac 文件。此步驟將設置文件 guids = _Data 和 _Logs,使它們唯一。
  5. 進行完整備份以獲取新的 .bak 文件。
  6. 將新的 .bak 文件上傳到 S3 並執行標準 RDS 數據庫導入。
exec msdb.dbo.rds_restore_database
@restore_db_name = '<database-name>',
@s3_arn_to_restore_from = 'arn:aws:s3:::<bucket-name>/<backup-filename>'

最後,我最終創建了新的 RDS 實例並在那裡恢復。小型數據庫還有其他解決方法是 1. 創建 .bacpac 並導入新數據庫,然後進行備份 (.bak)。見這裡。2. 生成包含模式和數據的腳本並在新數據庫上執行。

.bacpac 或生成腳本方式對我不起作用,因為數據庫更大(超過 10 GB),RDS 具有成本效益,但對 DBA 來說很痛苦。

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