Cara Memperbaiki Masalah Ruang yang Disebabkan oleh SQL Server

Kongsi Sekarang:

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.

Masalah Ruang Disebabkan Oleh SQLBanyak 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

SQL Server Pangkalan DataPunca 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

Kongsi Sekarang:

Ruangan komen telah ditutup.