Sql-Server

如何將 100 個數據庫從一台 MS-SQL 2008 伺服器遷移到另一台?(尋找自動化)

  • June 8, 2012

首先讓我說我不是 DBA,但我負責將不到 100 個 MS-SQL 2008 DB 從我們目前的開發伺服器移到新的/更好/更快的開發伺服器。

由於這只是一個本地開發伺服器,暫時停機是可以接受的,但我正在尋找一種方法來移動所有數據庫(最好是批量)。

我知道我可以對每一個進行備份,然後在新伺服器上恢復它,但考慮到數據庫的數量,我正在尋找一種更有效的方法。

我不反對學習新軟體、編寫程式碼或任何其他要求,只要它加快了程序。

  1. 移動文件後,以下腳本將生成 T-SQL 來創建數據庫。在其他任何事情之前執行此步驟很重要。
SELECT 'create database ' + QUOTENAME(DB_NAME(d.database_id)) + ' on ' + 
STUFF((
   SELECT ',(name = ''' + name + ''', filename = ''' + [physical_name] + ''')'
   FROM sys.[master_files] AS mf
   WHERE [mf].[database_id] = d.[database_id]
   FOR XML PATH('')
), 1, 1, '') + ' for attach'
FROM sys.[databases] AS d
WHERE d.name NOT IN ('master', 'model', 'tempdb', 'msdb')

如果新伺服器上數據文件的路徑與舊伺服器上的不同,您可以在腳本中編輯文件名(或者在查詢中做一些更有趣的事情來自動為您完成)。

2)下面的程式碼會生成一個T-SQL腳本,將所有非系統數據庫的數據庫狀態設置為離線。如果您的計劃是將原始伺服器設置為離線(這不是一個壞主意),那麼此步驟是不必要的,因為伺服器不會使用數據庫文件。

select 'alter database ' + quotename(name) + ' set offline'
from sys.[databases] as d
WHERE d.name NOT IN ('master', 'model', 'tempdb', 'msdb')
  1. 通過關閉原始伺服器或在原始伺服器上執行步驟 2 中的 T-SQL 使數據庫離線

4)將文件移動到新伺服器

  1. 在新伺服器上執行步驟 2 中的腳本。

引用自:https://serverfault.com/questions/396044