如何执行3GB的SQL文件(Microsoft SQL Server)?

时间:2009-06-04 13:47:02

标签: sql sql-server sqlcmd redgate sqlcompare

我有一个大的SQL文件,不适合内存,需要针对Microsoft SQL Server 2008执行。sqlcmd.exe工具似乎总是首先将其加载到内存中,在这种情况下是不可能的。有什么想法吗?

不幸的是,我无法拆分脚本,因为它是由Red Gate出色的SQL数据比较生成的。整个脚本是一个大事务,我想保持这种方式。我从未想过拥有一个巨大的脚本是不寻常的,因为在数据库世界中拥有大量数据是很常见的。该脚本的大小为3GB。

8 个答案:

答案 0 :(得分:3)

RedGate的SQL Compare有一个直接执行语句的选项,而不是生成SQL脚本并在以后执行它。有没有理由不行 - 换句话说,是否有理由需要SQL脚本并且无法使用应用程序的“立即同步”功能?

答案 1 :(得分:1)

创建SQL脚本的人是谁?获取创建文件的任何内容,通过事务或语句将脚本拆分为逻辑块(取决于文件的结构)。如果源无法执行此操作,则启动脚本以逻辑方式拆分文件。

答案 2 :(得分:1)

如果它太大,脚本要么太复杂要么重复。在任何一种情况下,正如其他人所建议的那样,唯一明智的做法是将其分解为可管理的块。

这是一次性演习还是常规演出?

答案 3 :(得分:1)

在脚本有一个与OpenXML一起使用的巨大XML String之前,我遇到过这个问题。实际的SQL相当小,更新了表中的一些值。

我最终将数据(以块为单位)插入到临时表中,直到存储了XML中的所有信息。然后我运行了我的更新声明。

在发布更多数据后稍后添加:

您可能希望在工具中选择大块,并让SQL Data compare以块的形式生成脚本。这样你就得到了交易。您只需突出显示一个范围并点击空格键即可选择较大的部分。

答案 4 :(得分:1)

几个月前我遇到了这个问题。我为每个目录数据库每周和每月生成带有SQLDataCompare的同步脚本,它们通常大于500MB。我的解决方案是编写一个VBscript,将更新脚本分成50到1000个命令批处理。如果在数据库更新中途出现问题,这种方法的问题就是失去了回滚所有更改的能力。

答案 5 :(得分:0)

1-800-展鹏支持.....

  • 将事务脚本分解为更小的文件
  • 以单用户模式设置数据库
  • 数据库的完整备份
  • 运行每个较小的脚本文件;如果出现故障:恢复备份,修复脚本,再试一次
  • 退出单用户模式,全部完成

答案 6 :(得分:0)

USE sqlcmd命令

示例sqlcmd -S myServer \ instanceName -i C:\ myScript.sql

答案 7 :(得分:0)

我理解它的方式,SSMS是32位,因此无法加载超过1.5-2 GB的脚本。您可以在SQLCMD.exe中运行该脚本,但由于事务大小,您可能会遇到问题 - SqlCmd会将整个事务保留在内存中。那么你在SQL数据比较中可以做的就是进入选项并使用“拆分事务”,这可能有所帮助。

SQL Data Compare还将对BLOB进行部分更新,这将解决“巨大的BLOB”问题。

这当然是基于最新版本的Data Compare。某些版本可能没有这些功能。

另一个选项可能是使用SQL Compare为文件夹创建架构脚本,然后使用SDC将数据同步到该文件夹​​。然后,每个表都有一个文件,而不是一个大文件。

希望这有帮助。