Beberapa kali SQL Server mungkin menjadi sebab masalah ruang pada cakera. Dalam artikel ini, kita akan melihat apakah punca utama masalah ini dan bagaimana kita dapat memperbaikinya.
SQL Server memerlukan ruang.
Banyak kali SQL Server akan memerlukan ruang cakera. Ini mungkin disebabkan oleh peningkatan data di dalam pangkalan data anda atau fail log yang tidak dikurangkan atau fail sandaran yang tidak dibatalkan atau fail pangkalan data yang tidak diuruskan, yang tidak diingini. Apa pun alasannya, pada a SQL Server, ruang pada cakera sangat penting untuk transaksi pangkalan data.
Tugas pembersihan tidak berfungsi
Sekiranya anda menggunakan rancangan penyelenggaraan asli SQL untuk membuat sandaran SQL server pangkalan data, mungkin ada kemungkinan modul pembersihan dalam rancangan penyelenggaraan tersebut tidak menjalankan tugasnya. Apabila cakera kehabisan ruang, anda akan menyedari bahawa fail sandaran lama tidak dibersihkan dengan betul. Anda akan memasukkan modul pembersihan dalam rancangan penyelenggaraan. Walaupun begitu, adakah anda tertanya-tanya mengapa ia tidak berfungsi?
Periksa apakah anda telah menyebut folder yang betul untuk menghapus fail sandaran, periksa apakah Anda telah menyebutkan peluasan fail yang betul untuk menghapus fail sandaran, coba dengan titik "." dan tanpa titik dalam peluasan fail.
Fail log sangat besar daripada fail pangkalan data
Punca paling biasa bagi masalah ruang pada SQL Server ialah fail log dan fail tempdb yang tidak dijaga. Walaupun tempdb akan dikecilkan kepada saiz asal setiap kali Perkhidmatan SQL dimulakan semula, adalah amalan yang baik untuk memantau pertumbuhan tempdb dan mengecilkannya apabila ia hampir memakan seluruh ruang cakera. Sama seperti tempdb, fail log harus sentiasa disemak. Pastikan anda mempunyai sandaran log untuk sentiasa memastikan fail log pada saiz minimum.
Fail pangkalan data yang tidak digunakan
Mungkin terdapat banyak fail pangkalan data yang tidak digunakan dan tidak dilampirkan di dalam cakera anda dan membuang masa. Laksanakan skrip pada anda SQL Server contoh untuk mengenal pasti fail seperti itu dan jalannya. Setelah analisis pantas, jika anda masih yakin bahawa fail tersebut tidak diperlukan lagi, hapus fail tersebut dan simpan 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 Rasuah Pangkalan Data
Selain memantau dan menjaga ruang cakera anda, juga memantau kesihatan cakera anda. Cakera yang tidak sihat boleh merosakkan anda SQL Server pangkalan data. Sekiranya ini berlaku, sila gunakan alat pemulihan pangkalan data seperti DataNumen SQL Recovery kepada betulkan rosak SQL Server.
Pengenalan Pengarang:
Neil Varley adalah pakar pemulihan data di DataNumen, Inc., yang merupakan pemimpin dunia dalam teknologi pemulihan data, termasuk membaiki kerosakan e-mel Outlook dan produk perisian pemulihan yang unggul. Untuk maklumat lebih lanjut, lawati www.datanumen.com