Oracle SQL*Plus报错‘not spooling currently’及SPOOL文件为空问题排查
解决SQL*Plus SPOOL文件为空及“not spooling currently”错误
问题分析与修复步骤
1. 先搞定权限和路径问题
- 别直接往C盘根目录写日志,任务计划的运行用户大概率没权限,把SPOOL路径改成有权限的目录,比如
spool c:\temp\test.log(先确认temp文件夹存在) - 权限不够的话,SPOOL根本创建不了文件,自然是空的,还会间接导致后续的
spool off报错
2. 改用脚本批量执行,别交互式输入
任务计划里不能像手动敲命令那样分步输,得把所有逻辑写到一个脚本里,然后用SQL*Plus直接调用:
- 新建
run_script.sql,内容如下:
set feedback on set echo on -- 开这个才能把执行的命令也记录到日志里 spool c:\temp\test.log @c:\testscript.sql spool off exit -- 确保SQL*Plus跑完就退出,别挂着
- 任务计划的执行命令改成:
sqlplus 你的用户名/密码@数据库地址 @c:\run_script.sql
- 必须加
set echo on,不然日志里只会有执行结果,看不到跑了哪些命令 - 脚本末尾加
exit,避免SQL*Plus进程卡在那,导致任务计划没正常结束
3. 检查testscript.sql里的坑
- 看看
testscript.sql里有没有spool off或者其他spool命令,要是有,会提前终止当前的SPOOL会话,后面再执行spool off就会报“not spooling currently” - 要是脚本里有
exit命令,会直接退出SQL*Plus,后面的spool off根本没机会执行,也会触发这个错误
4. 任务计划的配置细节
- 在任务计划的“操作”选项里,把“起始于”设成Oracle客户端的bin目录(比如
C:\app\oracle\product\11.2.0\client_1\bin),不然系统找不到sqlplus.exe - 确认运行任务的用户能访问Oracle客户端,也能写入日志目录,别随便勾“以最高权限运行”,除非真的需要
内容的提问来源于stack exchange,提问作者Aklank Diwaker
相关产品推荐
相关产品推荐

