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 :

ALTER PROCEDURE fait planter SQL server 2005


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 28
    Par défaut ALTER PROCEDURE fait planter SQL server 2005
    Bonjour,

    J'ai actuellement un problème de plantage server lorsque je fait un alter procedure sur une de mes procédure stockée.
    En gros voici la requete:

    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
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
    -- =============================================
    -- Author:		Grifos
    -- Create date: 06/05/2009
    -- Description:	Une proc de generation de rapport
    -- =============================================
    ALTER PROCEDURE [dbo].[ps_Rapport_4] 
    	@MODE AS VARCHAR(20),		-- Mois ou Hebdomadaire
    	@YEAR AS INT,				-- Année où regarder
    	@START_DATE AS INT			-- Semaine où mois à analyser
    AS
    BEGIN
     
    -- Table temporaire qui va servir à stocker les informations nécessaire à la génération du rapport
    DECLARE @TEMP AS TABLE	(
    				Info_1 varchar(20) DEFAULT 'rien',
    				Info_2 varchar(20) DEFAULT 'rien',
    				Info_3 varchar(20) DEFAULT 'rien'
    )
     
    INSERT INTO @TEMP (Info_1, Info_2, Info_3)
    VALUES('toto','titi','tata')
    .
    .
    .
    INSERT INTO @TEMP (Info_1, Info_2, Info_3)
    VALUES('toto4','titi4','tata4')
     
    SELECT * FROM @TEMP
    En réalité elle est un peu plus fournie (environ 1000 lignes de longueurs variable).

    Donc depuis que la procédure à atteinte une certaine taille (700 lignes), elle se met à joué des sienne quand je fais un alter procedure (juste rajouter quelque lignes à la procédure), c'est à dire que des fois elle passe comme une lettre à la poste, et une autre fois (pour la même modification), l' ALTER PROCEDURE va s'exécuter indéfiniment sans jamais me renvoyer un message: procedure executed successfuly
    ou un message d'erreur. De plus quand je regarde les ressource que la requête alter prend au niveau du server pour cette procédure, je vois qu'elle ne consomme rien (le cpu time reste figé à la même valeur qu'il se soit écoulé 1minute ou 7 minutes). Et quand je tente de l'annuler, ça tourne toujours dans le vide (quand je dis que ça tourne c'est que sql server manager ne m'affiche aucun message à part la petite animation de cercle vert qui tourne).
    Tout cela à pour conséquence d'empêcher toute nouvelle connexion avec sql manager et entraine de devoir redémarrer sql server. Le server dis qu'il est busy.
    Par contre pour les personnes déjà connectées, elles peuvent toujours effectuer des requêtes.

    J'aimerai donc savoir si c'est un bug connu et si il existe un patch. Car je n'arrive pas à trouvé d'explication sur le web. Ou si cela viens d'autre part.

    Cordialement

  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 002
    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 002
    Billets dans le blog
    6
    Par défaut
    1) Si le volume des données de la variable table est important, remplacez le avec une table temporaire. En effet une variable table ne peut pas être muni d'index ni de stats alors qu'une table temporaire le peut.
    2) il serait plus astucieux d'externaliser le chargement de votre table par un fichier texte contenant les données et la commande BULK INSERT. cela irait beaucoup plus vite et déchargerait beaucoup la proc.

    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 averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 28
    Par défaut
    Merci pour cette réponse, mais le problème n'a pas l'air de venir de là.
    Je tiens à préciser que ça plante lors de l'ALTER PROCEDURE et non au niveau de l'éxecuction.
    Il semblerait en effet que ce soit un problème des commentaires.
    J'avais lors de ma déclaration de table temporaire mis des commentaires de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DECLARE @TEMP AS TABLE	(
    				-- commentaire 1
    				Info_1 varchar(20) DEFAULT 'rien',
    				-- commentaire 2
    				Info_2 varchar(20) DEFAULT 'rien',
    				-- commentaire 3
    				Info_3 varchar(20) DEFAULT 'rien'
    )
    Et il semblerait que sql server capte mal le retour chariot.
    Il suffirait donc juste de changer les commentaire -- par le couple /* */
    Je vais effectuer des test plus approfondie pour vérifier que ce n'était pas un coup de change

  4. #4
    Membre chevronné Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Par défaut
    Bonjour,

    J'ai déja eu un problème similaire à la modification d'une procédure stockée,
    mais rien de méchant, rien qui touche au moteur en tout cas, c'était dû à des caractères parasites.

    Tout cela à pour conséquence d'empêcher toute nouvelle connexion avec sql manager et entraine de devoir redémarrer sql server. Le server dis qu'il est busy.
    Par contre pour les personnes déjà connectées, elles peuvent toujours effectuer des requêtes.
    Vous ne pouvez plus vous connecter d'un autre poste ? Ou en relancant Management Studio ?

    @+

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 28
    Par défaut
    Rebonjour,
    Je ne peux plus me connecter d'un autre poste ou de même du miens en ayant relancé sql manager.
    Le message étant: Sql server is busy, waiting for an internal operation to finish.
    Le problème est qu'un alter procedure est pas senser prendre 20 min (dans mon cas l'alter prend un temps infini)
    Sinon j'ai effectué d'autre test, et il semblerait que j'ai eu de la chance avec les commentaire, car le problème ressurgit, même en remplaçant les -- par des /* */
    De plus la même procédure passe en faisant un drop procedure puis un create...
    Je ne comprend pas.

    En espérant un miracle =)

    +

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 28
    Par défaut
    J'ai temporairement résolu mon problème en faisant un DROP PROCEDURE, puis un CREATE à la place d'un ALTER PROCEDURE

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Le message étant: Sql server is busy, waiting for an internal operation to finish.
    J'ai le même message quand le réseau manque un peu de pêche ...
    C'est bizarre que ça ne le fasse que sur ALTER ... un bug ???

    @++

  8. #8
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 28
    Par défaut
    Oui je penche aussi pour un bug, car la procédure s'éxecute sans problème alors que quand j'essaie de la modifier (même en changeant de poste) ça plante =(
    ++

  9. #9
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 28
    Par défaut
    J'ai d'autres informations si ça peut aider.
    Quand je regarde l'Event log, j'ai ces deux erreurs:

    SQL Server Assertion: File: <latch.cpp>, line = 1538 Failed Assertion = '0' Attempted release of unacquired latch. This error may be timing-related. If the error persists after rerunning the statement, use DBCC CHECKDB to check the database for structural integrity, or restart the server to ensure in-memory data structures are not corrupted.
    A system assertion check has failed. Check the SQL Server error log for details. Typically, an assertion failure is caused by a software bug or data corruption. To check for database corruption, consider running DBCC CHECKDB. If you agreed to send dumps to Microsoft during setup, a mini dump will be sent to Microsoft. An update might be available from Microsoft in the latest Service Pack or in a QFE from Technical Support.
    Si j'effectue le DBCC CHECKDB, le server ne me retourne rien d'anormal.
    Mon sql server tourne en version 9.00.3042.00, peut être que ça vient de là. Mais je ne trouve vraiment rien sur internet qui explique pourquoi un ALTER PROCEDURE fait planter un server sql...

    +++

  10. #10
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 28
    Par défaut
    On va essayer de patcher le server pour voir si ça règle le problème (il semblerait qu'un patch pour ce genre d'erreur existe).
    Je vous tien au courant.

    +

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

Discussions similaires

  1. SQL server 2005 : ALTER TABLE
    Par narutoland62 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/12/2007, 13h38
  2. création d'une table de fait sous sql server 2005
    Par kev0631 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 19/07/2007, 14h45
  3. [SQL Server 2005] procedure dans isnull()
    Par kurisutofu dans le forum Langage SQL
    Réponses: 4
    Dernier message: 02/07/2007, 06h56
  4. sql server 2005 : ou sont cache les procedures stockes ?
    Par arioule dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/12/2006, 15h52
  5. SQL SERVER 2005 - Alter Trigger réactive le trigger ?
    Par Peck777 dans le forum Développement
    Réponses: 1
    Dernier message: 29/06/2006, 13h51

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