摘要

此更新在 Windows 上的 SQL Server 2017 中引入了一个新的 管理命令: sql server 中的 sql server 2012 的 service pack 4、Microsoft sql server 2014 Service Pack 2SQL server 2016 SP1。 此命令将创建一个新数据库,其中包含指定源数据库中所有对象和统计信息的架构。 

注意 在 SQL Server 2014 环境中,你必须安装 Sql server 2014 SP2 的累积更新 3 才能使用 DBCC 复制 Filestream、FileTable 和公共语言运行时(CLR)对象,并使用 NO_STATISTICS 选项进行克隆。

关于 SQL Server 的 service pack

 

Service Pack 具有累积性。 每个新 Service Pack 除了包含所有新修复程序外,还包含以前 Service Pack 中的所有修复程序。 我们建议为该服务包应用最新的服务包和最新的累积更新。 在安装最新的 Service Pack 之前,不需要安装以前的 Service Pack。 使用以下文章中的表1查找有关最新服务包和最新累积更新的详细信息。

如何确定 SQL Server 及其组件的版本、版本类别和更新级别

关于 DBCC CLONEDATABASE

Microsoft 客户支持服务可能会要求你使用 DBCC CLONEDATABASE 生成数据库克隆,以便调查与查询优化器相关的性能问题。注意 不支持将从 DBCC CLONEDATABASE 生成的新生成数据库用作生产数据库,主要用于故障排除和诊断目的。 建议在创建数据库后分离克隆的数据库。源数据库的克隆由以下操作执行:

  • 创建一个新的目标数据库,该数据库使用与源相同的文件布局,但将默认文件大小设置为模型数据库。

  • 创建源数据库的内部快照。

  • 将源中的系统元数据复制到目标数据库。

  • 将源中所有对象的所有架构复制到目标数据库。

  • 将源中的所有索引的统计信息复制到目标数据库。

语法

DBCC CLONEDATABASE (source_database_name, target_database_name)[WITH [NO_STATISTICS][,NO_QUERYSTORE]] 

参数

  • source_database_name此参数是需要复制其架构和统计信息的数据库的名称。

  • target_database_name此参数是源数据库中的架构和统计将复制到的数据库的名称。 此数据库将由 DBCC CLONEDATABASE 创建,不应已存在。

  • NO_STATISTICS此参数指定是否需要在克隆中排除表/索引统计信息。 如果未指定此选项,将自动包含表格/索引统计信息。 此选项从 SQL Server 2014 SP2 CU3 和 SQL Server 2016 Service Pack 1 开始可用。

  • NO_QUERYSTORE此参数指定是否需要在克隆中排除查询存储。 如果未指定此选项,则会将查询存储数据复制到克隆(如果在源数据库中已启用)。 从 SQL Server 2016 Service Pack 1 开始,可使用此选项。

何时使用 DBCC CLONEDATABASE?

DBCC CLONEDATABASE 应用于创建架构并仅统计生产数据库的副本,以便调查查询性能问题。 请注意以下限制和受支持的对象:

  • 条款DBCC CLONEDATABASE执行以下验证。 如果任何验证失败,该命令将失败。

    • 源数据库必须是用户数据库。 不允许克隆系统数据库(master、model、msdb、tempdb、分发数据库等)。

    • 源数据库必须联机或可读。

    • 与克隆数据库使用相同名称的数据库不得已存在。

    • 该命令不在用户事务中。

    如果所有验证均成功, DBCC CLONEDATABASE 将运行以下操作:

    • 创建主数据文件和日志文件

    • 添加辅助 dataspaces

    • 添加辅助文件

    注意 目标数据库中的所有文件将继承模型数据库中的大小和增长设置。 文件名约定:目标数据库的文件名将遵循 source_file_name _underscore_random 号码 约定。 如果目标文件夹中已存在生成的文件名, DBCC CLONEDATABASE 将失败。

  • 内部数据库快照DBCC CLONEDATABASE 为执行复制所需的事务一致性使用源数据库的内部数据库快照。 这可防止执行这些命令时的阻止和并发问题。 如果无法创建快照, DBCC CLONEDATABASE 将失败。 在复制过程的以下步骤中保留数据库级锁:

    • 验证源数据库

    • 获取源数据库的 S 锁

    • 创建源数据库的快照

    • 创建克隆数据库(这是从模型继承的空数据库)

    • 获取克隆数据库的 X 锁

    • 将元数据复制到克隆数据库

    • 释放所有 DB 锁

    命令运行完毕后,将删除内部快照。 克隆的数据库上的 "可信" 和 " DB_CHAINING " 选项处于关闭状态。

支持的对象

