Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/10/2011, 13h59   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 60
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 60
Points : 10
Points : 10
Par défaut Problème de directory sur Table externe oracle

Bonjour,

Je dois de toute urgence traiter ce problème et je patauge depuis deux jours déjà.

Une table extrene EXT_INDICES dans laquelle des données de fichiers sont chargées pose problème au niveau de la directory ‘ IND_LOG_DIR’ qui est définie lors de la création pour ses fichiers ‘bad’ et log’.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
CREATE TABLE "INDICES_D00".EXT_INDICES
                               |    ("EVALUATION_DATE" DATE, 
                               | 	"ISIN" VARCHAR2(20), 
                               | 	"SEDOL" VARCHAR2(20), 
                               | 	"CUSIP" VARCHAR2(20), 
                               | 	…,
…,
                               | 	"TERMSDATE" VARCHAR2(25), 
                               | 	"STATUS" VARCHAR2(100)
                               |    )
ORGANIZATION EXTERNAL 
                               |     ( TYPE ORACLE_LOADER
                               |       DEFAULT DIRECTORY "IND_DATA_DIR"
                               |       ACCESS PARAMETERS
                               |       ( RECORDS DELIMITED BY NEWLINE 
                               |         LOAD WHEN ( 1 : 22 ) != 'NUMBER OF CONSTITUENTS' 
                               |         SKIP 2 
                               |         BADFILE IND_LOG_DIR : 'ext_indices.bad' 
                               |         LOGFILE IND_LOG_DIR : 'ext_indices.log' 
                               |         NODISCARDFILE FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' LRTRIM MISSING FIELD VALUES ARE NULL
(
                               |    evaluation_date CHAR ( 10 ) DATE_FORMAT DATE MASK "yyyymmdd",
                               |    isin,
                               |    sedol,
                               |    cusip,
			…,
			…,
                               |    termsdate,
                               |    STATUS 
                               |    ) 
                               |         )
                               |       LOCATION
                               |        ( "IND_DATA_DIR":'xxx.CSV'
                               |        )
                               |     )
Le problème est que à l’exécution du loader, j’ai le message d’erreur suivant :

Code :
1
2
3
 
resetting "log" AND "bad" files FOR: INDICES_DOO.t$104558_ext_indices
12:11:40 - error               | Error: ORA-20001: can NOT find oracle directory named: IND_LOG_DIR
Pour info:
La directory a été créée ainsi :


Code :
1
2
 
CREATE OR REPLACE DIRECTORY IND_LOG_DIR AS '/io/expl/intg/indices-equity/current/log';
Le select sur la table ALL_DIRECTORIES donne le résultat suivant:

Code :
1
2
3
 
OWNER	DIRECTORY NAME	DIRECTORY PATH 
SYS	IND_LOG_DIR	/io/expl/intg/indices-equity/current/log
La table externe EXT_INDICES se trouve dans un schéme appelé INDICES_D00.

Le select sur la table ALL_TAB_PRIVS donne pour résultat :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
SELECT grantor, grantee, table_schema, table_name, privilege
FROM all_tab_privs
WHERE table_name LIKE 'IND_LOG_DIR'
 
GRANTOR	         GRANTEE   TABLE SCHEMA TABLE NAME	PRIVILEGE
INDICES_DOO    PUBLIC	SYS	       IND_LOG_DIR	             READ
INDICES_DOO    PUBLIC	SYS	        IND_LOG_DIR	            WRITE
INDICES_DOO    EIDO_UPD	SYS	        IND_LOG_DIR	             READ
INDICES_DOO    EIDO_UPD	SYS	        IND_LOG_DIR	            WRITE
SYS	         EIDO_UPD	SYS	I       ND_LOG_DIR	            READ
SYS	         EIDO_UPD	SYS	        IND_LOG_DIR	            WRITE
INDICES_DOO   R_INDICES_UPD	SYS	IND_LOG_DIR	READ
INDICES_DOO   R_INDICES_UPD	SYS	IND_LOG_DIR	WRITE
SYS	         R_INDICES_UPD	SYS	IND_LOG_DIR	READ
SYS	         R_INDICES_UPD	SYS	IND_LOG_DIR	WRITE
J’ai fait des GRANT read, write on directory IND_LOG_DIR to … à l’aveugle pour tenter de régler le pb que je suis perdue à présent.

A un moment le code construit des GRANTING table Rights :

GRANTING TABLE RIGHTS
Code :
1
2
3
4
5
6
7
 
pkg_log.info('granting table rights');
 
 EXECUTE IMMEDIATE 'GRANT SELECT ON '||getExtTableSchema(pTableOwner)||'.'||pDstTableName ||' TO R_INDICES_READ, R_INDICES_UPD';
IF (sys_context('userenv','current_schema')<>getExtTableSchema(pTableOwner)) THEN
 EXECUTE IMMEDIATE 'GRANT ALL ON '||getExtTableSchema(pTableOwner)||'.'||pDstTableName||' TO '||sys_context('userenv','current_schema');
 END IF;

Pourquoi le programme ne trouve t’il pas le chemin de la directory IND_LOG_DIR de la table extrene ?
Quel est le pb ?


Merci pour votre aide.
Djene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 14h21   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 434
Points : 10 434
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Deux remarques mais je ne suis pas sûr qu'elles soient pertinentes.

1. Sous Windows je dois mettre le chemin complet dans le directory, quelque chose du genre :
Code :
CREATE directory toto AS 'c:\Temp'
2. Au niveau de la table je ne mets pas de double quote pour préciser le répertoire :
Code :
1
2
TYPE ORACLE_LOADER
DEFAULT DIRECTORY IND_DATA_DIR
__________________
Email : http://scr.im/waldar
Waldar est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 14h26   #3
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 313
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 313
Points : 5 819
Points : 5 819
L'utilisateur propriétaire du processus Oracle doit avoir les droits nécessaires au niveau du système d'exploitation sur le répertoire: /io/expl/intg/indices-equity/current/log.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 16h44   #4
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 60
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 60
Points : 10
Points : 10
Par défaut Problème de directory sur Table externe oracle

Merci à Waldar et Mnitu !

Problème directory résolu !
Il y avait un bug dans le code et ensuite il fallait effectivement donner les bons droits à la directory.

Djene est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h08.


 
 
 
 
Partenaires

Hébergement Web