我有一个在C#.Net 2005中开发的工具,它将通过执行SQL脚本创建数据库;脚本是批量运行的。
在XP中运行时效果很好;但是当它在Windows Vista 32位O.S.中运行时会出现问题。使用SQR Server 2008 Express;我在日志文件中记录错误;下面是包含脚本文件大小的日志。
我不明白为什么可用于执行脚本的内存较少,我之前遇到过这种情况并将Master_Meata_Data分成两个文件(Master_Data_Metadata1和Master_Data_Metadata2);我仍然在Vista中遇到同样的问题。
08/28/2009在数据库进度启动时:Local \ SQLEXPRESS:WINDOWS :: 1031:NEWDB bgWorkerCreateDB_DoWork:C:\ Program Files \ CreateNewDB \
ReadAndExecuteScript:C:\ Program Files \ CreateNewDB \ Drop_Create.sql (规模3KB)
ReadAndExecuteScript:C:\ Program Files \ CreateNewDB \ Tables.sql(Size 999KB)
ReadAndExecuteScript:C:\ Program Files \ CreateNewDB \ Master_Data.sql (Sizr 649KB)
ReadAndExecuteScript:C:\ Program Files \ CreateNewDB \ Master_Data_Metadata1.sql(Size 2.72MB) 2009年8月28日星期五ReadAndExecuteScript中的SQL错误:资源池“内部”中没有足够的系统内存来运行此 查询。
2009年8月28日星期五下午5:10 ReadAndExecuteScript:C:\ Program Files \ CreateNewDB \ Data_Metadata2.sql(大小1.55MB) 2009年8月28日星期五ReadAndExecuteScript中的SQL错误:资源池“内部”中没有足够的系统内存来运行此 查询。
ReadAndExecuteScript:C:\ Program Files \ CreateNewDB \ Initialize_Data.sql (大小14.3MB)
ReadAndExecuteScript:C:\ Program Files \ CreateNewDB \ Views1.sql(Size 2KB)
ReadAndExecuteScript:C:\ Program Files \ CreateNewDB \ Views2.sql(Size 4KB)
ReadAndExecuteScript:C:\ Program Files \ CreateNewDB \ Views3.sql(Size 2KB)
ReadAndExecuteScript:C:\ Program Files \ CreateNewDB \ Fn_Duration.sql (大小2.27KB)
ReadAndExecuteScript:C:\ Program Files \ CreateNewDB_Fn_GetDate.sql (大小1KB)
答案 0 :(得分:2)
我无法回答为什么它在XP而不是Vista中工作的问题,但是当您看到与非常大的脚本相关联的错误消息时,通常意味着查询批处理对于解析器来说太大了来处理。
这些脚本中是否有GO
个语句?如果没有,那可能是造成失败的原因。对于尚未拆分为批量的SQL脚本,超过1 MB是相当大的。要么在其中放置一些GO
语句,要么(更好的是)将其拆分为更小的脚本。
答案 1 :(得分:0)
最有可能的是你的物理内存耗尽,但如果我不是并且启用了资源调控器,请尝试使用
ALTER RESOURCE GOVERNOR
{ DISABLE | RECONFIGURE }
|
WITH ( CLASSIFIER_FUNCTION = { schema_name.function_name | NULL } )
|
RESET STATISTICS
[ ; ]
和
ALTER WORKLOAD GROUP { group_name | "default" }
[ WITH
([ IMPORTANCE = { LOW | MEDIUM | HIGH } ]
[ [ , ] REQUEST_MAX_MEMORY_GRANT_PERCENT = value ]
[ [ , ] REQUEST_MAX_CPU_TIME_SEC = value ]
[ [ , ] REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value ]
[ [ , ] MAX_DOP = value ]
[ [ , ] GROUP_MAX_REQUESTS = value ] )
]
[ USING { pool_name | "default" } ]
[ ; ]
更改可用于执行查询的内存量。