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 :

Utilisation d'une transaction distribuée nécessaire ou non ?


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Janvier 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 70
    Par défaut Utilisation d'une transaction distribuée nécessaire ou non ?
    Bonjour,

    Je m'apprête à écrire plusieurs procédures stockées sur SQL Server qui me permettront de migrer une base de données 2007, vers sa nouvelle version 2008

    Je devrai ensuite à appeller toutes ces procédures stockées depuis C# avec ADO.NET, au sein d'une transaction bien entendu, pour conserver l'intégrité des données en cas d'erreur.

    Mes 2 bases de données en question se trouvent sur le même serveur SQL.

    Dois je passer par une transaction distribuée dans ce cas ou c'est pas la peine puisqu'elles sont sur le même serveur ?

    Car, comme j'instancie la transaction depuis ADO.NET et pas dans la/les procédures stockées, j'hésite à utiliser la classe "TransactionScope" d'ADO.NET ou non. Ca m'arrangerai d'utiliser une simple "Transaction" normale d'ADO.NET pour certaines raisons.

    J'ai lu ceci sur http://msdn.microsoft.com/fr-fr/library/ms191440.aspx :

    "Une transaction exécutée sur une seule instance du Moteur de base de données, mais utilisant plusieurs bases de données, est en réalité une transaction distribuée. Cette instance gère la transaction distribuée de manière interne ; elle apparaît comme une transaction locale pour l'utilisateur."

    Ce qui me laisse sous entendre qu'une transaction "normale" (BEGIN TRANSACTION et pas par exemple BEGIN DISTRIBUTED TRANSACTION) suffirait. Ou bien je sous entend mal ?


    En gros, quand je code en C# avec ADO.NET, j'instanciais jusqu'à maintenant une transaction dans le code C# en faisant un :

    SqlTransaction maTransaction = new maTransaction();

    mais maintenant que j'attaque 2 bases différentes dans mes procédures stockées, est ce que ça va le faire aussi ?

    Ou bien faut que je passe par un TransactionScope :

    using (TransactionScope monScope = new TransactionScope())
    {
    // code SQL
    }

    Ca m'arrangerai de pas utiliser une TransactionScope, car j'ai pas mal d'objet déjà conçu avec des Transactions toute simple dans ma couche d'accès aux données.

    D'avance merci pour toute informations

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Dois je passer par une transaction distribuée dans ce cas ou c'est pas la peine puisqu'elles sont sur le même serveur ?
    Non, car il s'agit bien d'une transaction interne au serveur. La notion de transaction distribuée n'a d'intérêt que d'un serveur à un autre et dans ce cas il faut activer MS DTC sur tous les serveurs, et lier les serveurs qui concourent à ces transactions distribuées.

    Vous feriez mieux de travailler uniquement en procédure stockée et ceci a des fins d'optimisation. En effet lancer ses transactions depuis un client est une aberration qui génère des allongements artificiels de durée des transactions, induit des blocages, conduit à de la contention et augmente la possibilité de survenance des verrous mortels. Bref nuit gravement aux performances !

    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/ * * * * *

  3. #3
    Membre actif
    Inscrit en
    Janvier 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 70
    Par défaut
    Rebonjour,

    merci !

    En effet je vais suivre votre conseil, et donc après réflexion, je vais tout faire dans une seule et même procédure stockée.. et ne pas utiliser de transactions distribuées puisque dans mon cas ce n'est pas nécessaire.

    encore merci

    bonne soirée

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

Discussions similaires

  1. SQLServer 2008 - Identifier une transaction distribuée
    Par jeeps64 dans le forum Administration
    Réponses: 3
    Dernier message: 25/11/2011, 13h39
  2. Conversion du type DATETIME lors d'une transaction distribuée
    Par Erwan1978 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/01/2008, 11h06
  3. Utilisation d'une transaction dans une proc
    Par Sickfrid dans le forum DB2
    Réponses: 1
    Dernier message: 08/03/2007, 11h43
  4. Utilisation d'une transaction sous Mysql 5.0
    Par sanqara dans le forum Administration
    Réponses: 1
    Dernier message: 22/07/2006, 14h37
  5. Utilisation d'une transaction
    Par Bernard M dans le forum Bases de données
    Réponses: 6
    Dernier message: 21/04/2004, 23h31

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