[回馈CSDN网友]贴个SQL小工具--移动数据库物理文件
已经适用大多数情况(SQLServer2005/2008):
- SQL code
USE masterGODECLARE @DBName sysname, @DestPath varchar(256)DECLARE @DB table( name sysname, physical_name sysname) BEGIN TRYSELECT @DBName = 'FF', --input database name @DestPath = 'E:\' --input destination path--kill database processesDECLARE @SPID varchar(20)DECLARE curProcess CURSOR FORSELECT spid FROM sys.sysprocessesWHERE DB_NAME(dbid) = @DBNameOPEN curProcess FETCH NEXT FROM curProcess INTO @SPID WHILE @@FETCH_STATUS = 0 BEGIN EXEC('KILL ' + @SPID) FETCH NEXT FROM curProcess ENDCLOSE curProcessDEALLOCATE curProcess--query physical nameINSERT @DB( name, physical_name)SELECT A.name, A.physical_nameFROM sys.master_files AINNER JOIN sys.databases B ON A.database_id = B.database_id AND B.name = @DBNameWHERE A.type <=1--set offlineEXEC('ALTER DATABASE ' + @DBName + ' SET OFFLINE')--move to dest pathDECLARE @login_name sysname, @physical_name sysname, @temp_name varchar(256)DECLARE curMove CURSOR FORSELECT name, physical_nameFROM @DBOPEN curMove FETCH NEXT FROM curMove INTO @login_name,@physical_name WHILE @@FETCH_STATUS = 0 BEGIN SET @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_name ENDCLOSE curMoveDEALLOCATE curMove--set onlineEXEC('ALTER DATABASE ' + @DBName + ' SET ONLINE')--show resultSELECT A.name, A.physical_nameFROM sys.master_files AINNER JOIN sys.databases B ON A.database_id = B.database_id AND B.name = @DBNameEND TRYBEGIN CATCH SELECT ERROR_MESSAGE() AS ErrorMessageEND CATCH[解决办法]
太强大了吧?
支持.
[解决办法]
强烈建议MS +300分 :)
[解决办法]
[解决办法]
。。。
[解决办法]
前一天都在,楞是没发现,谢了
[解决办法]
先做个记号,呵呵
[解决办法]
执行了下:
- SQL code
sp_configure 'show advanced options',1reconfiguregosp_configure 'xp_cmdshell',1reconfiguregosp_configure 'show advanced options',0reconfiguregoUSE masterGODECLARE @DBName sysname, @DestPath varchar(256)DECLARE @DB table( name sysname, physical_name sysname) BEGIN TRYSELECT @DBName = 'TMP_DB', --input database name @DestPath = 'd:\A-' --input destination path--kill database processesDECLARE @SPID varchar(20)DECLARE curProcess CURSOR FORSELECT spid FROM sys.sysprocessesWHERE DB_NAME(dbid) = @DBNameOPEN curProcess FETCH NEXT FROM curProcess INTO @SPID WHILE @@FETCH_STATUS = 0 BEGIN EXEC('KILL ' + @SPID) FETCH NEXT FROM curProcess ENDCLOSE curProcessDEALLOCATE curProcess--query physical nameINSERT @DB( name, physical_name)SELECT A.name, A.physical_nameFROM sys.master_files AINNER JOIN sys.databases B ON A.database_id = B.database_id AND B.name = @DBNameWHERE A.type <=1--set offlineEXEC('ALTER DATABASE ' + @DBName + ' SET OFFLINE')--move to dest pathDECLARE @login_name sysname, @physical_name sysname, @temp_name varchar(256)DECLARE curMove CURSOR FORSELECT name, physical_nameFROM @DBOPEN curMove FETCH NEXT FROM curMove INTO @login_name,@physical_name WHILE @@FETCH_STATUS = 0 BEGIN SET @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_name ENDCLOSE curMoveDEALLOCATE curMove--set onlineEXEC('ALTER DATABASE ' + @DBName + ' SET ONLINE')--show resultSELECT A.name, A.physical_nameFROM sys.master_files AINNER JOIN sys.databases B ON A.database_id = B.database_id AND B.name = @DBNameEND TRYBEGIN CATCH SELECT ERROR_MESSAGE() AS ErrorMessageEND CATCH
[解决办法]
[解决办法]
哈哈,老盖手下无弱兵
[解决办法]
O
[解决办法]
这个东西。。。。
移动数据库物理文件?
这样也可以?
我们还真是孤陋寡闻啊!
[解决办法]
8错,谢谢楼主分享!
[解决办法]
回帖是一种美德!传说每天回帖即可获得 10 分可用分!回帖是一种美德!传说每天回帖即可获得 10 分可用分!回帖是一种美德!传说每天回帖即可获得 10 分可用分!
[解决办法]
[解决办法]
强帖留名~~
[解决办法]
看不懂,LZ写点注释吧
[解决办法]
★〓销售老虎机破解仪器,★〓详细介绍请登陆我公司网站查询联系电话:15858125285 联系人★〓:余先生 QQ:992487591 1009910397
破解老虎机仪器产品详细介绍请登陆我公司网站查询联系电话:15858125285 联系人:余先生 QQ:992487591 1009910397
老虎机遥控器--游戏机上分器,定位器,干扰器,退币器。--打老虎机包赢!质量上乘!价格合理!诚信买卖!中国邮政货到付款!一周内可退换货~!
[解决办法]
学习学习
[解决办法]
长见识了!顶
[解决办法]
很好很强大,收藏了
[解决办法]
[解决办法]
顶 好东西 收藏了 呵呵
[解决办法]
谢谢楼主 mark 一下
[解决办法]
顶
[解决办法]
楼主辛苦,收藏先!
[解决办法]
[解决办法]
强帖留名~~
[解决办法]
mark
[解决办法]
mark
[解决办法]
学习·强!
[解决办法]
mark
[解决办法]
mark
[解决办法]
学习中...
[解决办法]
mark
[解决办法]
学习
[解决办法]
hao
------解决方案--------------------
收藏,虽然还有些地方不怎么明白.查查字典也要搞清楚
[解决办法]
记号,学习下。
[解决办法]
收藏了,谢谢分享
[解决办法]
先收藏,以后学习!
[解决办法]
大,收藏,接分,
LZ加注!!
[解决办法]
2000不可用吗?
[解决办法]
mark
[解决办法]
感谢分享~~~
[解决办法]
我还没有用呢,收藏一下
[解决办法]
楼主是microsoft的人?
[解决办法]
强贴留名
[解决办法]
强大...拿回来好好研究下...
[解决办法]
楼主太牛啦!好东东,顶一个.
[解决办法]
事先还要一个个杀进程?
楼主能用文字讲解一下么?一些对应知识点,小鸟在此学习了.
[解决办法]
强帖留名
[解决办法]
这个有什么用吗?谁知道?
[解决办法]
太强了,哈哈...
[解决办法]
[解决办法]
[解决办法]
恩
不错啊
挺有帮助的啊
[解决办法]
签名!
[解决办法]
[解决办法]
mark
[解决办法]
有帮助
[解决办法]
事先还要一个个杀进程?
楼主能用文字讲解一下么?谢了哦 收藏先
[解决办法]
收藏了,谢谢分享
[解决办法]
完全不知所曰!
建议加点注悉,让我们这些菜鸟学习学习~~~
[解决办法]
mark
[解决办法]
收藏先
[解决办法]
学习学习
[解决办法]
楼主太强大了,学习一下
[解决办法]
收藏下
[解决办法]
我顶ing……
学习中
[解决办法]
收藏!
[解决办法]
好东东
[解决办法]
[解决办法]
[解决办法]
收藏,Mark,呵呵
[解决办法]
不错,谢谢分享!
免费资源下载站http://download.csdn.net/zhuhong110450
[解决办法]
楼主真好,虽然我看不懂,还是顶一下
[解决办法]
[解决办法]
收藏,Mark
[解决办法]
mark
[解决办法]
2000的是否可以?
[解决办法]
不错,收藏,学习下
[解决办法]
不错,收藏,建议加入精华。
[解决办法]
谢谢,收藏一下。
[解决办法]
路过 学习
[解决办法]
学习一下,谢谢分享
[解决办法]
做过记号
[解决办法]
[解决办法]
感谢赐教
[解决办法]
我有些奇怪。。
为什么这么几行代码,,,
就这么多人写不出来。。。
我 不是说我写的出来。
我是奇怪。、、、