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’.
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
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' | ) | )
Pour info:
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
La directory a été créée ainsi :
Le select sur la table ALL_DIRECTORIES donne le résultat suivant:
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';
La table externe EXT_INDICES se trouve dans un schéme appelé INDICES_D00.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3OWNER DIRECTORY NAME DIRECTORY PATH SYS IND_LOG_DIR /io/expl/intg/indices-equity/current/log
Le select sur la table ALL_TAB_PRIVS donne pour résultat :
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.
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
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.
Partager