【问题标题】:Error 3 after OPEN DATASET if big data volume is processed, none otherwise如果处理大数据量,OPEN DATASET 后错误 3,否则无
【发布时间】:2019-08-27 10:06:09
【问题描述】:

问题是我收到了来自 AMS 支持团队的票,我无法调试,因为对于选择屏幕上的给定输入参数,程序循环了 10 个小时,这就是为什么程序被设置为后台作业的原因。

该程序的重​​点是它应该将一些数据保存在应用服务器上的 xls 文件中。

重要的是,对于选择屏幕上的某些输入参数,程序 WORKS(更小的日期间隔,也可以使用更少的数据),但现在我必须向顾问解释为什么程序不能将那么多数据写入应用服务器上的文件。

总而言之,后台作业与正在从数据库中获取大量数据的程序相关联,在某些情况下,当数据量很大时,程序无法打开文件进行输出,因此没有数据在 xls 中。

我的问题是,OPEN DATASET 中 OUTPUT 模式的限制有多大,为什么当我在选择屏幕中有更大的间隔时会出现“错误打开文件”。

OPEN DATASET lv_file FOR OUTPUT IN TEXT MODE ENCODING NON-UNICODE
  IGNORING CONVERSION ERRORS.
  IF sy-subrc EQ 0.  "PROGRAM FAILS HERE, SY-SUBRC eq 3
  |
  |

当我们从 DB 中选择较少的数据时,程序可以工作,我必须提供以下问题的答案:“为什么当我抓取大量数据时它会失败。

对话模式错误:

后台模式错误:

【问题讨论】:

  • sy-subrc = 3 非常令人惊讶,因为ABAP documentation 表示它可能只返回 0 或 8。仅在高内存使用情况下的 OPEN DATASET 错误可能认为它是相关的.无论如何,您应该同时联系 SAP 支持人员来提及这个奇怪的问题。
  • 您好,sy-msgno, sy-msgid, sy-msgty, sy-msgv1, sy-msgv2, sy-msgv3, sy-msgv4sy-msgno, sy-msgid, sy-msgty, sy-msgv1, sy-msgv2, sy-msgv3, sy-msgv4以下字段中是否提供了一些内容?
  • 似乎有其他语句产生了3 sy-subrc,尝试将message clause 添加到 OPEN DATASET 语句以产生更多反馈
  • 在 SM51 中,双击第二个应用服务器,这将打开一个连接到该服务器的新用户会话,并以对话模式与小数据集运行您的程序,以确保 SAP 可以编写也到该服务器中的文件夹(两台服务器通常都定义了一个到共享文件夹的软链接)。请注意,您还可以通过显示作业的详细信息(事务代码 SM37)来查看作业在哪个应用程序服务器中执行。
  • @SandraRossi 我检查了您的建议,正确完成的作业指向一台服务器,而错误完成的作业指向另一台我无权打开该服务器的服务器al11 中的文件夹。我告诉我的顾问与客户基础团队核实是否授予该文件夹的授权,因此我正在等待他们的回复。

标签: abap


【解决方案1】:

更新:这个答案假设原始方向(“因为数据量”)是基于对所发生事情的误解,因为一个简单的巧合。它经常发生,但我当然可能是错的。这个假设基于最新的 OP 评论:“我发现有趣的是,在后台作业列表中,如果该用户有 3 个作业,其中两个失败了,目标服务器是第二个,但是有一个作业成功打开文件,他的目标系统是系统 #1,但不同之处在于该作业的持续时间约为 1 小时,而不是像其他两个作业那样持续 10 小时。")

当您运行后台作业并且不时打开文件时出错,这可能是由于您的 ABAP 系统具有多个应用程序服务器,而其中一个(至少)没有正确配置为将给定文件夹映射到所有其他应用程序服务器共享的“网络”文件夹。

为了确保您可以通过显示其详细信息(事务代码 SM37)来查看失败作业是在哪个应用程序服务器中执行的。然后运行程序两次,一次在作业失败的应用服务器中,一次在作业成功的应用服务器中,输入参数相同。

它应该成功并相应地失败。

要在给定的应用服务器上运行程序,有两种解决方案:

  • 通过指示所需的目标应用程序服务器来启动作业
  • 或者将您的 SAP GUI 用户会话切换到您想要的应用服务器:
    • 使用 SM51 显示所有应用服务器的列表
    • 双击相关服务器
    • 在该服务器中启动的新用户会话中打开概览屏幕
    • 在命令字段中输入 /NSE38 并在对话框中启动程序(它将在该服务器中运行)。

现在几乎可以肯定这是原因,您应该要求管理员更正问题,即在给定的应用程序服务器中,他应该将文件夹中的“映射”添加到共享文件夹(和他在其他应用服务器中做的一样)。

【讨论】:

  • 程序只在大量数据上失败是很奇怪的。消息传递服务器是否仅将具有大量数据的进程重定向到具体服务器?不太可能
  • @suncatcher 或者这只是人类对所发生事情的误解。它经常发生。这是我根据最新的 OP cmets 的猜测。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
  • 2017-02-09
  • 1970-01-01
  • 2014-05-17
  • 1970-01-01
相关资源
最近更新 更多