ID Artikel: 307487 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0

Bagaimana untuk mengecilkan database code di SQL Server

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.

Pada Halaman ini

Perbesar semua | Perkecil semua

RINGKASAN

Artikel ini membahas tiga metode yang dapat Anda gunakan untuk mengecilkan Code database untuk ukuran yang lebih kecil daripada ukuran dikonfigurasi terakhir. Metode pertama memberi Anda kendali penuh dari ukuran Code file tetapi mengharuskan Anda untuk me-restart SQL Server. Metode kedua menyusut Code secara keseluruhan, dengan beberapa keterbatasan, yang mungkin termasuk restart SQL Server. Metode ketiga memungkinkan Anda untuk mengecilkan file individu dalam Code. Metode yang terakhir dua membutuhkan tidak ada kegiatan yang terjadi di Code basis data selama operasi menyusut.

Catatan Jika Anda menggunakan SQL Server 2005, metode ini juga berlaku. Namun, Anda harus menggunakan SQL Server Management Studio bukan Enterprise Manager dan Query Analyzer untuk melakukan operasi ini. Catatan lebih lanjut bahwa SQL Server management studio 2005 tidak menunjukkan ukuran benar code file setelah operasi menyusut. Nilai 'Saat ini dialokasikan ruang' selalu diambil dari sys.master_files DMV dan nilai ini tidak diperbarui setelah operasi menyusut terjadi untuk Code database. Untuk menemukan ukuran benar code file setelah operasi menyusut mengeksekusi pernyataan berikut di studio manajemen:
use tempdb
select (size*8) as FileSizeKB from sys.database_files

Catatan SQL Server 2008 tidak dipengaruhi oleh masalah ini (GUI menampilkan ukuran salah.)

Code informasi

The Code adalah kerja sementara. Di antara lainnya, SQL Server menggunakan Code untuk:
  • Penyimpanan tabel sementara secara eksplisit dibuat.
  • Worktables yang menyimpan hasil antara yang dibuat selama permintaan pengolahan dan menyortir.
  • Terwujud statis kursor.
SQL Server catatan hanya cukup informasi dalam log transaksi Code untuk memutar kembali transaksi tapi tidak untuk mengulang transaksi selama pemulihan database. Fitur ini meningkatkan kinerja INSERT pernyataan dalam Code. Selain itu, ada tidak perlu login informasi untuk mengulang setiap transaksi karena Code dibuat ulang setiap kali Anda me-restart SQL Server; oleh karena itu, tidak memiliki transaksi untuk roll ke depan atau memutar kembali. Ketika SQL Server dimulai, code kembali dengan menggunakan salinan dari model database dan di-reset ke ukuran dikonfigurasi terakhir.

Secara default, database Code dikonfigurasi untuk autogrow yang diperlukan; oleh karena itu, database ini dapat tumbuh dalam waktu untuk ukuran yang lebih besar dari yang diinginkan. Restart sederhana SQL Server me-reset ukuran Code untuk ukurannya dikonfigurasi terakhir. Ukuran dikonfigurasi adalah ukuran eksplisit terakhir yang ditetapkan dengan ukuran file yang mengubah operasi seperti mengubah DATABASE dengan MEMODIFIKASI FILE pilihan atau pernyataan DBCC SHRINKFILE. Artikel ini menyajikan tiga metode yang dapat Anda gunakan untuk mengecilkan Code untuk ukuran yang lebih kecil daripada ukuran dikonfigurasi.


Metode 1 untuk mengecilkan Code

Metode ini mengharuskan Anda untuk me-restart SQL Server.

  1. Berhenti SQL Server. Buka prompt perintah, dan kemudian mulai SQL Server dengan mengetik perintah berikut:

    sqlservr - c -f

    The -c dan -f parameter menyebabkan SQL Server untuk memulai dalam modus konfigurasi minimal dengan Code ukuran 1 MB untuk data file dan 0.5 MB untuk log file.

    CATATAN: Jika Anda menggunakan SQL Server bernama contoh, Anda harus mengubah ke folder sesuai (Program Files\Microsoft SQL Server\MSSQL$ contoh name\Binn) dan menggunakan -s beralih (-s % instance_name %).
  2. Menghubungkan ke SQL Server dengan Query Analyzer, dan kemudian jalankan perintah Transact-SQL berikut:
       ALTER DATABASE tempdb MODIFY FILE
       (NAME = 'tempdev', SIZE = target_size_in_MB) 
       --Desired target size for the data file
    
       ALTER DATABASE tempdb MODIFY FILE
       (NAME = 'templog', SIZE = target_size_in_MB)
       --Desired target size for the log file
    					
  3. Berhenti SQL Server dengan menekan CTRL-C di jendela prompt perintah, restart SQL Server sebagai layanan, dan kemudian verifikasi ukuran file Tempdb.mdf dan Templog.ldf.
