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

MS SQL Server Discussion :

Mettre à jour une base distante


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Mettre à jour une base distante
    Bonjour,

    Je souhaiterais synchroniser de manière récurrentes plusieurs champs entre deux bases SQL server 2005 distantes. A priori pas de souci pour la requète
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE PRODUIT_DISTANT 
    SET STOCK_BASE_DISTANTE = 
    (select CHAMP_STOCK_LOCAL 
    from db.MABASE.MATABLE 
    where REF_PRODUIT_LOCAL = PRODUITS.REF_PRODUIT_DISTANT)
    par contre je ne sais pas comment lancer de manière récurrente cette requète. Est-ce une fonction disponible via Management studio ?

    D'avance merci pour votre aide.

    Frédéric

  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
    par contre je ne sais pas comment lancer de manière récurrente cette requète
    je comprends que vous voulez exécuter cette requète de façon cyclique dans le temps ? est ce cela ?

    pour faire cela, on utilise l'agent sql serveur en créant un job avec un scheduling.

    Je souhaiterais synchroniser de manière récurrentes plusieurs champs entre deux bases SQL server 2005 distantes. A priori pas de souci pour la requète
    Il existe la réplication, mais je vous confirme que cela demande des compétences avancées d'administrateur.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    je comprends que vous voulez exécuter cette requète de façon cyclique dans le temps ? est ce cela ?
    Oui absolument, je souhaite mettre à jour une stock toutes les 10 minutes et surement d'autres informations toutes les heures.

    Autrement dit je créé la requète est l'exécute avec un Agent Sql, je vais regarder mais à priori c'est ok.

    Par contre je ne vois pas comment me connecter à la base distante, je dois entrer la connexion dans la requète ?

    Merci.

  4. #4
    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 problematique d'un serveur lié.
    Je ne suis pas expert des bases distantes mais en principe, on utilise un serveur lié.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Il n'existe pas une fonction me permettant de spécifier un serveur et une base distante depuis Management studio ou un autre module de SQL server ?

    Encore merci, mais vraiment je vois pas comment faire.

  6. #6
    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 management studio \ objet serveur \ serveur lié.
    1 - Vous devez créé un serveur lié.
    ci joint un exemple pour oracle, pour sql serveur, c'est encore plus facile
    http://www.loicbar.com/post/Interope...ver-2005).aspx
    2 - Vous indiquer le nom du serveur lié dans la requete.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,

    J'ai donc créé un serveur lié (SQL), là pas de souci, sauf que pour visualiser les tables j'ai renseigné en nom du serveur l'adresse IP. La connection s'effectue correctement la dessus pas de souci.

    Par contre ma requete genere une erreur :

    select *
    from openquery (100.100.100.100 , 'select stock from products')

    Ligne 2 : syntaxe incorrecte vers '100.100.100.100'

    Ce qui me semble logique. J'imagine qu'il faut associé au serveur lié un nom "d'usage". Je n'ai pas trouvé la solution.

    En vous remerciant par avance...

    Frédéric

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 240
    Points : 210
    Points
    210
    Par défaut
    Laisse tomber la commande OPENQUERY
    Et donne un nom à ton serveur lié, plutôt qu'une IP

    Essaie ceci :

    SELECT stock FROM NomDuServeurLié.NomDB.dbo.products

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    J'y ai bien pensé mais si je remplace l'IP par un nom la connexion ne s'effectue plus...

    Ok pour open query.

    Pour info j'ai créé un serveur lié dans Entreprise Manager comme suit :

    Sécurité -> Serveurs liés -> Nouveau serveur lié

    Dans "serveur lié" j'ai précisé l'IP, seule manière (mais je ne connais que celle là) après validation de ne pas avoir d'erreur de connexion. En précisant l'IP est les bons identifiants j'accède bien aux tables de la base distante.

    Il y a surement une autre solution mais je vois pas...

    Encore merci.

    Frédéric

  10. #10
    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
    par hasard, tu peux essayer de mettre [] autours ou "" autours.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    OK !

    J'ai trouvé, merci à vous deux. Pour ceux que ça interresse et qui comme moi bloque sur un détail.

    A l'ajout d'un serveur lié, nommez le comme vous voulez, c'est ce nom que nous appelerons dans la requête, choisissez "Autres sources de données", puis ajoutez l'IP du serveur distant dans le champ "source de données" (nom réseau).

    Dans l'onglet "sécurité", ajoutez les informations de connexion (login/password SQL). Validez c'est tout !

    Du coup j'ai créé la requête, et comme me l'expliquait Philippe, oubliez "OpenQuery".

    Voilà mon exemple pour une mise à jour du serveur distant (lié) :

    UPDATE NOM_SERVEURLIE.base_de_donnees.dbo.table
    SET CHAMP_distant = CHAMP_local
    FROM MABASE_locale.dbo.table
    WHERE CHAMP_A_COMPARE_DISTANT = CHAMP_A_COMPARE_DISTANT
    COLLATE LATIN1_GENERAL_BIN

    dbo = proprietaire de la base
    Collate = Je ne suis pas un expert (vous l'aurez compris ) mais dans le cas ou les champs ne possèdent pas le meme jeux de caractere l'instruction est obligatoire. Les pro me confirmeront ou pas

    Vous créé un petit job planifié et vos bases sont synchronisée !

    Enorme merci à Ylarvor et Philippe !

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 240
    Points : 210
    Points
    210
    Par défaut
    L'avantage avec cette requête c'est que tu peux passer des paramètres (clause WHERE), ce qui n'est pas le cas avec l'instruction OPENQUERY.

    Mais, il faut faire attention à cet exemple.

    Supposons que tu a deux serveurs, nommons-les Serveur1 et Serveur2.
    Sur Serveur1, tu crées un serveur lié vers Serveur2

    Maintenant, tu fais une requête sur Serveur1 pour aller chercher des données sur Serveur2.

    SELECT * FROM Serveur2.MaBase.dbo.MaTable WHERE MaColonne = 1

    Pas de problème.

    Si tu fais ceci :

    DECLARE @MaVariable as int
    SET @MaVariable = 1
    SELECT * FROM Serveur2.MaBase.dbo.MaTable WHERE MaColonne = @MaVariable

    Pas de problème à priori, le résultat sera le même, mais le temps d'exécution sera plus lent. Pourquoi ? Parce que Serveur1 va ramener le contenu de la table de Serveur2 dans son cache, et puis seulement comparer MaColonne avec la variable @MaVariable.

    Tandis que dans le premier cas, la requête sans variable sera envoyée à Serveur2 pour exécution.

    Dans le deuxième cas, le mieux sera de créer une procédure stockée sur Serveur2 et l'éxécuter sur Serveur1 comme ceçi :

    EXEC Serveur2.MaBase.dbo.MaProcedure @MaVariable.

    En ce qui concerne les autres types de bases de données que tu peux lier, çà fonctionnera bien avec AS400/DB2 et Oracle.

    Si mes souvenirs sont bons, j'ai eu des difficultés avec Firebird, où je n'ai pas eu le choix de passer via OPENQUERY.

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

Discussions similaires

  1. comment mettre à jours une base (*.mdb) distante
    Par dj_techno dans le forum Dreamweaver
    Réponses: 0
    Dernier message: 06/06/2008, 16h54
  2. Mettre à jour une base via un tableau HTM
    Par basketime dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/03/2007, 15h18
  3. Réponses: 1
    Dernier message: 15/09/2006, 11h24
  4. [SQL SERVER] Mettre à jour une base de donnée
    Par grellierj dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 24/05/2006, 11h33
  5. Mettre à jour une base sous SQL SERVER 2000
    Par FilipeVV dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 11/02/2005, 12h24

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