solution erreur ORA-02304

Musée des erreurs, scripts et trucs pas de Commentaire »

Si vous obtenez

IMP-00003: ORACLE error 2304 encountered
ORA-02304: invalid object identifier literal
IMP-00017: following statement failed with ORACLE error 2304:
“CREATE TYPE “SYS_PLSQL_1823160_17_2″ TIMESTAMP ‘2011-04-13:08: …

lors d’un import cela est du au fait  que les identifiants de type sont unique dans la base et que le type que vous creez lors de l’import existe deja dans un autre schema.

3 solutions :

- la mauvaise (eclle qu’on vous conseille partout comme si vous aviez le choix de creer des schemas ou d’en supprimer en production comme bon vous semble…) : créer tous les TYPEs dans un schema dédié par ex; : ‘MES_TYPES’  ainsi ils deviennent transverrses et il n’y a plus de probleme de doublons d’IDs.

- SI vous utilisez IMPORT :  mettre l’option TOID_NOVALIDATE de l’import. ATTENTION ! ce n’est pas ‘=Y ‘ la valeur mais ‘NOM_SCHEMA.NOM_TYPE’, ‘NOM_SCHEMA.NOM_TYPE’,
Si vous en avez 2000 …;-((

- Si vs utilisez DATAPUMP impdb : appliquez l’option  “ transform=OID:y “

ORA-01031: insufficient privileges sur SYS AS SYSDBA remote

Musée des erreurs, scripts et trucs pas de Commentaire »

(user SYS : remote connection failure or remote authentication failure)

Il est possible avec Oracle de se connecter SYSDBA à distance…mais pas toujours ;-) :

SQL> connect sys/monpassword@base_distante as sysdba
ERROR:
ORA-01031: insufficient privileges
Warning: You are no longer connected to ORACLE.

Il faut 3 conditions pour pouvoir faire une authentification a distance (remote authentication) :

  • un fichier de mot de passe (password file)
  • l’autorisation de s’authentifier ( REMOTE_OS_ATHENT=TRUE)
  • la déclaration du password file ( REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE …ou SHARED )

Attention : cette authentification à distance d’un user très privilégié, en fait le + privilégié  (équivallent à SYS) est fortement déconseillée pour des raisons de sécurité.

Le password file d’Oracle est créé avec un utilitaire : orapwd

A sa création le user SYS est par défaut ajouté dans le fichier, une fois que le fichier existe on peut y rajouter d’autres utilisateurs que SYS en utilisant la commande GRANT SYSDBA

– exemple minimal

$> orapwd password=mypassword
– par défaut le fichier créé est  <$ORACLE_HOME>/dbs/orapwd<$ORACLE_SID>
– et plus tard on rajoute un user
SQL> GRANT SYSDBA TO SCOTT;

Attention !!!!!!!!!!!!!!!!!! si on créé un fichier ailleurs (avec le parametre ‘file=’ la commande orapwd s’execute correctyement …et Oracle sera incapable de retrouver le fichier au démarrage !!!!!!!!!! ou si on ne redémarre pas on aura tjs l’erreur ORA-03113
Pas de FILE ici donc un nom par defaut si echoue on n’a aucune erreur !!!

On peut éventuellement s’en apercevoir si on fait un GRANT SYSDBA :
SQL> grant sysdba to sys;
grant sysdba to sys
*
ERROR at line 1:
ORA-01994: GRANT failed: password file missing or disabled

Syntaxe complete de orapwd :

Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n> nosysdba=<y/n>

where
file - name of password file (mand),le nom et l’emplacement du fichier, c’est faux ce n’est pas obligatoire, au contraire  !
password - password for SYS (mand),
entries - maximum number of distinct DBA, nb max de DBA dans le fichier
force - whether to overwrite existing file (opt), écrase le fichier existant
nosysdba - whether to shut out the SYSDBA logon (opt for Database Vault only).,

Il est possible de vérifier les users enregistrés dans le password file grace a la vue v$pwfile_users :

SQL> select * from v$pwfile_users;
USERNAME                       SYSDB SYSOP
SYS                            TRUE  TRUE

Solution erreur ORA-01157 , ORA-01110 : datafile perdu , corrompu ou effacé

Administration Oracle, Musée des erreurs, Rman, Sécurité Oracle pas de Commentaire »

En 6 clics

(oui je sais c’est un peu long)
L’hypothese est toujours qu’on ait une suavegarde RMAN en place qui tienne la route ( voir mon article : Sauvegarde Oracle 11g avec RMAN en 5 clics , pour + d’infos)
Avec la console OEM :
Cliquer sur l’onglet ‘Availability’, puis le lien ‘perform recovery’, choisir ‘recovery scope = datafile’ , clic ‘recover’, clic ‘Next’, clic ‘Next’ et ‘Submit’.
C’est fini ;-(

En 2 commandes

On va voir ici comment récupérer un fichier perdu…sans savoir lequel ni connaitre RMAN !
En fait 2 commandes suffisent : ADVISE FAILURE et REPAIR FAILURE. C’est tout bonnement miraculeux ca s’appelle Data Recovery Advisor !

Supposons qu’on ait donc perdu un datafile.
Au bout d’un moment (si, si) Oracle va finir par s’en apercevoir et on aura une erreur ORA-1157.
Oracle ERROR at line 1:
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: ‘/tmp/dd.dbf’ DATAFILE

Les étapes de restauration sont très simples grace à DATA RECOVERY ADVISOR disponible avec Oracle 11g.
Concrètement ce Data recovery advisor consiste en qq commandes que l’on pourra lancer sous RMAN.

3 commandes utiles :

RMAN> LIST FAILURE : liste les pbs en cours détectés (fichiers manquents, corrompus, etc…)

RMAN> ADVISE FAILURE : propose des solution de recovery et produit un script associé

RMAN> REPAIR FAILURE : execute le script de récupération

Voici un exemple concret :

Connexion a RMAN

$> rman target sys@portab2-a-dd:1521/DD1.dd.com
connected to target database: DD1 (DBID=1767735647, not open)
RMAN>

Recherche de problemes éventuels :

RMAN> list failure;
using target database control file instead of recovery catalog
List of Database Failures
=========================
Failure ID Priority Status Time Detected Summary
———- ——– ——— ————- ——-
1242 HIGH OPEN 23-JUL-10 One or more non-system datafiles are missing

Ou si l’on souhaite avoir des infos plus détaillées sur le problème on utilise l’ID qui nous intéresse , ici 1242

RMAN> list failure 1242 detail;

List of Database Failures
=========================
Failure ID Priority Status Time Detected Summary
———- ——– ——— ————- ——-
1242 HIGH OPEN 23-JUL-10 One or more non-system datafiles are missing
Impact: See impact for individual child failures
List of child failures for parent failure ID 1242
Failure ID Priority Status Time Detected Summary
———- ——– ——— ————- ——-
1245 HIGH OPEN 23-JUL-10 Datafile 6: ‘/tmp/dd.dbf’ is missing
Impact: Some objects in tablespace DD might be unavailable

En suite la partie Assistance / conseil proprement dite (ADvisor) :

RMAN> advise failure;

analyzing automatic repair options; this may take some time
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=155 device type=DISK
analyzing automatic repair options complete

Mandatory Manual Actions
========================
no manual actions available
Optional Manual Actions
=======================
1. If file /tmp/dd.dbf was unintentionally renamed or moved, restore it
Automated Repair Options
========================
Option Repair Description
—— ——————
1 Restore and recover datafile 6
Strategy: The repair includes complete media recovery with no data loss
Repair script: /oracle/diag/rdbms/dd1/DD1/hm/reco_1841908370.hm

On peut dès lors récupérer le fichier de données effacé en une étape :

RMAN> REPAIR FAILURE

Ou si l’on veut mieux maitriser ce que l’on fait, visualiser le script et lancer les étapes de restauration et recovery manuellement :

Vérification du script généré :

$> more /oracle/diag/rdbms/dd1/DD1/hm/reco_1841908370.hm
# restore and recover datafile
restore datafile 6;
recover datafile 6;

Restauration (récupération) du fichier perdu à partir des Backups Sets de la sauvegarde RMAN :

RMAN> restore datafile 6;

Starting restore at 23-JUL-10
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00006 to /tmp/dd.dbf
channel ORA_DISK_1: reading from backup piece /oracle/flash_recovery_area/DD1/DD1/backupset/2010_07_22/o1_mf_nnnd1_BACUP_INCR_DEL_BAC_0_64jlhkvc_.bkp
channel ORA_DISK_1: piece handle=/oracle/flash_recovery_area/DD1/DD1/backupset/2010_07_22/o1_mf_nnnd1_BACUP_INCR_DEL_BAC_0_64jlhkvc_.bkp tag=BACUP_INCR_DEL_BAC_072210033828
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 23-JUL-10

Récupération de données supplémentaires et synchronisation des fichiers si nécessaire :

RMAN> recover datafile 6;

Starting recover at 23-JUL-10

using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:01
Finished recover at 23-JUL-10

probleme demarrage console entreprise manager 11g et solutions

Administration Oracle, Musée des erreurs pas de Commentaire »

Suite à des création successives de BDs la console standalone (db control) ne veut plus démarrer pour la BD courante.

$> emctl start dbconsole…failed

L’environnement minimal

…il en faut un !
Le <ORACLE_HOME> doit être correct, le < ORACLE_SID > doit être positionné sur la base cible et le <HOSTNAME>  (nom logique local de la machine) avoir une valeur correcte.
Si tel n’est pas le cas, Oracle ne trouve pas la configuration et on a un message d’erreur du genre

OC4J Configuration issue /oracle/db11g/oc4j/j2ee/OC4J_DBConsole_monpc_TEST not found.

La raison en est qu’il existe des répertoires suffixés avec la valeur de <HOSTNAME> et < ORACLE_SID> notamment :

<ORACLE_HOME>/oc4j/j2ee/OC4J_DBConsole_<HOSTNAME>_<ORACLE_SID>
exemple : /oracle/db11g/oc4j/j2ee/OC4J_DBConsole_monpc_TEST
<ORACLE_HOME><HOSTNAME>_<ORACLE_SID>
exemple : /oracle/db11g/monpc_TEST

Accessoirement la base et le listener doivent être démarrés pour que la console soit complètement fonctionnelle.

rem : on peut cependant lancer la console sans rien et s’en servir pour démarrer la base et le listener…mais je ne vous le conseille pas

Solution brute

1) recréer le référentiel de la console dans la base ( ou repository) qui correspond au schema SYSMAN :

$> emca -repos recreate

2) reconfigurer la console :

$> emca -config dbcontrol db

solution erreur ORA-01752

Musée des erreurs pas de Commentaire »

SQL> Connect scott / Tiger
SQL> create view v_emp as select *
from emp,dept
where emp.deptno=dept.deptno;
SQL> delete from v_emp
-> 14 rows deleted

La suppression de lignes à travers une vue (même avec jointure)  fonctionne !
La condition, qui est vérifiée ici,  est qu’il y ait une clé primaire sur la table maitre de la jointure


SQL> select constraint_name, constraint_type,  table_name
from user_constraints;

CONSTRAINT_NAME  C TABLE_NAME
---------------  - ----------
PK_EMP          P EMP
PK_DEPT      P DEPT
FK_DEPTNO      R EMP

Supprimons la PK de EMP :

SQL> alter table emp disable constraint pk_emp
SQL> delete from v_emp
-> OK

(car on a supprimé la contrainte sur la table détail°

PAR CONTRE  si on invalide (ou supprime)  la contrainte unique de la table maitre

SQL> — on invalide d’abord la clé étrangère de EMP avant la clé primaire de EMP sinon ca marche Pô
SQL> alter table emp disable constraint fk_deptno
SQL>  alter table dept disable constraint pk_dept
SQL> delete from v_emp
ERROR at line 1:
ORA-01752: cannot delete from view without exactly one key-preserved table

Conclusion : on peut faire des suppressions de lignes dans une table à travers une vue avec jointures MAIS
il faut une contrainte unique (ou une clé primaire) sur la table maitre…
sinon ORA-01752.

Accessoirement ORA-01752 :  cannot delete from view without exactly one key-preserved table

Veut bien dire…ce que ca veut dire.

Il y a apparemment un probleme de table sous jacente sans contrainte unique cqfd

ubuntu et oracle : ulimit: 25: bad number

Musée des erreurs pas de Commentaire »

Lorsque l’on lance ceratins utilitaire comme emctl par exemple on a cette erreur qui survient

exemple :

$> emctl start dbconsole

$> ulimit: 25: bad number

Le pb vient de ce que cette commande s’execute en Shell ( sh ) et non pas bash.

Solution : modifier $ORACLE_HOME/bin/emctl et remplacer le

#!/bin/sh -f

par

#!/bin/bash -f

Configuration SQLdeveloper , instant client Oracle, OID LDAP

Musée des erreurs, Oracle Net, scripts et trucs pas de Commentaire »

Par défaut SQL Developer ne reconnait pas la configuration standard Oracle Net et notamment la résolution de nom via OID, même  si le client est correctement configuré par ailleurs.

ie : une connexion sqlplus fonctionne avec la résolution via OID mais pas sqldeveloper.

Si vous tentez une connexion LDAP vous risquez une erreur du genre : ‘ property ‘hostname’ not set on the database provider ‘ …

Les hypotheses ici :

ORACLE_HOME c:\oracle\instant_client

et dans le sous répertoire standard \network\admin les fichiers de configuration pour la résolution de nom via OID / LDAP :

sqlnet.ora
NAMES.DIRECTORY_PATH= (LDAP, EZCONNECT)
TNSPING.TRACE_DIRECTORY = c:\oracle\instant_client_10g
TNSPING.TRACE_LEVEL = c:\oracle\instant_client_10g

ldap.ora
DEFAULT_ADMIN_CONTEXT = “dc=mondomaine,dc=fr”
DIRECTORY_SERVERS = (sr-oid.mondomaine.fr:389)
DIRECTORY_SERVER_TYPE = OID

Pour que SQLdevelopper fonctionne il faut rajouter la variable TNS_ADMIN dans l’environnement WINDOWS qui pointe sur votre rep NETWORK\ADMIN

C:\>set tns_admin=C:\oracle\instant_client_10g\Network \Admin

ou utiliser la fenetre ‘propriétés’ de vopre poste de travail et le bouton ‘variables d’environnement’ pour ajouter TNS_ADMIN

Dès lors SQLdevelopper reconnait votre serveur LDAP qui apparait dans la liste déroulante (si vous avez choisit ‘type de connexion’ LDAP)

sqld_ldap

Ensuite il ne vous reste plus qu’a choisir le contexte racine dans la liste et cliquer sur le bouton ‘charger’ pour avoir la liste de vos alias définis dans OID…

ORA-03001: unimplemented feature sur un RENAME - solution

Musée des erreurs pas de Commentaire »

On peut pârfois obtenir une erreur ORA-3001 sur un RENAME TABLE.
Après avoir vérifié que ce n’est pas un pb de version (RENAME a du arriver en V 10 je crois) :
VErifier par exemple qu’on est bien en V10 ou 11, et pas en mode dégradé : Voir le parametre ‘COMPATIBLE’.
En fait il s’avere qu’il faut être connecté en tant qu’utilisateur propriétaire.
C’est le ALTER SESSION SET CURRENT_SCHEMA=proprietaire qui pose probleme.

SQL>
SQL> rename code_postaux to codes_postaux;
rename code_postaux to codes_postaux
*
ERROR at line 1:
ORA-03001: unimplemented feature

3 solutions :
- se connecter dans le compte si on a le mot de passe
- utiliser un su, pour substituer réellement l’utilisateur voir l’article sur le su
- faire un execute immediate du RENAME via pl/sql comme suggéré ici

ORA-27102 no space left on device (Linux)

Musée des erreurs pas de Commentaire »

Que faire quand on a cette erreur?

Elle se produit souvent quand on vient d’augmenter la sga_max_size au redémarrage de la base.

A l’installation d’oracle sous linux, il faut positionner certains paramètres noyau pour la gestion de la mémoire (metalink 301830.1).

le shmmall qui correspond à la valeur total de la ram en bytes divisé par la taille de la page mémoire et le shmmax qui correspond à la moitié de la valeur de la Ram totale mais maximum 4Go.

Vérifier que la valeur du shmmall soit la bonne.

Par défaut on met souvent 4Go et pour les gros serveurs de 32Go de ram la valeur est de 8Go (avec une page size à 4096).  Si l’on veut dépasser 4Go de SGA, il faut donc positionner correctement ce paramètre.

$ getconf PAGE_SIZE pour avoir la taille de la page mémoire
4096
# sysctl -p pour voir tous les paramètres kernel
vi /etc/sysctl.conf pour modifier les paramètres
albanlepunk

Solution de l’erreur Oracle ORA-01843

Musée des erreurs, scripts et trucs pas de Commentaire »

Un exemple :

SQL> update ma_table
set ma_date=’10/04/2009′
/
ERROR at line 1:
ORA-01843: not a valid month

Le format de date proposé est incompatible avec la base de données cible.

Ceci se produit lorsque le client Oracle n’est pas dans la même configuration que le serveur au niveau de son environnement de ‘localisation’ : environnement NLS (Oracle National Language Support

solution temporaire (la durée de la session)
SQL> ALTER SESSION SET NLS_DATE_FORMAT=’MM/DD/YYYY’;

solution un peu plus pérenne sous Unix/Linux :
Changer le paramétrage du client Oracle, pour positionner le nouveau format de date par défaut.
Ceci se fait avec une variable d’environnement Unix :

$> export NLS_DATE_FORMAT=DD/MM/YYYY

Sous Windows (personne n’est parfait) l’environnement client Oracle est spécifié dans la base de registres, donc on modifiera / ajoutera une clé NLS_DATE_FORMAT dans la section HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE avce regedit par exemple.

Note : lorsqu’on utilise un client léger (application Web ou i*SQLPlus par exemple), il ne faut pas regarder la cofiguration du poste client bien sûr, mais celle su serveur Web qui, dans une architecture 3-tier, est le ‘vrai’ client de la base de données…

Flashback et ORA-38760 au redémarrage sur RAC

Musée des erreurs pas de Commentaire »

Au reboot de la base vous récuperez une erreur ORA-38760.

PB : This database instance failed to turn on flashback database

Cause : Database flashback is on but this instance failed to start generating flashback data. Look in alert log for more specific errors.

C’est très souvent du au fait que vous avez créé des points de restauration garantis.

Arrêtez les deux instances et démarrez en une en mode mount.

C:\Documents and Settings\admin.avassallo>set TNS_ADMIN=E:\admin_oracle\network_admin
C:\Documents and Settings\admin.avassallo>set ORACLE_SID=QUALIF1
C:\Documents and Settings\admin.avassallo>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Mar. Juin 23 09:47:14 2009
Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
Connecté à une instance inactive.
SYS@QUALIF1> startup mount
Instance ORACLE lancée.
Total System Global Area  629145600 bytes
Fixed Size                  1298264 bytes
Variable Size             260047016 bytes
Database Buffers          360710144 bytes
Redo Buffers                7090176 bytes
Base de données montée.

On vérifie l’existence de point de restauration garantis que l’on va dropper allègrement.

SYS@QUALIF1> select name from v$restore_point where guarantee_flashback_database
= ‘YES’;
NAME
——————————————————————————–
PRC_SECOND
PRC_TROIS
SYS@QUALIF1> drop restore point PRC_TROIS;
Point de restauration supprimé.
SYS@QUALIF1> drop restore point PRC_SECOND;
Point de restauration supprimé.

Arrêt de la flashback!

SYS@QUALIF1> alter database flashback off;
Base de données modifiée.
SYS@QUALIF1> alter database open;
Base de données modifiée.
SYS@QUALIF1>
Vérification de la place dans la Flash back Recovery Area.
E:\admin_oracle\scripts>sqlplus -S / as sysdba  @E:\admin_oracle\scripts\asm_dis
kgroup.sql
NAME                             TOTAL_MB    FREE_MB USABLE_FILE_MB
—————————— ———- ———- ————–
DGDATA                             307098     104932          26874
DGFRA                              102348      52146          13279
DGHISTO                            245676     104586          31820

Arrêt à nouveau de l’instance 1

SYS@QUALIF1> shutdown immediate
Base de données fermée.
Base de données démontée.
Instance ORACLE arrétée.
SYS@QUALIF1> quit
Déconnecté de Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Produc
tion
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options

Redémarrage de la Flashback

C:\Documents and Settings\admin.avassallo>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Mar. Juin 23 09:58:50 2009
Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
Connecté à une instance inactive.
SYS@QUALIF1> startup mount
Instance ORACLE lancée.
Total System Global Area  629145600 bytes
Fixed Size                  1298264 bytes
Variable Size             260047016 bytes
Database Buffers          360710144 bytes
Redo Buffers                7090176 bytes
Base de données montée.
SYS@QUALIF1> alter database flashback on;
Base de données modifiée.
SYS@QUALIF1> alter database open;
Base de données modifiée.

Redémarrage de la deuxième instance.
SYS@QUALIF2>
SYS@QUALIF2> startup
Instance ORACLE lancée.
Total System Global Area  629145600 bytes
Fixed Size                  1298264 bytes
Variable Size             226492584 bytes
Database Buffers          394264576 bytes
Redo Buffers                7090176 bytes
Base de données montée.
Base de données ouverte.
SYS@QUALIF2>

Et le tour est joué.

erreur ORA-28112 failed to execute policy function

Divers, Musée des erreurs pas de Commentaire »

Ca veut bien dire ce que ca veut dire !
Une fois les policies créées,  les packages et fonctions testées, l’utilisation implicite des polices (par un SELECT sur la table sécurisée par exemple) peut renvoyer cette erreur.

Une xeception est arrivée lors de l’execution qui n’est pas ‘attrapée’ par le programme et remonte donc au noyau. Reste à savoir quelle exception et pourquoi…

Pour avoir plus d’infos, il faut voir le fichier trace *ora*.trc généré dans USER_DUMP_DEST!!!!!!
Voici un exemple de contenu de trace intéressant (chercher éventuellement la chaine ORA-28112 si le fichier est trop gros)

srv-test$ > more pprun_ora_237820.trc
Dump file /work/oracle/log/prod_ora_237820.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /oracle/10GDB
System name: AIX
Node name: sr-pprod-1
Release: 3
Version: 5
Machine: 005F0ADA4C00
Instance name: prod
Redo thread mounted by this instance: 1
Oracle process number: 23
———————————————————-
Policy function execution error:
Logon user : SYSTEM
Table/View : SC1.CONTROLE
Policy name : SC1_APP_RESTRICT
Policy function: SYSTEM.PK_SET_VPD.FN_RESTRICT
ORA-04063: package body “SYSTEM.PK_SET_VPD” has errors
ORA-06508: PL/SQL: could not find program unit being called: “SYSTEM.PK_SET_VPD”
ORA-06512: at line 1
*** 2008-09-11 11:39:48.898
———————————————————-
Policy function execution error:
Logon user : SYSTEM
Table/View : SC1.CONTROLE_RMI
Policy name : SC1_APP_RESTRICT
Policy function: SYSTEM.PK_SET_VPD.FN_RESTRICT
ORA-06508: PL/SQL: could not find program unit being called: “SYSTEM.PK_SET_VPD”
ORA-06512: at line 1

On voit qu’il ne trouve pas le package de la policy dans SYSTEM…parce qu’elle a été créé dans un autre schéma (SC1 sur cet exemple)

erreur ORA-20001

Musée des erreurs pas de Commentaire »

L’utilisation de packages APEX hors de l’application APEX, c’est à dire en executant la procédure ‘à la main’, provoque une erreur.

ERROR
ORA-20001: This procedure must be invoked from within an application session.
ORA-06512: at “FLOWS_030000.WWV_FLOW_MAIL”, line 109
ORA-06512: at “FLOWS_030000.WWV_FLOW_MAIL”, line 139

La solution est de se donner les autorisation nécessaires en récupérant le Workspace Id, de l’application concernée dans Apex, via l’interface de gestion. Ensuite on positionne cet ID, avec wwv_flow_api.set_security_group_id et l’on peut executer la procédure désirée.

exemple :

begin
wwv_flow_api.set_security_group_id(1860821609902858);
– et execution d’un envoi de mail
apex_mail.send(p_to => ‘didier.deleglise@dd.fr’,
p_from => ‘test@test.com’,
p_body => ‘test’,
p_subj => ‘test ‘);
end;

ORA-01031 / ORA-06512

Divers, Musée des erreurs pas de Commentaire »

Probleme lors de l’export 10g
sur APEX et les applications utilisant des ‘domain index’ORA-01031: insufficient privileges
ORA-06512: at “SYS.DBMS_EXPORT_EXTENSION”, line 257
ORA-06512: at line 1
EXP-00078: Error exporting metadata for index WWV_FLOW_OH_IDX. Index creation wi
ll be skipped
C’est un BUG en plus des droits standards d’export, il faut des GRANT SELECT explicites sur les tables ayant des index de domaine…

On fait un scrit pour trouver les tables à GRANTer :

SQL > select ‘GRANT SELECT ON ‘||OWNER||’.'||TABLE_NAME||’ TO user_qui_fait_lexport;’
from dba_indexes
where index_type=’DOMAIN’

–>

GRANT SELECT ON KF.STATES TO user_qui_fait_lexport;
GRANT SELECT ON KF.INTERSTATES TO user_qui_fait_lexport;
GRANT SELECT ON KF.OCEAN TO ORA_BAT;
GRANT SELECT ON KF.TERRITORIES TO ORA_BAT;

et executer les grant !

solution erreur ORA-01925

Musée des erreurs pas de Commentaire »

ORA-01925: maximum of 148 enabled roles exceeded

Attention cet article concerne essentiellement Oracle 9i, le paramètre MAX_ENABLED_ROLES étant obsolète en 10g…

Lors du CREATE ROLE avec option par defaut, le role créé est affecté implicitement au createur qui peut donc le GRANTer grace a son admin option par defaut (et aussi si le role est ensuite revoqué ce qui est plus étonnant…)

remarque : si le role est role ‘ enterprise ‘ ou ‘ global role ‘ dans la terminologie Oracle, le role n’est pas granté au créateur

Dans le cas standard, cet héritage peut etre génant particulierement pour des comptes DBA (genre SYSTEM ou OEM_CONNECT, qui est l’utilisateur par défaut de la console OEM) consommateurs de ce genre de commandes.
Le MAX_ENABLED_ROLES etant une limite PAR USER, il peut etre facilement atteint.

Solution (résolution)

1) vérifier s’il n’y a pas de role superflus et le cas échéant les supprimer

2) dans un deuxieme temps seulement ! : augmenter le MAX_ENABLED_ROLES

remarque : la valeur maximum autorisée de MAX_ENABLED_ROLES est 148

Effet pervers : si la limite courante est atteinte par OEM_CONNECT on ne peut plus se connecter a la console d’administration OEM, par contre cf ce qui est dit + haut on peut eventuellement se connecter en Standalone, via un autre compte DBA…

l’erreur Oracle ORA-12154

Divers, Musée des erreurs 4 Commentaires »

ORA-12154 Le service n’a pu être résolu
ORA-12154 TNS could not resolve service name

mots clés

problême SQL*Net, problême Oracle Net service, erreur SQL*Net, erreur Oracle Net, erreur ORA-12154, erreur Oracle ORA-12154, solution ORA-12154, résolution ORA-12154

Description du problème

problème de résolution de nom de service SQL*Net ou Oracle Net. En clair le nom de la base sur le réseau ne peut pas être traduit (résolu).

Tests

1) vérifier que la base est active sur le serveur, indépendamment du réseau :
- Se connecter directement au serveur
sous Unix / Linux : telnet ou SSH ,
sous Windows : prise de main a distance ou ouverture d’une session directe sur le serveur
On vérifie et positionne le cas échéant l’environnement Oracle de notre session sur le serveur :
- affectation du ORACLE_HOME (répertoire d’installation d’Oracle)
- ORACLE_SID (identifiant local de la base ) ? la bonne valeur,
sous Unix / Linux : export ORACLE_SID = nom_de_la_base
sous Windows : modifier la variable ORACLE_SID, sous DOS, avec la commande SET ORACLE_SID = nom_de_la_base
ou modifier la base de registre avec regedit (software \ oracle \ ORACLE_HOME et ORACLE_SID) avec la bonne valeur
Puis on tente une connexion locale dans un compte connu
cd ORACLE_HOME
cd bin
sqlplus scott/tiger ou sqlplus system/mot_de_passe_system
2) vérifier que le serveur SQLNET est actif
cd ORACLE_HOME
cd bin
lsnrctl stat
3) verifier la méthode de resolution de nom
A PARTIR DU POSTE CLIENT ! : tnsping nom_de_service
Cette commande indique quelle méthode de résolution est utilisée :
- Implicite avec EZCONNECT
- Locale, avec un fichier de traduction locale : ORACLE_HOME/network/admin/tnsnames.ora
- Distante avec un serveur Oracle Names ou LDAP ou DNS
On peut également le vérifier dans le fichier ORACLE_HOME/network/admin/sqlnet.ora ou sont indiquées dans la variable DIRECTORY_PATH, les méthodes de résolution utilisées et dans quel ordre

