5

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

不幸的是,我无法拆分脚本,因为它是由 Red Gate 出色的 SQL 数据比较生成的。整个脚本是一笔大交易,我想保持这种状态。我从来没有想过拥有一个巨大的脚本是不寻常的,因为在数据库世界中拥有大量数据是很常见的。脚本大小为 3gb。

4

8 回答 8

3

RedGate 的 SQL 比较具有直接执行语句的选项,而不是生成 SQL 脚本并稍后执行。这是否有原因不起作用 - 换句话说,是否有原因需要 SQL 脚本并且不能使用应用程序的“立即同步”功能?

于 2009-06-04T14:28:20.610 回答
2

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

于 2009-07-06T18:52:54.167 回答
1

什么/谁创建了 SQL 脚本?通过事务或语句(取决于文件的结构)获取创建文件以将脚本拆分为逻辑块的任何内容。如果源无法做到这一点,则编写一个脚本以逻辑拆分文件。

于 2009-06-04T13:56:24.700 回答
1

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

这是一次性练习还是常规活动?

于 2009-06-04T14:00:25.177 回答
1

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

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

在发布更多数据后添加:

您可能希望在工具中选择大块并让 SQL 数据比较以块的形式生成脚本。这样你就可以得到交易。您可以通过简单地突出显示范围并点击空格键来选择较大的部分。

于 2009-06-04T14:12:44.183 回答
0

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

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

这当然是基于最新版本的数据比较。某些版本可能没有这些功能。

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

希望这可以帮助。

于 2014-03-10T08:35:06.873 回答
0

1-800-redgate-支持.....

或者

  • 将事务脚本分解为较小的文件
  • 将数据库设置为单用户模式
  • 数据库的完整备份
  • 运行每个较小的脚本文件;如果失败:恢复备份,修复脚本,重试
  • 退出单用户模式,全部完成
于 2009-06-04T14:36:44.603 回答
0

使用sqlcmd命令

例子:

sqlcmd  -S myServer\instanceName -i C:\myScript.sql
于 2014-03-07T18:57:04.713 回答