DBCC SHRINKFILE dan SHRINKDATABASE mungkin tidak bekerja karena jarang penduduknya teks, ntext, atau gambar kolom

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 324432 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

GEJALA

Perintah DBCC SHRINKFILE dan DBCC SHRINKDATABASE akan tidak memindahkan data dan mengurangi ukuran file jika EstimatedPages nilai sama dengan MinimumSize nilai yang dilaporkan ketika perintah selesai. Karena permintaan modifikasi data pada tabel dengan tipe data biner besar objek (BLOB) (teks, ntext, gambar), mungkin untuk memiliki banyak extent seragam yang dialokasikan yang jarang penduduknya dengan data (misalnya, hanya 1 dari 8 halaman yang tingkat kontrol dialokasikan), yang akan menyebabkan DBCC SHRINKFILE dan Perintah DBCC SHRINKDATABASE untuk over-estimate jumlah EstimatedPages, dan perintah tidak melakukan operasi menyusut. Biasanya, dalam kasus di mana perilaku ini mengalami, ukuran penuh database backup 8 kali lebih kecil daripada ukuran file database setelah Anda menjalankan DBCC SHRINKFILE pada file database.

PEMECAHAN MASALAH

Jika tabel terkena tidak harus terus-menerus Online sementara Anda memperbaiki situasi ini, Anda dapat menggunakan salah satu dari berikut workarounds untuk mengatasi masalah ini:
  • Menggunakan pilih ke pernyataan untuk mentransfer seluruh tabel untuk sebuah tabel baru dalam database yang sama. Drop meja asli, dan kemudian jalankan DBCC SHRINKFILE pernyataan. Mengubah nama tabel baru ke meja asli Nama.
  • Menggunakan pilih ke pernyataan untuk mentransfer seluruh tabel untuk sebuah tabel baru dalam database yang berbeda. Memotong meja asli, dan kemudian jalankan pernyataan DBCC SHRINKFILE. Transfer data kembali ke asli tabel.
  • Menggunakan sebagian besar salinan program untuk menyalin tabel luar dalam asli modus. Script keluar meja, dan kemudian menjatuhkan tabel yang ada. Menjalankan DBCC SHRINKFILE pernyataan. Membuat sebuah tabel baru, dan kemudian menggunakan sebagian besar salinan program untuk menyalin data kembali ke meja.
  • Menggunakan Data transformasi layanan (DTS) untuk mentransfer seluruh database untuk database baru. SQL Server 7.0 Data transformasi layanan mungkin tidak mentransfer teks dan gambar data lama yang dari 64 KB dengan benar. Ini masalah tidak berlaku untuk versi SQL Server 2000 transformasi Data Layanan.Untuk informasi tambahan, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
    257425 FIX: DTS objek Transfer tidak mentransfer Data BLOB lebih besar daripada 64
    Anda dapat mencari kolom teks dan gambar yang lebih besar daripada 64 KB dengan query berikut:
    SELECT MAX (DATALENGTH (TextImageColumn)) FROM TableName
    Jika data teks dan gambar lebih besar daripada 64 KB, transfer memotong data dan tidak meningkatkan kesalahan kecuali di DTS file log. Jika Anda memiliki data teks atau gambar yang lebih besar dari 64 KB, menggunakan informasi dalam ketiga peluru item untuk tabel yang memiliki data teks atau gambar. Selanjutnya, menggunakan DTS selama sisa item dalam database.
