1.本文档说明:
本文为在sqlserver2014上同实例下同DB数据备份后再恢复,检查库下表数量不一样。
2.备份复现问题并检查:
2.1.手动备份:
备份前执行:
select * into wlp from dbo.sysobjects where xtype='u' --
再备份数据库DATA29002:

2.2.手动恢复数据库为test
USE [master]
RESTORE DATABASE [test] FROM DISK = N'C:\Program Files\Microsoft SQL Server\data\Backup\DATA29002_backup_2020_09_02_102010_0602355.bak' WITH FILE = 1, MOVE N'DATA29001' TO N'C:\Program Files\Microsoft SQL Server\data\DATA\yichan1.mdf', MOVE N'DATA29001_log' TO N'C:\Program Files\Microsoft SQL Server\data\DATA\yichan1.ldf', NOUNLOAD, STATS = 5
GO
2.3.查询数据库表数据量
查询表名,并保存到www表中,方便后面对比:
use test
go
select * into www from dbo.sysobjects where xtype='u'
确认表数据量:
select count(*) from www --6429
查询是哪些表丢失了:
select name from test where name not in (select name from wlp);
安装sql server工具SSDT(即Microsoft Visual studio)
SSDT_11.0.50730.0_CN.iso
下载地址(根据sqlserver 对应版本下载相应SSDT):
https://docs.microsoft.com/zh-cn/sql/ssdt/previous-releases-of-sql-server-data-tools-ssdt-and-ssdt-bi?view=sql-server-2017#ssdt-for-visual-studio-vs-2015
安装ssdt,直接双击即可(略)
2.4.打开SSDT:
打开Microsoft Visual Studio视图-sql server 对象资源管理器
点击添加”sql server “连接:
展开数据库,右击数据库data29002-->架构比较


点比较,这样data29002就与test数据库作对比,检查结果发现test库中表确实少了很多:
若确定需要同步表结构,点更新目录:
也可以点生成脚本,方便于确认后,根据业务实际情况执行(测试库test建议点更新):
此时,再检查表数据,数量一致。
此时再对test进行备份,删除,再恢复为tt,经测试,备份恢复表数量一样。
综上原因,猜测原数据库表数据可能存在兼容性若版本bug,后续再进行深入研究,数据更新类同。
2.5.其他方法:
若在恢复时使用:KEEP_REPLICATION 选项恢复数据库,则表总数量存在,但是删除数据库时提示:
恢复完成后删除此yichan数据库,且变为单用户模式(报错如下):
解决办法,执行删除复制操作,然后yichan数据库就可删除了:
sp_removedbreplication 'yichan'
但是表数据量又对不上了。
因些此方法并非根本解决方法,还是得把差异找出来,同步上去(建议ssdt同步更新)。
2.6.补充说明:
上面情况也可脱机后直接删除:
drpp database yichan
或者修改为多用用户模式,再删除即可
ALTER DATABASE yichan SET MULTI_USER;
drpp database yichan
修改为非复制模式:
sp_removedbreplication 'yichan'
此时问题复现出来了(因此必须使用表差异对比工具,进行同步);工具有很多:如dbcompare-master、sqldiff.exe 、SSDT也叫VS(SQL server)。
本文详述了在SQLServer2014环境下,同实例同数据库备份及恢复过程中遇到的表数量不一致的问题。通过手动备份、恢复数据库并检查表数据量,发现表缺失现象。介绍了使用SSDT进行表结构比较和同步的方法,以及在恢复时使用KEEP_REPLICATION选项的注意事项。
978

被折叠的 条评论
为什么被折叠?



