1

我正在使用 SAS for windows 9.2 对 Oracle 数据库运行相当大的查询。这个查询非常大,我在 WITH 子句中编写了一个子查询并使用了 4 次。这在 SQL PLUS 和 SQL Developer 上运行良好,但是当我使用 SAS 运行它时,程序在 20 分钟后挂断,我什至看不到日志窗口。我从未与 SAS 合作过,不知道如何继续,但尝试了以下选项:

  • 我创建了一个 SAS 代码文件并从 Windows 批处理文件运行它,希望将日志写入 Windows 文件系统,但即使这样也可以无限期地运行,而且我没有看到任何写入日志文件的内容

有人可以在这里指导我吗?我如何使用 ALTLOG 命令将日志文件写入 Windows 文件系统,以便我可以理解确切的错误消息。顺便说一句,DBA 提到查询运行良好并且从服务器端返回行,但由于某种原因,SAS 程序无法显示这些数据。我从查询中得到大约 45,000 条记录。

谢谢

4

1 回答 1

2

我将其分为两点:

1) 在 SAS 中运行现有的 Oracle SQL 查询而不使用 SAS:最好的方法是将 Oracle SQL 代码嵌入所谓的 PROC SQL 显式传递中:

proc sql;
    connect to oracle as db1 (user=user1 pw=pasw1 path=DB1);
    create table test_table as
    select *
    from connection to db1
        ( /* here we're in oracle */
                  select * from test.table1 where rownum <20 
                )
    ;
    disconnect from db1;
quit;

(借用我对另一个问题的回答限制 PROC SQL 中的结果)关键是不要尝试将其转换为 SAS SQL(不知道您是否尝试过)。

还要确保从查询结果创建 SAS 表(如示例中),而不是将其写入 SAS OUTPUT 窗口。

2)关于获取日志:关于一个动作的日志一般是在完成后写入,所以如果查询真的运行了很长时间,你不会看到任何中间日志。无论如何,日志缓冲是批处理作业的默认设置,因此在缓冲区满后写入日志消息。要立即将日志消息写入日志文件,请设置 LOGPARM 选项:

-LOGPARM= “WRITE=IMMEDIATE” 

相反的选项是缓冲的。

要找出使用的配置文件,请在 SAS 会话中运行以下命令:

proc options option=config;run;

然后在配置文件的单独行中输入上面的选项。

于 2012-08-06T20:11:21.760 回答