Jak naprawić problemy z miejscem spowodowane przez SQL Server

Podziel się teraz:

Kilka razy SQL Server może być przyczyną problemu z miejscem na dyskach. W tym artykule zobaczymy, jakie są główne przyczyny tego problemu i jak możemy go naprawić.

Twoje SQL Server potrzebuje przestrzeni.

Problemy z przestrzenią kosmiczną spowodowane przez SQLWiele razy SQL Server będzie potrzebować miejsca na dysku. Może to być spowodowane rosnącą ilością danych w bazie danych, nieskurczonymi plikami dziennika lub nieusuniętymi plikami kopii zapasowych lub nieusuniętymi, niechcianymi plikami bazy danych. Bez względu na powód, na SQL Server, miejsce na dysku jest bardzo ważne dla transakcji w bazie danych.

Zadanie czyszczenia nie działa

Jeśli używasz natywnych planów konserwacji SQL do tworzenia kopii zapasowych SQL server baz danych, mogą istnieć szanse, że moduł czyszczenia w tych planach konserwacji nie wykonuje swojego zadania. Gdy na dysku zabraknie miejsca, zauważysz, że stare pliki kopii zapasowych nie są odpowiednio czyszczone. W planie konserwacji należy uwzględnić moduł czyszczenia. Mimo wszystko zastanawiasz się, dlaczego to nie działa?

Sprawdź, czy podałeś właściwy folder do usunięcia plików kopii zapasowej, sprawdź, czy podałeś prawidłowe rozszerzenie pliku, aby usunąć pliki kopii zapasowej, spróbuj z kropką „”. i bez kropki w rozszerzeniu pliku.

Pliki dziennika są ogromne niż pliki baz danych

SQL Server Baza danychMost częstą przyczyną problemu z przestrzenią na SQL Server to nienadzorowane pliki dziennika i pliki tempdb. Chociaż tempdb zostanie zmniejszona do oryginalnego rozmiaru za każdym razem, gdy usługa SQL zostanie przywróconatarts, dobrą praktyką jest monitorowanie wzrostu tempdb i zmniejszanie jej, gdy ma zamiar pochłonąć całą przestrzeń dyskową. Podobnie jak tempdb, pliki dziennika powinny być zawsze sprawdzane. Upewnij się, że masz kopię zapasową dziennika, aby zawsze zachować minimalny rozmiar plików dziennika.

Nieużywane pliki baz danych

Na dysku może znajdować się wiele nieużywanych i niedołączonych plików bazy danych, które marnują miejsce. Uruchom skrypt na swoim SQL Server wystąpienie, aby zidentyfikować takie pliki wraz z ich ścieżką. Po szybkiej analizie, jeśli nadal masz pewność, że te pliki nie są już potrzebne, usuń je i zaoszczędź miejsce.

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 Uszkodzenie bazy danych

Oprócz monitorowania i utrzymywania miejsca na dysku należy także monitorować stan dysku. Niezdrowy dysk może uszkodzić plik SQL Server bazy danych. Jeśli tak się stanie, użyj narzędzia do odzyskiwania bazy danych, takiego jak DataNumen SQL Recovery do naprawić uszkodzony SQL Server.

Wprowadzenie autora:

Neil Varley jest ekspertem w dziedzinie odzyskiwania danych w DataNumen, Inc., która jest światowym liderem w technologiach odzyskiwania danych, w tym naprawić uszkodzenie wiadomości e-mail programu Outlook i doskonałe oprogramowanie do odzyskiwania. po więcej informacji odwiedź www.datanumen.com

Podziel się teraz:

Możliwość dodawania komentarzy nie jest dostępna.