Résolution de l’erreur ORA-12154

cas 2 : si le serveur SQL*Net / Oracle*Net est inactif, le démarrer :
dans ORACLE_HOME/bin lancer la commande lsnrctl start
remarque : par défaut le serveur démarre sur le port 1521
cas 3 :
solution universelle : forcer la résolution de nom en local :
dans le fichier ORACLE_HOME/network/admin/sqlnet.ora on met la ligne DIRECTORY_PATH= (TNSNAMES)
puis on crée un fichier ORACLE_HOME/network/admin/tnsnames.ora avec la bonne définition du service, calqué sur celle trouvée dans le fichier tnsnames.ora du répertoire SAMPLE.
Il faudra préciser : le nom de la machine serveur (avec son domaine) ou son @IP, le no de port : 1521 et le nom de service Oracle déclaré sur le serveur.
Remarque : le nom de service réseau est souvent pour des raisons de simplicité,identique au nom de service sur le serveur
Solution adaptée :
Attention !!!! le nom se service sur le serveur doit être exactement identique ? celui précisé dans la résolution de nom (indiqué par le tnsping). On peut le vérifier sur le serveur dans le fichier ORACLE_HOME/network/admin/listener.ora. Notamment si le client cherche une base qui s’appelle TEST.mondomaine.fr on doit avoir dans le listener.ora du serveur également TEST.mondomaine.fr , au caractère près.
Resolution locale :
Idem précédemment : dans le fichier ORACLE_HOME/network/admin/sqlnet.ora on met la ligne DIRECTORY_PATH= (TNSNAMES)
puis on crée un fichier ORACLE_HOME/network/admin/tnsnames.ora avec la bonne définition du service, calqué sur celle trouvée dans le fichier tnsnames.ora du répertoire SAMPLE.
Il faudra préciser : le nom de la machine serveur (avec son domaine) ou son @IP, le no de port : 1521 et le nom de service Oracle déclaré sur le serveur.
Résolution LDAP :
**************** ? compléter
Résolution DNS :
dans le fichier ORACLE_HOME/network/admin/sqlnet.ora on met la ligne DIRECTORY_PATH= (HOSTNAME)
et l’on vérifie que le nom de la base est bien résolu par le serveur DNS : ping nom_base.
En cas de problème de DNS, on peut faire appel ? un fichier ‘hosts’ local pour la résolution.
Il se trouve dans /etc/hosts sur Unix et dans WINDOWS\SYSTEM32\DRIVERS\ETC \HOSTS

