UTL_FILE не очень хорошо масштабируется для записи файлов журнала, например,
SQL> create table log_table (
2 s timestamp default systimestamp,
3 m varchar2(1000)
4 );
Table created.
SQL>
SQL> set timing on
SQL> begin
2 for i in 1 .. 10000 loop
3 insert into log_table (m) values ('My message');
4 commit;
5 end loop;
6 end;
7 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.62
SQL>
SQL> declare
2 f utl_file.file_type;
3 begin
4 f := utl_file.fopen('TMP','logfile.dat','W');
5 for i in 1 .. 10000 loop
6 utl_file.put_line(f,to_char(systimestamp)||' '||'My message');
7 utl_file.fflush(f);
8 end loop;
9 utl_file.fclose(f);
10 end;
11 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:30.58
Теперь вы можете подумать: «Я просто удалю вызов utl_file.fflush (f)», который действительно будетзаставить его работать в сопоставимое время с таблицей базы данных.Но время, когда вам больше всего нужна эта информация о регистрации, - это когда ваша программа падает, и если она падает, и вы не сбросили ее, тогда вы рискуете потерять последние данные регистрации, что крайне важно для понимания причины сбоя вашей программы.