SQLServer 搬移資料庫到D曹
要搬移的資料庫檔案在C裡面,比較快的方法是打下面的指令可以查出所有表儲存位置
USE master;
GO
SELECT
db_name(database_id) AS DatabaseName,
type_desc AS FileType,
physical_name AS FilePath
FROM sys.master_files
ORDER BY db_name(database_id), type_desc;
查出來之後先儲存下來等一下要一個一個手動掛回來會比較方便
再來需要停止 SQLSERVER 服務,停掉之後就可以直接開始搬檔案了
搬完之後由於服務啟動至少需要下面這三個東西,這個手動改一下
(或是不想改下圖這三個就不要搬,讓它保持在C曹搬你自己創建的就好)
這三個關鍵檔案改好就可以啟動了
啟動後會是一個全空的DB,用下面指令一個一個掛回來
下面的範例是把資料庫名稱 CHG 掛回來的指令
(把所有CHG改成你的資料庫名稱即可)
USE master;
GO
ALTER DATABASE CHG
MODIFY FILE (NAME = 'CHG', FILENAME = 'D:\MSSQL\DATA\CHG.mdf');
GO
ALTER DATABASE CHG
MODIFY FILE (NAME = 'CHG_log', FILENAME = 'D:\MSSQL\DATA\CHG_log.ldf');
GO
ALTER DATABASE CHG SET ONLINE;
GO
數量很多的話自己寫個腳本執行吧
下面是寫成動態 TSQL 的範例
-- 設置基礎路徑
DECLARE @BasePath NVARCHAR(255) = 'D:\MSSQL\DATA\';
-- 資料庫清單
DECLARE @DatabaseList TABLE (DatabaseName NVARCHAR(128));
INSERT INTO @DatabaseList VALUES
('CHG1'),
('CHG2'),
('CHG3');
-- 定義變數
DECLARE @DatabaseName NVARCHAR(128);
DECLARE @MdfPath NVARCHAR(255);
DECLARE @LdfPath NVARCHAR(255);
DECLARE @Sql NVARCHAR(MAX);
-- 確保基礎路徑結尾無斜線
IF RIGHT(@BasePath, 1) = '\'
SET @BasePath = LEFT(@BasePath, LEN(@BasePath) - 1);
-- 開始遍歷資料庫清單
DECLARE db_cursor CURSOR FOR
SELECT DatabaseName FROM @DatabaseList;
OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @DatabaseName;
WHILE @@FETCH_STATUS = 0
BEGIN
-- 生成 MDF 和 LDF 的路徑
SET @MdfPath = @BasePath + '\' + @DatabaseName + '.mdf';
SET @LdfPath = @BasePath + '\' + @DatabaseName + '_log.ldf';
-- 修改 MDF 檔案位置
SET @Sql =
'ALTER DATABASE ' + QUOTENAME(@DatabaseName) +
' MODIFY FILE (NAME = ''' + @DatabaseName + ''', FILENAME = ''' + @MdfPath + ''')';
EXEC sp_executesql @Sql;
-- 修改 LDF 檔案位置
SET @Sql =
'ALTER DATABASE ' + QUOTENAME(@DatabaseName) +
' MODIFY FILE (NAME = ''' + @DatabaseName + '_log'', FILENAME = ''' + @LdfPath + ''')';
EXEC sp_executesql @Sql;
-- 將資料庫設為 ONLINE
SET @Sql =
'ALTER DATABASE ' + QUOTENAME(@DatabaseName) + ' SET ONLINE';
EXEC sp_executesql @Sql;
-- 繼續處理下一個資料庫
FETCH NEXT FROM db_cursor INTO @DatabaseName;
END;
-- 關閉並釋放資源
CLOSE db_cursor;
DEALLOCATE db_cursor;
沒有留言:
張貼留言