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.
Wiele 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

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