有時候需要從一個伺服器轉移資料庫到另一個。如果打算一下子分離所有資料庫,那麼下麵的腳本就是有用了。 生成分離腳本: SELECT DISTINCT 'use master;' + Char(10) + 'GO' + Char(10) + 'ALTER DATABASE [' + CONVERT(VA ...
有時候需要從一個伺服器轉移資料庫到另一個。如果打算一下子分離所有資料庫,那麼下麵的腳本就是有用了。 生成分離腳本:
SELECT DISTINCT 'use master;' + Char(10) + 'GO' + Char(10)
+ 'ALTER DATABASE [' + CONVERT(VARCHAR(500), Db_name(database_id)) + '] '
+ 'SET SINGLE_USER WITH ROLLBACK IMMEDIATE'
+ Char(10) + 'use master;' + Char(10) + 'GO'
+ Char(10)
+ 'EXEC master.dbo.sp_detach_db @dbname = N'
+ '''' + CONVERT(VARCHAR(500), Db_name(database_id)) + ''''
+ ';' + Char(10)
+ 'GO' + Char(10)
FROM master.sys.master_files WHERE Db_name(database_id) NOT IN ( 'master', 'model', 'msdb', 'tempdb' )
這個腳本生成了需要分離資料庫的腳本。在where子句中排除了四個系統資料庫。
附加資料庫操作腳本: 下麵將生成一個腳本來分離資料庫。確保運行在原伺服器上。因為一旦你分離資料庫,資料庫將在原來的伺服器上消失。 腳本基於一個重要假設,假定每個資料庫只包含一個數據文件和一個日誌文件。如果有資料庫實例帶有多個數據或者日誌文件,還要手動分離。另外,腳本假定源和目標伺服器有相同的文件路徑。如果日誌或者數據文件路徑不同,也需要重新替換生成的腳本。SELECT DISTINCT 'use master;' + Char(10) + 'GO' + Char(10)
+ 'CREATE DATABASE [' + CONVERT(VARCHAR(500), Db_name(x.database_id)) + ']'
+ ' ON ' + Char(10) + '( physical_name = N' + ''''
+ x.physical_name + '''' + '),' + Char(10)
+ '( physical_name = N' + '''' + y.physical_name + '''' + ')'
+ Char(10) + ' FOR ATTACH' + Char(10)
+ 'GO' FROM master.sys.master_files x, master.sys.master_files y
WHERE Db_name(x.database_id) NOT IN ( 'master', 'model', 'msdb', 'tempdb' )
AND x.database_id = y.database_id AND x.physical_name LIKE '%mdf'
AND y.physical_name LIKE '%ldf'