对于分离一个数据库来说,我们可以用Manage Studio界面或者存储过程。但是对于每一种方法都必须保证没有用户使用这个数据库.接下来所讲的都是对于用命令来分离或附加一个数据库。对于用Manage Studio自己看着界面操作就可以应付了。

分离数据库

对于用存储过程来分离数据库,如果发现无法终止用户链接,可以使用ALTER DATABASE命令,并利用一个能够中断已存在链接的终止选项来把数据库设置为SINGLE_USER模式,设置为SIGLE_USER代码如下:

ALTER DATABASE [DatabaseName] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE

下面是分离数据库的CMD命令

EXEC sp_detach_db DatabaseName

一旦一个数据库分离成功,从SQL Server角度来看和删除这个数据库没有什么区别。

附加数据库

对于附加数据库,可以使用sp_attach_db存储过程,或者使用带有FOR ATTACH选项的CREATE DATABASE命令,在SQL Server2005或更高的版本中推荐使用后者,前者是为了向前兼容,它正在逐渐淘汰,而后者更提供更多对文件的控制。

CREATE DATABASE databasename
ON (FILENAME = 'D:\Database\dbname.mdf')
FOR ATTACH | FOR ATTACH_REBUILD_LOG

然而对于这样的附加,我们要注意几个地方。因为涉及到重建日志。

1.对于一个读/写数据库,如果含有一个可用的日志文件,无论使用FOR ATTACH ,还是使用FOR ATTACH_REBULD_LOG,都是一样,都不会对此数据库重建日志文件。如果日志文件不可用或者物理上没有该日志文件,使用FOR ATTACH或FOR ATTACH_REBULID_LOG都会重建日志文件,所以如果我们复制一个带有大量日志文件的数据库到另一台服务器中,就可以只复制.mdf文件,不用复制日志文件,然后使用FOR ATTACH_REBULD_LOG选项重建日志。条件是这台服务器将主要使用或只用改数据库的副本进行读操作。

2.对于一个只读数据库,就有点区别了,如果日志文件不可用,那么就不能更新主文件,所以也就不能重建日志,因此当我们附加一个只读数据库是,必须在FOR ATTACH从句中指定日志文件。

如果使用附加数据库重建了日志文件。使用FOR ATTACH_REBUILD_LOG会中断日志备份链,进行这种操作之前最好做一次数据库完全备份。

使用sp_detach_db存储过程一个好处就是可以保证一个数据库是被干净的关闭,那日志文件就不是附加数据库所必须的,我们可以使用FOR ATTACH_REBUILD_LOG命令重建日志,得到一个最小的日志文件。也算是一种快速收缩一个大日志文件的方法。

转载于:https://www.cnblogs.com/accumulater/p/6089537.html

SQL Server:分离和重新附加数据库相关推荐

  1. 在配置SQL server 2014时出现“附加数据库时出错。有关详情信息请单机“消息”列中的超链接”问题如何解决

    第一次做学生信息管理系统,俗话说的好"万事开头难",就在配置数据库的时候出现了如下的问题, 这个问题也很好解决,只要将需要附加进去的数据库文件位置修改到,SQL server 20 ...

  2. SQL Server 2008高可用性系列:数据库快照

    SQL Server 2008高可用性系列:数据库快照 http://database.51cto.com  2010-09-13 14:45  我爱菊花  博客园  我要评论(0) 摘要:我们今天要 ...

  3. 如何使用损坏或删除SQL Server事务日志文件重建数据库

    This is the last article, but not the least one, in the SQL Server Transaction Log series. In this s ...

  4. SQL Server 2012中包含的数据库(Contained Database)探索

    SQL Server 2012引入了包含数据库(Contained Database),解决了与当前(非包含)数据库关联的某些问题和复杂性.包含的数据库不依赖于其所属服务器相关的配置.管理.排序规则和 ...

  5. SQL Server 2008 R2如何开启数据库的远程连接

    SQL Server 2008 R2如何开启数据库的远程连接 转载于:https://www.cnblogs.com/macT/p/10213025.html

  6. 从Sql server 2000 到 Oracle 10g数据库迁移数据类型转化

    2010-01-12 从Sql server 2000 到 Oracle 10g数据库迁移数据类型转化 文章分类:数据库 SqlServer 2k转换为Oracle 10g 列名 SqlServer数 ...

  7. php实现sql server数据导入到mysql数据库_php实现SQL Server数据导入Mysql数据库(示例)...

    php将mssql的数据导入到mysql数据库中,代码: 代码示例: //连接SQL server数据库 $conn=mssql_connect("localhost"," ...

  8. SQL Server 2005“备份集中的数据库备份与现有的数据库不同”解决方法此信息转载自BlueSky's Blog,www.heuupk.com,为尊重无价的知识请保留此版权信息。...

    SQL Server 2005"备份集中的数据库备份与现有的数据库不同"解决方法 以前一直使用SQL Server2000,现在使用SQL Server2005,就在现在的项目中使 ...

  9. Sql server 数据转到 Mysql 数据库

    Sql server 数据转到 Mysql 数据库http://www.bieryun.com/3355.html 在网上找了一些方案,目前一个可行的较好的方案,虽然不够完美但也十分好用: 用到的用具 ...

最新文章

  1. 深入理解JavaScript系列(3):全面解析Module模式
  2. 使用go语言GUI库实现对mp3文件的播放1(简单的播放mp3文件)
  3. sklearn常见命令和官方文档汇总
  4. python编程神器下载_Python编程神器 -程序员必备开发手册
  5. flex 下对齐_Flex 布局教程:语法篇
  6. 微软文本检索_如何在Microsoft Word中引用其他文档中的文本
  7. 简而言之SPIFFE
  8. 【转】Java和C++的区别有哪些?
  9. windows下springboot项目部署elk日志系统教程elasticsearch与logstash与kibana
  10. ajax图片上传,基于firefox
  11. WPS2019政府版本
  12. 简述自定义驱动在工业通讯软件开发中的应用
  13. 用SET工具包制作钓鱼网站
  14. 虚拟机服务器渗透,对一台虚拟主机服务器的渗透 -电脑资料
  15. 机器学习(1)-项目 0: 预测泰坦尼克号乘客生还率
  16. cisco ASA 防火墙安全算法原理和基本配置(转自http://xiaoxiao1001.blog.51cto.com/7640562/1300161)
  17. 盘数几则热门微信好友诈骗套路
  18. 记录-小程序720°VR(跳转H5页面实现)
  19. 5g理论速度_5g速度是4g多少倍
  20. 事业单位笔试:《综合知识》大纲

热门文章

  1. 怎么打断点_搞笑段子: 有次相亲, 双方父母都在, 我坐下就给自己点了支烟
  2. IC/FPGA 技术交流
  3. 【 FPGA 】特定情况下消除不稳定态的方法
  4. 20165201 实验五 网络编程与安全
  5. 日常笔记——思科认证本地域登录
  6. Tomcat9 访问 Manager App
  7. 转另一个获取硬盘序列号的方法
  8. 《Photoshop Lab修色圣典(修订版)》—第1课1.4节逐步校正峡谷图像
  9. 深入理解计算机系统(3)
  10. Machine Learning Techniques -6-Support Vector Regression