SQLServer之分离数据库

分离数据库注意事项

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

可以分离数据库的数据和事务日志文件,然后将它们重新附加到同一或其他 SQL Server实例。 如果要将数据库更改到同一计算机的不同 SQL Server 实例或要移动数据库,分离和附加数据库会很有用。

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

如果存在下列任何情况,则不能分离数据库:

  • 已复制并发布数据库。 如果进行复制,则数据库必须是未发布的。 必须通过运行 sp_replicationdboption禁用发布后,才能分离数据库。

    如果无法使用 sp_replicationdboption,可以通过运行 sp_removedbreplication删除复制。

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

    必须首先删除所有数据库快照,然后才能分离数据库。

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

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

    除非终止该会话,否则无法分离该数据库。

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

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

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

  1. 重新附加与数据库关联的所有文件,而不仅仅是主文件。
  2. 解决导致生成错误消息的问题。
  3. 再次分离数据库。

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

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

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

3、数据库分离结果。

使用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,全文索引相关的元数据保留。
[email protected]中的未来版本将删除参数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脚本执行完毕需要在对象资源管理器刷新才能看到分离结果。

原文地址:https://www.cnblogs.com/vuenote/p/10264122.html

时间: 2024-08-30 08:39:09

SQLServer之分离数据库的相关文章

SQLServer “无法对数据库&#39;XXX&#39; 执行删除,因为它正用于复制”的解决方法

“无法对数据库'XXX'执行删除,因为它正用于复制” 解决办法: 执行  sp_removedbreplication 'XXX' 这个语句的解释是:从数据库中删除所有复制对象,但不更新分发服务器上的数据.此存储过程在发布服务器的发布数据库或订阅服务器的订阅数据库上执行. 然后“任务--分离“ 或者 执行  DROP DATABASE XXX SQLServer "无法对数据库'XXX' 执行删除,因为它正用于复制"的解决方法 原文地址:https://www.cnblogs.com/

SqlServer定时备份数据库和定时杀死数据库死锁解决

PS:Sqlserver 2008 R2,windows 8 64位 1.备份数据库 因为要备份,我们就要用到Sqlserver的代理,默认数据库的代理是不开启的.需要我们手动开启的. 执行备份数据库脚本,现在将脚本公布,其实将这一段代码中需要保存的文件路径和数据库名称替换一下就可以实现备份了.但是还没有达到定时备份的目的 ? 1 2 3 4 5 6 7 8 9 10 11 --自动备份并保存最近5天的SQL数据库作业脚本 宋彪 20130310 DECLARE @filename VARCHA

4.3 附加和分离数据库

4.3 附加和分离数据库 4.3.1 分离数据库 4.3.2 附加数据库 USE [master] GO CREATE DATABASE [SQLDB01] ON ( FILENAME = N'C:\MSSQL\Data\SQLDB01.mdf' ), ( FILENAME = N'C:\MSSQL\Data\SQLDB01_log.ldf' ), ( FILENAME = N'C:\MSSQL\Data\FG2012_data.ndf' ), ( FILENAME = N'C:\MSSQL\D

sql 2012日志文件频繁出现:svchost (4892) 数据库引擎已分离数据库(1、C:\Windows\system32\LogFiles\Sum\Current.mdb)

svchost (4892) 数据库引擎已分离数据库(1.C:\Windows\system32\LogFiles\Sum\Current.mdb).(时间=0 秒) 内部计时序列: [1] 0.000, [2] 0.000, [3] 0.000, [4] 0.000, [5] 0.000, [6] 0.016, [7] 0.000, [8] 0.000, [9] 0.000, [10] 0.016, [11] 0.031, [12] 0.000. 接收的缓存: 0 0 https://supp

Oracle、Db2、SqlServer、MySQL 数据库插入当前系统时间

做易买网项目,由于对数据库插入系统时间不了解,常常遇到的问题: 1.java.sql.SQLException: ORA-01861: 文字与格式字符串不匹配.原因:由于获取系统时间类型不对,应为systdate 下面介绍Oracle.Db2.SqlServer.MySQL 数据库插入当前系统时间 例如有表table,table 中有两个字段:name .makedate1.oracle:插入系统时间应为sysdate:insert into table (name,makedate) valu

OpenNMS分离数据库

1.   分离数据库 1.1   配置OpenNMS文件 1.我们需要在OpenNMS中修改datasource数据源,在OpenNMS中如下目录: /opt/opennms/etc/opennms-datasources.xml 2.将localhost修改为数据库主机IP地址即可 <jdbc-data-source name="opennms" database-name="opennms" class-name="org.postgresql.

解剖SQLSERVER 第一篇 数据库恢复软件商的黑幕

解剖SQLSERVER 第一篇  数据库恢复软件商的黑幕 这一系列,我们一起来解剖SQLSERVER 在系列的第一篇文章里本人可能会得罪某些人,但是作为一位SQLSERVER MVP,在我的MVP任期内希望可以对大家作出一些贡献 在第一篇里面涉及到某些内容可能不会以详细的方式给出截图并且和大家讲解,毕竟第一篇的篇幅比较长,希望大家见谅.. 在第一篇文章开始之前,先说三个题外话 第一个题外话  更新丢失 首先要做的事情是,跟大家道歉 在之前<SQLSERVER走起>的微信公众帐号里推送了一篇文章

sqlserver 标准系统数据库

SQL server系统数据库很重要,大部分时候都不应该修改他们.唯一例外的是model数据库和tempdb数据库.model数据库允许部署更改到任何新创建的数据库(如存储过程),而更改tempdb数据库则是为了帮助扩展数据库以承担更多的负载. 1.Resource数据库 Resource数据库从SQL server 2005引进.它包含了SQL server运行所需的所有的只读的关键系统表.元数据以及存储过程.它不包含任何用户实例或数据库的任何信息,它只在安装新服务补丁时被写入.Resourc

SQLite使用教程5 分离数据库

http://www.runoob.com/sqlite/sqlite-detach-database.html SQLite 分离数据库 SQLite的 DETACH DTABASE 语句是用来把命名数据库从一个数据库连接分离和游离出来,连接是之前使用 ATTACH 语句附加的.如果同一个数据库文件已经被附加上多个别名,DETACH 命令将只断开给定名称的连接,而其余的仍然有效.您无法分离 main 或 temp 数据库. 如果数据库是在内存中或者是临时数据库,则该数据库将被摧毁,且内容将会丢