【问题标题】:Getting error while running 50 MB script on SQL Server 2008 R2在 SQL Server 2008 R2 上运行 50 MB 脚本时出错
【发布时间】:2012-07-03 08:47:22
【问题描述】:

我正在使用 SQL Server 2008 R2,我有一个脚本来更新数据库,该脚本大约是 大小为 50 MB,包含大约 800,000 行。

错误:

标题:Microsoft SQL Server Management Studio

无法执行脚本。

附加信息:

内存不足,无法继续执行程序。 (mscorlib)

谁能帮我运行这个脚本而不出现这个错误?

【问题讨论】:

    标签: sql-server-2008 sql-server-2008-r2


    【解决方案1】:

    使用更节省内存的命令行工具 SQLCMD。很简单:

    SQLCMD -d <database-name> -i filename.sql
    

    您需要有效的凭据才能访问您的 SQL Server 实例,甚至访问数据库

    【讨论】:

    • 当我使用上面的代码尝试它时,它给了我一些错误,消息 4060,级别 11,状态 1,服务器(我的 PC 登录名),第 1 行无法打开数据库“(本地)”登录请求。登录失败。消息 18456,级别 14,状态 1,服务器(我的 PC 登录名),第 1 行用户“我的登录用户名”登录失败。
    • 因为答案错误,是参数“-d”的数据库
    • 我使用 SQLCMD -d master -i D:\BankMaster.sql 创建新数据库
    • 您还可以使用 -o 参数指定输出文件。 SQLCMD -d 数据库 -i 文件名.sql -o 结果.txt
    • 使用用户凭据 SQLCMD -s .\sqlent1 -U 用户名 -P 密码 -d 数据库 -i script.sql
    【解决方案2】:

    添加到@user1293068 的答案,我需要指定实例名称。这是我的完整语法:

    sqlcmd -S <ComputerName>\<InstanceName> -d <DatabaseName> -i <MyScript.sql>
    

    这在 Technet 的 Use the sqlcmd Utility 文章中有记录。

    (请注意,您必须输入“-S”的开关值,而不是“-s”。开关区分大小写。)

    【讨论】:

    • 我使用的例子 --> C:\Users\tstick\Documents&gt;sqlcmd -S server.subdomain.companyname.com,4184 -d ebimap -i SQLscript.sql
    • 看起来需要排除默认实例名称(MSSQLSERVER)才能连接,例如sqlcmd -S localhost -d db 而不是 sqlcmd -S localhost\MSSQLSERVER -d db
    • +1 我还需要添加-x,因为我的脚本包含$( - 来自stackoverflow.com/a/12301822/36036
    • 额外+1指出开关区分大小写
    【解决方案3】:

    如果需要凭据

    sqlcmd -S <ComputerName>\<InstanceName> -U <username> -P <password> -d <DatabaseName> -i <MyScript.sql>
    

    【讨论】:

      【解决方案4】:

      您也可以尝试增加服务器属性中的最大服务器内存值。
      要编辑此设置,请右键单击服务器名称并选择“属性”>“内存”选项卡。

      我在尝试在 SSMS 2012 中执行 30MB SQL 脚本时遇到此错误。
      将值从 1024MB 增加到 2048MB 后,我能够运行该脚本。

      【讨论】:

      • 很好的答案!谢谢。
      • 自己无法验证这一点。 “用户无权执行此操作”
      【解决方案5】:

      好的,没有一个答案足以让我的脚本成功恢复。

      所以:

      1. 确保您的网络帐户具有足够的权限来访问 SQL Server 实例和您要恢复的特定数据库。

      2. 如果您打算恢复的数据库只是从生成脚本生成的(经过修改以包括架构和数据),那么最好是实际存在的数据库

      3. 在管理员模式下运行命令行工具(如有必要),例如,从开始菜单上的运行中键入 CMD

      4. 在命令行工具中,键入类似"SQLCMD -d CMS -i C:\Carnotaurus\Data\script.sql" 的内容。这里,CMS 是我要恢复的数据库的名称,"C:\Carnotaurus\Data\script.sql" 是由 SMSS 中的 Generate Scripts 生成的恢复脚本的完整文件路径。

      我希望这可以清除一些缺失的步骤。

      【讨论】:

        【解决方案6】:

        打开命令提示符

        sqlcmd -S servername -i C:\Users\mycomputer\Downloads\script\yourscript.sql -d datebasename

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-01-22
          • 2013-06-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-16
          • 1970-01-01
          相关资源
          最近更新 更多