Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak rozwiązać ORA-29283:nieprawidłowa operacja na pliku?

ORA-29283:nieprawidłowa operacja na pliku jest dość częstym błędem.

Dzieje się tak głównie z dwóch powodów

(1) Katalog i plik powinny mieć odpowiednie uprawnienia na poziomie systemu operacyjnego dla tego samego użytkownika, który uruchomił bazę danych Oracle

Na przykład

The directory does not exists on OS

ls  /u555/app/oracle

No such file or directory

SQL> declare
F_LOG utl_file.file_type;
begin
F_LOG := utl_file.fopen('/u555/app/oracle','k', 'w');
end;
/ 2 3 4 5 6
declare
*
ERROR at line 1:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 4

Dzieje się tak również, jeśli katalog nie ma odpowiednich uprawnień dla użytkownika Oracle, z którego uruchomiono bazę danych.

Jeśli robisz jakąkolwiek zmianę na poziomie grupy w systemie Unix i użytkownicy Oracle są zaangażowani, zaleca się odbić zarówno bazę danych, jak i listener

Może się to również zdarzyć, jeśli utworzyłeś taki katalog oracle

SQL> create directory TESTDIR as '/u555/oracle/tmp';

SQL> grant read,write on directory TESTDIR to public;

Ale nie istnieje w systemie operacyjnym

SQL> declare
F_LOG  utl_file.file_type;
begin
F_LOG := utl_file.fopen('TESTDIR','k', 'w');
end;
/  2    3    4    5    6
declare
*
ERROR at line 1:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 4

Może się to również zdarzyć, gdy czytasz plik, a użytkownik systemu operacyjnego Oracle nie ma do tego uprawnień

SQL> declare
F_LOG utl_file.file_type;
begin
F_LOG := utl_file.fopen('/u555/app/oracle','k', 'r');
end;
/ 2 3 4 5 6
declare
*
ERROR at line 1:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 4

(2) Drugim najczęstszym powodem tego niepowodzenia jest ustawienie ORA_NLS10 w środowisku bazy danych Oracle i nasłuchiwania.

Jeśli włączysz kratownicę w procesie, plik kratownicy pokaże, że blok pliku jest odczytany, a kolejne bloki nie mogą być odczytane lub uszkodzone z powodu ustawień NLS (ORA_NLS10).

W kratownicy może pojawić się następujący błąd

file read error
file write error
internal error
invalid maximum line size
invalid file name
directory access denied
invalid offset specified for seek
file remove operation failed
file rename operation failed
A stream error occurred during compression or uncompression.
A data error occurred during compression or uncompression.
invalid mime header tag
invalid encoded string
The compressed representation is too big

Zalecane jest posiadanie spójnych ustawień w całej bazie danych i słuchaczu.

Zarówno baza danych, jak i Listener mają ustawioną tę samą wartość ORA_NLS10 lub obie mają nieustawione wartości.

Ustawianie ORA_NLS10

ORACLE_SID=TEST
ORA_NLS10=< >
sqlplus / as sysdba
shutdown immediate
startup
lsnrctl stop TEST
lsnrctl start TEST

Anulowanie ORA_NLS10

ORACLE_SID=TEST
unset ORA_NLS10
sqlplus / as sysdba
shutdown immediate
startup
lsnrctl stop TEST
lsnrctl start TEST

Jeśli baza danych i listener są uruchamiane przy użyciu klastra Oracle, możemy to ustawić w srvctl.

Możemy sprawdzić ustawienie ORA_NLS za pomocą poniższego polecenia w systemie operacyjnym

Znajdź proces PMON

ps -ef|grep pmon|grep TEST

For Linux:

$ strings /proc/<pmon process ID>/environ | grep NLS

For Solaris:

$ pargs -e <process ID> | grep NLS

Znajdź proces słuchacza

ps -ef|grep list|grep TEST

For Linux:

$ strings /proc/<pmon process ID>/environ | grep NLS

For Solaris:

$ pargs -e <process ID> | grep NLS

Przykład
Możemy wykonać następujące czynności, aby odtworzyć problem

ORA_NLS10=< >
sqlplus / as sysdba
shutdown immediate
startup
lsnrctl stop TEST
lsnrctl start TEST

Now unset ORA_NLS10
Now Setup Bequeath connection
sqlplus / as sysdba
SQL> declare
F_LOG  utl_file.file_type;
begin
F_LOG := utl_file.fopen('TESTDIR','k', 'w');
end;
/  2    3    4    5    6
declare
*
ERROR at line 1:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 4

Mam nadzieję, że podoba Ci się ten post na Jak rozwiązać ORA-29283:nieprawidłowa operacja na plikach, co pomoże w rozwiązywaniu problemów

Również Przeczytaj

Jak zmienić hasło aplikacji w R12.2
FNDLOAD Command:FNDLOAD command/loader to narzędzie ogólnego przeznaczenia, które przenosi uporządkowane dane między plikiem tekstowym a bazą danych w środowisku EBS.
ORA-29280:nieprawidłowa ścieżka do katalogu
ORA-29285:błąd zapisu do pliku


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PL/SQL, jak uciec od pojedynczego cudzysłowu w ciągu?

  2. Blok wstrzykiwania SQL Oracle z DBMS_ASSERT

  3. sprawdź, czy jest to funkcja liczbowa w Oracle

  4. MySQL „utwórz schemat” i „utwórz bazę danych” — czy jest jakaś różnica?

  5. Jak zwrócić RefCursor z funkcji Oracle?