Batasan dari metode ini adalah bahwa hanya beroperasi di default Code logis file, tempdev dan templog. Jika file-file tambahan ditambahkan ke Code Anda dapat menyusut mereka setelah Anda me-restart Server SQL sebagai layanan. All Code file kembali selama Persiapan; oleh karena itu, mereka kosong dan dapat dihapus. Untuk menghapus file-file tambahan di Code, gunakan perintah mengubah DATABASE dengan opsi menghapus FILE.

Metode 2 untuk mengecilkan Code

Gunakan perintah DBCC SHRINKDATABASE untuk mengecilkan Code database secara keseluruhan. DBCC SHRINKDATABASE menerima parameter target_percent, yang adalah persentase yang dikehendaki dari ruang yang tersisa di database file setelah database menyusut. Jika Anda menggunakan DBCC SHRINKDATABASE, Anda mungkin harus me-restart SQL Server.

PENTING: Jika Anda menjalankan DBCC SHRINKDATABASE, tidak ada kegiatan lain dapat terjadi dengan Code database. Untuk memastikan bahwa proses lainnya tidak dapat menggunakan Code Sementara DBCC SHRINKDATABASE berjalan, Anda harus menjalankan SQL Server dalam mode single user. Untuk informasi lebih lanjut lihat Efek eksekusi DBCC SHRINKDATABASE atau DBCCSHRINKFILE sementara Code digunakan bagian dari artikel ini.
  1. Menentukan ruang yang saat ini digunakan dalam Code dengan menggunakan sp_spaceused prosedur yang tersimpan. Kemudian, menghitung persentase ruang kiri untuk digunakan sebagai parameter ke DBCC SHRINKDATABASE; perhitungan ini didasarkan pada ukuran database yang diinginkan.

    Catatan Dalam beberapa kasus yang mungkin Anda miliki untuk melaksanakan sp_spaceused @ updateusage = true untuk menghitung ulang ruang yang digunakan dan untuk mendapatkan laporan diperbarui. Merujuk ke SQL Server buku Online untuk informasi lebih lanjut tentang sp_spaceused prosedur yang tersimpan.

    Pertimbangkan contoh ini:
    Berasumsi bahwa Code memiliki dua file, file data primer (Tempdb.mdf), yang 100 MB dalam ukuran dan file log (Tempdb.ldf), yang adalah 30 MB. Berasumsi bahwa sp_spaceused laporan bahwa file data primer berisi 60 MB data. Juga menganggap bahwa Anda ingin menyusut berkas data primer untuk 80 MB. Hitung persentase yang dikehendaki dari ruang kiri setelah menyusut, 80 MB - 60 MB = 20 MB. Sekarang, membagi 20 MB oleh 80 MB = 25% dan itu adalah Anda target_percent. File log transaksi menyusut sesuai, meninggalkan 25% atau 20 MB ruang bebas setelah database menyusut.
  2. Menghubungkan ke SQL Server dengan Query Analyzer, dan kemudian jalankan perintah Transact-SQL berikut:
       dbcc shrinkdatabase (tempdb, 'target percent') 
       -- This command shrinks the tempdb database as a whole
    					
Ada batasan penggunaan perintah DBCC SHRINKDATABASE pada Code database. Ukuran sasaran untuk data dan log file tidak dapat lebih kecil daripada ukuran yang ditentukan ketika database dibuat atau ukuran terakhir yang secara eksplisit menetapkan dengan ukuran file mengubah operasi seperti mengubah DATABASE dengan MEMODIFIKASI FILE pilihan atau perintah DBCC SHRINKFILE. Batasan lain dari DBCC SHRINKDATABASE adalah perhitungan target_percentage parameter dan ketergantungan pada saat ini ruang yang digunakan.



Metode 3 untuk mengecilkan Code

