ID Artikel: 256650 - Kajian Terakhir: 21 September 2011 - Revisi: 2.0

INF: Bagaimana untuk mengecilkan Log transaksi SQL Server 7.0

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

Ada beberapa alasan umum mengapa log transaksi mungkin tidak mengecil ketika Anda menggunakan DBCC SHRINKFILE atau DBCC SHRINKDATABASE perintah. SQL Server buku Online topik "DBCC SHRINKFILE" dan "DBCC SHRINKDATABASE" memberikan informasi rinci, tetapi sebuah ringkasan singkat berikut.

INFORMASI LEBIH LANJUT

  • Di Microsoft SQL Server 7.0, SHRINKFILE dan SHRINKDATABASE perintah set ukuran sasaran untuk menyusut. File log masing-masing ditandai dengan perintah ini, tetapi sebenarnya log cadangan atau pemotongan log yang mencoba untuk mengecilkan file. Oleh karena itu, setelah Anda menggunakan SHRINKFILE atau SHRINKDATABASE perintah Anda juga harus mengeluarkan perintah yang memotong log sebelum ada kemungkinan bahwa itu akan menyusut.
  • Anda tidak dapat menyusut log untuk ukuran yang lebih kecil daripada apa yang diperbolehkan oleh kriteria tersebut:

    • Untuk mengecilkan log lebih kecil daripada ukuran aslinya Anda harus mengecilkan file individu dengan DBCC SHRINKFILE. Anda tidak dapat menggunakan DBCC SHRINKDATABASE untuk mengecilkan log untuk ukuran yang lebih kecil daripada ukuran asli atau didefinisikan secara eksplisit. Ukuran asli didefinisikan sebagai ukuran log karena untuk membuat DATABASE ditambah perintah mengubah DATABASE setiap eksplisit. Ukuran asli tidak termasuk pertumbuhan otomatis log.

    • File log fisik dapat tidak pernah menjadi lebih kecil daripada jumlah ruang yang digunakan dalam log file. Anda dapat menggunakan perintah DBCC SQLPERF (LOGSPACE) untuk memonitor jumlah ruang yang digunakan.

    • Ukuran saat ini log model database adalah ukuran minimum untuk log semua database pada server. Secara default, log model database adalah kurang dari 1 MB.

    • Karena log dapat menyusut hanya untuk virtual log file (penerimaan VLF) batas, tidaklah mungkin untuk mengecilkan log file untuk ukuran yang lebih kecil daripada VLF bahkan jika ruang yang tidak digunakan. Demikian juga, jika bagian VLF digunakan Anda tidak dapat menyusut salah satu ruang di VLF itu. Untuk selengkapnya, lihat topik "Virtual file Log" dan "Transaksi Log fisik arsitektur" dalam SQL Server buku Online.


  • Log transaksi adalah "wrap-around" log. Ini berarti bahwa pada waktu tertentu mungkin ada VLFs dengan "bebas" atau "dapat digunakan kembali" ruang di awal, tengah, dan/atau akhir log. Untuk mengecilkan log ada harus "bebas" ruang pada akhir log, bukan hanya ruang di mana saja di log kosong. Juga, Anda hanya dapat menyusut seluruh VLFs. Untuk mengecilkan transaksi log VLFs pada akhir log file harus tidak aktif dan terpotong. Untuk informasi lebih lanjut, lihat topik "Truncating the Log transaksi" dalam SQL Server buku Online.
