【问题标题】:How can I export huge tables from SQL (SSMS) to a (compressed) file?如何将大型表从 SQL (SSMS) 导出到(压缩)文件?
【发布时间】:2019-03-11 10:56:36
【问题描述】:

我正在开发 SSMS v17.5,并且我的数据库中有几个非常大的表(大约 200 GB 存储空间,3.5 亿行)。我想通过将其中一些导出到网络驱动器。 导出向导似乎没有提供直接导出到压缩文件的选项,是否可以使用 bcp 执行此操作?或者是否可以将数据导出到不同的文件类型?这将占用多少空间(比 DB 多还是少?) 如果需要,需要可以将数据重新导入 SQL 数据库。

感谢您的帮助!

【问题讨论】:

  • 根据您的数字,这些是宽行吗?还是他们有很多二级索引?也许他们是支离破碎的?
  • 这些表有大约 100 列,其中大部分根本没有索引。

标签: sql-server export ssms


【解决方案1】:

您可以先收缩数据库(如果您不需要日志),然后使用压缩进行备份,如下所示:

收缩

use [DbName]
ALTER DATABASE [DbName] SET RECOVERY SIMPLE
GO
DBCC SHRINKFILE ([DbName_log], 5)
GO
ALTER DATABASE [DbName] SET RECOVERY FULL

压缩备份

BACKUP DATABASE [DbName] TO DISK=BackupName WITH Compression

【讨论】:

  • 谢谢,我也可以对单张桌子这样做吗?
  • 不,这是数据库级备份。对于表级备份,您可以使用 SSMS 的generate script 功能导出包含指定表的架构和数据的脚本文件(文本文件),然后您可以使用 winrar 等压缩工具压缩脚本文件。
  • @cOlumbiA 你可以实现页面或行压缩
【解决方案2】:

这是不可能的,但您可以实现here 中描述的数据压缩,并通过其他实用程序(如 Winrar、7z 或其他实用程序)压缩文件。例如,您可以使用here 发布的代码

【讨论】:

  • 感谢您的回答!我阅读了压缩文档,它说对于行/页压缩,表不得超过 8060 字节的最大行大小。不幸的是,我有很多 varchar(max) 格式的列,所以这不起作用,我必须使用列存储索引来压缩表?然后我可以运行代码 sn-p 来导出和压缩文件?我理解正确吗?
  • @cOlumbiA 我从来没有使用过列存储索引来压缩表,所以无能为力。但是您必须运行代码 sn -p 才能导出到 zip 文件,因为 SQL 服务器没有默认工具。
猜你喜欢
  • 2020-11-18
  • 2016-06-24
  • 1970-01-01
  • 2022-01-06
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 2017-12-07
相关资源
最近更新 更多