SQL server执行数据库脚本时提示内存不足

xieshuoshuo 发布于 2023-11-22 366 次阅读 预计阅读时间: 4 分钟


一次在执行友人发过来的数据库时,遇到了一个小问题,数据库提示如下图

开始我我还有点懵,这是怎么回事,然后上网搜了一下,提示是数据库或者电脑的内存不足,然后我看了一下,我的内存还有很多剩余的,然后我看了一下这个数据库脚本的大小,然后

      好家伙,难怪会提示这样,4G的数据库脚本可还行。但这个数据库脚本还要用到,没办法,只好硬着头皮继续搜解决方案,看看能不能执行成功,功夫不负有心人,接下来就是我在网上所找到的原因及解决方法。

      当数据库脚本文件归过于庞大时(一般会超过200M或者更多),数据库就会提示“引发类型为'System.OutOfMemoryException'的异常”。
       什么时候会引发System.OutOfMemoryException:操作系统无法满足GC对连续内存块的请求,就会发生System.OutOfMemoryException,但明明自己电脑的物理内存还有很多,为什么还会出现呢,这种情况的可能原因有:

1、内存真的不够了,连虚拟内存都用完了。
2、内存还有,但碎片化严重,无法找到合适的连续内存块。
3、系统里缓存了大量的数据,没有及时释放。应该控制缓存的数据大小,缓存失效的时间。
4、操作的大数据的文件或者DataTable。应该分块读取。
5、本地资源泄漏。
   5.1应该及时释放本地资源;
   5.2使用IDisposable模式。
6、大量的对象被固定,不能被压缩移动,导致内存产生大量碎片。
解决方案:
1、如果固定对象大约在同一时间分配,则每两个对象之间的碎片更小
2、优先初始化,因为较旧的对象位于堆的底部,但大多数可用空间都是在堆顶部生成的。
3、固定对象的时间越短,GC就越容易压缩堆
4、用记事本打开脚本文件,通过按【shift】点鼠标的方法(要不然太慢了)把文件依次剪切成10-15M左右的文本文件)。
5、新建一个同名数据库,并把这些文件,从头开始依次复制到sql查询器中执行。
6、以管理员身份打开CMD,打开数据库脚本的路径,然后执行‘sqlcmd -S localhost -i 文件名.sql’

具体的执行命令:
1、打开你的CMD命令执行的窗口(Win+R --> 输入"CMD"-->按Enter键)后进入。

2、输入:sqlcmd -S localhost -U sa -P 123456 -d eladmin -i C:\Users\Administrator\Desktop\sys_dept.sql

注:命令 sqlcmd -S 数据库服务器名称 -U 帐户名称 -P 密码 -d 数据库名称 -i SQL脚本文件路径。

当然,如果你执行了以上解决方案都不行的话,那你也可以看看这篇文章:SQL Server出现System.OutOfMemoryException异常的解决方法