Ora 29285 ошибка при записи файла

Обновлено: 03.07.2024

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

Вот код моей хранимой процедуры:

Кажется, что у меня есть правильная логика для моих данных, но я могу неправильно использовать функцию UTL_FILE.FFLUSH, так как когда код попадает в эту функцию, я получаю следующую ошибку (я удалил пару комментариев из этого кода, так что номер строки может не совпадать). Это всегда происходит в одной и той же точке, так как выходной файл всегда имеет один и тот же размер, когда происходит ошибка. Это происходит в первый раз, когда код вычисляет true для оператора IF (fieldinfoLength > 32766) if-else. До этого момента он прекрасно работает, делая UTL_FILE.PUT_LINE без каких-либо заминок.

Я изо всех сил пытаюсь найти причину этого, так как думаю, что правильно использую функции CLOB, UTL_PUT и UTL_FFLUSH. Любая помощь будет оценена по достоинству. Если вы заметили какие-либо другие вопиющие ошибки, пожалуйста, укажите на них.

1 ответ

После открытия файла для записи: FILE *file = fopen(./file, w); Могу ли я предположить, что файл был создан немедленно? Насколько это безопасно для вызова: stat( ./file, info); Или мне лучше: fflush(file); или fclose(file); заранее? Edit: предположим, что файл не NULL после вызова fopen

Похоже, вы передаете функцию 'DIR' вместо реального каталога.

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

Вчера я запустил mysqldump и работал find, но сегодня запуск того же commad с теми же параметрами выдает ошибку: mysqldump: ошибка: не удается создать / записать в файл.

У меня есть проблема с реализацией признака Error . Я хочу обернуть ошибку от дизеля или другого драйвера базы данных. Я даже близко не подошел к реализации From , так как у меня уже не получается.

В PowerShell как записать вывод error, warning, write-host в один файл? Когда я выполняю внешний узел записи command/ write-warning/ write-error/, мне нужно, чтобы вся информация была записана в.

После открытия файла для записи: FILE *file = fopen(./file, w); Могу ли я предположить, что файл был создан немедленно? Насколько это безопасно для вызова: stat( ./file, info); Или мне лучше.

Я пытаюсь записать в файл, но это не работает. Я могу открыть файл, но при записи в файл с помощью функции записи tt записывает сам stdout, и содержимое файла, который я открыл, остается неизменным.

У моего коллеги возникли некоторые проблемы при попытке экспортировать данные из базы данных Oracle в CSV. Как ни странно, если он заменяет пробелы в поле oc_cr_comments на NULL, то экспорт.

У меня есть базовый эскиз реализации многопоточного веб-прокси: FILE *proxy_log_file; static void SIGUSR1_handler(int sig) < (void)sig; fflush(proxy_log_file); >int main(int argc, char **argv)

Попытка выполнить нижеприведенный запрос CREATE TABLE Jaan ( firstname VARCHAR(256), city VARCHAR(256), ); но получение ошибки как Error report - SQL Error: ORA-00904: : invalid identifier 00904.

'Set-ExecutionPolicy' не распознается как внутренняя или внешняя команда, работоспособная программа или batch file. получение этой ошибки при попытке установить chocolaty через cmd

18.01.17 04:01:47 -- Wed Jan 18 00:46:46 2017 ORA-00345: ошибка записи в блок 415677 счетчик 2 протокола
18.01.17 04:01:47 -- Wed Jan 18 00:46:46 2017 ORA-00312: оперативный протокол 5 процесса 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\БАЗА\REDO05.LOG'
18.01.17 04:01:47 -- Wed Jan 18 00:46:46 2017 ORA-27070: сбой при асинхронном вводе/выводе
18.01.17 04:01:47 -- Wed Jan 18 00:46:48 2017 ORA-00340: ошибка вв./выв. при обработке оперативного протокола 5 процесса 1
18.01.17 04:01:47 -- Wed Jan 18 00:46:48 2017 ORA-00345: ошибка записи в блок 415677 счетчик 2 протокола
18.01.17 04:01:47 -- Wed Jan 18 00:46:48 2017 ORA-00312: оперативный протокол 5 процесса 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\БАЗА\REDO05.LOG'
18.01.17 04:01:47 -- Wed Jan 18 00:46:48 2017 ORA-27070: сбой при асинхронном вводе/выводе
18.01.17 04:01:47 -- Wed Jan 18 00:46:48 2017 ORA-00202: управляющий файл: 'D:\ORACLE\БАЗА\CONTROL01.CTL'
18.01.17 04:01:47 -- Wed Jan 18 00:46:48 2017 ORA-27091: невозможно поместить в очередь операцию ввода/вывода
18.01.17 04:01:47 -- Wed Jan 18 00:46:48 2017 ORA-27070: сбой при асинхронном вводе/выводе

у админа сети обострение, поставил на все серваки Касперского без мониторинга и думал, что никто не заметит. Сразу несколько серваков отреагировали на такую радость.

Еще раз, в 100500 раз, для тех, кто работал вчера в бухгалтерии, а сегодня пошел в админы. Если вы ставите антивирус, который подразумевает мониторинг, вместе с ним ставятся дрова для этого мониторинга. Именно они позволяют перехватить обращения к диску. Если мониторинг отключаете, то в этом блоке включается NOP, т.е. в него обращения все равно передаются, только не обрабатываются. От перехвата такого доступа много что дуреет. Это и доступ базы к дискам, и прошивки телефонов, и многое другое, что нестандартно работает с носителем. Если настолько рукожопые, что не можете предотвратить появление вируса на сервере, где нет пользователей, то пользуйтесь утилитами, отдельными, которые просто сканируют диски, без установки. Сколько же можно твердить.

I have a problem here while exporting data from oracle database to CSV file using a procedure. While exporting data, sometimes the CSV file is getting truncated and the error it shows is "ORA-29285 - File write error". The problem here is the file is getting truncated not all the times but randomly.

Edit : Below is the chunk of code I used in my procedure

I am pulling my hair to trace out the reason. Can someone help me out ?


Please do not paste external links to code, and do not post images of your code - edit your question and paste the code as text instead. Yes, if it exceeds 32k, but you said it sometimes works and sometimes errors with the same script - did you mean exactly the same, or with different amounts of data?

1 Answer 1

One way to get this error is to open the file with a certain maximum line size - possibly the default 1024 - and then try to write a single line to that file which is longer than that.

In your case you don't seem to be doing that, as you open it with 4096 and your lines are all (apparently) shorter than that.

So you may be hitting the 32k limitation:

The maximum size of the buffer parameter is 32767 bytes unless you specify a smaller size in FOPEN. If unspecified, Oracle supplies a default value of 1024. The sum of all sequential PUT calls cannot exceed 32767 without intermediate buffer flushes.

You don't seem to be doing any flushing. You could change your put_line call to auto-flush:

or keep a counter in your loop and manually flush every 100 lines (or whatever number works and is efficient for you).

If there is buffered data yet to be written when FCLOSE runs, you may receive WRITE_ERROR when closing a file.

You aren't flushing before you close, so adding an explicit flush - even if you have autoflush set to true - might also help avoid this, at least if the exception is being thrown by the fclose() call rather than by put_line() :

Читайте также: