搜尋此網誌

2011年11月9日 星期三

如何快速的移轉sql server 2008 資料到新的主機上

最近因為來了台新server 主機需要把原本的sql server 2008 上的資料
移轉到新主機上,因為database 有20多個,如果一個一個用 restore 的方式
還要一個一個建立database 再 restore 有些麻煩
於是決定使用直接copy .mdf .ldf 資料庫檔案的方式來移轉
但因為資料庫檔案也是分散在不同disk 上,用手動copy 又怕有漏掉的
網路上查了一下找到一個可以查出資料庫檔案的路徑及檔名的sql 指令
 SELECT   physical_name from FROM sys.master_files
我再修改一下這個sql ,將結果存成一個 old2new.bat 檔
SELECT  'copy "'+ physical_name + '" "\\192.168.0.100\e$\db files"' AS current_file_location
FROM sys.master_files  s order by physical_name



old2new.bat 的內容
copy "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\DB_COLLECT.mdf" "\\192.168.0.100\e$\db files"
copy "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\DB_COLLECT_log.ldf" "\\192.168.0.100\e$\db files"

....
在原主機上執行 old2new.bat
把檔案copy 到新主機(sql sevrer 的服務要先停掉)

再使用下列sql ,將結果存成 new2path.bat,
select 'copy  "e:\db files\'+file_name+'" "'+ physical_name +'"'  AS current_file_location from (
 SELECT physical_name ,
 LTRIM( RTRIM( REVERSE(  SUBSTRING(   REVERSE(physical_name),  0, CHARINDEX('\', REVERSE(physical_name),0) ) ) )) as file_name
FROM sys.master_files  s ) as a
order by physical_name


new2path.bat 內容
copy  "e:\db files\DB_COLLECT.mdf" "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\DB_COLLECT.mdf"
copy  "e:\db files\DB_COLLECT_log.ldf" "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\DB_COLLECT_log.ldf"
copy  "e:\db files\master.mdf" "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\master.mdf"
copy  "e:\db files\mastlog.ldf" "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\mastlog.ldf"

....

停止新主機上的sql server 服務,相關的目錄建立好,再於新主機上執行 new2path.bat 將資料庫檔案copy 到對應的目錄,copy 完成後,啟動 sql server 服務,新的sql server 主機上的資料就與原主機相同,經測試移轉 18 G 的資料庫檔案,只花了 10分鐘完成此次移轉

不過移轉後發現,原主機上的維護計劃排程,會有無法正常執行情形
必需要重新新增維護計劃才會正常執行

沒有留言: