sql - 为什么从 Query 和 SSMS 备份时数据库备份大小不同?
问题描述
我对使用 SSMS 和 Query 备份的文件大小感到困惑。
如果我在其默认文件夹中从 SSMS 创建一个文件,例如“C:\Program Files\Microsoft SQL Server\MSSQL14.NAMEDINSTANCE\MSSQL\Backup”,则输出文件说 Db1.bak 约为
198292 KB文件大小仅为6256 KB"backup database Db1 to disk='D:\Db1.bak'
有时其他数据库说 Db2 提供相同的文件大小,即6256 KB(Db1 和 Db2 具有相同(相同)的模式,只是其中的数据不同。)
使用 SSMS 备份提供33608 KB,这似乎令人满意。
我还尝试像这样验证 SSMS 中的所有数据库RESTORE VERIFYONLY FROM DISK = 'D:\BACKUP\Db1.bak'
GO
,结果在每次数据库检查中都有效。
我还尝试从 SSMS 中删除 Db1 并恢复较少的 KB 文件并检查了几个表(不是全部)的一些数据,它似乎正确显示了表中的所有数据,但文件大小让我不满意。
谢谢你。
解决方案
我怀疑,就像最初提到的那样,您在我的默认设置下进行了压缩,并且使用 GUI,但设置并没有使用该设置(如果您选择在 GUI 中压缩,您会得到类似的大小)
如果服务器选项backup compression default
是on
,即使您没有在backup
命令中提及它,compression
也会应用。所以在这两种情况下都会有compressed backup
. 但很容易看出,只需为两者运行此命令backups
:
restore headeronly
from disk = 'here_the_full_path_with_filename';
在第 5 列中,如果您的backup
is ,您将获得标志compressed
。
但是造成这种差异的原因是另一个,运行时您会看到它restore headeronly
:您对同一个文件进行了多个操作。 backups
您使用了backup
命令with noinit
fromSSMS
和相同的file name
,所以现在这个文件包含多个backup
,restore headeronly
并将显示它们。
推荐阅读
- c# - 处理 json 反序列化中的“输入字符串不是有效数字”错误
- java - 使用 Spring 的异步执行时实体未持久化到 DB
- windows - 如何在 Windows Server 2016/2019 上的 Jenkins 中运行 Docker 构建?
- python - 根据文件名仅提取最近的文件
- sparql - 如何处理 SPARQL 中的撇号?
- php - 注销期间在 Codeigniter 3 中显示引导模式框内的网站视图
- git - 使用来自声明性管道的 jenkins 凭据进行 Git 推送
- python - 如何将没有括号和逗号的一行文本转储到 Pickle 文件中
- angular - 带有forkJoin的RxJs Angular 7 HttpClient多个POST删除第二个订阅?
- android - 指纹图像到 ANSI/ISO 模板