HomeHomeTechniqueTechniqueDéveloppement S...Développement S...Sérialisation du code dans SQL serverSérialisation du code dans SQL server
Précédente
 
Suivante
Nouveau message
06/10/2008 17:17
 

Bonjour,

Je vous décris très rapidement mon problème :

J'ai une procédure qui crée une nouvelle table, qui le remplie avec des données et à la fin il supprime la table qui est en production et renomme la table que je viens de créé par le nom de la table de production.

Cette procédure peut être exécutée plusieurs fois (simultanément avec les mêmes paramètres). Pour chaque exécution le nom de table temporaire est unique mais pas le nom de la table de production.

Donc j'ai un conflit lors d'exécution simultané.

Malgré différents méthodes que j'utilise j'ai toujours environs 50% d'erreur.

Voici le code (j'utilise du SQL dynamique car le nom des tables ne sont pas fixe):

  select @sql = ' SET TRANSACTION ISOLATION LEVEL SERIALIZABLE 
 Begin transaction 
 If OBJECT_ID('''+@TableProd+''') is not null 
 begin
  Update '+@TableProd+' set Col_Criteria_Sys = null where 1=2 
  DROP TABLE '+@TableProd  +'
 end
 exec sp_rename N'''+@TableTemp+''', N'''+@TableProd+'''
 Commit '
  exec(@sql)

  Voici le message d'erreur :

" Erreur : la valeur @newname 't_C177' est déjà utilisée en tant que nom object et provoquera une duplication qui n'est pas autorisée "

 Merci de votre aide.

 Sami.

 
Nouveau message
31/10/2008 10:49
 

Bonjour,

Pas tout compris néanmoins pourquoi ne pas créer une table temporaire (#table) ???

 
Nouveau message
12/11/2008 16:48
 

Bonjour,

Merci pour votre réponse.

L'idée est remplacer les données d'un table critique.

Si je vide la table de prod et je rempli avec les nouvelles données, cela prend du temps et pendant ce temps ma table n'est plus disponible. Par contre supprimer la table et de renomme un autre est très rapide.

Pour cela je calcul les nouvelles données dans une table temporaire, je supprime la table de prod et je renomme la table temporaire par le nom de la table de prod. (Il n'est pas possible de rende persistant une table de type #??? dans la base en cours)

 Donc ma question : comment supprimé et recréer une table de production et durant cette opération assurer que les autres processus qui essaies d'accédé a cette table attendre et ils ne génèrent pas des erreurs (de type objet non trouvé pas exemple). 

Cordialement

 
Nouveau message
16/01/2009 15:37
 

Pourquoi voulez-vous renommer une table ? Ceci n'a aucun intérêt... Vous pouvez utiliser une vue ou un synonyme.

Les règles de l'art imposent d'ailleurs l'utilisation systématique des vues dans les accès applicatifs aux bases de données, ce qui simplifie ce genre de problèmes.

A +

Frédéric BROUARD, Spécialiste modélisation, bases de données, optimisation, langage SQL.
Le site sur le langage SQL et les S.G.B.D. relationnels : http://sqlpro.developpez.com/
Expert SQL Server http://www.sqlspot.com : audit, optimisation, tuning, formation
* * * * * Enseignant au CNAM PACA et à l'ISEN à Toulon * * * * *

 
Nouveau message
04/02/2009 17:06
 

 Utilisation des vues ne change rien à mon problème. A un instant t j'ai besoin de remettre à jour les données des tables.

 Pour simplifier les choses, oublions tous. Comment je peux résoudre cet exercice :

 Voici le code:

 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE 
 Begin transaction  
    delete from Table1
    Insert into Table1 (COl1) select COL1 from Table2
  commit

 Dans l'analyseur de requête j'exécute ce code sans la dernière ligne (Commit).

 Dans deux autres sessions j'exécute le code complet. (Ils attendent le commit de la première session -> normal).

 Dans la premier session j'exécute le commit et je vérifie le résultat des autres sessions. Une des sessions se termine correctement, alors que la dernière génère une erreur. (La transaction (ID de processus XX) a été bloquée sur les ressources verrou par un autre processus et a été choisie comme victime. Réexécutez la transaction.)

 Cet exercice fonction avec deux exécutions en parallèle. Et avec un Truncate table a la place d'un delete fonctionne également.

 Merci pour votre aide.

 
Précédente
 
Suivante
HomeHomeTechniqueTechniqueDéveloppement S...Développement S...Sérialisation du code dans SQL serverSérialisation du code dans SQL server