SQL語句實現移動資料庫檔案

2021-09-08 06:32:46 字數 3602 閱讀 2388

看csdn上看到一朋友寫了乙個《貼個sql小工具--移動資料庫物理檔案

使用是方法是先設定資料庫離線,再移動資料庫檔案,然後修改資料庫的儲存檔案路徑,最後再設定資料庫聯機。

這裡我寫的使用的是,先分離資料庫,再移動資料庫檔案,然後再附加新資料庫檔案的方法:

usemaster

goif

object_id('

sp_movedb',

'p') 

isnot

null

drop

proc

sp_movedb 

gocreate

proc

sp_movedb

(@database

sysname,

@pathto

nvarchar

(1024))

asdeclare

@sql

nvarchar

(max

),@attachdatabase

nvarchar

(max

),@error

nvarchar

(1024

),@dir

varchar

(1024

),@ok

intif

db_id

(@database

) is

null

begin

set@error='

錯誤的資料庫名: '+

@database

raiserror

50001

@error

return

endset

@dir='

dir '+

@pathto

exec

@ok=

xp_cmdshell 

@dir

,no_output

if@ok

<>

0begin

set@error='

錯誤的檔案路徑: '+

@pathto

raiserror

50001

@error

return

endselect

@database

=name 

from

sys.databases 

where

name

=@database

print

'資料庫: '+

@database

+char(13

)+char(10

)+'正在移動資料庫檔案,請稍候

'select

@sql

=isnull

(@sql

+char(13

)+char(10

),'')+

'kill '+

rtrim

(spid) 

from

sys.sysprocesses 

where

db_name

(dbid)

=@database

exec

(@sql

)set

@sql

=null

select

@sql

=isnull

(@sql

+char(13

)+char(10

),'')+

'exec xp_cmdshell 

''move '+

physical_name

+char(32

)+@pathto

+right

(physical_name,

charindex('

\',reverse

(physical_name)))

+'''

,no_output',

@attachdatabase

=isnull

(@attachdatabase+'

,','

create database '+

quotename

(@database)+

'on ')

+'(filename=

'''+

@pathto

+right

(physical_name,

charindex('

\',reverse

(physical_name)))

+''')'

from

sys.master_files 

where

database_id

=db_id

(@database

)set

@sql='

exec sp_detach_db '+

quotename

(@database)+

char(13

)+char(10

)+@sql

+char(13

)+char(10

)+@attachdatabase+'

for attach

'exec

(@sql)if

@@error=0

print

'完成移動資料庫檔案.

'else

print

'移動資料庫檔案失敗.'

test:

exec sp_movedb 'test1' ,'f:\sql2005\test' /*

資料庫: test1

正在移動資料庫檔案,請稍候... ...

完成移動資料庫檔案. */

--移動所有的使用者資料庫檔案如下:

declare

@sql

nvarchar

(max

)declare

@path

nvarchar

(1024

)set

@path='

f:\sql2005\test

'select

@sql

=isnull

(@sql

+char(13

)+char(10

),'')+

'exec sp_movedb '+

quotename

(name) +'

,'''

+@path

+''''

from

sys.databases 

where

name 

notin('

master',

'model',

'msdb',

'tempdb',

'reportserver',

'reportservertempdb')

exec

(@sql)/*

資料庫: deadlocktest

正在移動資料庫檔案,請稍候

完成移動資料庫檔案.

資料庫: test1

正在移動資料庫檔案,請稍候

完成移動資料庫檔案.*/

資料庫檔案移動

oracle資料庫由資料檔案,控制檔案和聯機日誌檔案三種檔案組成。由於磁碟空間的變化,或者基於資料庫磁碟i o效能的調整等,我們可能會考慮移動資料庫檔案。下面以unix平台為例,分別討論三種資料庫檔案的移動方法。一.移動資料檔案 可以用alter database,alter tablespace兩...

Oracle移動資料庫檔案

一。設定要移動的資料庫 開始 執行 cmd命令 set oracle sid experience experience你要移動檔案所屬的資料庫的sid 二。進入sqlplus sqlplus nolog conn sys sys as sysdba 已連線。select name from v d...

如何上傳SQL資料庫檔案

如何上傳sql資料庫檔案 1.取得遠端伺服器的ip和登入使用者名稱 密碼 2.在本地安裝好sql server伺服器 4.匯出資料庫,源選擇本地,目的選擇遠端伺服器 需要輸入ip,帳號,密碼 5.下一步,選擇所有的表和檢視 6.下一步,立即執行。等待片刻即後提示成功。我做過多次,本方法絕對可行。參考...