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

Développement SQL Server Discussion :

requete sur serveur lié oracle


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 87
    Points : 66
    Points
    66
    Par défaut requete sur serveur lié oracle
    Bonjour a tous,

    Je voudrais executer une requete a patir de sql server 2000 afin de ramener des données d'une base oracle.

    cela se fait par l'intermédiaire d'un serveur lié que j'ai créer et qui marche trés bien.

    j'arrive à faire des requete avec openquery mais je ne veux pas utiliser openquery car openquery ne prend pas de variables en parametres. c'est a dire que la requete qu'on passe à openquery est statique. Or ma requete est dynamique, je ne peux donc utiliser openquery.

    je doit alors passer par : select ... from server.database.schema_name.object_name

    seulement je ne sais pas quoi mettre pour database et pour schema.

    j'ai vu sur des sites que ces infos se retrouvent dans la config du serveur lié, seulement moi je n'ai rentré que : nom du produit, source de données et chaine du fournisseurs (MSDAORA).

    Si quelqun en sait d'avantage, je le remercie d'avance.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut serveur lie.
    pour database... tu dois mettre le nom de la base oracle.
    pour schéma... tu dois mettre l'utilisateur principale de la base... en sql serveur, ce serait dbo, renseigne toi sur le forum oracle pour savoir l'équivalent de dbo...

    bon courage

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 87
    Points : 66
    Points
    66
    Par défaut
    Merci pour ta réponse ylarvor,

    j'ai essayé avec un nom de base que je pense etre bon mais cela n'a pas marché.

    Ces informations sont elles stockées en base ?
    Ya t'il un moyen (requête) afin de les retrouver ?

    En fait ce qu'il faut c'est le catalogue OLE DB et le schema OLE DB
    Merci.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    bonjour,

    normalement, avec MSDAORA il n'y a pas de problème pour faire que ce tu demandes :

    Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(*) from INSTANCE..SCHEMA.TABLE
    (INSTANCE = nom de ton serveur lié)

    Attention à la casse du SCHEMA et de la TABLE, en majuscules par défaut (lorsqu'on n'utilise pas la casse du serveur distant)

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 87
    Points : 66
    Points
    66
    Par défaut
    salut,

    merci kagemaru,

    le problème est que je n'ai pas le schema.

    où peut-on trouver cette information ?

    merci.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    il faut vous renseigner auprès des propriétaires de la base Oracle pour qu'ils vous fournissent le nom.

    Mais normalement, dans Entrerprise Mgr, il suffit de cliquer sur le serveur lié et la liste des objets Oracle est affiché, avec le schema.

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 87
    Points : 66
    Points
    66
    Par défaut
    Salut,

    Effectivement KAgemaru, on trouve bien le schema là où tu m'a indiqué.

    c'est donc bon pour le schema.

    seulement maintenant j'ai une autre erreur amis qui me semble bien plus complexe.

    je la met au cas où quelqun l'a déja surmonté:

    lorsque j'execute la simple requête : "select count(*) from instance..schema.matable" l'analyseur de requête refléchis une vingtaine de seconde et me crache :

    Serveur*: Msg 7356, Niveau 16, État 1, Ligne 1
    Le fournisseur OLE DB 'MSDAORA' a fourni une métadonnée incohérente pour la colonne. Les informations sur la métadonnée ont été changées au moment de l'exécution.
    Trace de l'erreur OLE DB [Non-interface error: Column 'CONTROL_TOTAL' (compile-time ordinal 23) of object '"schema"."matable"' was reported to have a DBTYPE of 130 at compile time and 5 at run time].

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    bonjour,

    Il semble que ce soit lié à un problème de conversion de types entre SQL Server et Oracle.

    Vous devriez essayer d'installer le provider OLEDB d'Oracle et l'essayer à la place du MSDAORA de Microsoft.

    Sinon passez en openquery .... mais bon c'est apparemment ce que vous voulez éviter. Tout de même, attention aux requêtes directes (sans openquery), les performances sont souvent mauvaises, SQL Server faisant transiter toutes les données pour pouvoir faire ses jointures et autre.... Eviter les manipulations de gros ensembles de données distants de cette manière.

  9. #9
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 87
    Points : 66
    Points
    66
    Par défaut
    salut,

    Merci kamegaru pour toutes tes réponses.

    La dernière indication est capitale pour moi.

    En effet je comptait faire des requêtes direct (sans openquery) sur un lot de données assez important.

    Du coup, je crois que je vais tous de même utiliser openquery pour faire un select global, en essayant de restreindre le max de données statiquement, puis pour la restriction dynamique, je la ferais en dehors du openquery.

    Juste une dernière question :

    lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into matable (col1, col2, col3, etc...) 
    select col1, col2, col3, etc ... 
    from openquery (instance, 'select col1, col2, col3, etc.... from table_distante') 
    where col1= ... and col2=... and col3=... and etc ....
    est ce que sql server va créer une table temporaire dans la machine du serveur sql server dans laquelle il va stocker le resultat de l'openquery et aprés il va selectionner les données qui répondent à la clause where ?

    ou est ce qu'il va rappatrié uniquement les données que je vais inserer (donc les données répondant aux restriction de la clause where)

    Je demande ça parceque j'ai peur d'avoir des problèmes de dépassement de capacité vis a vis de sql server

    en tout cas merci beaucoup pour ton aide kagemaru

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    ça revient à rapatrier toutes les données quand même, il vaudrait mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO matable (col1, col2, col3, etc...) 
    SELECT col1, col2, col3, etc ... 
    FROM openquery (instance, 'select col1, col2, col3, etc.... from table_distante
    WHERE col1= ... AND col2=... AND col3=... AND etc ....')
    mais apparemment faut que cela reste dynamique...
    donc tu pourrais essayer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    exec ('INSERT INTO matable (col1, col2, col3, etc...) 
    SELECT col1, col2, col3, etc ... 
    FROM openquery (instance, ''select col1, col2, col3, etc.... from table_distante
    WHERE col1= ... AND col2=... AND col3=... AND etc ....'')
    et à ce moment là tu écris ta clause WHERE comme tu le sens.

  11. #11
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 87
    Points : 66
    Points
    66
    Par défaut
    Salut,

    Le sujet est maintenant résolu et par la même clôt .

    Il faut utiliser le provider OLE DB d'ORACLE !

    Ne pas oublier de cocher la case "autoriser in process" (allow in process pour la version anglaise) dans les options du serveur lié lors de sa création.

    L'utilisation d'un exec afin de dynamiser la requête est la meilleure solution.

    Merci Kagemaru.

    A+

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

Discussions similaires

  1. Requête sur serveur lié
    Par jocou dans le forum Développement
    Réponses: 14
    Dernier message: 08/07/2019, 16h51
  2. Procédure stockée locale requetant sur serveur lié
    Par dily0403 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 03/05/2012, 16h49
  3. requete sur serveur lié oracle
    Par funboard dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 14/01/2008, 13h37
  4. Réponses: 2
    Dernier message: 10/01/2008, 03h24
  5. Procédure stockée locale requetant sur serveur lié
    Par dily0403 dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 14/11/2007, 15h54

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