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 :

Jointure avec une base Oracle [2014]


Sujet :

Développement SQL Server

  1. #1
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2007
    Messages : 83
    Points : 229
    Points
    229
    Billets dans le blog
    2
    Par défaut Jointure avec une base Oracle
    Bonjour

    J'ai actuellement une base SQL SERVER dont nous complétons les données à l'aide d'une base oracle
    Aujourd'hui ceci est fait de la façon suivante
    A) Lecture base SQL
    B) Pour chaque ligne de la base SQL , lecture base oracle à travers openquery
    C) Maj base SQL
    Ceci fonctionne très bien mais pose un pb de temps réel. (Cette fonction se fait toutes les 5 mn)
    L'idée serait donc de passer par une view mais , à l'essai, les tps de réponse sont catastrophiques (largement sup à 5 mn)

    Table SQL [Locale] => 100 lignes (5 colonnes par ligne)
    Table Oracle [Remote] => 3 000 000 lignes

    View (Créée du cote SQL SERVER)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create view schema.toto as select A.*,B.* from openquery(DBLINK,'select col1,col2 from shema.tblOracle) A right join schema.tblServer B on A.col1 = B.col11
    (col1 possède un index unique défini dans oracle, mais n'est pas la clé primaire)

    select * from schema.toto provoque clairement un full table scan du coté oracle

    Comment puis je faire en sorte que oracle ne parte pas en full table scan ?

    Merci de votre aide

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    La première idée serait de n'aller consulter la base distante que sur les lignes utiles.
    S'il y a une seule colonne à récupérer, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create view schema.toto as select (select col2 from openquery(DBLINK,'select col2 from schema.tblOracle where col1 = ' || col11) as col1, B.* from  schema.tblServer B
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Dans ce cas il faut implémenter un REMOTE JOIN.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT *
    FROM   MaTable_SQLServer INNER REMOTE JOIN MatableOracle ON
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2007
    Messages : 83
    Points : 229
    Points
    229
    Billets dans le blog
    2
    Par défaut Sql Jointure avec base oracle
    Citation Envoyé par al1_24 Voir le message
    La première idée serait de n'aller consulter la base distante que sur les lignes utiles.
    S'il y a une seule colonne à récupérer, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create view schema.toto as select (select col2 from openquery(DBLINK,'select col2 from schema.tblOracle where col1 = ' || col11) as col1, B.* from  schema.tblServer B
    Merci pour votre réponse
    C'est ce que j'ai fait mais le openquery provoque un full table scan
    En effet, si j'ai bien compris le mécanisme, il y a d'abord récup des data sur le remote puis la jointure. Comme le select ne définit pas de where, on ramène l'ensemble de la base ce qui provoque des tps de réponse catastrophiques.

    Cordialement

  5. #5
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2007
    Messages : 83
    Points : 229
    Points
    229
    Billets dans le blog
    2
    Par défaut Sql Jointure avec base oracle
    Citation Envoyé par SQLpro Voir le message
    Dans ce cas il faut implémenter un REMOTE JOIN.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT *
    FROM   MaTable_SQLServer INNER REMOTE JOIN MatableOracle ON
    A +
    Merci mais le pb de l'inner join c'est que la view ne ramènera que ce qui correspond , pas les données SQL SERVER sans correspondance.
    Mais je vais creuser cette piste

    Cordialement


    Edut : Essai fait et ça fonctionne
    Merci beaucoup

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Citation Envoyé par thtioxine Voir le message
    Comment puis je faire en sorte que oracle ne parte pas en full table scan ?
    En ajoutant col2 à l'index sur col1, afin que l'index soit couvrant...

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/11/2009, 11h41
  2. Exemple de connexion avec une base Oracle
    Par zoom61 dans le forum ASP
    Réponses: 10
    Dernier message: 22/01/2009, 14h58
  3. le package"javax.persistence" avec une base oracle
    Par chflb dans le forum NetBeans
    Réponses: 1
    Dernier message: 06/04/2008, 12h08
  4. [FORMS6] : Compatibilité avec une Base Oracle 10g
    Par Nargel33 dans le forum Forms
    Réponses: 3
    Dernier message: 08/02/2008, 17h12
  5. Report 6i avec une base Oracle 10GR2
    Par zaki25 dans le forum Reports
    Réponses: 0
    Dernier message: 26/11/2007, 17h51

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