Как да коригирам космическите проблеми, причинени от SQL Server

Споделете сега:

Няколко пъти SQL Server може да е причината за космическия проблем на дисковете. В тази статия ще видим кои са основните причини за този проблем и как можем да го отстраним.

Вашият SQL Server се нуждае от пространство.

Проблеми с пространството, причинени от SQLМного пъти SQL Server ще се нуждаят от дисково пространство. Това може да се дължи на нарастващи данни във вашата база данни или на невградени регистрационни файлове или на изтрити архивни файлове или на изтрити, нежелани файлове на базата данни. Каквато и да е причината, на a SQL Server, пространството на диска е много важно за транзакциите с база данни.

Задачата за почистване не работи

Ако използвате собствените планове за поддръжка на SQL за архивиране на вашия SQL server бази данни, може да има шанс модулът за почистване в тези планове за поддръжка да не изпълнява задачите си. Когато на диска остане място, ще разберете, че старите архивни файлове не са правилно почистени. Бихте включили модула за почистване в плана за поддръжка. Въпреки всичко това, чудите ли се защо не работи?

Проверете дали сте споменали правилната папка за изтриване на архивни файлове, проверете дали сте споменали правилното разширение на файла, за да изтриете архивни файлове, опитайте с точка “.” и без точка в разширението на файла.

Регистрационните файлове са огромни от файловете с бази данни

SQL Server База данниНай-честата причина за проблеми с пространството SQL Server са необслужваните лог файлове и tempdb файлове. Въпреки че tempdb ще се свие до оригиналния размер при рестартиране на SQL услугата, добра практика е да се следи растежът на 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.

Въведение на автора:

Нийл Варли е експерт по възстановяване на данни в DataNumen, Inc., която е световен лидер в технологиите за възстановяване на данни, включително поправяне на корупция на имейл в Outlook и excel софтуерни продукти за възстановяване. За повече информация посетете WWW.datanumen.com

Споделете сега:

Коментарите са забранени.