SQLServer之分离数据库

分离数据库注意事项

要求具备 db_owner 固定数据库角色中的成员资格。数据库

能够分离数据库的数据和事务日志文件,而后将它们从新附加到同一或其余 SQL Server实例。 若是要将数据库更改到同一计算机的不一样 SQL Server 实例或要移动数据库,分离和附加数据库会颇有用。bash

分离数据库是指将数据库从 SQL Server 实例中删除,但使数据库在其数据文件和事务日志文件中保持不变。 以后,就可使用这些文件将数据库附加到任何 SQL Server实例,包括分离该数据库的服务器。服务器

若是存在下列任何状况,则不能分离数据库:并发

已复制并发布数据库。 若是进行复制,则数据库必须是未发布的。 必须经过运行 sp_replicationdboption禁用发布后,才能分离数据库。工具

若是没法使用 sp_replicationdboption,能够经过运行 sp_removedbreplication删除复制。优化

数据库中存在数据库快照。ui

必须首先删除全部数据库快照,而后才能分离数据库。spa

不能分离或附加数据库快照。日志

该数据库正在某个数据库镜像会话中进行镜像。code

除非终止该会话,不然没法分离该数据库。

数据库处于可疑状态。 没法分离可疑数据库;必须将数据库设为紧急模式,才能对其进行分离。

数据库为系统数据库。

分离只读数据库将会丢失有关差别备份的差别基准的信息。

分离数据库时生成的错误会阻止彻底关闭数据库和从新生成事务日志。 收到错误消息后,请执行下列更正操做:

从新附加与数据库关联的全部文件,而不单单是主文件。

解决致使生成错误消息的问题。

再次分离数据库。

使用SSMS数据库工具分离数据库

一、链接服务器-》展开服务器-》选择数据库-》右键点击-》选择任务-》选择分离。

二、在分离数据库对话框-》右边要分离得数据库对话框-》数据库名称:列出要分离的数据库-》删除链接:断开与指定数据库的链接,不能分离链接为活动状态的数据库-》更新统计信息:默认状况下,分离操做将在分离数据库时保留过时的优化统计信息;若要更新现有的优化统计信息,请单击此复选框-》状态:显示如下状态之一: 就绪或 未就绪-》消息:当数据库进行了复制操做,则 状态为未就绪, 消息列将显示已复制数据库。若是数据库有一个或多个活动链接,则状态为未就绪,消息列显示<number_of_active_connections> 个活动链接,例如:1 个活动链接。 在分离数据库以前,须要经过选择 删除链接断开全部活动链接。

三、数据库分离结果。

使用T-SQL脚本分离数据库

语法

--声明数据库引用
use other_database_name;
go
 
--语法
exec sp_detach_db [@dbname=] 'database_name' [,[@skipchecks= ] 'skipchecks'] [,[@keepfulltextindexfile=] 'KeepFulltextIndexFile' ];
go
复制代码

语法注释

--语法示例

--other_database_name

--声明当前使用的数据库不是要分离的数据库

--[@dbname=]'database_name'

--要分离的数据库的名称。database_name是sysname值,默认值为NULL。

--[@skipchecks =]'skipchecks'

--指定跳过仍是运行update statistic。同时将skipchecks是nvarchar(10)值,默认值为NULL。

--若要跳过更新统计信息,请指定,则返回 true。 若要显式运行更新统计信息,请指定false。

--默认状况下,执行update statistic可更新有关表和索引中的数据的信息。 对于要移动到只读介质的数据库,执行 UPDATE STATISTICS 很是有用。

--[@keepfulltextindexfile=] 'KeepFulltextIndexFile'

--指定在数据库分离操做过程当中不会删除与所分离的数据库关联的全文索引文件。

--KeepFulltextIndexFile是nvarchar(10)值,该值具备默认值为true。

--若是KeepFulltextIndexFile是false、 与数据库关联的全文索引的全部文件和全文索引的元数据被删除,除非数据库是只读的。

--若是为NULL,则返回true,全文索引相关的元数据保留。

--@keepfulltextindexfile中的将来版本将删除参数SQL Server。请不要在新的开发工做中使用此参数,并尽快修改当前仍在使用此参数的应用程序。

示例

--声明数据库引用
use master;
go
 
--进行数据库分离
--方式一
--exec sp_detach_db @dbname='testss'
--,@skipchecks='true'
--,@keepfulltextindexfile='true'; 
 
--方式二
exec sp_detach_db 'testss'
,'true'
,'true';
go
复制代码

示例结果:T-SQL脚本执行完毕须要在对象资源管理器刷新才能看到分离结果。

相关文章
相关标签/搜索