ORA-29285:błąd zapisu pliku jest jednym z błędów, które mogą wystąpić podczas operacji obsługi plików w bazie danych Oracle
Operacje obsługi plików polegają na utworzeniu nowego pliku w systemie operacyjnym, jego aktualizacji lub modyfikacji. Ta funkcja jest często używana w PLSQL do manipulacji plikami
Powody i rozwiązania dla ORA-29285
(1) System plików Unix/Linux, w którym zapisujesz plik, jest pełny, tj. jest w 100% wykorzystany.
df -h /u500
/u500 100 0
declare
fileHandler UTL_FILE.FILE_TYPE;
begin
fileHandler := UTL_FILE.FOPEN('/u500', 'tech', 'W');
UTL_FILE.PUT_LINE(fileHandler, 'This is the file for test');
UTL_FILE.FCLOSE(fileHandler);
end;
/
DECLARE
*
ERROR at line 1:
ORA-29285: file write error
ORA-06512: at "SYS.UTL_FILE", line 4
ORA-06512: at "SYS.UTL_FILE", line 1169
ORA-06512: at line 6
Rozdzielczość
Zwolnij miejsce w /u500 i możemy ponownie sprawdzić blok PLSQL
Więc w zasadzie musisz usunąć niepotrzebne pliki w używanym systemie plików. Upewnij się, że nie usuwasz żadnych plików, które są obecnie w użyciu.Jeśli usuniesz jakiekolwiek aktywne pliki, miejsce nie zostanie zwolnione
df -h /u500
/u500 80 20
declare
fileHandler UTL_FILE.FILE_TYPE;
begin
fileHandler := UTL_FILE.FOPEN('/u500', 'tech', 'W');
UTL_FILE.PUT_LINE(fileHandler, 'This is the file for test');
UTL_FILE.FCLOSE(fileHandler);
end;
/
2 3 4 5 6
PL/SQL procedure successfully completed.
(2) Gdy plik jest otwierany przez FOPEN, o ile nie określono wartości parametru MAX_LINESIZE, domyślnie będzie to 1024. Tak więc ten błąd występuje również, jeśli wstawisz więcej niż 1024 znaków w wierszu
DECLARE
file_name VARCHAR2(256) := 'test.lst';
file_text VARCHAR2(100) := '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890....<2000 character>';
file_id UTL_FILE.file_type;
BEGIN
file_id := UTL_FILE.fopen('/tmp', file_name, 'W');
UTL_FILE.put_line(file_id, file_text);
UTL_FILE.fclose(file_id);
END;
/
DECLARE
*
ERROR at line 1:
ORA-29285: file write error
ORA-06512: at "SYS.UTL_FILE", line 2
ORA-06512: at "SYS.UTL_FILE", line 1169
ORA-06512: at line 6
Rozdzielczość
Możemy zapobiec temu błędowi, określając maksymalny rozmiar linii
DECLARE
file_name VARCHAR2(256) := 'test.lst';
file_text VARCHAR2(100) := '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890....<2000 character>';
file_id UTL_FILE.file_type;
BEGIN
file_id := UTL_FILE.fopen('/tmp', file_name, 'W',5000);
UTL_FILE.put_line(file_id, file_text);
UTL_FILE.fclose(file_id);
END;
/
2 3 4 5 6 PL/SQL procedure successfully completed.
Parametr MAX_LINESIZE może wynosić do 32767. Jeśli masz linie dłuższe niż 32K, dane powinny być zapisane jako binarne.
(3) Ten błąd może wystąpić podczas wielokrotnego wywoływania UTL_FILE.PUT_LINE w pętli podczas zapisywania łącznie ponad 1024 znaków. Powód jest nieprawidłowy Ustawienie ORA_NLS10 lub zmienna ORA_NLS10 nie jest ustawiona
Przykład
unset ORA_NLS10
sqlplus / as sysdba
shutdown immediate
startup
sqlplus "/ as sysdba"
DECLARE
file_name VARCHAR2(256) := 'test.lst';
file_text VARCHAR2(100) := '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890';
file_id UTL_FILE.file_type;
BEGIN
file_id := UTL_FILE.fopen('/tmp', file_name, 'W');
FOR x IN 1..11 LOOP -- write 11 records
UTL_FILE.put_line(file_id, file_text);
END LOOP;
UTL_FILE.fclose(file_id);
END;
/
ORA-29285: file write error
Rozdzielczość
Upewnij się, że ORA_NLS10 jest ustawione w bazie danych Oracle i środowisku słuchacza
ORACLE_SID=TEST
ORA_NLS10=< >
sqlplus / as sysdba
shutdown
immediate
startup
lsnrctl stop TEST
lsnrctl start TEST
sqlplus / as sysdba
DECLARE
file_name VARCHAR2(256) := 'test.lst';
file_text VARCHAR2(100) := '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890';
file_id UTL_FILE.file_type;
BEGIN
file_id := UTL_FILE.fopen('/tmp', file_name, 'W');
FOR x IN 1..11 LOOP -- write 11 records
UTL_FILE.put_line(file_id, file_text);
END LOOP;
UTL_FILE.fclose(file_id);
END;
/
PL/SQL procedure successfully completed.
Mam nadzieję, że spodobał Ci się ten szczegółowy post na ORA-29285. Polub to i przekaż opinię
Powiązane artykuły
ORA-29280:nieprawidłowa ścieżka katalogu
ORA-29283 :nieprawidłowa operacja na pliku
Tabela lub widok ORA-00942 nie istnieje
ORA-29913
FND_FILE w aplikacjach Oracle
https://docs.oracle.com/cd/E11882_01/server.112/e17766/e29250.htm