微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 <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])
这下就正常了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