Le message error occurred at recursive SQL level 1
me suggère que l'erreur se produit dans un déclencheur. Je suppose qu'il y a un AFTER LOGON ON SCHEMA
ou DATABASE
déclencheur, et pour une raison quelconque, il provoque une erreur lorsque le processus de votre serveur Web tente de se connecter.
Voici un exemple de la façon de générer l'erreur que vous obtenez. J'ai une table appelée TINY
, avec une seule colonne qui ne peut prendre que des valeurs jusqu'à 99 :
SQL> desc tiny; Name Null? Type ----------------------------------------- -------- ---------------------------- N NUMBER(2)
Créons maintenant un compte utilisateur et vérifions qu'il peut se connecter :
SQL> create user fred identified by fred account unlock; User created. SQL> grant connect to fred; Grant succeeded. SQL> connect fred/fred Connected.
Bien - reconnectons-nous en tant que moi et créons un déclencheur qui provoquera une erreur si FRED
tentatives de connexion :
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.
Rappelons que notre TINY
table ne peut stocker que des valeurs jusqu'à 99. Alors, que se passe-t-il lorsque FRED
tente de se connecter ?
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
À part le numéro de ligne et le bit PHP ajouté, c'est exactement le message que vous avez reçu.
Si vous voulez voir s'il y a des AFTER LOGON
déclencheurs dans votre base de données, essayez d'exécuter la requête
SELECT trigger_name, owner FROM all_triggers
WHERE TRIM(triggering_event) = 'LOGON';
Sur ma base de données (Oracle 11g XE beta), j'obtiens le résultat suivant :
TRIGGER_NAME OWNER ------------------------------ ------------------------------ AFTER_LOGON_ERROR_IF_FRED LUKE
Je ne crois pas qu'Oracle fasse une journalisation prête à l'emploi, et je serais surpris si le oci_connect
de PHP fait non plus.
Je ne peux que spéculer sur la raison pour laquelle l'erreur ne se produit que pour votre serveur Web et non lorsque vous exécutez PHP à partir d'un script bash. Peut-être que le déclencheur interroge V$SESSION
et essayer de déterminer quel compte d'utilisateur essaie de se connecter à la base de données ?