-
Dalam proses penggunaan SQL Server, kami sering menghadapi situasi di mana log database sangat besar. Saat menghadapi masalah ini, kami memperkenalkan dua metode untuk menyelesaikannya.
Metode satu
Dalam keadaan normal, mengecilkan database SQL tidak dapat mengurangi ukuran database secara signifikan. Fungsi utamanya adalah mengecilkan ukuran log. Operasi ini harus dilakukan secara teratur untuk mencegah log database menjadi terlalu besar.
1. Atur mode database ke mode sederhana: Buka SQL Enterprise Manager, klik Microsoft SQL Server di direktori root konsol-->Grup SQL Server-->klik dua kali untuk membuka server Anda-->klik dua kali untuk membuka database direktori-- >Pilih nama database Anda (seperti database Forum Forum)-->lalu klik kanan dan pilih Properties-->Pilih Opsi-->Pilih "Sederhana" dalam mode failover, lalu tekan OK untuk menyimpan
2. Klik kanan pada database saat ini dan lihat database menyusut di semua tugas. Umumnya, pengaturan default tidak perlu disesuaikan Cukup klik OK.
3. Setelah mengecilkan database, disarankan untuk mereset properti database Anda ke mode standar. Metode pengoperasiannya sama dengan poin pertama, karena log sering kali menjadi dasar penting untuk memulihkan database dalam beberapa keadaan tidak normal
SETEL NOCOUNT AKTIF
DECLARE nama sistem @LogicalFileName,
@MaxMinutes INT,
@UkuranBaruINT
USE tablename -- nama database yang akan dioperasikan
PILIH @LogicalFileName = 'tablename_log', -- nama file log
@MaxMinutes = 10, -- Batas waktu yang diperbolehkan untuk membungkus log.
@NewSize = 1 -- Ukuran file log yang ingin Anda atur (M)
--Pengaturan/inisialisasi
MENYATAKAN @OriginalSize int
PILIH @Ukuran Asli = ukuran
DARI sysfile
DIMANA nama = @LogicalFileName
PILIH 'Ukuran Asli ' + db_name() + ' LOG adalah ' +
CONVERT(VARCHAR(30),@OriginalSize) + ' 8K halaman atau ' +
KONVERSI(VARCHAR(30),(@Ukuran Asli*8/1024)) + 'MB'
DARI sysfile
DIMANA nama = @LogicalFileName
BUAT TABEL DummyTrans
(Karakter DummyColumn (8000) bukan nol)
DEKLARASIKAN @Counter INT,
@Waktu Mulai TANGGAL WAKTU,
@TruncLog VARCHAR(255)
PILIH @Waktu Mulai = GETDATE(),
@TruncLog = 'LOG CADANGAN' + db_name() + 'DENGAN TRUNCATE_ONLY'
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Bungkus log jika perlu.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- waktu belum habis
DAN @OriginalSize = (PILIH ukuran DARI sysfiles WHERE name = @LogicalFileName)
DAN (@OriginalSize * 8 /1024) > @NewSize
MULAI -- Lingkaran luar.
PILIH @Penghitung = 0
SAAT ((@Counter < @OriginalSize / 16) DAN (@Counter < 50000))
MULAI -- perbarui
MASUKKAN NILAI DummyTrans ('Isi Log')
HAPUS DummyTrans
PILIH @Penghitung = @Penghitung + 1
AKHIR
EXEC (@TruncLog)
AKHIR
PILIH 'Ukuran Akhir ' + db_name() + ' LOG adalah ' +
CONVERT(VARCHAR(30),ukuran) + ' 8K halaman atau ' +
KONVERSI(VARCHAR(30),(ukuran*8/1024)) + 'MB'
DARI sysfile
DIMANA nama = @LogicalFileName
DROP TABLE DummyTrans
TETAPKAN NOCOUNT MATI