对于分离一个数据库来说,我们可以用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命令重建日志,得到一个最小的日志文件。也算是一种快速收缩一个大日志文件的方法。

最新文章

  1. Visual Studio 2015 如何将全英界面转成中文
  2. Java多线程线程学习(一)
  3. Hightcharts动态创建series
  4. Android组件Spinner使用
  5. P6 EPPM Manual Installation Guide (Oracle Database)
  6. Delphi XE5 Android 程序退出功能
  7. java用freemarker导出数据到word(含多图片)
  8. Android串口通信(基于Tiny6410平台)
  9. javascript oop深入学习笔记(二)--javascript的函数
  10. Java基础知识强化100:JVM 内存模型
  11. ASP.NET Application,Session,Cookie和ViewState等对象用法和区别 (转)
  12. Linux & Python 导航目录
  13. POJ 1830 【高斯消元第一题】
  14. Twenty Newsgroups Classification任务之二seq2sparse(2)
  15. 自己写的书《深入理解Android虚拟机内存管理》,不出版只是写着玩
  16. ORA-09925: Unable to create audit trail file带来的sqlplus / as sysdba无法连接
  17. Spring的历史及哲学
  18. jzoj6101. 【GDOI2019模拟2019.4.2】Path
  19. Junit4单元测试的基本用法
  20. ethereum/EIPs-1102 Opt-in provider access metamask不再默认直接连入网页

热门文章

  1. 【转】linux expr命令参数及用法详解
  2. 关于thinkphp 开发的网站部署问题
  3. 在Linux用户空间做内核空间做的事情
  4. RO05 - 如何编写RemObjects SDK服务端 (Delphi Version)
  5. Linux 制作ftp远程yum仓库
  6. python __init__ __call__
  7. Java和Python运行速度对比
  8. php数组转换js数组操作及json_encode应用
  9. 【Web】关于URL中文乱码问题
  10. HTML5 manifest离线缓存