Bir tablonun kullandığı alan, SQL Server'daki tablodan verileri silmek için DELETE deyimini kullandıktan sonra tamamen serbest bırakılmaz SQL Server

Bu makale, tablodaki tüm verileri silmek için DELETE deyimini kullandıktan sonra bir tablonun kullandığı sorunun geçici olarak serbest bırakılma sorununu çözmenize yardımcı olur.

Özgün ürün sürümü: SQL Server
Özgün KB numarası: 913399

Belirtiler

Microsoft SQL Server'da tablodaki verileri silmek için DELETE deyimini kullandıktan sonra, tablonun kullandığı alanın tamamen serbest bırakılmadığını fark edebilirsiniz. Ardından veritabanına veri eklemeyi denediğinizde aşağıdaki hata iletisini alabilirsiniz:

'PRIMARY' dosya grubu dolu olduğundan 'DatabaseName' veritabanındaki 'TableName' nesnesi için alan ayrılamadı.

Not

TableName , tablonun adını temsil eder. DatabaseName , tabloyu içeren veritabanının adını temsil eder.

Neden

Bu sorun, SQL Server yalnızca aşağıdaki koşullar doğru olduğunda bir yığın tablosunun kullandığı tüm sayfaları serbest bıraktığı için oluşur:

  • Bu tabloda bir silme işlemi gerçekleşir.
  • Tablo düzeyinde bir kilit tutuluyor.

Not

Yığın tablosu, kümelenmiş dizinle ilişkilendirilmemiş herhangi bir tablodur.

Sayfalar serbest bırakılmamışsa, veritabanındaki diğer nesneler sayfaları yeniden kullanamaz.

Ancak, SQL Server veritabanında satır versioning-based yalıtımı düzeyini etkinleştirdiğinizde, tablo düzeyinde bir kilit tutulsa bile sayfalar serbest bırakılamaz. Satır versioning-based yalıtım düzeyleri hakkında daha fazla bilgi için bkz. SQL Server Veritabanı Altyapısı'nda yalıtım düzeyleri.

Geçici Çözüm

Bu sorunu geçici olarak çözmek için aşağıdaki yöntemlerden birini kullanın:

  • Satır sürüm oluşturma tabanlı yalıtım düzeyi etkin değilse DELETE deyimine TABLOCK ipucu ekleyin. Örneğin, aşağıdakine benzer bir deyim kullanın:

    DELETE FROM <TableName> WITH (TABLOCK)
    

    Not

    <TableName> , tablonun adını temsil eder.

  • Tablodaki tüm kayıtları silmek istiyorsanız TRUNCATE TABLE deyimini kullanın. Örneğin, aşağıdakine benzer bir deyim kullanın:

    TRUNCATE TABLE <TableName>
    
  • Tablonun bir sütununda kümelenmiş dizin oluşturma. Tabloda kümelenmiş dizin oluşturma hakkında daha fazla bilgi için bkz. Kümelenmiş Dizinler Oluşturma.