Как исправить проблемы с пространством, вызванные SQL Server

Поделись сейчас:

Несколько раз SQL Server может быть причиной проблемы с местом на дисках. В этой статье мы увидим, каковы основные причины этой проблемы и как мы можем ее исправить.

ВАШЕ SQL Server нужно пространство.

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

Задача очистки не работает

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

Проверьте, указали ли вы правильную папку для удаления файлов резервных копий, проверьте, указали ли вы правильное расширение файла для удаления файлов резервных копий, попробуйте с точкой «.» и без точки в расширении файла.

Файлы журнала больше, чем файлы базы данных

SQL Server База данныхMost частая причина проблем с пространством на SQL Server это автоматические файлы журнала и файлы tempdb. Хотя база данных tempdb будет уменьшаться до исходного размера всякий раз, когда служба SQLtarts рекомендуется отслеживать рост базы данных 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

Поделись сейчас:

Оставьте комментарий

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *