Як виправити космічні проблеми, викликані SQL Server

Поділитися зараз:

Кілька разів SQL Server може бути причиною космічної проблеми на дисках. У цій статті ми побачимо основні причини цієї проблеми та способи її усунення.

вашу SQL Server потребує простору.

Космічні проблеми, спричинені SQLБагато разів SQL Server знадобиться місце на диску. Можливо, це пов’язано зі збільшенням кількості даних у вашій базі даних або незменшеними файлами журналів, або видаленими файлами резервних копій, або видаленими, небажаними файлами бази даних. Якою б не була причина, на SQL Server, місце на диску дуже важливо для транзакцій баз даних.

Завдання очищення не працює

Якщо ви використовуєте власні плани обслуговування SQL для резервного копіювання SQL server баз даних, можливо, що модуль очищення в цих планах технічного обслуговування не виконує свого завдання. Коли на диску закінчиться місце, ви зрозумієте, що старі файли резервних копій не очищені належним чином. Ви б включили модуль очищення до плану технічного обслуговування. Незважаючи на все це, вам цікаво, чому це не спрацювало?

Перевірте, чи згадали ви правильну папку для видалення файлів резервної копії, переконайтеся, що вказали правильне розширення, щоб видалити файли резервних копій, спробуйте поставити крапку “. і без крапки у розширенні файлу.

Файли журналів величезні, ніж файли баз даних

SQL Server DatabaseНайпоширеніша причина проблем з простором 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

Поділитися зараз:

Коментарі закриті.