sql server 2014 本机DB备份恢复后表数量对不上解决办法

本文详述了在SQLServer2014环境下,同实例同数据库备份及恢复过程中遇到的表数量不一致的问题。通过手动备份、恢复数据库并检查表数据量,发现表缺失现象。介绍了使用SSDT进行表结构比较和同步的方法,以及在恢复时使用KEEP_REPLICATION选项的注意事项。

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)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值