如果想要附加的資料庫是從線上複製過來的,而且本機已存在一樣的資料庫名稱時,該如何附加並重新命名?
Step1:假設已從線上複製最新 mdf 資料庫檔案到本機的資料庫檔案路徑底下(預設會在C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA)
,並將檔案重新命名_YYYYMMDD
Step2:附加資料庫失敗!!
(1)點"附加"
(2)"加入",選擇TEST_20150515.mdf
(3)因為複製到本機的資料庫名稱原本是TEST,檔名更名前為TEST.mdf,即使已更名為TEST_20150515.mdf,但附加後,讀到的檔名仍是舊的,這是MSSQL的bug ????
(4)重新選擇檔案,附加仍會失敗
"無法附加與現有資料庫名稱相同的資料庫"
Step3:使用sql script下指令,就能解決這個問題.
use master;
GO
CREATE DATABASE TEST_20150515
ON (FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\TEST_20150515.mdf'),
(FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\TEST_20150515_log.ldf')
FOR ATTACH;
|
karenjian822 發表在 痞客邦 留言(0) 人氣()
實務上,常需要把最新線上的DB複製回自己本機作新功能開發,但是又不希望停掉MSSQL服務,把資料庫檔案複製出來,如何作呢?
Step1:如果沒把MSSQL服務停掉,就想複雜資料庫檔案是行不通的,因為資料庫被MSSQL鎖定了,會出現下圖
"已開啟此檔案,所以無法完成動作"
Step2:卸離資料庫後,可以複製檔案
請在SQL Management Studio中下指令
use master
exec sp_detach_db'TEST'
|
但有時候會無法卸離成功
訊息3703,層級16,狀態3,行1
無法卸離資料庫'TEST',因為目前正在使用中。
|
Step3:需要將資料庫設定為"單一使用者模式",才能卸離成功.
USE master;
GO
--設定為單一使用者模式後,才可成功卸離資料庫
ALTER DATABASE TEST
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
--卸離資料庫
exec sp_detach_db'TEST';
|
Step4:這時已能把TEST.mdf檔COPY出來了,複製完成後,再記得把資料庫限制存取改為"多人模式"
--重新連線資料庫
exec sp_attach_db'TEST','C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\TEST.mdf','C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\TEST_Log.ldf'
GO
--改回多人模式
ALTER DATABASE TEST
SET MULTI_USER;
GO
|
karenjian822 發表在 痞客邦 留言(0) 人氣()