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

Interfaces de programmation Oracle Discussion :

[OCILIB] Problème d'execution sous AIX


Sujet :

Interfaces de programmation Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Par défaut [OCILIB] Problème d'execution sous AIX
    Bonjour Vincent, voila mon petit soucis.

    J'ai crée un fichier oracle.c avec le code suivant (exemple dans votre doc):

    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
     
    int main(int argc, char* argv[])
    {
      OCI_Connection *cn;
     
      if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
        return EXIT_FAILURE;
     
      cn = OCI_ConnectionCreate("db", "usr", "pwd", OCI_SESSION_DEFAULT);
     
      if (cn != NULL)
      {
        printf(OCI_GetVersionServer(cn));
        printf("Server major version : %i\n", OCI_GetServerMajorVersion(cn));
        printf("Server minor version : %i\n", OCI_GetServerMinorVersion(cn));
        printf("Server revision version : %i\n", OCI_GetServerRevisionVersion(cn));
        printf("Connection version : %i\n", OCI_GetVersionConnection(cn));
        OCI_ConnectionFree(cn);
      }
     
      OCI_Cleanup();
     
      return EXIT_SUCCESS;
    }
    Ma ligne de compilation est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /usr/vacpp/bin/xlC_r -qlanglvl=extc89 -+ -O -g  -I/applis/dsgu/datastage/data/lib/fgu/ocilib-3.1.0/doc_lib/include -DOCI_IMPORT_LINKAGE -DOCI_CHARSET_ANSI -L/produits/oracle/10204/products/lib32 -lclntsh  -L/applis/dsgu/datastage/data/lib/fgu/ocilib-3.1.0/doc_lib/lib -locilib -c oracles.c -o oracles.o
    et 
    /usr/vacpp/bin/xlC_r -qlanglvl=extc89 -G -qmkshrobj=1000 oracles.o -o oracles
    J'ai installé le produit avec les options suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./configure --prefix='/applis/dsgu/datastage/data/lib/fgu/ocilib-3.1.0/doc_lib' '--with-oracle-home=/produits/oracle/10204/products' '--with-oracle-headers-path=/produits/oracle/10204/products/rdbms/public' '--with-oracle-lib-path=/produits/oracle/10204/products/lib32' '--with-oracle-lib64=no' '--with-oracle-lib-path=/produits/oracle/10204/products/lib32'
    A priori tout s'est correctement déroulé.
    Le binaire oracle généré renvoie l'erreur suivante:
    exec(): 0509-036 Cannot load program oracles because of the following errors:
    0509-151 The program does not have an entry point or
    the o_snentry field in the auxiliary header is invalid.
    0509-194 Examine file headers with the 'dump -ohv' command.

    J'ai l'impression que mes lignes de compilations (à l'édition de lien) ne sont pas bonnes.

    Merci pour votre aide.
    Cdt.
    Farid.

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    essaie plutôt ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CC=/usr/vacpp/bin/xlC_r
    OCILIB_HOME=/applis/dsgu/datastage/DATA/lib/fgu/ocilib-.1.0/doc_lib
    ORACLE_HOME=/produits/oracle/10204/products/
    CFLAGS=-qlanglvl=extc89 -O -g -DOCI_IMPORT_LINKAGE -DOCI_CHARSET_ANSI
    INCS=-I$OCILIB_HOME/include
    LDFLAGS=-L$ORACLE_HOME/lib32 -lclntsh  -L$OCILIB_HOME/lib -locilib
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $CC  $CFLAGS $INCS -c oracles.c -o oracles.o
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $CC  $LDFLAGS oracles.o oracles
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Par défaut Nickel
    Vincent, c'est bien la bonne ligne de commande.
    Une toute petite correction :
    $CC $LDFLAGS oracles.o -o oracles
    au lieu de
    $CC $LDFLAGS oracles.o oracles

    Merci pour ta réactivité. Je vais passer aux variables d'environnements et faire des tests de performance (peut etre as tu un avis sur le sujet).

    Cdt.
    Farid.

  4. #4
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    effectivement, petite erreur de copier/coller..lol

    que veux tu savori sur les test de perfs ?
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Par défaut performance
    Vincent,
    Dans le cadre de test avec un outil d'extraction (ETL Datastage) je désire tester le niveau de performance entre les librairies de l'outil et la librairie ocilib.
    Pour cela je peux procéder de différentes facons, créer un binaire ou bien incorporer le code C dans un composant "buildop". Ce type de composant sous Datastage permet d'incorporer du code C/C++ (à ma charge de pouvoir le compiler).
    Sous Datastage je ne peux travailler (dans la version actuelle) qu'en 32 bits.
    Je me demande donc:
    - si un binaire avec ocilib sera plus performant que les composants Datastage.
    - si le passage en 64 bits sera plus performant,
    - qu'apporterais le mode multi thread (indiqué dans ta doc).
    En fait, as tu déja réalisés des benchs avec ocilib ?

    Merci Vincent.
    Cdt.
    Farid.

  6. #6
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Citation Envoyé par farid Guennif Voir le message
    - si un binaire avec ocilib sera plus performant que les composants Datastage.
    je ne connais pas vraiment le produit et les technos sous jacente mais au vu de ce que j'au pu en voir et en raison de son architecture d'ETL, un binaire OCILIB sera plus rapide (pour la partie connectivité Oracle)

    Citation Envoyé par farid Guennif Voir le message
    - si le passage en 64 bits sera plus performant,
    Ca dépend ca peut mais pas forcément. Ca dépend de plein de facteurs.

    Citation Envoyé par farid Guennif Voir le message
    - qu'apporterais le mode multi thread (indiqué dans ta doc).
    Avec une logique applicative appropriée, cela permet de paralléliser les actions sur la DB et gagner sur le temps global de traitement.

    Citation Envoyé par farid Guennif Voir le message
    En fait, as tu déja réalisés des benchs avec ocilib ?
    Oui entre C#, JDBC, OTL, OCILIB et 2 ou 3 autres frameworks mineurs...
    J'ai plus les valeurs des résultats mais OCILIB était le plus rapide notamment sur la partie array interface... ou la OCILIB troue le cul à tous les autres . De plus OCILIB est toujours plus rapide que des libs C++ car celles ci doiivent bufferiser en interne les données pour les transformer en objet C++

    Je suis interessé par les résultats de tes tests
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Par défaut code du binaire
    Vincent voila le code,
    En fait la fonction printf est couteuse..

    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
     
    #include "ocilib.h"
    int main()
    {
      OCI_Connection *cn;
      OCI_Statement *st;
      OCI_Resultset *rs;
     
      int toto;
     
      if (!OCI_Initialize(NULL, NULL, OCI_ENV_THREADED))
        return EXIT_FAILURE;
     
      cn = OCI_ConnectionCreate("ddsgddsg", "dsg", "dsg", OCI_SESSION_DEFAULT);
      st = OCI_StatementCreate(cn);
     
      OCI_ExecuteStmt(st, "select * from farid");
      //OCI_SetPrefetchSize(st,1000000);
      //OCI_SetFetchSize(st,1000000);
     
      rs = OCI_GetResultset(st);
      while (OCI_FetchNext(rs))
        printf("code: %i, name %s\n", OCI_GetInt(rs, 1) , OCI_GetString(rs, 2));
     
      //printf("\n%d row(s) fetched\n", OCI_GetRowCount(rs));
     
      OCI_Cleanup();
     
      return EXIT_SUCCESS;
    }

  8. #8
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut "ddsgddsg", "dsg", "dsg"
    bien sur que printf() est super couteuse .

    Essaie ca et postes l'output de ton prog

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #include "ocilib.h"
     
    int main()
    {
      OCI_Connection *cn;
      OCI_Statement  *st;
      OCI_Resultset  *rs;
     
      clock_t t;
      int n;
     
      if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
        return EXIT_FAILURE;
     
      cn = OCI_ConnectionCreate("ddsgddsg", "dsg", "dsg", OCI_SESSION_DEFAULT);
      st = OCI_StatementCreate(cn);
     
      OCI_SetPrefetchSize(st, 200);
      OCI_SetFetchSize(st, 200);
     
     
      OCI_ExecuteStmt(st, "select * from farid");
     
      t = clock();
     
      rs = OCI_GetResultset(st);
     
      while (OCI_FetchNext(rs))
      {
          /* do nothing */
      }
     
      t = clock() - t;
     
      n = OCI_GetRowCount(rs),
     
      printf("**************** RESULTATS ************************\n");
      printf("Total time : %d seconds\n", (t / CLOCKS_PER_SEC));
      printf("Total rows : %d rows\n", n);
      printf("Row/second : %d \n", (n / (t / CLOCKS_PER_SEC)));
     
      OCI_Cleanup();
     
      return EXIT_SUCCESS;
    }
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Par défaut c'est mieux
    Hi Vincent, voila les résultats (trés agréable):
    **************** RESULTATS ************************
    Total time : 6 seconds
    Total rows : 7185004 rows
    Row/second : 1197500

    Il me faut maintenant passer par l'ETL pour récupérer les colonnes. Pour comparer les résultats, il me faut récupérer les lignes de données. L'outil ETL en plus de récupérer les données fait une validation technique des colonnes (il vérifie le type de la donnée date, char, integer.....).
    Merci pour ton aide sur le sujet...je vais continuer mes tests et te fournirait une synthèse.
    Cdt.
    Farid.

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

Discussions similaires

  1. [XCode] Probléme d'execution sous interface builder
    Par Minos2 dans le forum XCode
    Réponses: 3
    Dernier message: 08/03/2011, 16h39
  2. Réponses: 7
    Dernier message: 18/03/2009, 22h12
  3. Problème de spfile sous AIX
    Par laurentAM dans le forum Administration
    Réponses: 6
    Dernier message: 18/04/2008, 11h14
  4. Problème d'execution sous Firefox2
    Par Griffin_2 dans le forum Langage
    Réponses: 3
    Dernier message: 31/10/2006, 15h26
  5. Problème d'execution c++ sous windows
    Par maxetime dans le forum Windows
    Réponses: 5
    Dernier message: 06/10/2006, 14h39

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