码迷,mamicode.com
首页 > 其他好文 > 详细

具体问题解决:不完全回滚

时间:2016-06-03 15:44:30      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

  有时候需要从一个服务器转移数据库到另一个。如果打算一下子分离所有数据库,那么下面的脚本就是有用了。
 
生成分离脚本:
 
SELECT DISTINCT use master; + Char(10) + GO + Char(10)                 
+ ALTER DATABASE [ + CONVERT(VARCHAR(500), Db_name(database_id)) + ]
+ SET SINGLE_USER WITH ROLLBACK IMMEDIATE
+ Char(10) + use master; + Char(10) + GO
+ Char(10)
+ EXEC master.dbo.sp_detach_db @dbname = N
+ ‘‘‘‘ + CONVERT(VARCHAR(500), Db_name(database_id)) + ‘‘‘‘
+ ; + Char(10)
+ GO + Char(10)
FROM master.sys.master_files WHERE Db_name(database_id) NOT IN ( master, model, msdb, tempdb )

 

这个脚本生成了需要分离数据库的脚本。在where子句中排除了四个系统数据库。

 
 
附加数据库操作脚本:
 
  下面将生成一个脚本来分离数据库。确保运行在原服务器上。因为一旦你分离数据库,数据库将在原来的服务器上消失。
  脚本基于一个重要假设,假定每个数据库只包含一个数据文件和一个日志文件。如果有数据库实例带有多个数据或者日志文件,还要手动分离。另外,脚本假定源和目标服务器有相同的文件路径。如果日志或者数据文件路径不同,也需要重新替换生成的脚本。
 
SELECT DISTINCT use master; + Char(10) + GO + Char(10)                 
+ CREATE DATABASE [ + CONVERT(VARCHAR(500), Db_name(x.database_id)) + ]
+ ON + Char(10) + ( physical_name = N + ‘‘‘‘
+ x.physical_name + ‘‘‘‘ + ), + Char(10)
+ ( physical_name = N + ‘‘‘‘ + y.physical_name + ‘‘‘‘ + )
+ Char(10) + FOR ATTACH + Char(10)
+ GO FROM master.sys.master_files x, master.sys.master_files y
WHERE Db_name(x.database_id) NOT IN ( master, model, msdb, tempdb )
AND x.database_id = y.database_id AND x.physical_name LIKE %mdf
AND
y.physical_name LIKE %ldf

 

 

 

具体问题解决:不完全回滚

标签:

原文地址:http://www.cnblogs.com/wenBlog/p/5556471.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!