最近因為來了台新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分鐘完成此次移轉
不過移轉後發現,原主機上的維護計劃排程,會有無法正常執行情形
必需要重新新增維護計劃才會正常執行
沒有留言:
張貼留言