SQLServer 2014 SP2实现克隆数据库

官方文档:点击打开链接

参考文档:点击打开链接 (注: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  (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])

这下就正常了。

后面发现另外一个方法也可以:

DBCC UPDATEUSAGE (test_clone) WITH NO_INFOMSGS;  



你可能感兴趣的:(SQL,Server,-,05之后新功能)