官方文档:点击打开链接
参考文档:点击打开链接 (注:DBCC CLONEDATABASE (source_database_name,target_database_name) WITH NO_STATISTICS,NO_QUERYSTORE
后面两个参数都用不了的, sql Server 2016 sp1 才可以用 )
首先看下, 是否已安装 SP2 补丁:
SELECT @@VERSION /* Microsoft sql Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64) Jun 17 2016 19:14:09 copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor) */安装SP2补丁注意:
1. 不需要先安装SP1;
2. 安装时要先停止sql Server服务, 关闭SSMS。
克隆数据库:
DBCC CLONEDATABASE('test','test_clone') /* 已开始对“test”执行数据库克隆操作,目标为“test_clone”。 已完成对“test”执行数据库克隆操作。克隆数据库为“test_clone”。 数据库“test_clone”是克隆数据库。克隆数据库应仅用于诊断目的,不得用于生产环境。 DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 */
很快(几秒)就能得到一个与原库一样的库了, 不同的是没有数据。
但表、索引、触发器、视图、存储过程等数据库对象一样不少。
还有一个方面就是:克隆过来的数据库是只读的,要可写还得将其改成可读写的。
USE [master] GO ALTER DATABASE [test_clone] SET READ_WRITE WITH NO_WAIT GO
不过, 看了一下表的存储, 还是不对, 因为没有数据的情况下居然还有行数……
--更新表统计信息 UPDATE STATISTICS tableName --更新整个库所有可用的统计信息 EXEC sys.sp_updatestats
重新生成聚集索引:
--结果复制出来执行即可 SELECT 'ALTER INDEX ['+i.name+'] ON '+OBJECT_NAME(i.[object_id])+' REBUILD' AS Executesql FROM sys.indexes AS i WHERE i.type_desc='CLUSTERED' AND EXISTS(SELECT * FROM sys.tables AS t WHERE t.[object_id]=i.[object_id])这下就正常了。