dbmaster
@dbmaster

Как собрать ошибки sqlplus?

Всем привет!


Есть файл на 4Gb с инсертами.

Некоторые инсерты не выполняются — а лог файл забит «1 row inserted»

Необходимо узнать все инсерты ошибками — чтобы понять как их исправить.


Есть какая-нибудь настройка у sqlplus, чтобы успешные сообщения или направить ошибки в отдельный файл?


Спасибо
  • Вопрос задан
  • 4585 просмотров
Пригласить эксперта
Ответы на вопрос 5
xtender
@xtender
Когда-то давно создавал триггеры, логгирующие ошибки. Сейчас вот накидал быстро для ваших целей триггер только на схему(можете сами поменять на on database):
orasql.org/scripts/errlog_ddl.sql
Если этот скрипт после выполнения не выдает ошибок, то включайте триггер и гоните свой скрипт. Пример:
1. Устанавливаем триггер:
SQL> @tests/errlog_ddl.sql

Table created.


Sequence created.


Trigger created.

No errors.


2. Так как ошибок на предыдущем этапе не было, то включаем триггер:
SQL> alter trigger tr_errorlog enable;

Trigger altered.

3. Проверяем, выполняя инсерт в несуществующую таблицу:
SQL> insert into nonexistent values(1);
insert into nonexistent values(1)
            *
ERROR at line 1:
ORA-00942: table or view does not exist

4. Смотрим ошибки:
SQL> col err_sql format a50
SQL> select id,err_level, err_sql from errorlog;

        ID  ERR_LEVEL ERR_SQL
---------- ---------- -----------------------------------
         1          1 insert into nonexistent values(1)
Ответ написан
@sparhawk
grep вам бы очень пригодился
Ответ написан
ntkt
@ntkt
Потомственный рыцарь клавиатуры и паяльника
К сожалению, у sqlplus нет разделения на stdout и stderr. Т.е. перенаправлять просто нечего. Можно разве что распарсить получившийся лог.

P.S. имхо, при наличии у Оракла массы способов импорта-экспорта данных, в консерватории тоже стоит что-то поменять, чтобы больше не гонять гигабайтные файлы с инсертами :)
Ответ написан
@latino2003
Как вариант, можно установить
spool \home\tmp\sqlplus.log
а затем грепать этот файл.
Ответ написан
Комментировать
@DmitrySytkov
Прошу прощения за Stackoverflow, но там есть два, вроде бы подходящих вам, ответа:
stackoverflow.com/a/12074039/497055
stackoverflow.com/a/13016411/497055
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы