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

tech2022-09-15  112

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

最新回复(0)