IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Problème de directory sur Table externe oracle


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    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 : 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.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TYPE ORACLE_LOADER
    DEFAULT DIRECTORY IND_DATA_DIR

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Par défaut
    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.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    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.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/04/2019, 07h38
  2. erreurs Oracle sur table externe
    Par Djene dans le forum Oracle
    Réponses: 3
    Dernier message: 10/10/2011, 16h29
  3. Problèmes de performances sur une base oracle 10g
    Par ORAMEL dans le forum Oracle
    Réponses: 3
    Dernier message: 11/09/2007, 09h11
  4. Problème de filtre sur table
    Par omega dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/08/2006, 10h53
  5. [10g] ora-29829 sur table externe
    Par luchot dans le forum Oracle
    Réponses: 18
    Dernier message: 07/03/2006, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo