目前分類:MSSQL (2)

瀏覽方式: 標題列表 簡短摘要

如果想要附加的資料庫是從線上複製過來的,而且本機已存在一樣的資料庫名稱時,該如何附加並重新命名?

 

Step1:假設已從線上複製最新 mdf 資料庫檔案到本機的資料庫檔案路徑底下(預設會在C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA)

,並將檔案重新命名_YYYYMMDD

圖片 004    

Step2:附加資料庫失敗!!

(1)點"附加"

圖片 005  

(2)"加入",選擇TEST_20150515.mdf

圖片 006  

(3)因為複製到本機的資料庫名稱原本是TEST,檔名更名前為TEST.mdf,即使已更名為TEST_20150515.mdf,但附加後,讀到的檔名仍是舊的,這是MSSQL的bug ????

圖片 007  

(4)重新選擇檔案,附加仍會失敗

"無法附加與現有資料庫名稱相同的資料庫"

圖片 007  

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鎖定了,會出現下圖

"已開啟此檔案,所以無法完成動作"

圖片 002  

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) 人氣()