Топ-100
 

Ошибки семейства ORA-* и способы решения

Не нашли описание интересующей ошибки? Пишите на форуме и мы добавим подробное описание и способ исправления 

Код: ORA-00001

Полное сообщение: ORA-00001: нарушено ограничение уникальности (.)

Информационное сообщение указывающее на попытку вставить в поле(я) таблицы значение уже в ней существующее.

Уникальность записей гарантируется построенным уникальным индексом (create unique index). Индекс может быть построен как по одному, так и по нескольким полям.

Получить информацию о колонках по которым построен индекс можно например следующим запросом:

select column_name

  from ALL_IND_COLUMNS

 where index_name = '<INDEX_NAME>'

   and table_owner = 'TABLE_OWNER'

Код: ORA-00031                                                                                                    

Полное сообщение: ORA-00031: сеанс намечен для удаления

Информационное сообщение.
Говорит о том, что указанный сеанс помечен как killed и будет удален

Если сеанс необходимо завершить как можно скорее, то для *NIX систем можно выполнить следующее:

1. Выполнить запрос

SELECT 'ALTER SYSTEM KILL SESSION '''||s.sid||','||s.serial#||''' IMMEDIATE',
       'kill -9 '||p.spid,
       p.spid,
       p.PID,
       s.username,
       s.program,
       s.STATUS,
       s.SQL_ID
  FROM v$session s
       JOIN v$process p ON p.addr = s.paddr
WHERE s.SID=$$SID

2. Подключится к серверу по протоколу ssh

3. Выполнить команду kill из запроса выше

Код: ORA-00060                                                                                                    

Полное сообщение: ORA-00060: взаимная блокировка при ожидании ресурса

Всегда является следствием ошибок в коде/логике работы допущенной разработчиками.

Для получения полной информации необходимо найти файл трассировки ошибки по данным из Alert.log

Или запросом из БД:

select originating_timestamp,

       message_text
  from V$DIAG_ALERT_EXT  

 where message_text like '%00060%'

order by originating_timestamp desc

и уже в файле трассировки найти блок

----- Information for waiting sessions -----
Session 403:
  sid: 403 ser: 27627 audsid: 4294967295 user: 0/SYS
    flags: (0x41) USR/- flags2: (0x40009) -/-/INC
    flags_idl: (0x1) status: BSY/-/-/- kill: -/-/-/-
  pid: 50 O/S info: user: OracleServiceTESTDB, term: USER-PC, ospid: 6292
    image: ORACLE.EXE (SHAD)
  client details:
    O/S info: user: raoot, term: DESKTOP-81FF2L4, ospid: 18192:9324
    machine: WORKGROUP\DESKTOP-81FF2L4 program: CerebroSQL.exe
    application name: CerebroSQL.exe, hash value=2471021987
  current SQL:
  UPDATE t1 SET c2 = 'Строка2' WHERE c1 = 2
 
Session 21:
  sid: 21 ser: 19192 audsid: 4294967295 user: 0/SYS
    flags: (0x41) USR/- flags2: (0x40009) -/-/INC
    flags_idl: (0x1) status: BSY/-/-/- kill: -/-/-/-
  pid: 52 O/S info: user: OracleServiceTESTDB, term: USER-PC, ospid: 1816
    image: ORACLE.EXE (SHAD)
  client details:
    O/S info: user: raoot, term: DESKTOP-81FF2L4, ospid: 18192:9324
    machine: WORKGROUP\DESKTOP-81FF2L4 program: CerebroSQL.exe
    application name: CerebroSQL.exe, hash value=2471021987
  current SQL:
  UPDATE t1 SET c2 = 'Строка1' WHERE c1 = 1
 
----- End of information for waiting sessions -----

Код: ORA-00257                                                    

Полное сообщение: ORA-00257: ошибка архивации. Пока свободно только внутр. соединение

Данная ошибка связана с переполнением диска/пространства для FRA.
Для диагностики данной ошибки проверить свободное пространство на диске, после проверить размер области FRA и в случаи необходимости ее расширить. 

Ошибка может быть следствием поломки наката на standby или системы резервного копирования.

Проверить процент свободного места во FRA можно используя следующий запрос:

select name,
       round(space_limit/1024/1024/1024) "limit",
       round(space_used/1024/1024/1024) "used",
       round(((space_limit-space_used)/space_limit)*100) "free"
from v$recovery_file_dest

 where name is not null

Исправление:

1. Увеличить значение параметра db_recovery_file_dest_size (текущее значение 50G)

Если база не открыта:

sqlplus / as sysdba

sql> startup nomount;

sql> alter system set db_recovery_file_dest_size=100G scope=both

sql> shutdown immediate

sql> startup

Если база открыта:

sqlplus / as sysdba

sql> alter system set db_recovery_file_dest_size=100G scope=both

sql>alter system switch logfile;

sql>exit;

Разобраться в причинах:

1. Сломался бэкап и архивные журналы перестали зачищаться.

2. Увеличилась нагрузка на БД и места просто не хватает.

