Vous êtes actuellement hors ligne, en attente de reconnexion à Internet.

Espace qui utilise une table n'est pas complètement libérée après avoir utilisé une instruction DELETE pour supprimer les données de la table dans SQL Server

IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.

La version anglaise de cet article est la suivante: 913399
Bogue #: 219514 (SQL Server 8.0)
Symptômes
Après avoir utilisé une instruction DELETE dans Microsoft SQL Server pour supprimer des données d'une table, vous pouvez remarquer que l'espace que la table utilise n'est pas complètement libérée. Lorsque vous essayez ensuite d'insérer des données dans la base de données, la message d'erreur suivant peut s'afficher :
Impossible d'allouer espace d'objet « TableName » de base de données « DatabaseName » car le groupe de fichiers « PRIMARY » est plein.
note TableName représente le nom de la table. DatabaseName représente le nom de la base de données qui contient la table.
Cause
Ce problème se produit parce que SQL Server publie uniquement toutes les pages une table de segment de mémoire utilise lorsque les conditions suivantes sont remplies :
  • Une suppression sur cette table se produit.
  • Un verrouillage au niveau de la table est en cours maintenu.
note Une table de segment est toute table qui n'est pas associé à un index organisé en clusters.

Si les pages sont deallocated pas, autres objets de la base de données ne peut pas réutiliser les pages.

Toutefois, lorsque vous activez un niveau d'isolation basé contrôle de version ligne dans une base de données SQL Server 2005, pages ne peut pas être lancées, même si un verrouillage au niveau de la table est en cours maintenu. Pour plus d'informations sur les niveaux d'isolement en fonction de versions ligne, consultez la rubrique niveaux de ligne Utilisation basé contrôle de version isolation dans en ligne de SQL Server 2005.
Contournement
Pour contourner ce problème, appliquez l'une des méthodes suivantes :
  • Incluez une indication TABLOCK dans l'instruction DELETE si un niveau de base contrôle de version d'isolation des ligne n'est pas activé. Par exemple, utiliser une instruction qui est semblable à celui-ci :
    DELETE FROM <TableName> WITH (TABLOCK)
    Remarque <TableName>représente le nom de la table.
  • Utilisez l'instruction TRUNCATE TABLE si vous souhaitez supprimer tous les enregistrements de la table. Par exemple, utiliser une instruction qui est semblable à celui-ci :
    TRUNCATE TABLE <TableName>
  • Créer un index organisé en clusters sur une colonne de la table. Pour plus d'informations sur la création d'un index organisé en clusters sur une table, consultez la rubrique "Création d'un index Clustered" dans la documentation en ligne de SQL Server.
Statut
Microsoft a confirmé que c'est un problème dans les produits Microsoft répertoriés dans la section « S'applique à ».

Avertissement : cet article a été traduit automatiquement

Propriétés

ID d'article : 913399 - Dernière mise à jour : 11/02/2007 09:50:43 - Révision : 1.2

Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2005 Workgroup Edition, Microsoft SQL Server 2000 Standard, Microsoft SQL Server 2000 Desktop Engine (Windows), Microsoft SQL Server 2000 Édition Développeur, Microsoft SQL Server 2000 Édition Entreprise, Microsoft SQL Server 2000 Édition Personelle, Microsoft SQL Server 7.0 Standard

  • kbmt kbexpertiseadvanced kbprb KB913399 KbMtfr
Commentaires