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

2021-04-08 15:01:23 字數 3260 閱讀 1184

問題描述

:

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

print

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