附加数据库
本主题说明如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 2012 中附加数据库。 可以使用此功能来复制、移动或升级 SQL Server 数据库。
本主题内容
开始之前:
先决条件
建议
安全性
附加数据库,使用:
SQL Server Management Studio
Transact-SQL
**跟进:**在升级数据库之后
开始之前
先决条件
必须首先分离数据库。 尝试附加未分离的数据库将返回错误。 有关详细信息,请参阅分离数据库。
附加数据库时,所有数据文件(MDF 文件和 NDF 文件)都必须可用。 如果任何数据文件的路径不同于首次创建数据库或上次附加数据库时的路径,则必须指定文件的当前路径。
建议
我们建议您使用 ALTER DATABASE 计划重定位过程(而不使用分离和附加操作)移动数据库。 有关详细信息,请参阅移动用户数据库。
[返回页首]
安全性
文件访问权限可在很多数据库操作过程中设置,其中包括分离或附加数据库。 有关分离或附加数据库时设置的文件权限的信息,请参阅 SQL Server 2008 R2 联机丛书中的保护数据和日志文件。
建议您不要附加或还原来自未知或不可信源的数据库。 此类数据库可能包含恶意代码,这些代码可能会执行非预期的 Transact-SQL 代码,或者通过修改架构或物理数据库结构导致错误。 使用来自未知源或不可信源的数据库前,请在非生产服务器上针对数据库运行 DBCC CHECKDB,然后检查数据库中的代码,例如存储过程或其他用户定义代码。 有关附加数据库的详细信息以及在附加数据库时对元数据进行的更改的信息,请参阅数据库分离和附加 (SQL Server)。
权限
要求具有 CREATE DATABASE、CREATE ANY DATABASE 或 ALTER ANY DATABASE 权限。
[返回页首]
使用 SQL Server Management Studio
附加数据库
在 SQL Server Management Studio 对象资源管理器中,连接到 SQL Server 数据库引擎实例,再展开该实例。
右键单击**“数据库”,然后单击“附加”**。
在**“附加数据库”对话框中,若要指定要附加的数据库,请单击“添加”,然后在“定位数据库文件”**对话框中选择数据库所在的磁盘驱动器并展开目录树,以查找并选择数据库的 .mdf 文件。例如:
C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\AdventureWorks2012_Data.mdf
重要提示 尝试选择已附加的数据库将生成错误。
要附加的数据库
显示所选数据库的有关信息。<无列标头>
显示一个图标,用以指示附加操作的状态。 下面的**“状态”**说明中介绍可能的图标。MDF 文件位置
显示选定 MDF 文件的路径和文件名。数据库名称
显示数据库的名称。附加为
根据需要,可以指定要附加数据库的其他名称。所有者
提供数据库可能所有者的下拉列表,您可以根据需要从其中选择其他所有者。状态
显示下表中相应的数据库状态。图标
状态文本
说明
(无图标)
(无文本)
此对象的附加操作尚未启动或者可能挂起。 这是打开该对话框时的默认值。
绿色的右向三角形
正在进行
已启动附加操作,但是该操作未完成。
绿色的选中标记
成功
已成功附加该对象。
包含白色十字形的红色圆圈
错误
附加操作遇到错误,未成功完成。
包含左、右两个黑色象限和上、下两个白色象限的圆圈
已停止
由于用户停止了附加操作,该操作未成功完成。
包含一个指向逆时针方向的曲线箭头的圆圈
已回滚
附加操作已成功,但已对其进行回滚,因为在附加其他对象的过程中出现了错误。
消息
显示空消息或“找不到文件”超链接。添加
查找必需的 master 数据库文件。 当用户选择 .mdf 文件时,就会在**“要附加的数据库”**网格的相应字段中自动填充合适的信息。移除
从**“要附加的数据库”**网格中删除选定文件。“ <database_name> ”数据库详细信息
显示要附加的文件的名称。 若要验证或更改文件的路径名,请单击**“浏览”按钮 (…**)。注意 如果文件不存在,则“消息”列显示“找不到”。如果找不到日志文件,则说明它位于其他目录中或者已被删除。 您需要更新“数据库详细信息”网格中该文件的路径使其指向正确的位置,或者从网格中删除该日志文件。 如果找不到 .ndf 数据文件,则需要更新网格中该文件的路径使其指向正确的位置。
原始文件名
显示属于数据库的已附加文件的名称。文件类型
指示文件类型,即**“数据”或“日志”**。当前文件路径
显示所选数据库文件的路径。 可以手动编辑该路径。消息
显示空消息或**“找不到文件”**超链接。
[返回页首]
使用 Transact-SQL
附加数据库
连接到数据库引擎。
在标准菜单栏上,单击**“新建查询”**。
使用关闭 FOR ATTACH 的 CREATE DATABASE 语句。
将以下示例复制并粘贴到查询窗口中,然后单击**“执行”**。 此示例附加 AdventureWorks2012 数据库的文件并将该数据库重命名为 MyAdventureWorks。
CREATE DATABASE MyAdventureWorks ON (FILENAME = 'C:\MySQLServer\AdventureWorks_Data.mdf'), (FILENAME = 'C:\MySQLServer\AdventureWorks_Log.ldf') FOR ATTACH;
注意 或者,您可以使用 sp_attach_db 或 sp_attach_single_file_db 存储过程。 但是,Microsoft SQL Server 的未来版本中将删除这些存储过程。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 我们建议您改用 CREATE DATABASE … FOR ATTACH。
[返回页首]
跟进:在升级 SQL Server 数据库之后
在使用附加方法升级数据库后,该数据库将立即变为可用,然后自动进行升级。 如果数据库具有全文索引,升级过程将导入、重置或重新生成它们,具体取决于**“全文升级选项”服务器属性的设置。 如果升级选项设置为“导入”或“重新生成”,则全文索引将在升级过程中不可用。 导入可能需要数小时,而重新生成最多可能需要十倍的时间,具体取决于编制索引的数据量。 另请注意,当升级选项设置为“导入”**时,如果全文目录不可用,将重新生成关联的全文索引。
如果升级前用户数据库的兼容级别为 90 或 100,升级后将保持相应级别。 如果升级前兼容级别为 80 或更低,则在升级后的数据库中,兼容级别将设置为 90,该级别为 SQL Server 2012 支持的最低兼容级别。 有关详细信息,请参阅 ALTER DATABASE 兼容级别 (Transact-SQL)。
[返回页首]
请参阅
参考
CREATE DATABASE (Transact-SQL)