Gunakan perintah DBCC SHRINKFILE untuk mengecilkan individu Code file. DBCC SHRINKFILE menyediakan lebih banyak fleksibilitas daripada DBCC SHRINKDATABASE karena Anda dapat menggunakannya pada file database tunggal tanpa mempengaruhi file lain yang milik database yang sama. DBCC SHRINKFILE menerima target ukuran parameter, yang adalah ukuran akhir yang diinginkan untuk database file.

PENTING: Anda harus menjalankan perintah DBCC SHRINKFILE sementara tidak ada kegiatan lain yang terjadi di Code database. Untuk memastikan bahwa proses lainnya tidak dapat menggunakan Code Sementara DBCC SHRINKFILE mengeksekusi, Anda harus me-restart SQL Server dalam mode single user. Untuk informasi lebih lanjut tentang DBCC SHRINKFILE, Efek eksekusi DBCC SHRINKDATABASE atau DBCCSHRINKFILE sementara Code digunakan bagian dari artikel ini.
  1. Menentukan ukuran yang diinginkan untuk berkas data primer (tempdb.mdf), file log (templog.ldf), dan/atau file-file tambahan yang ditambahkan ke Code. Pastikan bahwa ruang yang digunakan dalam file adalah kurang dari atau sama dengan ukuran yang diinginkan target.
  2. Menghubungkan ke SQL Server dengan Query Analyzer, dan kemudian jalankan perintah Transact-SQL berikut untuk file database spesifik yang Anda butuhkan untuk mengecilkan:
       use tempdb
       go
    
       dbcc shrinkfile (tempdev, 'target size in MB')
       go
       -- this command shrinks the primary data file
    
       dbcc shrinkfile (templog, 'target size in MB')
       go
       -- this command shrinks the log file, look at the last paragraph.
    						
Keuntungan dari DBCC SHRINKFILE adalah bahwa hal itu dapat mengurangi ukuran file untuk ukuran yang lebih kecil daripada ukuran aslinya. Anda dapat mengeluarkan DBCC SHRINKFILE pada setiap data atau log file. Batasan dari DBCC SHRINKFILE adalah bahwa Anda tidak dapat membuat database yang lebih kecil daripada ukuran model database.

Dalam SQL Server 7.0 log transaksi menyusut adalah operasi ditangguhkan dan Anda harus mengeluarkan log pemotongan dan cadangan untuk membantu operasi menyusut dalam database. Namun, secara default, Code telah TRUNC masuk chkpt opsi disetel ON; oleh karena itu, ada Anda tidak perlu mengeluarkan pemotongan log untuk database tersebut. Untuk informasi tambahan cara untuk mengecilkan database transaksi masuk SQL Server 7.0, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
256650  (http://support.microsoft.com/kb/256650/EN-US/ ) INF: Bagaimana untuk mengecilkan Log transaksi SQL Server 7.0

Efek eksekusi DBCC SHRINKDATABASE atau DBCCSHRINKFILE sementara Code digunakan

Jika Code yang digunakan dan Anda mencoba untuk mengecilkan dengan menggunakan DBCC SHRINKDATABASE atau DBCC SHRINKFILE perintah, Anda mungkin menerima beberapa konsistensi kesalahan mirip dengan jenis berikut dan menyusut operasi mungkin gagal:
Server: Msg 2501, tingkat 16, negara bagian 1, baris 1 Tidak dapat menemukan tabel yang bernama '1525580473'. Periksa sysobjects.
-atau-
Server: Msg 8909, tingkat 16, negara bagian 1, baris 0 Tabel korupsi: ID objek 1, indeks ID 0, halaman ID % S_PGID. PageId di header halaman = % S_PGID.
Meskipun kesalahan 2501 tidak dapat menunjukkan korupsi di Code, menyebabkan menyusut operasi gagal. Di sisi lain, kesalahan 8909 bisa menunjukkan korupsi di Code database. Restart Server SQL untuk menciptakan kembali Code dan membersihkan kesalahan konsistensi. Namun, perlu diketahui bahwa mungkin ada alasan lain untuk kesalahan korupsi data secara fisik seperti kesalahan 8909 dan mereka termasuk input/output subsistem masalah.

REFERENSI

SQL Server buku secara Online; topik: "DBCC SHRINKFILE"; "DBCC SHRINKDATABASE"


Berlaku bagi:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Kata kunci: 
kbsqlsetup kbhowtomaster kbmt KB307487 KbMtid
Penerjemahan MesinPenerjemahan 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:307487  (http://support.microsoft.com/kb/307487/en-us/ )