問題描述:
一台伺服器,聯了好幾個陣列,其實可以看作不同的邏輯驅動器,就假設為c盤,d盤,e盤
sql server 2000 程式裝在了c盤,資料裝在了d盤
現在陣列d需要撤走,我需要把原來d盤的資料庫檔案挪到e盤上,資料庫有100多個,乙個乙個手動備份恢復時間不夠,而且我不知道資料庫檔案的路徑變了以後會有什麼問題(我做了試驗,服務起不起來了)。
我應該如何做?
我試了一種辦法,就是把d盤的所有資料庫的資料檔案和資料夾原封不動的拷貝到e盤,然後把d盤撤走,把e盤的碟符改為d,就可以了,但是總覺得屬於歪招,所以想知道正規做法是怎麼做的?
解決方法:
最省事的方法還是所謂的改碟符歪招. 這種方法也最節約時間.
正常的方法就是備份/還原(不推薦, 太慢)
或者是1樓的分離/附加, 如果只是變碟符, 可以寫自動化指令碼
最歪的方法是改系統表, 直接把系統表中記錄的資料檔案和日誌檔案目錄改正確.(
sql server 2005已經無法修改系統表, 所以定義這種方法是最歪的)
改系統表方法的具體實現指令碼:
-- 自動遷離的指令碼(自動實現分離+複製檔案+附加)
-- 注意根據需要修改下面的--** 注釋的部分.
-- 鄒建2006.07 (引用請保留此資訊)
-- 備份數目錄資訊和分離資料庫
ifobject_id
('tempdb..#')is
notnull
drop
table #
create
table #(
dbname sysname
,name
sysname
,filename
nvarchar
(260),
filepath as
left(
filename
,len
(filename)-
charindex
('\'
,reverse
(filename
))))
exec
sp_msforeachdb n'
--** 如果是所有的使用者資料庫都要處理, 則去掉下面兩句的注釋, 並且注釋掉後面的兩行
--if n''?'' in(n''master'', n''model'', n''msdb'', n''tempdb'')
--return -- 只能處理使用者資料庫
--** 如果是處理指定的使用者資料庫, 則保持現狀
if n''?'' not in(n''helloworlddb'', n''adventureworks'')
return -- 只處理指定列表的資料庫
use [?]
insert #(dbname, name, filename)
select db_name(), name, rtrim(filename) from sysfiles
use master
exec sp_detach_db n''?'' '
-- 複製資料庫檔案
declare
@s nvarchar
(4000), @d_drive char
(1)set
@d_drive =
'd'--**
遷移到e 盤
declare
tb cursor local
forselect
n'xcopy "'
+filename
+'" "'
+stuff
(filepath, 1, 1, @d_drive)
+'\" /y'
from#
open
tb
fetch
tb into @s
while
@@fetch_status
= 0
begin
(@s)
exec master.dbo.
xp_cmdshell @s
fetch tb into @s
endclose
tb
deallocate
tb
-- 附加資料庫
declare
@dbname sysname
declare
tb cursor local
forselect
distinct
dbname
from#
open
tb
fetch
tb into @dbname
while
@@fetch_status
= 0
begin
set @s = n'exec sp_attach_db '
+quotename
(@dbname, n''''
)select @s = @s + n','''
+stuff
(filename
, 1, 1, @d_drive)
+ n''''
from #
where dbname = @dbname
exec
sp_executesql @s
fetch tb into @dbname
endclose
tb
deallocate
tb
如何遷移資料庫到另乙個分割槽
問題描述 一台伺服器,聯了好幾個陣列,其實可以看作不同的邏輯驅動器,就假設為c盤,d盤,e盤 sql server 2000 程式裝在了 c盤,資料裝在了d盤 現在陣列 d需要撤走,我需要把原來 d盤的資料庫檔案挪到 e盤上,資料庫有 100多個,乙個乙個手動備份恢復時間不夠,而且我不知道資料庫檔案...
如何遷移資料庫到另乙個分割槽
問題描述 一台伺服器,聯了好幾個陣列,其實可以看作不同的邏輯驅動器,就假設為c盤,d盤,e盤 sql server 2000 程式裝在了 c盤,資料裝在了d盤 現在陣列 d需要撤走,我需要把原來 d盤的資料庫檔案挪到 e盤上,資料庫有 100多個,乙個乙個手動備份恢復時間不夠,而且我不知道資料庫檔案...
如何完整遷移git倉庫到另乙個遠端位址
專案中遇到git倉庫遷移,很常見。如何把乙個專案中所有的分支,tag等遷移到另乙個倉庫位址,需要執行乙個特別的轉殖命令,然後映象push到新的倉庫位址。具體步驟如下 1.開啟命令列工具 2.以bare的方式轉殖老的倉庫 git clone bare3.映象push到新的倉庫位址 cd old rep...