問題描述
:
一台伺服器,聯了好幾個陣列,其實可以看作不同的邏輯驅動器,就假設為c盤,
d盤,e盤
sql server 2000
程式裝在了
c盤,資料裝在了d盤
現在陣列
d需要撤走,我需要把原來
d盤的資料庫檔案挪到
e盤上,資料庫有
100多個,乙個乙個手動備份恢復時間不夠,而且我不知道資料庫檔案的路徑變了以後會有什麼問題(我做了試驗,服務起不起來了)。
我應該如何做
?
我試了一種辦法,就是把
d盤的所有資料庫的資料檔案和資料夾原封不動的拷貝到
e盤,然後把
d盤撤走,把
e盤的碟符改為
d,就可以了,但是總覺得屬於歪招,所以想知道正規做法是怎麼做的?
解決方法
:
最省事的方法還是所謂的改碟符歪招
. 這種方法也最節約時間
.
正常的方法就是備份/還原
(不推薦
, 太慢
)
或者是1
樓的分離/附加
, 如果只是變碟符
, 可以寫自動化指令碼
最歪的方法是改系統表
, 直接把系統表中記錄的資料檔案和日誌檔案目錄改正確
.(sql server 2005
已經無法修改系統表
, 所以定義這種方法是最歪的
)
改系統表方法的具體實現指令碼
:
--
自動遷離的指令碼
(自動實現分離
+複製檔案+附加
)
--
注意根據需要修改下面的
--**
注釋的部分
.
--
鄒建2006.07 (
引用請保留此資訊
)
--
備份數目錄資訊和分離資料庫
if
object_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
for
select
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
end
close
tb
deallocate
tb
--
附加資料庫
declare
@dbname sysname
declare
tb cursor local
for
select
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
end
close
tb
deallocatetb
如何遷移資料庫到另乙個分割槽
問題描述 一台伺服器,聯了好幾個陣列,其實可以看作不同的邏輯驅動器,就假設為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...