必须首先分离数据库。 尝试附加未分离的数据库将返回错误。 数据库
附加数据库时,全部数据文件(MDF 文件和 LDF 文件)都必须可用。 若是任何数据文件的路径不一样于首次建立数据库或上次附加数据库时的路径,则必须指定文件的当前路径。服务器
在附加数据库时,若是 MDF 和 LDF 文件位于不一样目录而且其中一条路径包含 \?GlobalRoot,该操做将失败。工具
须要 CREATE DATABASE、CREATE ANY DATABASE 或 ALTER ANY DATABASE 权限。ui
分离再从新附加只读数据库后,会丢失有关当前差别基准的备份信息。 “差别基准” 是数据库或其文件或文件组子集中全部数据的最新完整备份。 若是没有基准备份信息,master 数据库会变得与只读数据库不一样步,这样以后进行的差别备份可能会产生意外结果。 所以,若是对只读数据库使用差别备份,在从新附加数据库后,应经过进行完整备份来创建新的差别基准。spa
附加时,数据库会启动。 一般,附加数据库时会将数据库重置为它分离或复制时的状态。 可是,附加和分离操做都会禁用数据库的跨数据库全部权连接。操作系统
附加日志文件的要求在某些方面取决于数据库是读写的仍是只读的,以下所示:3d
对于读写数据库,一般能够附加新位置中的日志文件。 不过,在某些状况下,从新附加数据库须要使用其现有的日志文件。 所以,请务必保留全部分离的日志文件,直到在不须要这些日志文件的状况下成功附加了数据库。rest
若是读写数据库具备单个日志文件,而且您没有为该日志文件指定新位置,附加操做将在旧位置中查找该文件。 若是找到了旧日志文件,则不管数据库上次是否彻底关闭,都将使用该文件。 可是,若是未找到旧文件日志,数据库上次是彻底关闭且如今没有活动日志链,则附加操做将尝试为数据库建立新的日志文件。日志
若是附加的主数据文件是只读的,则 数据库引擎 假定数据库也是只读的。 对于只读数据库,日志文件在数据库主文件中指定的位置上必须可用。 由于 SQL Server 没法更新主文件中存储的日志位置,因此没法生成新的日志文件。code
一、链接服务器-》在对象资源管理器窗口展开数据库文件夹-》右键点击数据库文件夹-》选择附加。
二、在附加数据库弹出框-》点击添加(查找必需的主数据库文件。 当用户选择 .mdf 文件时,就会在 “要附加的数据库” 网格的相应字段中自动填充合适的信息。)。
三、在定位数据库文件弹出框中-》选择指定路径下分离的数据库文件-》点击肯定。
四、在附加数据库弹出框-》要附加的数据库窗格(显示所选数据库的有关信息。):MDF 文件位置(显示选定 MDF 文件的路径和文件名。);数据库名称(显示数据库的名称。);附加为(根据须要,能够指定要附加数据库的其余名称。);“全部者”(提供数据库可能全部者的下拉列表,您能够根据须要从其中选择其余全部者。);“状态”(显示下表中相应的数据库状态。),状态一图标为无图标,状态文本为无文本,描述为此对象的附加操做还没有启动或者可能挂起。 这是打开该对话框时的默认值;状态二图标为绿色的右向三角形,状态文本为正在进行,描述为已启动附加操做,可是该操做未完成;状态三图标为绿色的选中标记,状态文本为成功,描述为已成功附加该对象;状态四图标为包含白色十字形的红色圆圈,状态文本为错误,描述为附加操做遇到错误,未成功完成;状态五图标为包含左、右两个黑色象限和上、下两个白色象限的圆圈,状态文本为已中止,描述为因为用户中止了附加操做,该操做未成功完成;状态六图标为包含一个指向逆时针方向的曲线箭头的圆圈,状态文本为已回滚,状态描述为附加操做已成功,但已对其进行回滚,由于在附加其余对象的过程当中出现了错误。-》删除(从 “要附加的数据库” 网格中删除选定文件。)-》数据库详细信息窗格:原始文件名(显示属于数据库的已附加文件的名称。);文件类型(指示文件类型,即 “数据” 或 “日志”。);当前文件路径(显示所选数据库文件的路径。 能够手动编辑该路径。);消息(显示空消息或 “找不到文件” 超连接。)-》点击肯定。
五、查看附加结果(不须要刷新便可在对象资源管理器窗口查看)。
--语法一 --声明数据库引用 use other_database_name; go --附加数据库 create database database_name on (filename='mdf_path'), (filename='ldf_path') for attach go --语法二 --声明数据库引用 use other_database_name; go --附加数据库 create database database_name on ( name='logical_file_name' ,filename='filestream_path' ,size= size_number [ KB | MB | GB | TB ] ,maxsize= { max_size_number [ KB | MB | GB | TB ] | unlimited } ,filegrowth= growth_increment [ KB | MB | GB | TB | % ] ), ( name='logical_log_file_name' filename='log_filestream_path' ,size= size_number [ KB | MB | GB | TB ] ,maxsize= { max_size_number [ KB | MB | GB | TB ] | unlimited } ,filegrowth= growth_increment [ KB | MB | GB | TB | % ] ) for { attach with [ enable_broker | new_broker | error_broker_conversations ] [,restricted_user] [,filestream ( directory_name={ 'directory_name' | NULL })] | attach_rebuild_log } go
--语法解析
--other_database_name
--其它数据库,不能使用要附加的数据库进行附加。
--database_name
--新数据库的名称。数据库名称在SQL Server的实例中必须惟一,而且必须符合标识符规则。
--mdf_path
--数据库分离的数据文件完整路径。
--ldf_path
--数据库分离的日志文件完整路径。
--name
--指定文件的逻辑名称。 指定filename时,
--须要使用name,除非指定for attach子句之一。 没法将filestream文件组命名为primary。
--logical_file_name
--在SQL Server中引用文件时所用的逻辑名称。 Logical_file_name在数据库中必须惟一,而且必须符合标识符规则。
--名称能够是字符或Unicode常量,也能够是常规标识符或分隔标识符。
--filename
--指定操做系统(物理)文件名称。
--filestream_path
--数据库数据文件完整路径
--logical_log_file_name
--数据库日志名称。
--log_filestream_path
--数据库日志文件完整路径
--size
--指定文件的大小。
--将 os_file_name 指定为UNC路径时,不能指定SIZE。 SIZE不适用于FILESTREAM文件组。
--size_number
--文件的初始大小。
--maxsize
--指定文件可增大到的最大大小。将os_file_name指定为UNC路径时,不能指定maxsize。
--max_size_number
--最大的文件大小。可使用 KB、MB、GB 和 TB 后缀。默认值为 MB。指定一个整数,不包含小数位。
--若是未指定 max_size,文件将一直增加到磁盘变满为止。Max_size 是一个整数值。对于大于2147483647的值,使用更大的单位。
--unlimited
--指定文件将增加到磁盘充满。在SQL Server中,指定为不限制增加的日志文件的最大大小为2TB,而数据文件的最大大小为16TB。
--filegrowth
--指定文件的自动增量。文件的filegrowth设置不能超过max_size_number设置。将os_file_name指定为UNC路径时,不能指定filegrowth。
--filegrowth不适用于filestream文件组。
--growth_increment
--每次须要新空间时为文件添加的空间量。
--该值能够MB、KB、GB、TB 或百分比 (%)为单位指定。
--若是未在数量后面指定MB、KB 或%,则默认值为MB。
--若是指定%,则增量大小为发生增加时文件大小的指定百分比。 定的大小舍入为最接近的64KB的倍数,最小值为64KB。
--值为0时代表自动增加被设置为关闭,不容许增长空间。
--enable_broker
--指定对指定的数据库启用Service Broker。 也就是说,启动了消息传递,
--而且在sys.databases 目录视图中将is_broker_enabled设置为true。数据库保留现有的Service Broker标识符。
--new_broker
--在sys.databases和还原数据库中都建立一个新的service_broker_guid值,并经过清除结束全部会话端点。
--Broker已启用,但未向远程会话端点发送消息。必须使用新标识符从新建立任何引用旧Service Broker标识符的路由。
--error_broker_conversations
--结束全部会话,并产生一个错误指出数据库已附加或还原。
--Broker一直处于禁用状态直到此操做完成,而后再将其启用。数据库保留现有的Service Broker标识符。
--restricted_user
--对于attach,能够指定restricted_user选项。
--restricted_user只容许db_owner固定数据库角色成员以及dbcreator和sysadmin固定服务器角色成员链接到数据库,
--不过对链接数没有限制。无资格用户的尝试将被拒绝。
--filestream
--将包含filestream选项“目录名称”的数据库附加到SQL Server实例中将提示SQL Server验证Database_Directory名称是否惟一。
--directory_name={ 'directory_name' | NULL }
--适用于: SQL Server 2012 (11.x) 到 SQL Server 2017
--与Windows兼容的目录名称。此名称应在SQL Server实例的全部Database_Directory名称中惟一。
--不管SQL Server排序规则设置如何,惟一性比较都不区分大小写。在此数据库中建立FileTable以前,应设置此选项。
--仅在将containment设置为partial以后,才容许使用如下选项。若是将containment设置为none,将发生错误。
--for attach_rebuild_log
--指定经过附加一组现有的操做系统文件来建立数据库。该选项只限于读/写数据库。
--必须有一个指定主文件的 <filespec> 项。若是缺乏一个或多个事务日志文件,将从新生成日志文件。
--attach_rebuild_log自动建立一个新的1MB的日志文件。此文件放置于默认的日志文件位置。
--for attach_rebuild_log具备如下要求:彻底关闭数据库。全部数据文件(MDF 和 NDF)都必须可用。
--一般,FOR ATTACH_REBUILD_LOG 用于将具备大型日志的可读/写数据库复制到另外一台服务器,
--在这台服务器上,数据库副本频繁使用,或仅用于读操做,于是所需的日志空间少于原始数据库。
--不能对数据库快照指定for attach_rebuild_log。
--示例一 --声明数据库引用 use master; go --附加数据库 create database testss on (filename='D:\SQLServer\tests.mdf'), (filename='D:\SQLServer\testslog.ldf') for attach go --示例二 --声明数据库引用 use master; go --附加数据库 create database testss on ( name='testss' ,filename='D:\SQLServer\tests.mdf' ,size=1021KB ,maxsize=1024MB ,filegrowth=1024MB ), ( name='testsslog' ,filename='D:\SQLServer\testslog.ldf' ,size=1021KB ,maxsize=1024MB ,filegrowth=1024MB ) for attach with enable_broker ,restricted_user --,filestream ( directory_name='D:\SQLServer\') go