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

Oracle Discussion :

[10g] ora-29829 sur table externe


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 8
    Par défaut [10g] ora-29829 sur table externe
    Bonjour,

    J'utilise Oracle 10G et apres avoir cree une table externe je ne peux pas faire de select dessus le message d'erreur est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-29829: type d'implementation inexistant
    Le script de creaton de la table est la suivante :
    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
    create directory data_dir_li as '/flat_files/';
    create table ps_et(
    ps_partkey number ,
    ps_suppkey number ,
    ps_availqty number ,
    ps_supplycost number ,
    ps_comment varchar(199)
    )
    organization external (
    type ORACLE_LOADER
    default directory data_dir_li
    access parameters
    (
    records delimited by newline
    nobadfile
    nologfile
    fields terminated by '|'
    missing field values are null
    )
    location (
    'partsupp.tbl.1','partsupp.tbl.2','partsupp.tbl.3','partsupp.tbl.4',
    'partsupp.tbl.5','partsupp.tbl.6','partsupp.tbl.7','partsupp.tbl.8',
    'partsupp.tbl.9','partsupp.tbl.10','partsupp.tbl.11','partsupp.tbl.12',
    'partsupp.tbl.13','partsupp.tbl.14','partsupp.tbl.15','partsupp.tbl.16',
    'partsupp.tbl.17','partsupp.tbl.18','partsupp.tbl.19','partsupp.tbl.20',
    'partsupp.tbl.21','partsupp.tbl.22','partsupp.tbl.23','partsupp.tbl.24',
    'partsupp.tbl.25','partsupp.tbl.26','partsupp.tbl.27','partsupp.tbl.28',
    'partsupp.tbl.29','partsupp.tbl.30'
    ))
    reject limit unlimited
    ;
    Apres la creation de la table, si je fais un desc ca se passe bien mais je ne peux pas faire de select.
    L'utilisateur est pourtant le sysdba donc ca doit pas etre un probleme de droit. Le dossier contenant le fichier externe est la
    propriete de l'utilisateur oracle avec qui je lance sqlplus .

    Donc je ne sais pas comment je peux faire, donc si quelqun peut m'aider ce serait sympa

    Merci

  2. #2
    Membre émérite Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Par défaut
    Ce code fonctionne en 9i, 10g et 10gR2.

    Peut-etre le probleme vient-il des donnees? Les fichiers incluent-ils des donnees particulieres? Peut-on avoir un dump de l'un de ces fichier?

  3. #3
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut Re: Select refusé sur table externe
    Citation Envoyé par luchot
    Le dossier contenant le fichier externe est la
    propriete de l'utilisateur oracle avec qui je lance sqlplus .
    D'un point de vue système, les directories sont accédées par le compte Unix qui possède le binaire oracle...

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut Re: Select refusé sur table externe
    Citation Envoyé par LeoAnderson
    D'un point de vue système, les directories sont accédées par le compte Unix qui possède le binaire oracle...
    Si je ne m'abuse c'est plutôt le compte qui a démarré la base et doit être dans le groupe DBA mais pas forcément le owner des binaires

  5. #5
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut Re: Select refusé sur table externe
    Citation Envoyé par Fred_D
    Citation Envoyé par LeoAnderson
    D'un point de vue système, les directories sont accédées par le compte Unix qui possède le binaire oracle...
    Si je ne m'abuse c'est plutôt le compte qui a démarré la base et doit être dans le groupe DBA mais pas forcément le owner des binaires
    Négatif... avec le setUID bit sur le binaire Oracle (-rwsr-s--x) c'est le compte proprétaire ! ;-)

  6. #6
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    J'ai une base MABASE qui est installée sur un serveur dont l'utilisateur ora920:dba a permis d'installer oracle. Il est bien owner des binaires.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [fred] /home/fred > ls -l $ORACLE_HOME/bin/ | more
    total 3333104
    -rwxrwsr-x   1 ora920   dba           13539 26 avr 2002  adapters
    -rwxrwsr-x   1 ora920   dba        16873490 23 aoû 2005  agentctl
    -rwxrwsr-x   1 ora920   dba        16873490 23 aoû 2005  agentctl0
    -rwxrwsr-x   1 ora920   dba        14507576 23 aoû 2005  agtctl
     
    etc...
    J'ai fait le test suivant sachant que MABASE est lancé par l'utilisateur fred:dba :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [fred] /home/fred > ps -ef | grep smon
        fred 61548 213224   1 09:33:52 pts/15  0:00 grep smon
        fred 118844      1   0   05 mar      -  0:15 ora_smon_MABASE
    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
     
    SYSTEM-MABASE> create directory dir_fred as '/home/fred';
     
    Répertoire créé.
     
    SYSTEM-MABASE>  declare 
      2  f_file_id UTL_FILE.FILE_TYPE;
      3   BEGIN
      4  
      5    f_file_id := UTL_FILE.FOPEN('DIR_FRED','fred.txt','w');
      6  UTL_FILE.PUT_LINE (f_file_id,'coucou');
      7  UTL_FILE.FCLOSE (f_file_id);
      8  end;
      9  /
     
    Procédure PL/SQL terminée avec succès.
    résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [fred] /home/fred > cat fred.txt
    coucou
    il suffit donc que le répertoire soit en écriture pour le owner de l'instance (ici fred) qui lui-même peut être différent du owner des binaires... CQFD

  7. #7
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    peux-tu afficher les permissions sur
    • ls -l $ORACLE_HOME/bin/*oracle*
    • ls -l /home/ | grep fred
    • ls -l /home/fred/ | grep fred.txt
    • id -a (en étant fred évidemment)


    en n'oubliant pas de lancer la commande avec un OSuser "scott" non membre de DBA ?

    et dans une 2nd directory où ni ora92, ni dba n'ont de permissions ?

  8. #8
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    -rwxrwsr-x 1 ora920 dba 75453616 Aug 23 2005 /appl/oracle/product/9.2.0/bin/oracle

    drwxr-xr-x 11 fred dba 4096 07 mar 09:38 fred
    j'ai supprimé le fichier et "id -a" n'existe pas sous AIX

    un directory non autorisé à DBA ne pourra pas être accédée par la base.

    Que veut-tu démontrer ?

  9. #9
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Pour répondre à la question

    http://ora-29829.ora-code.com/

    il semble que le type ORACLE_LOADER n'existe pas ou que l'utilisateur qui crée la table n'a pas les privilèges suffisant dessus.

  10. #10
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    fais "id" alors !

    Ce que je veux montrer c'est que le fichier écrit appartient au compte propriétaire du binaire !

    Ton test ne montre rien, puisque fred étant dba, le fichier a été écrit via les droits sur le groupes et non les droits sur le owner.

    Si ton path est
    rwx------ fred dba
    seul fred peut y écrire.

    Et là, ton utl_file échouera car même si la base est lancée par fred, le fichier sera écrit par ora92.

  11. #11
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    bien sûr, le user doit être membre du groupe DBA et évidemment le répertoire doit pouvoir être rempli par ce groupe, on est d'accord

  12. #12
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 8
    Par défaut
    Bonjour,

    il semble que le type ORACLE_LOADER n'existe pas ou que l'utilisateur qui crée la table n'a pas les privilèges suffisant dessus.
    en tout cas l'utilisateur a les droits car c'est le sysdba
    par contre pour le type oracle_laoder je pense qu'il doit exister car oracle
    me dit bien table cree

  13. #13
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 8
    Par défaut
    bien sûr, le user doit être membre du groupe DBA et évidemment le répertoire doit pouvoir être rempli par ce groupe, on est d'accord
    On est d'accord c'est ce que j'ai fait et puis ca doit pas etre ca le probleme car la table est bien cree

  14. #14
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Citation Envoyé par Fred_D
    bien sûr, le user doit être membre du groupe DBA et évidemment le répertoire doit pouvoir être rempli par ce groupe, on est d'accord
    oui, mais ce n'était pas ça du tout que tu disais :
    Citation Envoyé par Fred_D
    il suffit donc que le répertoire soit en écriture pour le owner de l'instance (ici fred) qui lui-même peut être différent du owner des binaires... CQFD Mr. Green
    (et ça c'est faux !)

    par contre, ça découle de ce que je disais en premier :
    Citation Envoyé par LeoAnderson
    D'un point de vue système, les directories sont accédées par le compte Unix qui possède le binaire oracle...

  15. #15
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Par défaut
    ah les débats d'experts

  16. #16
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par LeoAnderson
    Citation Envoyé par LeoAnderson
    D'un point de vue système, les directories sont accédées par le compte Unix qui possède le binaire oracle...
    ce à quoi je réponds : pas le même compte mais le même groupe que le compte qui posséde les binaires :p

    ce groupe étant dba normalement

  17. #17
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Non, l'accès (R ou W) aux fichiers se fait "en tant que" compte propriétaire de la distribution Oracle.
    Après, que tu décides d'attribuer les permissions au groupe primaire de cet utilisateur, pourquoi pas, mais ce n'est qu'une question de choix de politique OS.

    C'est ora92 qui va écrire.
    Tu n'es pas obligé de donner les permissions à dba. dba n'intervient que parce que tu veux bien que dba entre en compte.

    Mais ce qui est incontournable, c'est que c'est toujours ora92 qui va lire/écrire !!! ;-)

    • "rwx------ ora92 toto" : MARCHE
    • "---rwx--- fred dba" marche pas
    • "rwxrwx--- fred util" marche pas

    et ce, même si l'instance est démarrée par fred et que les processes appartiennent bel et bien à fred !

  18. #18
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    ha bon... au temps pour moi alors

  19. #19
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 8
    Par défaut
    Ca y est le probléme est résolu.

    Il fallait lancer le scipt catproc.sql situe dans le dossier oracle_home/rdbms/admin ce lui qui a du installe ce qui manque .




    Merci,

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/10/2011, 16h44
  2. erreurs Oracle sur table externe
    Par Djene dans le forum Oracle
    Réponses: 3
    Dernier message: 10/10/2011, 16h29
  3. ORA-00942 sur table objet
    Par miniworker dans le forum Import/Export
    Réponses: 1
    Dernier message: 03/08/2010, 11h55
  4. ORA-22905: sur CURSEUR et TABLE (PIPELINED)
    Par miniworker dans le forum SQL
    Réponses: 7
    Dernier message: 10/12/2008, 14h30
  5. Réponses: 1
    Dernier message: 05/09/2007, 10h56

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