Bagaimana Memperbaiki Masalah Ruang yang Disebabkan oleh SQL Server

Bagikan sekarang:

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.

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

SQL Server Basis DataMost 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

Bagikan sekarang:

Komentar ditutup.