The current program had to be terminated because
a capacity limit has been reached.
An exception occurred that is explained in detail below.
The exception, which is assigned to class 'CX_SY_FILE_CLOSE', was not caught in
procedure "DATA_TRAN" "(FORM)", nor was it propagated by a RAISING clause.
Since the caller of the procedure could not have anticipated that the
exception would occur, the current program is terminated.
The reason for the exception is:
This is probably due to a very large dataset, for which there are
insufficient resources in your installation.
It is possible that before the closing of the file, the operating system
tried to write buffered data records passed in a TRANSFER statement
previously processed by the ABAP processor. This failed, however,
because there was no memory available on the file system.
Error number: 10
Error text: "No child processes"
user_rec(80) VALUE 'user anonymous '.
dsn(80), put(80).
CONCATENATE p_gjahr p_monat p_bukrs '.TXT'
INTO dsn.
CONCATENATE 'put' dsn INTO put SEPARATED BY space.
OPEN DATASET dsn FOR OUTPUT IN LEGACY TEXT MODE
BIG ENDIAN CODE PAGE '8500'.
LOOP AT gt_ftp.
TRANSFER gt_ftp TO dsn.
ENDLOOP.
CLOSE DATASET dsn.
OPEN DATASET comd FOR OUTPUT IN LEGACY TEXT MODE
BIG ENDIAN CODE PAGE '8500' FILTER 'ftp -v -n'.
TRANSFER open_rec TO comd.
TRANSFER user_rec TO comd.
TRANSFER put TO comd.
TRANSFER 'bye' TO comd.
--->> CLOSE DATASET comd.
덤프가 떨어지는 이유가 무엇인가요?
가끔 덤프가 안떨어지기도 합니다.
많은 조언 부탁드립니다.
댓글 4
-
잿빛바다
2010.03.18 01:40
-
jj
2010.03.19 01:02
OPEN DATASET comd FOR OUTPUT IN LEGACY TEXT MODE
BIG ENDIAN CODE PAGE '8500' FILTER 'ftp -v -n'.
-> 'ftp -v -n' 명령어가 실행되는 process의 standard input과 연결된 pipe를 생성합니다.
TRANSFER ... TO comd.
-> ... 명령어를 pipe로 보냅니다.
TRANSFER 'bye' TO comd.
-> bye 명령어를 pipe로 보냅니다. bye 명령어가 'ftp -v -n' 프로세스를 종료시킵니다. pipe가 닫힙니다.
CLOSE DATASET comd.
-> comd pipe를 닫습니다. 이 명령어가 bye 명령어에 의해서 'ftp -v -n' 프로세스가 종료되기 전에 실행되면 정상적으로 close 되지만 그렇지 않을 경우엔 exception이 발생할 걸로 보입니다. 즉 모종의 race condition 이라고 볼 수 있을 것 같습니다.
제 생각엔 try, catch로 exception 잡아주시고 그냥 신경안쓰고 쓰시면 되지 않을까 샆습니다.
-
잿빛바다
2010.03.19 01:15
제 생각엔 try, catch로 exception 잡아주시고 그냥 신경안쓰고 쓰시면 되지 않을까 샆습니다.
->try, catch로 exception 잡아준다는게 무엇을 말하는 것인지 잘 모르겠습니다.
조금 더 자세한 설명이나 소스를 부탁드려도 될런지요?
-
jj
2010.03.19 21:00
OS랑 버젼이 궁금하네요. 제가 접속할 수 있는 시스템들은 다들 잘되서
일단 제가 말씀드린 방식은 이런 식으로...
이런 제가 잘못 올렸었네요 수정합니다.
TRY .
DATA oref TYPE REF TO cx_dynamic_check.
CLOSE DATASET pipe.
CATCH cx_sy_file_close INTO oref.
MESSAGE oref TYPE 'I'.
ENDTRY.
디버깅 걸어 놓으면 덤프가 떨어 진다고 들었는데..
디버깅 안걸어도 덤프가 떨어집니다..