Сообщение error occurred at recursive SQL level 1
подсказывает мне, что ошибка возникает в триггере. Я предполагаю, что существует триггер AFTER LOGON ON SCHEMA
или DATABASE
, и по какой-то причине он вызывает ошибку, когда процесс веб-сервера пытается подключиться.
Вот пример того, как генерировать полученную ошибку. У меня есть таблица с именем TINY
, с одним столбцом, который может принимать значения только до 99:
SQL> desc tiny;
Name Null? Type
----------------------------------------- -------- ----------------------------
N NUMBER(2)
Теперь давайте создадим учетную запись пользователя и убедимся, что он может подключиться:
SQL> create user fred identified by fred account unlock;
User created.
SQL> grant connect to fred;
Grant succeeded.
SQL> connect fred/fred
Connected.
Хорошо - давайте снова войдем в систему как я и создадим триггер, который вызовет ошибку, если FRED
попытается подключиться:
SQL> connect luke/password
Connected.
SQL> create or replace trigger after_logon_error_if_fred
2 after logon on database
3 begin
4 if user = 'FRED' then
5 insert into tiny (n) values (100);
6 end if;
7 end;
8 /
Trigger created.
Напомним, что наша таблица TINY
может хранить значения только до 99. Итак, что происходит, когда FRED
пытается подключиться?
SQL> connect fred/fred
ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-01438: value larger than specified precision allowed for this column
ORA-06512: at line 3
Кроме номера строки и добавленного бита PHP, это именно то сообщение, которое вы получили.
Если вы хотите узнать, есть ли в вашей базе данных триггеры AFTER LOGON
, попробуйте выполнить запрос
SELECT trigger_name, owner FROM all_triggers
WHERE TRIM(triggering_event) = 'LOGON';
В моей базе данных (Oracle 11g XE beta) я получаю следующий вывод:
TRIGGER_NAME OWNER
------------------------------ ------------------------------
AFTER_LOGON_ERROR_IF_FRED LUKE
Я не верю, что Oracle выполняет какие-либо входы в систему из коробки, и я был бы удивлен, если бы PHP 1031 тоже.
Я могу только догадываться, почему ошибка возникает только для вашего веб-сервера, а не при запуске PHP из скрипта bash. Возможно, триггер запрашивает V$SESSION
и пытается выяснить, какая учетная запись пользователя пытается подключиться к базе данных?