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 :

Erreur exécution Requête non reproductible (L'instruction a été arrêté) [2008]


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 44
    Points : 39
    Points
    39
    Par défaut Erreur exécution Requête non reproductible (L'instruction a été arrêté)
    Bonjour,

    je viens solliciter votre aide sur un problème que je rencontre en production.

    Pour un de nos programmes, nous appelons des procédures stockés depuis vb6 via ADO.

    Depuis 3 jours, le programme plante lors de son exécution programmée (depuis un ordonnanceur) et sql retourne l'erreur suivante:
    "L'instruction a été arrêtée." (erreur -2147217873)
    Par contre, lorsque je relance le programme manuellement, il fonctionne bien. Ce programme tourne en production depuis le mois de juillet sans problème apparent.
    Par contre, j'ai l'impression que le message d'erreur est tronqué donc ça ne m'aide pas à trouver le soucis.


    Après avoir mis des insertions dans une table de suivis, je constate que le programme plante entre les 2 requêtes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    execute('declare @UserIDIS int=isnull((  select userid from '+@serveur+'.'+@baseprod+'.dbo.users where  login=''InterfaceIS'' and UserOrgID='+@orgid+'),1)		
    		;with T As (	select	isnull(A.BaseUnitAssetID,A2.BaseUnitAssetID) as BaseUnitAssetID,e.EmployeeID,E.LocationID,E.DepartmentID,E.AccountId
    							, (select top 1 DateJour from zIndicateurCalendrier where Ouvre=1 and DateJour>db.shipmentdate) as dateIntervention,isnull(a.LineType,a2.linetype) as LineType,S.orgId ,S.swapIDAUto,S.ordernumber,da.orderlineid
    						from T_IS_DOTATION D
    							join ' +@serveur+'.'+@baseProd+'.dbo.zswap S on S.swapIDAUto=D.ticketnumber and S.orgId ='+@orgid+'
    							join T_IS_DOTATION_bl DB on DB.IS_DOTATIONid=D.IS_DOTATIONid
    								join T_IS_DOTATION_asset DA on DA.IS_DOTATION_BLid=DB.IS_DOTATION_BLid
    									join ' +@serveur+'.'+@baseProd+'.dbo.Employee E on E.Code=DA.codeDestinataire and E.OrgID ='+@orgid+'
    									left join ' +@serveur+'.'+@baseProd+'.dbo.Asset a on a.OrgID ='+@orgid+' and a.SerialNumber=DA.serialnumber
    										left join ' +@serveur+'.'+@baseProd+'.dbo.asset A2 on A2.SerialNumber=right(DA.serialnumber,8) and A2.OrgID=648 and A.assetid is null
    						where D.a_traiter=1
    						and DB.a_traiter=1
    						and DA.a_traiter=1	
    						and da.serialnumber<>	''''
    						and D.ticketnumber='+@swapid	+'	
    						and D.nomfic='''+@nomfic+'''
    						and (A.assetid is not NULL	or a2.assetid is not null)	
    					)  
    		-----------------------------------------
    		insert into ' +@serveur+'.'+@baseProd+'.dbo.zStockAssetAffectes 
    										(buAssetId, cmdUserOrderLineId, employeeId, customerRef, customerRef2, reference1, locationId, departmentId, accountId, cmdUserOrderNumber, retourStockDate, retourStockMode
    										,retourStockUserId, affectedByUserId, affectedDate, lineType, buMasterCible, orgid,swapidauto,RetourStockSwapidAuto,affectedByUserId)
    		select	T.BaseUnitAssetID		as buAssetId	
    				,t.orderlineid			as cmdUserOrderLineId	
    				,t.employeeid			as employeeid	
    				,null					as customerRef	
    				,null					as customerRef2	
    				,null					as reference1	
    				,t.locationid			as locationid
    				,t.departmentid			as departmentid
    				,t.accountid			as accountid
    				,t.ordernumber			as cmdUserOrderNumber	
    				,null					as retourStockDate	
    				,null					as retourStockMode	
    				,null					as retourStockUserId	
    				,null					as affectedByUserId	
    				,T.dateIntervention		as affectedDate	
    				,T.linetype				as lineType	
    				,null					as buMasterCible	
    				,T.orgId				as orgid	
    				,T.swapIDAUto			as swapIDauto
    				,null					as RetourStockSwapidAuto
    				,@UserIDIS				as affectedByUserId
    		from  T
    		')
     
    --------------------------------------------------------------------------------------------------------------
    --												Non serialisé												--
    --------------------------------------------------------------------------------------------------------------		
    		execute('declare @UserIDIS int=isnull((  select userid from '+@serveur+'.'+@baseprod+'.dbo.users where  login=''InterfaceIS'' and UserOrgID='+@orgid+'),1)
    					;with  T_MIT as	(
    										select S.code as stock,case		when '''+@Itemstock+''' =''itemclass''	then A.ItemClass
    																		when '''+@Itemstock+''' =''itemcategory'' then A.itemcategory
    																		when '''+@Itemstock+''' =''iteminfo''		then A.iteminfo
    																		when '''+@Itemstock+''' =''itemtype''		then A.itemtype
    																end as ItemStock
    												,A.DiscoveryLink,A.ProductCode,A.SerialNumber,A.LineType,A.BaseUnitAssetID
    												,ROW_NUMBER() over (PARTITION by  S.Code,A.ItemClass,A.ProductCode order by S.code,A.ItemClass,A.ProductCode ) num
    										from ' +@serveur+'.'+@baseProd+'.dbo.asset A
    											join ' +@serveur+'.'+@baseProd+'.dbo.AssetAccountCharge aac on aac.AssetID=a.AssetID
    												join ' +@serveur+'.'+@baseProd+'.dbo.Account acc on acc.AccountID=aac.AccountID
    													 join ' +@serveur+'.'+@baseProd+'.dbo.Stock S on S.accountId =acc.AccountID
    										where A.orgid ='+@orgid+'
     
    																			)
    					,T_IS	as		(
    										select	e.EmployeeID,E.LocationID,E.DepartmentID,E.AccountId, (select top 1 DateJour from zIndicateurCalendrier where Ouvre=1 and DateJour>db.shipmentdate)  as dateIntervention,S.orgId ,S.swapIDAUto,DA.codeproduct,D.codestock,DA.itemstock
    												,ROW_NUMBER() over (PARTITION by  D.codestock,DA.itemstock,DA.codeproduct order by D.codestock,DA.itemstock,DA.codeproduct  ) num
    												,s.ordernumber,da.orderlineid
    										from T_IS_DOTATION D
    											join  ' +@serveur+'.'+@baseProd+'.dbo.zswap S on S.swapIDAUto=D.ticketnumber and S.orgId ='+@orgid+'
    											join T_IS_DOTATION_bl DB on DB.IS_DOTATIONid=D.IS_DOTATIONid
    												join T_IS_DOTATION_asset DA on DA.IS_DOTATION_BLid=DB.IS_DOTATION_BLid
    													join  ' +@serveur+'.'+@baseProd+'.dbo.Employee E on E.Code=DA.codeDestinataire and E.OrgID ='+@orgid+'
    										where D.a_traiter=1
    										and DB.a_traiter=1
    										and DA.a_traiter=1	
    										and da.serialnumber=''''
    										and D.ticketnumber='+@swapid+'
    										and D.nomfic='''+@nomfic+'''
     
     
    									)				
    					,T As			(	
    										select	T_MIT.BaseUnitAssetID,T_IS.EmployeeID,T_IS.LocationID,T_IS.DepartmentID,T_IS.AccountId, T_IS.dateIntervention,T_MIT.LineType,T_IS.orgId ,T_IS.swapIDAUto,t_is.ordernumber,t_is.orderlineid
    										from T_IS
    											join T_MIT on T_IS.codeproduct=T_MIT.ProductCode  and T_IS.codestock=T_MIT.stock and T_IS.itemstock=T_MIT.ItemStock and T_IS.num=T_MIT.num
    									)  
    		-------------------------------------------------------
    		insert into ' +@serveur+'.'+@baseProd+'.dbo.zStockAssetAffectes 
    										(buAssetId, cmdUserOrderLineId, employeeId, customerRef, customerRef2, reference1, locationId, departmentId, accountId, cmdUserOrderNumber, retourStockDate, retourStockMode
    										,retourStockUserId, affectedByUserId, affectedDate, lineType, buMasterCible, orgid,swapidauto,RetourStockSwapidAuto,affectedByUserId)
    		select	T.BaseUnitAssetID		as buAssetId	
    				,T.orderlineid			as cmdUserOrderLineId	
    				,t.employeeid			as employeeid	
    				,null					as customerRef	
    				,null					as customerRef2	
    				,null					as reference1	
    				,t.locationid			as locationid
    				,t.departmentid			as departmentid
    				,t.accountid			as accountid
    				,t.ordernumber			as cmdUserOrderNumber	
    				,null					as retourStockDate	
    				,null					as retourStockMode	
    				,null					as retourStockUserId	
    				,null					as affectedByUserId	
    				,T.dateIntervention		as affectedDate	
    				,T.linetype				as lineType	
    				,null					as buMasterCible	
    				,T.orgId				as orgid	
    				,T.swapIDAUto			as swapIDauto
    				,null					as RetourStockSwapidAuto
    				,@UserIDIS				as affectedByUserId
    		from  T
    				')
    Sur les 2 premiers plantages, la premiere requete s'est executé completement 2 fois (les lignes ont été inserés dans la table zStockAssetAffectes) et j'ai l'impression que la 2e n'a jamais été exécuté.
    Sur le dernier plantage, la premiere requete a été appellé mais les lignes n'ont pas été inserées.

    Cette procédure est exécutée sur une base "centrale" et créée des lignes sur des bases distantes par serveurs liés.

    Déja, si vous avez des pistes, je suis preneur.

    Sinon, je pensais mettre en place une trace avec sqlserver profiler pour avoir plus de détails et peut être identifier le soucis.
    Pourriez vous m'indiquer les evenements que je dois surveiller? Comme le traitement tourne une fois par jour et qu'il a déja planté plusieurs fois, j'aimerais eviter de devoir refaire ma trace plusieurs fois car je n'ai pas sélectionné les bons événements.

    Merci d'avance pour vos retours.

    Cdt.

  2. #2
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Citation Envoyé par Badplayer1603 Voir le message
    Sinon, je pensais mettre en place une trace avec sqlserver profiler pour avoir plus de détails et peut être identifier le soucis.
    Pourriez vous m'indiquer les evenements que je dois surveiller? Comme le traitement tourne une fois par jour et qu'il a déja planté plusieurs fois, j'aimerais eviter de devoir refaire ma trace plusieurs fois car je n'ai pas sélectionné les bons événements.
    Bonjour,

    c'est peut-être la meilleure solution en première approche. Tu lances ta trace avant le démarrage, tu l'arrêtes après (tu peux planifier le démarrage de la trace si elle est définie dans SQL Server et pas dans le profiler), et tu récupères les évènements
    SQL:StmtStarting
    SQL:StmtStarting
    Errors and Warnings / exception

    pour voir l'exception qui va être envoyée entre un starting et un completed.
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 44
    Points : 39
    Points
    39
    Par défaut
    Merci pour votre retour, je vais donc partir sur cette trace.
    Pour contre, dois je mettre la trace sur la base centrale ou sur la base distante?

    Cdt.

  4. #4
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    ah, je n'avais pas vu que tu passais par un serveur lié. ça peut être un problème de déconnexion de serveur lié, c'est une "technologie" délicate, pour rester poli.
    sur les deux si possible.
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 44
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    j'ai trouvé l'origine du problème, il y avait une mauvaise interprétation de ma part.
    L'insertion créait un doublon dans la table. En regardant dans la table après le plantage, je pensais que le programme avait planté après l'insertion et donc je supprimais les lignes pour relancer le traitement. alors qu'elles étaient dans la table avant le traitement.
    le message d'erreur est masqué car sur le serveur central, j'ai le message d'erreur sous la forme suivante:
    L'instruction a été arrêtée.
    Msg*2627, Niveau*14, État*1, Ligne*1
    Violation de la contrainte PRIMARY KEY 'PK_zStockAssetAffect'. Impossible d'insérer une clé en double dans l'objet 'dbo.zStockAssetAffectes'. La valeur de clé dupliquée est (546234, 0, 0, 5269).
    et vb ne récupère que la première ligne de l'erreur.

    par contre, sur le serveur distant, les erreurs sont sous la forme:
    Msg*2627, Niveau*14, État*1, Ligne*1
    Violation de la contrainte PRIMARY KEY 'PK_zStockAssetAffect'. Impossible d'insérer une clé en double dans l'objet 'dbo.zStockAssetAffectes'. La valeur de clé dupliquée est (546234, 0, 0, 5269).
    L'instruction a été arrêtée.
    Est il possible d'harmoniser cela?

    Sinon, je n'ai pas réussi à utiliser les traces pour identifier mon problème.
    j'ai mis les evts StmtStarting et toutes les erreurs/Warning dispos et quand j’exécute ma requête d'insertion sur la table du serveur distant à partir du serveur central, je ne vois pas les erreurs ni sur la trace du serveur local ni sur le serveur distant.
    Par contre, si j’exécute directement la requête sur le serveur distant, je retrouve les erreurs.

    y a t il un paramétrage particulier à faire pour visualiser les erreurs d'une requête faite sur un serveur lié sur la trace du serveur central?

    Cdt.

  6. #6
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Citation Envoyé par Badplayer1603 Voir le message
    y a t il un paramétrage particulier à faire pour visualiser les erreurs d'une requête faite sur un serveur lié sur la trace du serveur central?
    Non, l'exception que tu as indiquée doit apparaître dans la trace, sous forme d'événement exception.
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 44
    Points : 39
    Points
    39
    Par défaut
    Étrange. Il y a quelque chose que je dois mal faire car j'ai les indications de début et de fin de requête mais pas les erreurs liées...

    En tous cas, merci pour votre temps.

    Ayant trouvé l'origine de mon problème, je passe le sujet en résolu.

    Cdt.

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

Discussions similaires

  1. Erreur exécution requête
    Par thx5959 dans le forum Adaptive Server Enterprise
    Réponses: 2
    Dernier message: 07/10/2009, 15h36
  2. Message d'erreur exécution requête
    Par GO dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/07/2008, 11h18
  3. Erreur exécution requête
    Par jfphan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/07/2008, 13h32
  4. [WD11] Erreur Exécution requête
    Par arnaud_verlaine dans le forum WinDev
    Réponses: 2
    Dernier message: 06/02/2007, 11h34
  5. erreur exécution requête
    Par MANU_2 dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/10/2005, 07h27

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