目标数据库中将仅克隆下列对象架构。 在此版本的 SQL Server 中克隆已加密对象,但克隆不受支持。 克隆中不支持以下部分中未列出的任何对象:

  • 应用程序角色

  • 可用性组

  • 列存储索引

  • CDB

  • CDC

  • 更改跟踪(SQL SERVER 2016 SP2 CU10、SQL server 2017 CU17、SQL server 2019 CU1 和更高版本)

  • CLR (启动 SQL Server 2014 SP2 CU3 SQL Server 2016 Service Pack 1 和更高版本)

  • 数据库属性

  • 默认

  • 文件和文件组

  • 完整文本(启动 SQL Server 2016 SP1 CU2)

  • 食指

  • 登陆

  • PARTITION 函数

  • 分区方案

  • 步 注意 SQL Server 2014 SP2 的所有版本均支持 t-sql 过程。 支持从 SQL Server 2014 SP2 CU3 启动 CLR 过程。 支持从本机编译的过程,并启动 SQL Server 2016 SP1。

  • 查询存储(仅在 SQL Server 2016 Service Pack 1 和更高版本中) 注意 仅当在源数据库上启用查询存储时,才会复制它。 若要将最新运行时统计信息复制为查询存储的一部分,请执行 sp_query_store_flush_db 以在执行 DBCC CLONEDATABASE 之前将运行时统计信息刷新到查询存储。

  • 任务

  • 规则

  • 架构

  • 次序

  • 空间索引

  • 统计

  • 同义词

  • 内存优化表(仅在 SQL Server 2016 SP1 及更高版本中)。

  • FILESTREAM 和 FILETABLE 对象(启动 SQL Server 2014 SP2 CU3 SQL Server 2016 SP1 和更高版本)。

  • 起因

  • 处理器类型

  • 已升级数据库

  • USER

  • 视图

  • XML 索引

  • XML 架构集合

 

授权

您必须拥有 sysadmin 固定服务器角色的成员身份。

限制和注意事项

如果在模型数据库中创建了任何用户对象(表、索引、架构、角色等),DBCC CLONEDATABASE 不支持创建克隆。 如果模型数据库中存在用户对象,则数据库克隆失败,并显示以下错误消息:

消息2601,级别14,状态1,第1行无法在对象<系统表>中插入具有唯一索引 "index name" 的重复键行。"重复键" 值<键值>   

有关克隆的数据库上的数据安全性的信息,请参阅以下博客:了解克隆的数据库中的数据安全性

如果你有列存储索引,请参阅以下博客:在运行DBCC CLONEDATABASE命令之前,使用针对克隆数据库的列存储索引优化查询来更新列存储索引统计信息的注意事项。

错误日志消息

克隆过程中,错误日志中将记录以下消息:

<时间戳> "sourcedb" 的 spid53 数据库克隆已开始将目标用作 "sourcedb_clone"。 <时间戳> spid53 启动数据库 "Sourcedb_clone"。 <时间戳> 为数据库 "SOURCEDB_CLONE" 设置数据库选项可信任的数据库选项。 <时间戳> spid53为数据库 "DB_CHAINING" 设置数据库选项 sourcedb_clone 。 <时间戳> spid53数据库 ' sourcedb_clone ' 是克隆的数据库。 克隆的数据库只能用于诊断目的,并且不支持在生产环境中使用。 <时间戳> "sourcedb" 的 spid53 数据库克隆已完成。 克隆的数据库为 "sourcedb_clone"。

数据库属性

添加了新的数据库属性 IsClone 。 如果使用DBCC CLONEDATABASE生成数据库,DATABASEPROPERTYEX ("dbname","IsClone")将返回1 。

示例

  1. 创建包含架构、统计和查询存储(SQL Server 2016 SP1 及更高版本)的 AdventureWorks 数据库的克隆

    Transact-SQL -- Generate the clone of AdventureWorks database.    DBCC CLONEDATABASE (AdventureWorks, AdventureWorks_Clone);    GO 
  2. 在没有统计信息的 SQL Server 2014 中创建 AdventureWorks 数据库的仅限架构的克隆(SQL Server 2014 SP2 CU3 和更高版本)

    DBCC CLONEDATABASE (AdventureWorks, AdventureWorks_Clone) WITH NO_STATISTICS
  3. 创建没有统计和查询存储的 AdventureWorks 数据库的仅限架构的克隆(SQL Server 2016 SP1 和更高版本)

    DBCC CLONEDATABASE (AdventureWorks, AdventureWorks_Clone) WITH NO_STATISTICS,NO_QUERYSTORE

参考

了解 Microsoft 用于描述软件更新的 术语

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?

Thank you for your feedback!

×