如何解決由以下原因引起的空間問題 SQL Server

立即分享:

幾次 SQL Server 可能是磁盤空間問題的原因。 在本文中,我們將看到導致此問題的根本原因以及如何解決此問題。

您的 SQL Server 需要空間。

SQL引起的空間問題很多次 SQL Server 將需要磁盤空間。 這可能是由於數據庫中數據的增長,未壓縮的日誌文件,未刪除的備份文件或未刪除的不需要的數據庫文件引起的。 不管是什麼原因, SQL Server,磁盤上的空間對於數據庫事務非常重要。

清理任務不起作用

如果您使用SQL的本機維護計劃來備份您的 SQL server 數據庫中,這些維護計劃中的清理模塊可能沒有完成其任務。 當磁盤空間不足時,您將意識到未正確清理舊的備份文件。 您將在維護計劃中包括清除模塊。 儘管如此,您是否想知道為什麼它不起作用?

檢查您是否提到刪除備份文件的正確文件夾,檢查您是否提到刪除備份文件的正確文件擴展名,請嘗試使用點“。”。 並且文件擴展名中沒有點。

日誌文件比數據庫文件大

SQL Server 數據庫空間問題最常見的原因是 SQL Server 指的是無人值守的日誌檔案和 tempdb 檔案。雖然每次 SQL 服務重新啟動後 tempdb 都會恢復到原始大小,但最好還是監控 tempdb 的成長情況,並在它即將佔用全部磁碟空間時將其縮小。與 tempdb 類似,日誌檔案也應始終處於檢查狀態。確保已做好日誌備份,以始終將日誌檔案保持在最小大小。

未使用的數據庫文件

磁盤上可能有許多未使用和未附加的數據庫文件,這些文件正在浪費空間。 在您的計算機上執行腳本 SQL Server 實例,以識別此類文件及其路徑。 經過快速分析,如果您仍然確定不再需要這些文件,請刪除它們並節省空間。

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 數據庫損壞

除了監視和維護磁盤空間外,還監視磁盤的運行狀況。 磁盤不健康會損壞您的磁盤 SQL Server 數據庫。 如果發生這種情況,請使用數據庫恢復工具 DataNumen SQL Recovery 至 修復損壞 SQL Server.

作者簡介:

Neil Varley是的數據恢復專家 DataNumen,Inc.是數據恢復技術的全球領導者,包括 修復Outlook電子郵件損壞 和excel恢復軟件產品。 欲了解更多信息,請訪問 萬維網。datanumen.COM

立即分享:

評論被關閉。