加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – 如何在SQL Server中附加数据库?

发布时间:2020-12-24 17:20:40 所属栏目:编程 来源:网络整理
导读:与在SQL Server中附加数据库相关的一些常见问题: What does it mean to attach or detach a database? How do I detach a database? How do I attach a database? What does it mean to attach and rebuild the log? How do I do it in SQL Server Express?
副标题[/!--empirenews.page--]

与在SQL Server中附加数据库相关的一些常见问题:

  • What does it mean to attach or detach a database?
  • How do I detach a database?
  • How do I attach a database?
    • What does it mean to attach and rebuild the log?
  • How do I do it in SQL Server Express?
  • When might I consider detaching and attaching?
  • Are there any risks or warnings?
  • What about attaching between versions and editions of SQL Server? (Standard to Enterprise? 2000 to 2008? 2012 to 2008?)

解决方法

什么是分离或附加以及它们如何工作?

我们将从分离开始.在SQL Server中分离数据库时,您将使数据库脱机并将其从要从中分离的SQL Server实例中删除.数据库数据和日志文件保持一致并保持一致状态,因此您可以稍后将数据库附加到另一个SQL Server实例. Attach将数据和日志文件从已正确分离的数据库(或从完全关闭的SQL Server实例复制的数据库)连接到SQL Server实例,并使数据库联机.

如何分离数据库?

您可以在T-SQL或SQL Server Management Studio GUI中执行此操作.

在GUI中,右键单击要分离的数据库,选择“所有任务”,然后单击“分离”.从那里你将获得分离对话框.您可以选择首先删除连接以强制断开所有活动连接以及它们在执行过程中的回滚工作.您还可以选择在分离之前更新统计信息.

在T-SQL中:

-- You don't want to be in the database you are trying to detach
USE Master
GO

-- Optional step to drop all active connections and roll back their work
ALTER DATABASE DatabaseName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

-- Perform the detach
EXEC sp_detach_db 'DatabaseName'
GO

对于系统存储过程sp_detach_db,您可以选择传递两个参数:

> @skipchecks – 如果为’True’,则可接受的输入为’True’或’False’,SQL Server将在分离之前更新统计信息.如果’错’,则不会.如果您未在此处指定任何内容,则将在SQL Server 2005或更高版本中更新统计信息.

> @keepfulltextindexfile – 此处的默认值为“True” – 如果设置为true,则在分离期间不会删除全文索引元数据.

要了解更多关于分离的信息以及我在下面重点介绍的风险的更多细节,sp_detach_db的Books Online article是一个很好的起点.

如何附加数据库?

您也可以在T-SQL或SQL Server Management Studio GUI中执行此操作.

(注意:如果您拥有未正确分离的数据库中的数据和日志文件,则您的附加可能无法正常工作.当发生分离时,数据库将脱机,并且日志和数据文件将进入一致状态.当服务被彻底关闭时发生.)

在GUI中,右键单击实例的顶级Databases文件夹,然后选择Attach.在下一个对话框中,您将选择要附加的数据库的主数据文件(.MDF),并确保选择了其他文件并指定了适当的位置,然后单击“确定”,附加数据库.

在T-SQL中,在SQL Server 2005中执行此操作并转发的最佳方法是通过CREATE DATABASE命令.这是SQL Server 2012之外支持的方法.如果要查看如何使用sp_attach_db,可以在[sp_attach_db] [3]或[sp_attach_single_file_db] [4]的联机丛书中看到这些内容.

当您的日志文件和数据文件可用并且它们是一致的时,这就是T-SQL方法:

– 使用Create Database和FOR ATTACH子句进行附加

CREATE DATABASE DatabaseName 
    ON (FILENAME = 'FilePathFileName.mdf'),-- Main Data File .mdf
    (FILENAME = 'FilePathLogFileName.ldf'),-- Log file .ldf
     (FILENAME = 'FilePathSecondaryDataFile.ndf)  -- Optional - any secondary data files
    FOR ATTACH 
GO

您还可以在线查看有关Create Database声明的更多信息.

如何在SQL Server Express中分离/附加?

它实际上是一样的.如果您使用的是SQL Server Management Studio Express,则可以使用上述GUI中的分离/附加对话框或上述SSMS Express中的T-SQL步骤.与Express没有区别.

如果您没有SSMS Express,可以下载它(Here是SQL Server 2012 Express版本).

您可以进入SQLCMD会话并使用上述相同的T-SQL结构.

我应该何时考虑进行分离或附加?

首先,关于什么分离和附加不应该用于:备份和恢复分离和附加不是备份数据库以进行常规恢复的方法.这种方式没有事务日志备份,它使您的数据库处于可以意外删除数据库文件的状态,并且根本不是一个好方法.

这就是说,分离和附加对于一些用例是好的(不是详尽的,随意编辑以添加或创建更多的新答案):

>有时用于迁移(虽然我更喜欢备份/恢复,如我在答案here中所讨论的那样)
>如果要删除不再使用但可以根据需要稍后附加的数据库.
>在某些故障排除情况下,可能需要这样做
>没有空间来备份或将数据和日志文件还原到另一个环境(你不应该在这里,但我曾经用它来移动环境中的dev数据库有时候..不想要或者需要日志所以附加/重建日志文件)

风险和警告

同样,在线图书是一个很好的资源here,但我会在分离或附加数据库时考虑一些特定的考虑事项 –

分离

>您正在使数据库脱机.它将不再可访问.这应该是显而易见的,但值得一提.这就是为什么它不是一个很好的备份选项.
>当数据库联机时,SQL Server会锁定文件.我不建议尝试这样做来证明我的错误,因为可能还有其他一些情况,但是当SQL Server联机时,您通常无法删除数据库文件(数据,辅助数据或日志文件).这是件好事.当你分离时,你没有这样的保护 – 这可能是一件坏事.
>如果您正在处理数据库损坏,并且您发现某个文章某个地方有分离的第一步 – 这是错误的 – 如果您分离损坏的数据库,那可能就是这样.您可能无法再次附加该数据库.
>在整个网络中剪切和粘贴生产数据库文件是一种可能导致文件级损坏的方法.另一个原因是我喜欢在进行迁移时进行备份/恢复.
>这可能会导致维护计划失败.实际情况是,您可以像我一样设置维护计划,以便在不检查最佳实践的情况下对所有数据库进行定期备份.这很好,所以你不要再考虑它了.然后其他人决定采用他们没有离线使用的数据库.从该点开始,维护计划将失败,直到您通过选中“数据库”对话框中的“忽略状态不在线的数据库”选项来修改维护计划.请注意,它不会仅对脱机数据库失败 – 维护计划将在尝试备份脱机数据库时失败并显示错误,因此可能无法备份某些联机数据库. (这一点的不同作者因此怀疑)

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读