如何遷移資料庫到另乙個分割槽

2021-08-29 13:17:00 字數 2894 閱讀 1121

問題描述:

一台伺服器,聯了好幾個陣列,其實可以看作不同的邏輯驅動器,就假設為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

print

(@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...