Jika database harus online atau ukuran database terlalu besar untuk memindahkan data ke file eksternal atau database lain, Anda dapat Gunakan perintah DBCC SHRINKFILE dengan pilihan EMPTYFILE. Untuk menggunakan pekerjaan ini sekitar, ikuti langkah berikut:
  1. Jika Anda menjalankan Microsoft SQL Server 7.0 paket layanan 3, Hidupkan jejak bendera 1180 dan 1197.
  2. Jika Anda menjalankan Microsoft SQL Server 7.0 paket layanan 3 membangun 7.00.987, atau kemudian, termasuk paket layanan 4, menghidupkan jejak bendera 1180.
  3. Jika Anda telah tersebar database beberapa file untuk masalah ruang pengandar atau kinerja alasan, membuat 1 atau lebih tambahan file dalam database dengan menggunakan perintah mengubah DATABASE dengan ukuran total sebanding dengan hasil query berikut.
    select 'size in MB'=ceiling(sum(ei.pg_alloc)/128.000), sfg.groupname
    from extentinfo ei inner join sysfiles sf on ei.[file_id] = sf.fileid and ei.[file_id] != 1
     inner join sysfilegroups sfg on sf.groupid = sfg.groupid
    group by sfg.groupname
    CATATAN: Query sebelumnya menggunakan tabel yang dibuat oleh query di bagian "Informasi selengkapnya" artikel ini. Selain itu, ukuran file total dipecah oleh filegroup.

  4. Menjalankan query DBCC SHRINKFILE, dengan pilihan EMPTYFILE sebagai parameter kedua, pada tiap berkas yang jarang penduduknya gumpalan seragam jauh lebih kejam.
  5. Anda dapat melacak kemajuan DBCC SRHINKFILE perintah dengan membuat satu atau lebih tabel dengan skema yang sama sebagai The extentinfo tabel dari bagian "Informasi selengkapnya" dari artikel ini. Kemudian menjalankan "INSERT.. EXEC import_extentinfo"permintaan untuk mengisi data untuk tabel baru. Menggunakan berikut permintaan untuk menganalisis hasil:
    select [file_id], 'page count'=sum(pg_alloc), 'min page'=min(page_id), 'max page'=max(page_id) from extentinfo group by [file_id]
    Selain itu, Anda dapat menggunakan query berikut untuk melacak ketika DBCC EXTENTINFO perintah dijalankan jika meja mulai dengan pola yang sama dari surat-surat dan yang dibuat dekat waktu sebagai perintah DBCC EXTENTINFO:
    select crdate, [name] from sysobjects where type = 'U' and [name] like 'extent%' order by crdate
  6. Ketika DBCC SHRINKFILE permintaan selesai, menjalankan ALTER Query DATABASE untuk menghapus berkas lama dari database.
  7. Anda mungkin dapat menghapus ruang tambahan dengan menjalankan DBCC SHRINKFILE permintaan dengan pilihan TRUNCATEONLY pada berkas baru yang dibuat pada langkah 3.
  8. Jika Anda menjalankan Microsoft SQL Server 7.0, matikan jejak bendera Anda diaktifkan pada langkah 1 atau 2.

INFORMASI LEBIH LANJUT

Anda dapat menjalankan query Transact-SQL berikut dari permintaan apapun alat, seperti Query Analyzer, jika Anda log in sebagai pengguna yang telah sysadmin hak-hak. Anda menjalankan Transact-SQL query di SQL Server untuk menentukan Jika perintah DBCC SHRINKDATABASE dan DBCC SHRINKFILE perintah tidak mengecilkan file karena dari berpenduduk GUMPALAN seragam jauh lebih kejam.

CATATAN: Anda harus memperbarui string '<database name="">' untuk nama masalah database, dan menyertakan nama dalam satu kutipan tanda.</database>

use pubs
go
if convert(int,substring(convert(binary(4), @@microsoftversion),1,1)) = 8
begin 
   create table extentinfo 
   (
   [file_id] smallint,
   page_id int,
   pg_alloc int,
   ext_size tinyint,
   obj_id int,
   index_id tinyint,
   pfs_bytes varbinary(10)
   )
end
go
if convert(int,substring(convert(binary(4), @@microsoftversion),1,1)) = 7
begin
   create table extentinfo 
   (
   [file_id] smallint,
   page_id int,
   pg_alloc int,
   ext_size tinyint,
   obj_id int,
   index_id tinyint,
   pfs_bytes varbinary(10),
   avg_used tinyint
   )
end
go
create procedure import_extentinfo as
dbcc extentinfo('<database name>')
go
insert extentinfo exec import_extentinfo
go

select [file_id],obj_id, index_id, ext_size, 'actual extent count'=count(*), 'actual page count'=sum(pg_alloc),
 'possible extent count'=ceiling(sum(pg_alloc)*1.0/ext_size),
 'possible extents / actual extents' = (ceiling(sum(pg_alloc)*1.00/ext_size)*100.00) / count(*)
 from extentinfo where ext_size != 1 and index_id = 255
 group by [file_id],obj_id, index_id, ext_size
 having count(*)-ceiling(sum(pg_alloc)*1.0/ext_size) > 0
 order by obj_id, index_id, [file_id]
Jika Anda melihat hasil baris dari permintaan terakhir yang telah index_id nilai-nilai 255, dan sejauh mungkin / sebenarnya batas kolom adalah kurang dari 75, database ini telah jarang dihuni GUMPALAN extent dan dapat dikurangi ukurannya dengan metode yang dijelaskan di bagian "Pemecahan masalah" pada artikel ini.

CATATAN: Query ini bergantung pada fungsi DBCC EXTENTINFO perintah. Jangan gunakan perintah DBCC EXTENTINFO di luar situasi ini karena fungsionalitas dapat berubah atau bahkan dihapus dari versi masa depan Microsoft SQL Server.

REFERENSI

Untuk informasi tambahan, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
272220 FIX: Teks/gambar Data ruang penyimpanan yang tidak direklamasi dengan benar
308627 FIX: DBCC SHRINKDATABASE atau DBCC SHRINKFILE dapat memperluas Database dengan teks atau Data gambar

Properti

ID Artikel: 324432 - Kajian Terakhir: 26 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Kata kunci: 
kbprb kbmt KB324432 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:324432

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com