移动Sql Server数据库的脚本
生活随笔
收集整理的這篇文章主要介紹了
移动Sql Server数据库的脚本
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前段時間做過這么一件事情,把原本放在c盤的所有數據庫(除了sql server系統文件外)文件Move到D盤,主要是為了方便后續管理以及減少磁盤I/O阻塞(C,D是2個獨立磁盤)。
腳本很簡單,在此只是記錄下來,以免以后忘記,也方便復用:
這個腳本只有2個參數需要輸入,即:目標數據庫名字和目標目錄
?
USE master GODECLARE@DBName sysname,@DestPath varchar(256) DECLARE @DB table(name sysname,physical_name sysname)BEGIN TRYSELECT@DBName = 'TargetDatabaseName', --input database name@DestPath = 'D:\SqlData\' --input destination path-- kill database processes DECLARE @SPID varchar(20) DECLARE curProcess CURSOR FORSELECT spid FROM sys.sysprocesses WHERE DB_NAME(dbid) = @DBNameOPEN curProcessFETCH NEXT FROM curProcess INTO @SPIDWHILE @@FETCH_STATUS = 0BEGINEXEC('KILL ' + @SPID)FETCH NEXT FROM curProcessEND CLOSE curProcess DEALLOCATE curProcess-- query physical name INSERT @DB(name,physical_name) SELECTA.name,A.physical_name FROM sys.master_files A INNER JOIN sys.databases BON A.database_id = B.database_idAND B.name = @DBName WHERE A.type <=1--set offline EXEC('ALTER DATABASE ' + @DBName + ' SET OFFLINE')--move to dest path DECLARE@login_name sysname,@physical_name sysname,@temp_name varchar(256) DECLARE curMove CURSOR FOR SELECTname,physical_name FROM @DB OPEN curMoveFETCH NEXT FROM curMove INTO @login_name,@physical_nameWHILE @@FETCH_STATUS = 0BEGINSET @temp_name = RIGHT(@physical_name,CHARINDEX('\',REVERSE(@physical_name)) - 1)EXEC('exec xp_cmdshell ''move "' + @physical_name + '" "' + @DestPath + '"''')EXEC('ALTER DATABASE ' + @DBName + ' MODIFY FILE ( NAME = ' + @login_name+ ', FILENAME = ''' + @DestPath + @temp_name + ''')')FETCH NEXT FROM curMove INTO @login_name,@physical_nameEND CLOSE curMove DEALLOCATE curMove-- set online EXEC('ALTER DATABASE ' + @DBName + ' SET ONLINE')-- show result SELECTA.name,A.physical_name FROM sys.master_files A INNER JOIN sys.databases BON A.database_id = B.database_idAND B.name = @DBName END TRY BEGIN CATCHSELECT ERROR_MESSAGE() AS ErrorMessage END CATCH GO?
轉載于:https://www.cnblogs.com/aarond/archive/2013/03/29/sqlserver.html
總結
以上是生活随笔為你收集整理的移动Sql Server数据库的脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技术面试过程
- 下一篇: 备份文件命令SqlServer一键复制数