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.
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.
:ccool: