首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ruby oci8生成oracle AWR报告

ruby oci8生成oracle AWR报告
EN

Stack Overflow用户
提问于 2012-06-23 16:07:13
回答 1查看 558关注 0票数 1

耽误您时间,实在对不起!

我想使用ruby oci8连接到oracle数据库来生成AWR报告。

当我通过命令行执行此操作时,代码如下:

代码语言:javascript
复制
sqlplus sys/a@10.69.152.97/load as sysdba
SQL> define num_days = ''
SQL> define report_type = "html"
SQL> define begin_snap = 100
SQL> define end_snap = 101
SQL> define report_name = C:\tttt.html
SQL> @?\rdbms\admin\awrrpt.sql

我只想用Ruby自动完成这项工作。我用谷歌搜索了一下,发现oci8可能会有所帮助。所以我的代码格式是这样的:

代码语言:javascript
复制
require 'oci8'
onn = OCI8.new('sys/a@10.69.152.97/load as sysdba')
conn.exec("define num_days = '';")
conn.exec('define report_type="html"')
onn.exec('define begin_snap = 100')
conn.exec('define end_snap = 101')
conn.exec('define report_name = C:\tttt.html')
conn.exec('@?\rdbms\admin\awrrpt.sql') { |r| puts r}

当我在cmd中运行它时,它失败了。

失败的消息是:

代码语言:javascript
复制
    Warning: NLS_LANG is not set. fallback to US7ASCII.

    stmt.c:253:in oci8lib_191.so: ORA-00900: invalid SQL statement (OCIError)

    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/ruby-oci8-2.1.2-x86-mingw32/lib/oci8/oci8.rb:474:in `exec'

    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/ruby-oci8-2.1.2-x86-mingw32/lib/oci8/oci8.rb:282:in `exec_internal'

    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/ruby-oci8-2.1.2-x86-mingw32/lib/oci8/oci8.rb:275:in `exec'

    from automate_awr.rb:4:in `<main>'

此外,我还可以成功登录oracle并使用oci8执行select语句。

我哪里错了?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-23 23:29:52

主要问题是您混淆了应该在服务器端执行的查询和在客户端执行的sqlplus命令。

define和@命令是sqlplus命令,在客户端执行。它们不会发送到Oracle。有了oci8模块,Ruby就可以使用OCI连接到Oracle。它可以向服务器发送任何查询,但当然,它不能运行sqlplus命令。

"?\rdbms\admin“中的脚本应该从sqlplus执行。如果您真的需要在Ruby中运行它们,我建议使用Ruby模块来派生Open3进程,并使用管道提供输入参数。

应该可以使用基于以下代码的内容:

代码语言:javascript
复制
commands = "
  define num_days = ''
  define report_type = 'html'
  define begin_snap = 100
  define end_snap = 101
  define report_name = C:\tttt.html
  @?\rdbms\admin\awrrpt.sql
"
res, s = Open3.capture2e("sqlplus -S sys/a@10.69.152.97/load as sysdba", :stdin_data=>commands)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11167906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档