Berikut adalah beberapa hal yang perlu diingat:
  • Selalu melakukan sistem database dan user database backup sebelum dan setelah Anda membuat perubahan yang mempengaruhi sistem. DBCC SHRINKFILE dan DBCC SHRINKDATABASE tidak login operasi, dan menjalankan mereka membatalkan lebih lanjut backup log transaksi. Anda harus membuat cadangan database penuh setelah Anda menjalankan DBCC SHRINKFILE atau DBCC SHRINKDATABASE perintah.

  • Pastikan bahwa ada tidak ada backup dijadwalkan terjadi selama waktu yang menyusut seharusnya terjadi.

  • Pastikan bahwa ada transaksi tidak lama, lama, atau unreplicated. Untuk melakukannya, gunakan kode yang mirip dengan:
    DBCC OPENTRAN (database_name)
    					
  • Jalankan perintah DBCC SHRINKFILE atau DBCC SHRINKDATABASE untuk menandai shrinkpoint. DBCC SHRINKFILE dan DBCC SHRINKDATABASE izin default ke anggota peran server tetap sysadmin atau db_owner database tetap peran, dan tidak dapat dipindahtangankan. Untuk informasi tentang perbedaan antara perintah ini, lihat topik berikut dalam SQL buku Online (Perhatikan parameter yang berbeda):

    DBCC SHRINKFILE     (file_name, target_size)
    DBCC SHRINKDATABASE (database_name, target_percent)
    					
  • Membuat transaksi beberapa boneka untuk membuat log membungkus dan kemudian mengeluarkan perintah cadangan untuk memotong log. Pernyataan cadangan adalah apa benar-benar mencoba untuk mengecilkan log untuk ukuran sasaran ditandai.

    Berikut ini adalah contoh tentang bagaimana untuk membuat transaksi boneka yang membungkus log untuk satu file log logis dan menyebabkan untuk memotong, memungkinkan untuk penyusutan. Memodifikasi sampel yang diperlukan untuk lingkungan Anda.
       SET NOCOUNT ON
       DECLARE @LogicalFileName sysname,
               @MaxMinutes INT,
               @NewSize INT
    
       -- *** MAKE SURE TO CHANGE THE NEXT 4 LINES WITH YOUR CRITERIA. ***
       USE     [Test DB]              -- This is the name of the database
                                      -- for which the log will be shrunk.
       SELECT  @LogicalFileName = 'Test DB Log',  -- Use sp_helpfile to 
          -- identify the logical file 
          -- name that you want to shrink.
               @MaxMinutes = 10,      -- Limit on time allowed to wrap log.
               @NewSize    = 10       -- in MB
    
       -- Setup / initialize
       DECLARE @OriginalSize int
       SELECT @OriginalSize = size -- in 8K pages
         FROM sysfiles
         WHERE name = @LogicalFileName
       SELECT 'Original Size of ' + db_name() + ' LOG is ' + 
               CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' + 
               CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
         FROM sysfiles
         WHERE name = @LogicalFileName
    
       CREATE TABLE DummyTrans
         (DummyColumn char (8000) not null)
    
       -- Wrap log and truncate it.
       DECLARE @Counter   INT,
               @StartTime DATETIME,
               @TruncLog  VARCHAR(255)
       SELECT  @StartTime = GETDATE(),
               @TruncLog = 'BACKUP LOG ['+ db_name() + '] WITH TRUNCATE_ONLY'
       -- Try an initial shrink.
       DBCC SHRINKFILE (@LogicalFileName, @NewSize)
    
       EXEC (@TruncLog)
    
       -- Wrap the log if necessary.
       WHILE     @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
             AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)  -- the log has not shrunk    
             AND (@OriginalSize * 8 /1024) > @NewSize  -- The value passed in for new size is smaller than the current size.
         BEGIN -- Outer loop.
           SELECT @Counter = 0
           WHILE  ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
             BEGIN -- update
               INSERT DummyTrans VALUES ('Fill Log')  -- Because it is a char field it inserts 8000 bytes.
               DELETE DummyTrans
               SELECT @Counter = @Counter + 1
             END   -- update
           EXEC (@TruncLog)  -- See if a trunc of the log shrinks it.
         END   -- outer loop
       SELECT 'Final Size of ' + db_name() + ' LOG is ' +
               CONVERT(VARCHAR(30),size) + ' 8K pages or ' + 
               CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
         FROM sysfiles 
         WHERE name = @LogicalFileName
       DROP TABLE DummyTrans
       PRINT '*** Perform a full database backup ***'
       SET NOCOUNT OFF
    					
    Periksa untuk melihat apakah log telah menyusut dari ukuran aslinya.Ulangi langkah-langkah sebelumnya jika diperlukan. Jika log tidak menyusut, memeriksa ulang ringkasan di atas artikel untuk melihat jika Anda mengalami salah satu masalah umum dengan menyusut log.
Setelah log menyusut:
  1. Melakukan backup database penuh database master.
  2. Melakukan backup penuh database pengguna database. Hal ini diperlukan karena perintah MENYUSUT belum login dan membatalkan transaksi masa depan log backup kecuali backup database penuh selesai.
Untuk menentukan mengapa log tumbuh begitu besar di tempat pertama, Anda dapat memeriksa transaksi terbuka, transaksi berjalan panjang, unreplicated transaksi, atau transaksi yang menyentuh banyak data.

REFERENSI

Untuk informasi tambahan, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
110139  (http://support.microsoft.com/kb/110139/EN-US/ ) INF: Penyebab Log transaksi SQL mengisi
62866  (http://support.microsoft.com/kb/62866/EN-US/ ) INFO: Alasan mengapa Log transaksi SQL tidak yang terpotong
66057  (http://support.microsoft.com/kb/66057/EN-US/ ) PRB: Kehabisan ruang Log ketika menjalankan banyak massal
80629  (http://support.microsoft.com/kb/80629/EN-US/ ) PRB: Log transaksi sebagian terpotong
SQL Server buku secara Online; topik: "Transaksi Log fisik arsitektur"; "Mengoptimalkan kinerja Log transaksi"

Berlaku bagi:
  • Microsoft SQL Server 7.0 Standard Edition
Kata kunci: 
kbsqlsetup kbinfo kbsqlserv kbsqlserv700 kbmt KB256650 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:256650  (http://support.microsoft.com/kb/256650/en-us/ )