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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.