我有一个 10GB 大小的数据库备份 (.bak),我通过以下方式将其导入我的 MSSQL 数据库:
USE [master]
GO
RESTORE DATABASE [<dbname>] FROM DISK = N'$BAKFILEWITHPATH' WITH FILE = 1, MOVE N'$LOGICNAME' TO N'/var/opt/mssql/data/$BAKFILENOEXT.mdf', MOVE N'$LOGFILE' TO N'/var/opt/mssql/data/$BAKFILELOG.ldf', NOUNLOAD, STATS = 5
GO
(由于此查询是使用 bash 脚本创建的,因此包含多个变量。)这样就成功了。然后我删除了占备份大小 90% 的 BLOB 列。(~9GB)
USE [$BAKFILENOEXT]
GO
ALTER TABLE [dbo].[BLOB] DROP COLUMN [Blob]
GO
然后我将导入的不包含 Blob 行的数据库再次备份到 .bak 文件中。备份现在应该只有 1GB 大,对吗?
BACKUP DATABASE [$BAKFILENOEXT] TO DISK = N'$_mountpoint/$BAKFILE' WITH FORMAT, INIT, MEDIADESCRIPTION = N'$blobstatus', MEDIANAME = N'$blobstatus', NAME = N'complete backup without blob column', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
但是 BAK 文件又有 10GB 大。怎么会这样?它不再有 BLOB 行,它必须是 1GB。但它是 10GB。怎么会这样?
站点说明:操作系统:Ubuntu 16.04 SQL:MSSQL Server 2017,我使用 SQLCMD 工具启动 sql 脚本