3. База тестовая, настройка включена ошибочно. Рассмотреть возможность перевода БД в режим noarchivelog или добавить в cron (scheduller) скрипт удаляющий старые архивные журналы

Код: ORA-00604

Полное сообщение: ORA-00604: ошибка на рекурсивном SQL-уровне

1.Если ошибка появляется на этапе подключения к БД, то она может быть связана с кодировкой выставленной на клиентском ПО. 
2. Если ошибка сопровождается ошибки с номерами >= ORA-20000, то ошибка может быть связана с триггером на logon.

Код: ORA-00911

Полное сообщение: ORA-00911: неверный символ

Одной из причин данной ошибки может быть триггер с некорректной записью.
В общем, ошибка говорит о том, что при попытке выполнить код, ядро не может распознать символ.

Код: ORA-00917

Полное сообщение: ORA-00917: отсутствует запятая

1. В тексте присутствует (отсутствует) одинарная кавычка:  для исправления нужно посмотреть текст команды и добавить или убрать одинарную кавычку

2. Она действительно отсутствует

Код: ORA-00942

Полное сообщение: ORA-00942: таблица или представление пользователя не существует

Проверьте предложение from .... запроса, одна (или несколько) из таблиц/представлений не существует или отсутствуют права.

Код: ORA-01017

Полное сообщение: ORA-01017: неверно имя пользователя/пароль; вход в систему запрещается

1. Проверить логин и пароль на корректность.
2. Проверить признак "as sysdba"
3. Проверить статус пользователя, должен быть "OPEN" (DBA_USERS)
4. (Для 11G=>) В случаи, если параметр sec_case_sensitive_logon=TRUE пароль становится регистрозависемым.

Код: ORA-01031

Полное сообщение: ORA-01031: привилегий недостаточно

Данная ошибка говорит о том, что для выполнения определенного действия недостаточно привилегий.

Код: ORA-01110

Полное сообщение: ORA-01110: файл данных : ''

Ошибка говорит о том, что поврежден (отсутствует)  файл с номером указанном в тексте ошибки. Его необходимо восстановить из бэкапа (или обеспечить доступность места хранения файлов БД).

Код: ORA-01157

Полное сообщение: ORA-01157: нельзя идентифицировать/блокировать файл данных   - см. файл трассировки DBWR

Процесс DBWR не смог обнаружить файл на диске. Ошибка имеет общий характер, для решения проблемы нужно смотреть текст следующей ошибки.

Код: ORA-01400

Полное сообщение: ORA-01400: невозможно вставить NULL в ()

Попытка вставить в поле (not null) значение null.

Код: ORA-01624

Полное сообщение: ORA-01624: протокол  требуется для восстановления после сбоя экземпляра  (поток )

Сообщение говорит о том, что нельзя производить операции с данным файлом, так как в данный момент он используется.

Код: ORA-01653

Полное сообщение: ORA-01653: невозможно увеличить таблицу . до  в разделе

Данная ошибка всегда связана с отсутствием места в tablespace в котором создана таблица(index)

Код: ORA-01691

Полное сообщение: ORA-01691: невозможно расширить сегмент lob . на  в разделе

Для исправления данной ошибки необходимо добавить файл в заполненное табличное пространство.

Код: ORA-01704

Полное сообщение: ORA-01704: строковый литерал слишком длинный

Данная ошибка связана с попыткой вставить в поле объект размерностью более 4000 символов.Для данного объекта нужно использовать тип поля CLOB

Код: ORA-01950

Полное сообщение: ORA-01950: нет привилегий на раздел ''

Ошибка связана с отсутствием лимита на Tablespace в котором создается целевая таблица/партиция.

Решение:

alter user <имя пользователя> quote unlimited on <Имя пространства>;

или 

grant unlimited tablesapce to <имя пользователя>;

Код: ORA-03137

Полное сообщение: ORA-03137: Внутренняя ошибка протокола TTC: [] [] [] [] [] [] [] []

Данная ошибка является результатом бага, выхода два:
1. Поставить патч на соответствующую версию базы.
2. alter system set "_optim_peek_user_binds"=false; 

Код: ORA-06512

Полное сообщение: ORA-06512: на  line

Информационная ошибка указывающая на строку с ошибкой.

Код: ORA-12154

Полное сообщение: ORA-12154: TNS:невозможно разрешить заданный идентификатор соединения

Решение: 1. Проверить корректность файлов конфигурации ORACLE (tnsnames.ora и listener.ora)
               2. Открыть консоль и выполнить:
                   - set ORACLE_SID=...
                   - set ORACLE_HOME=...
                   - sqlplus sys/<pasword> as sysdba
 В случаи удачного коннекта, проверить переменные ОС

Код: ORA-12170

Полное сообщение: ORA-12170: TNS:истекло время ожидания соединения

Данная ошибка говорит о невозможности установить соединение с инстансом за отведенное время.
Причиной может служить, например,  не работающий листенер на хосте с БД или ошибка в блоке коннекта.

Код: ORA-28001

Полное сообщение: ORA-28001: дата действия пароля истекла

Подключится к базе данных с правами sysdba, выполнить команду:
alter user <User name> identified by <New passwd>;