Beberapa kali SQL Server mungkin menjadi alasan masalah ruang pada disk. Pada artikel ini, kita akan melihat apa penyebab utama dari masalah ini dan bagaimana kita dapat memperbaikinya.
Anda SQL Server membutuhkan ruang.
Berkali-kali SQL Server akan membutuhkan ruang disk. Hal ini mungkin terjadi karena bertambahnya data di dalam database Anda atau file log yang dibongkar atau file cadangan yang tidak dihapus atau file database yang tidak diinginkan dan tidak terhapus. Apapun alasannya, pada a SQL Server, space pada disk sangat penting untuk transaksi database.
Tugas pembersihan tidak berfungsi
Jika Anda menggunakan paket pemeliharaan asli SQL untuk membuat cadangan file SQL server database, mungkin ada kemungkinan modul pembersihan dalam rencana pemeliharaan tersebut tidak melakukan tugasnya. Ketika disk kehabisan ruang, Anda akan menyadari bahwa file cadangan lama tidak dibersihkan dengan benar. Anda akan menyertakan modul pembersihan dalam rencana pemeliharaan. Terlepas dari semua ini, apakah Anda bertanya-tanya mengapa itu tidak berhasil?
Periksa apakah Anda telah menyebutkan folder yang benar untuk menghapus file cadangan, periksa apakah Anda telah menyebutkan ekstensi file yang benar untuk menghapus file cadangan, coba dengan titik "." dan tanpa titik di ekstensi file.
File log lebih besar dari file database
Most penyebab umum masalah ruang di SQL Server adalah file log dan file tempdb tanpa pengawasan. Meskipun tempdb akan menyusut ke ukuran aslinya setiap kali SQL Service restarts, merupakan praktik yang baik untuk memantau pertumbuhan tempdb dan mengecilkannya saat akan memakan seluruh ruang disk. Mirip dengan tempdb, file log harus selalu diperiksa. Pastikan Anda memiliki cadangan log di tempat untuk selalu menyimpan file log dalam ukuran minimal.
File database yang tidak digunakan
Mungkin ada banyak file database yang tidak terpakai dan tidak dilampirkan yang tersimpan di disk Anda dan membuang-buang ruang. Jalankan skrip di SQL Server contoh untuk mengidentifikasi file tersebut bersama dengan jalurnya. Setelah analisis cepat, jika Anda masih yakin bahwa file-file tersebut tidak diperlukan lagi, hapus dan hemat ruang.
DECLARE @dpth NVARCHAR(512)
EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE'
,N'Software\Microsoft\MSSQLServer\MSSQLServer'
,N'DefaultData'
,@dpth OUTPUT
DECLARE @lpth NVARCHAR(512)
EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE'
,N'Software\Microsoft\MSSQLServer\MSSQLServer'
,N'DefaultLog'
,@lpth OUTPUT
DECLARE @bk NVARCHAR(512)
EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE'
,N'Software\Microsoft\MSSQLServer\MSSQLServer'
,N'BackupDirectory'
,@bk OUTPUT
DECLARE @md NVARCHAR(512)
EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE'
,N'Software\Microsoft\MSSQLServer\MSSQLServer\Parameters'
,N'SqlArg0'
,@md OUTPUT
SELECT @md = substring(@md, 3, 255)
SELECT @md = substring(@md, 1, len(@md) - charindex('\', reverse(@md)))
DECLARE @ml NVARCHAR(512)
EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE'
,N'Software\Microsoft\MSSQLServer\MSSQLServer\Parameters'
,N'SqlArg2'
,@ml OUTPUT
SELECT @ml = substring(@ml, 3, 255)
SELECT @ml = substring(@ml, 1, len(@ml) - charindex('\', reverse(@ml)))
SET @dpth = isnull(@dpth, @md)
SET @lpth = isnull(@lpth, @ml)
PRINT @dpth
PRINT @lpth
EXEC sp_configure 'show advanced'
,1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell'
,1
RECONFIGURE
IF object_id('tempdb.dbo.#table1') IS NOT NULL
DROP TABLE #table1
CREATE TABLE #table1 (
[filename] VARCHAR(2000)
,depth INT
,isFile INT
)
SET @dpth = 'DIR ' + @dpth + '\*.mdf /b /s'
SET @lpth = 'DIR ' + @lpth + '\*.ldf /b /s'
INSERT INTO #table1
EXEC xp_DirTree @dpth
,1
,1
INSERT INTO #table1
EXEC xp_DirTree @lpth
,1
,1
DELETE
FROM #table1
WHERE isFile <> 1
UPDATE #table1
SET filename = rtrim(filename)
CREATE TABLE t_list (
filepath VARCHAR(2000)
,sizeinmb DECIMAL(18, 2)
)
INSERT INTO t_list (filepath)
SELECT otable.filename AS orphaned_files
FROM #table1 otable
LEFT OUTER JOIN master.dbo.sysaltfiles db ON rtrim(db.filename) = otable.filename
WHERE db.dbid IS NULL
ORDER BY 1
DECLARE @sizeingb AS DECIMAL(18, 2)
DECLARE @filepath AS VARCHAR(2000)
DECLARE db_cursor CURSOR
FOR
SELECT filepath
FROM t_list
OPEN db_cursor
FETCH NEXT
FROM db_cursor
INTO @filepath
WHILE @@FETCH_STATUS = 0
BEGIN
CREATE TABLE t_temp (c1 VARCHAR(2000))
DECLARE @cmd AS VARCHAR(3000)
SET @cmd = 'dir ' + @filepath
PRINT @cmd
INSERT INTO t_temp
EXEC master.dbo.xp_cmdshell @cmd
DELETE
FROM t_temp
WHERE c1 NOT LIKE '%1 File(s)%bytes'
DECLARE @size AS DECIMAL(18, 2)
SET @size = (
SELECT TOP 1 replace(replace(replace(c1, ' 1 File(s) ', ''), ',', ''), ' bytes', '')
FROM t_temp
WHERE c1 IS NOT NULL
)
SET @size = cast((@size / (1024 * 1024)) AS DECIMAL(18, 2))
DROP TABLE t_temp
UPDATE t_list
SET sizeinmb = @size
WHERE filepath = @filepath
FETCH NEXT
FROM db_cursor
INTO @filepath
END
CLOSE db_cursor
DEALLOCATE db_cursor
SELECT *
FROM t_list
DROP TABLE t_list
EXEC sp_configure 'show advanced'
,1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell'
,0
RECONFIGURE
SQL Server Korupsi Database
Selain memantau dan memelihara ruang disk Anda, pantau juga kesehatan disk Anda. Disk yang tidak sehat dapat merusak file SQL Server database. Jika ini terjadi, gunakan alat pemulihan database seperti DataNumen SQL Recovery untuk memperbaiki rusak SQL Server.
Pengantar Penulis:
Neil Varley adalah pakar pemulihan data di DataNumen, Inc., yang merupakan pemimpin dunia dalam teknologi pemulihan data, termasuk memperbaiki kerusakan email Outlook dan unggul dalam produk perangkat lunak pemulihan. Untuk informasi lebih lanjut kunjungi www.datanumen.com