L’erreur ORA-1034

Divers, Musée des erreurs pas de Commentaire »

ORA-1034 Base Oracle non disponible
ORA-1034 Oracle not available

mots clés

ORA-1034, Oracle 0RA-1034 error, erreur Oracle ORA-1034, erreur Oracle 1034, connexion oracle impossible, oracle non disponible, impossible de se connecter, environnement Oracle, ORACLE_SID, startup,

Description du problème

C’est un problème de disponibilité de la base Oracle ? partir d’un client. Le client peut être un programme utilisateur, une application de gestion, ou un client Oracle : SQL*Plus, export (exp) , import (imp), SQL*Loader, etc.
Concrètement il est impossible de se connecter ? la base….
Ce n’est pas un problème de connexion réseau ou SQL*Net, ou Oracle Net Services, ceux ci déclenchent des erreurs spécifiques (voir plus loin).
A preuve cette erreur peut survenir même si l’on est connecté directement sur le serveur hébergeant la base Oracle, sans utiliser aucune couche réseau.
Cette erreur peut en général avoir 2 causes : soit la base Oracle n’est pas démarrée, soit elle est incorrectement identifiée et le client ne la trouve pas !

Tests

remarque : pour effectuer ces tests on doit au moins savoir quel est le nom de la base (l’identifiant) que l’on veut atteindre
- Se connecter directement au serveur
sous Unix / Linux : telnet ou SSH ,
sous Windows : prise de main a distance ou ouverture d’une session directe sur le serveur
- Vérifier que la base cible est démarrée
sous Unix / Linux : ps -ef|grep oracle et rechercher les process de fond standards d’Oracle (au moins dbwr, lgwr, smon, pmon) suffixés par le nom de la base.
sous Windows : ? partir de panneau de configuration, vérifier dans la liste des services, qu’il existe au moins un service qui s’appelle ‘oracle_NOM_DE_LA_BASE et qu’il est démarré.

Diagnostic

cas 1 : Si la base est démarrée, alors c’est qu’elle est mal identifiée par le client, et que le problème est au niveau de l’environnement du système d’exploitation client
cas 2 : Si la base n’est pas démarrée …il faut la démarrer

Résolution de l’erreur ORA-1034

cas 1 : modififier l’identification de la base.
sous Unix / Linux : export ORACLE_SID = nom_de_la_base
sous Windows : modifier la variable ORACLE_SID, sous DOS, avec la commande SET ORACLE_SID = nom_de_la_base
ou modifier la base de registre avec regedit (software \ oracle \ ORACLE_HOME \ ORACLE_SID) avec la bonne valeur
cas 2 :
vérifier que l’environnement est correct (ORACLE_SID) sinon le positionner commeau paragraphe précédent
arreter la base par sécurité (il se pourrait qu’elle soit dans un état intermédiaire, et que tous les process ne soient pa démarrés)
puis la redémarrer en utilisant sqlplus :
$ sqlplus /nolog
SQL connect sys as sysdba
SQL shutdown abort
SQL startup
vérifier que les process ou le service démarrent correctement