如何在oracle中执行db脚本并输出日志文件

Posted

技术标签:

【中文标题】如何在oracle中执行db脚本并输出日志文件【英文标题】:how to execute db script in oracle and output a log file 【发布时间】:2018-03-15 09:11:40 【问题描述】:

通常在 DB2 中,如果我想执行一个 db 脚本并将执行结果输出到一个日志文件,我会这样做:

db2 -tvf x.sql > x.log

因此,我可以阅读 x.log 来检查我的脚本是否正确执行。

Oracle 数据库怎么样?

我知道脚本运行如下:

SQL>@x.sql

但是我怎样才能像在 DB2 中那样输出执行结果呢?

请多多指教。

【问题讨论】:

你解决了吗? 嗨@FrancescoB。 ,我尝试了你的方法,但是即使 x.sql 成功运行,filename.txt 中也没有生成任何内容。 但是正在创建 filename.txt,对吗?你可以删除它并让命令重新创建它吗? 我编辑了我的解决方案。基本上我必须添加“SPOOL OFF”,这应该强制写入文件。 嗨@FrancescoB。 ,一旦我试穿会回复你。目前在做其他项目,明天可能会做。 【参考方案1】:

使用SPOOL

SPOOL filename.txt
@x.sql
SPOOL OFF

将查询结果存储在文件中,或可选择将文件发送到打印机

您可以使用的其他选项:

创建[ATE]

使用指定的名称创建一个新文件。

REP[花边]

替换现有文件的内容。如果文件不存在, REPLACE 创建文件。这是默认行为。

APP[结束]

将缓冲区的内容添加到您指定的文件的末尾。

关闭

停止假脱机。

输出

停止假脱机并将文件发送到您计算机的标准 (默认)打印机。此选项在某些操作上不可用 系统。

【讨论】:

【参考方案2】:

似乎是一个常见问题解答,尝试使用带有 sqlplus 的 shell 重定向:

sqlplus  your_connect_string_here  @x.sql  1>x.out 2>&1

考虑在脚本内部使用:set termout onspool 命令来进一步调整行为。有关所有详细信息,请参阅 Oracle sqlplus 文档。

【讨论】:

以上是关于如何在oracle中执行db脚本并输出日志文件的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Windows/Linux定期清理归档日志

如何将一shell脚本中的每一步命令执行结果输出到指定日志文件中

将输出重定向到日志文件并在同一批处理脚本中接受用户输入

DB笔试面试225在Oracle中,如果联机Redo日志文件损坏,那么如何恢复?

oracle rac 监听日志在啥位置

在shell脚本中执行mysql,调用sql文件,将sql文件执行结果存入新的日志文件中,但日志文件没有sql结果