SAPфорум.RU
https://sapboard.ru/forum/

Как починить ошибку DBSQL_SQL_ERROR (искл.CX_SY_OPEN_SQL_DB) при команде MODIFY?
https://sapboard.ru/forum/viewtopic.php?f=13&t=100103
Страница 1 из 1

Автор:  Валерка [ Вт, июн 21 2022, 09:30 ]
Заголовок сообщения:  Как починить ошибку DBSQL_SQL_ERROR (искл.CX_SY_OPEN_SQL_DB) при команде MODIFY?

Есть код
Code:
MODIFY ztable FROM TABLE lt_table.

Который падает в в фоновой задаче в ошибку DBSQL_SQL_ERROR (искл.CX_SY_OPEN_SQL_DB).
Анализ ошибки
Цитата:
An exception has occurred which is explained in more detail below. The exception, which is assigned to class 'CX_SY_OPEN_SQL_DB' was not caught and therefore caused a runtime error.
The reason for the exception is:  Database error text: SQL message: ORA-30036: unable to extend segment by 8 in  undo tablespace 'PSAPUNDO'    
Return value of the database layer: "SQL dbsl rc: 99"

Количество строк в lt_table = 1.470.768
Длинна строки lt_table = 1.766
Общий размер = 2.597.376.288

Есть мнение что тут слишком много данных во внутренней таблице. В связи с этим вопрос, как корректно это обойти? INSERT в цикле?

Автор:  broker.chelny [ Вт, июн 21 2022, 10:00 ]
Заголовок сообщения:  Re: Как починить ошибку DBSQL_SQL_ERROR (искл.CX_SY_OPEN_SQL_DB) при команде MODIFY?

Тут же явно проблема на стороне СУБД, код ошибки есть ORA-0036. Думаю у Oracle есть описание ошибки.

Разбейте на несколько частей, и после каждого делайте COMMIT (возможно поможет)

Автор:  DED_MOROZ [ Вт, июн 21 2022, 10:51 ]
Заголовок сообщения:  Re: Как починить ошибку DBSQL_SQL_ERROR (искл.CX_SY_OPEN_SQL_DB) при команде MODIFY?  Тема решена

Делай commit на каждый пакет из 100 000 записей
Вот пример удаления:
Code:
    DATA:
      l_packs_count TYPE i,
      l_packs_total TYPE i.
    LOOP AT lt_query ASSIGNING FIELD-SYMBOL(<wa_query>).
      DELETE FROM ZTAB_DB
        WHERE sync_object = @<wa_query>-sync_object AND
                      id_session = @<wa_query>-id_session.
      IF sy-subrc = 0.
        ADD sy-dbcnt TO l_packs_count.
        ADD sy-dbcnt TO l_packs_total.

*       Каждый 100тыс записей коммит
        IF l_packs_count > '100000'.
          CALL FUNCTION 'DB_COMMIT'.
          CLEAR l_packs_count.
        ENDIF.
      ENDIF.
    ENDLOOP.
    WRITE: text-t03, ' ', l_packs_total,/.

    COMMIT WORK.

Автор:  Валерка [ Вт, июн 21 2022, 11:21 ]
Заголовок сообщения:  Re: Как починить ошибку DBSQL_SQL_ERROR (искл.CX_SY_OPEN_SQL_DB) при команде MODIFY?

При удалении, кстати, тоже валится с такой же ошибкой, но в другом месте.

Всем спасибо, буду переделывать commit-ы. Как я понял, тут уже серверу БД не хватает памяти, чтобы такие объемы данных заносить.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/