Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да разрешите ORA-29283:невалидна файлова операция

ORA-29283:невалидна файлова операция е доста често срещана грешка.

Това се случва най-вече поради двете причини

(1) Директорията и файлът трябва да имат подходящо  разрешение на ниво ОС за същия потребител, който е стартирал базата данни на Oracle

Например

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

Това също се случва, ако директорията няма подходящото разрешение за потребителя на Oracle, от който се стартира базата данни.

Ако правите промяна на ниво група в Unix и участват потребители на oracle, препоръчваме ви също да отскочите както базата данни, така и слушателя

Това може да се случи и ако сте създали директория на Oracle като тази

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

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

Но не съществува в OS

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

Това може да се случи и когато четете файла и потребителят на OS oracle няма разрешение да го направи

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) Втората най-голяма причина за този неуспех е настройката на ORA_NLS10  в базата данни на Oracle и средата на слушател.

Ако активирате truss в процеса, Truss файлът показва, че блок от файла е прочетен и следващите блокове не могат да бъдат прочетени или повредени поради настройките на NLS (ORA_NLS10).

Следната грешка може да се покаже в фермата

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

Препоръчително е да имате последователни настройки в базата данни и слушателя.

И базата данни, и слушателят имат един и същ набор ORA_NLS10, или и двете имат ненастроени стойности.

Настройка ORA_NLS10

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

Отмяна на настройката ORA_NLS10

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

Ако базата данни и слушателят се стартират с помощта на клъстер Oracle, можем да направим тази настройка в srvctl.

Можем да проверим настройката на ORA_NLS с помощта на командата по-долу в операционната система

Намерете 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

Намерете процеса на слушател

ps -ef|grep list|grep TEST

For Linux:

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

For Solaris:

$ pargs -e <process ID> | grep NLS

Пример
Можем да направим следното, за да възпроизведем проблема

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

Надявам се да ви хареса тази публикация на тема Как да разрешите ORA-29283:невалидна файлова операция и това ви помага при отстраняването на неизправности

Прочетете също

Как да промените паролата за приложения в R12.2
Команда FNDLOAD:FNDLOAD команда/товарач е помощна програма с общо предназначение, която премества структурирани данни между текстов файл и база данни в EBS среда.
ORA-29280:невалиден път към директорията
ORA-29285:грешка при запис на файл


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 12c Преместване на файлове с данни онлайн

  2. Как да се справяте с единична кавичка в Oracle SQL

  3. Премахване на дублиращи се редове в таблица

  4. Oracle SqlPlus - записва изход във файл, но не се показва на екрана

  5. В тригер на Oracle мога ли да присвоя ново и старо към променлива тип ред?