使用分离和附加来升级数据库 (Transact-SQL)

本主题说明如何使用分离和附加操作在 SQL Server 2012 中升级 SQL Server 2005、SQL Server 2008 或 SQL Server 2008 R2 数据库。 在附加到 SQL Server 2012 后,数据库将立即变为可用,然后会自动进行升级。

本主题内容

  • 开始之前:

    限制和局限

    建议

  • 升级 SQL Server 数据库:

    使用分离和附加操作

  • **跟进:**在升级 SQL Server 数据库之后

开始之前

限制和局限

  • 不能附加系统数据库。

  • 附加和分离操作可以通过将数据库的 cross db ownership chaining 选项设置为 0 来禁用数据库的跨数据库所有权链接。 有关启用链接的信息,请参阅 cross db ownership chaining 服务器配置选项

  • 附加复制的而不是分离的复制数据库时:

    • 如果将该数据库附加到同一服务器实例的升级版本中,则必须在附加操作完成后执行 sp_vupgrade_replication 来升级复制数据库。 有关详细信息,请参阅 sp_vupgrade_replication (Transact-SQL)

    • 如果将该数据库附加到不同的服务器实例中(不考虑版本),则必须在附加操作完成后执行 sp_removedbreplication 来删除复制数据库。 有关详细信息,请参阅 sp_removedbreplication (Transact-SQL)

建议

建议您不要附加或还原来自未知或不可信源的数据库。 此类数据库可能包含恶意代码,这些代码可能会执行非预期的 Transact-SQL 代码,或者通过修改架构或物理数据库结构导致错误。 在使用未知或不可信源中的数据库之前,请在非生产服务器中的数据库上运行 DBCC CHECKDB,同时检查数据库中的代码(例如,存储过程或其他用户定义代码)。

使用分离和附加功能来升级数据库

  1. 分离数据库。 有关详细信息,请参阅分离数据库

  2. (可选)移动所分离的数据库文件和日志文件。

    即使希望创建新的日志文件,也应该将日志文件与数据文件一起移动。 在某些情况下,重新附加数据库需要使用其现有的日志文件。 因此,除非在不使用分离日志文件的情况下可以成功附加数据库,否则,请始终保留所有分离的日志文件。

    注意注意

    如果尝试在不指定日志文件的情况下附加数据库,则附加操作将会在日志文件的原始位置中查找文件。 如果该位置仍存在日志文件的原始副本,则附加该副本。 若要避免使用原始日志文件,请指定新日志文件的路径,或在日志文件复制到新位置之后,删除其原始副本。

  3. 将复制的文件附加到 SQL Server 2012 实例。 有关详细信息,请参阅附加数据库

用于“返回首页”链接的箭头图标[Top]

示例

以下实例升级以前版本的 SQL Server 的数据库副本。 Transact-SQL 语句在与该服务器实例(附加该数据库副本)连接的查询编辑器窗口中执行。

  1. 执行以下 Transact-SQL 语句以分离数据库:

    USE master;
    GO
    EXEC sp_detach_db @dbname = N'MyDatabase';
    GO
    
  2. 使用您选择的方法,将数据文件和日志文件复制到新位置。

    重要说明重要提示

    对于生产数据库,请将数据库和事务日志存放在不同的磁盘上。

    若要通过网络将文件复制到远程计算机的磁盘上,请使用远程位置的通用命名约定 (UNC) 名称。 UNC 名称采用以下格式:**\\Servername\Sharename\Path\**Filename。 将文件写入本地硬盘时,必须对 SQL Server 实例使用的用户帐户授予读写远程磁盘文件所需的相应权限。

  3. 通过执行以下 Transact-SQL 语句来附加移动的数据库及其日志(日志为可选项):

    USE master;
    GO
    CREATE DATABASE MyDatabase 
        ON (FILENAME = 'C:\MySQLServer\MyDatabase.mdf'),
        (FILENAME = 'C:\MySQLServer\Database.ldf')
        FOR ATTACH;
    GO
    

    在 SQL Server Management Studio 中,新附加的数据库在对象资源管理器中不是立即可见的。 若要查看数据库,请在对象资源管理器中,单击**“查看”,再单击“刷新”。 在对象资源管理器中展开“数据库”**节点后,新附加的数据库即显示在数据库列表中。

跟进:在升级 SQL Server 数据库之后

如果数据库具有全文索引,则升级过程将导入、重置或重新生成它们,具体取决于 upgrade_option 服务器属性的设置。 如果将升级选项设置为导入 (upgrade_option = 2) 或重新生成 (upgrade_option = 0),在升级过程中将无法使用全文索引。 导入可能需要数小时,而重新生成所需的时间最多时可能十倍于此,具体取决于要编制索引的数据量。 另请注意,如果将升级选项设置为“导入”,并且全文目录不可用,则会重新生成关联的全文索引。 若要更改 upgrade_option 服务器属性的设置,请使用 sp_fulltext_service

升级后的数据库兼容级别

如果升级前用户数据库的兼容级别为 90 或 100,升级后将保持相应级别。 如果升级前兼容级别为 80 或更低,则在升级后的数据库中,兼容级别将设置为 90,该级别为 SQL Server 2012 支持的最低兼容级别。 有关详细信息,请参阅 ALTER DATABASE 兼容级别 (Transact-SQL)

管理已升级服务器实例上的元数据

将数据库附加到其他服务器实例时,为了给用户和应用程序提供一致的体验,您可能需要在其他服务器实例上为数据库重新创建部分或全部元数据(例如登录名、作业和权限)。 有关详细信息,请参阅当数据库在其他服务器实例上可用时管理元数据 (SQL Server)

服务主密钥和数据库主密钥加密从 3DES 更改为 AES

SQL Server 2012 使用 AES-256 加密算法来保护服务主密钥 (SMK) 和数据库主密钥 (DMK)。 AES 是一种比早期版本中使用的 3DES 更新的加密算法。 当数据库第一次附加或还原到新的 SQL Server 实例时,数据库主密钥(由服务主密钥加密)的副本尚未存储在服务器中。 必须使用 OPEN MASTER KEY 语句解密数据库主密钥 (DMK)。 一旦 DMK 解密后,通过使用 ALTER MASTER KEY REGENERATE 语句向服务器提供 DMK(使用服务主密钥 (SMK) 加密)的副本,即可拥有将来启用自动解密的选项。 当数据库已从较早版本升级后,应重新生成 DMK 以使用更新的 AES 算法。 有关重新生成 DMK 的详细信息,请参阅 ALTER MASTER KEY (Transact-SQL)。 重新生成 DMK 密钥以升级到 AES 所需的时间取决于 DMK 保护的对象数。 重新生成 DMK 密钥以升级到 AES 只在必需时执行一次,不影响将来作为密钥循环策略的一部分而重新生成的过程。

用于“返回首页”链接的箭头图标[Top]