Mehrmals SQL Server Dies könnte der Grund für das Speicherplatzproblem auf Datenträgern sein. In diesem Artikel werden wir sehen, was die Hauptursachen für dieses Problem sind und wie wir es beheben können.
Ihre SQL Server braucht Platz.
Viele Male SQL Server benötigt Speicherplatz. Dies kann auf wachsende Daten in Ihrer Datenbank oder auf nicht geschrumpfte Protokolldateien oder nicht gelöschte Sicherungsdateien oder nicht gelöschte, unerwünschte Datenbankdateien zurückzuführen sein. Was auch immer der Grund ist, auf einem SQL ServerSpeicherplatz auf der Festplatte ist für Datenbanktransaktionen sehr wichtig.
Bereinigungsaufgabe funktioniert nicht
Wenn Sie die nativen Wartungspläne von SQL zum Sichern Ihrer Daten verwenden SQL server In Datenbanken besteht möglicherweise die Möglichkeit, dass das Bereinigungsmodul in diesen Wartungsplänen seine Aufgabe nicht erfüllt. Wenn auf der Festplatte nicht genügend Speicherplatz vorhanden ist, werden Sie feststellen, dass alte Sicherungsdateien nicht ordnungsgemäß bereinigt werden. Sie hätten das Bereinigungsmodul in den Wartungsplan aufgenommen. Fragen Sie sich trotzdem, warum es nicht funktioniert hat?
Überprüfen Sie, ob Sie den richtigen Ordner zum Löschen von Sicherungsdateien angegeben haben. Überprüfen Sie, ob Sie die richtige Dateierweiterung zum Löschen von Sicherungsdateien angegeben haben. Versuchen Sie es mit dem Punkt "." und ohne Punkt in der Dateierweiterung.
Protokolldateien sind riesiger als Datenbankdateien
Häufigste Ursache für Platzprobleme auf SQL Server Es handelt sich dabei um die unbeaufsichtigten Protokolldateien und die tempdb-Datei. Obwohl die tempdb-Datei bei jedem Neustart des SQL-Servers auf ihre ursprüngliche Größe verkleinert wird, empfiehlt es sich, ihr Wachstum zu überwachen und sie zu verkleinern, sobald sie fast den gesamten Speicherplatz belegt. Ähnlich wie die tempdb-Datei sollten auch die Protokolldateien regelmäßig überprüft werden. Stellen Sie sicher, dass Sie über eine Protokollsicherung verfügen, um die Größe der Protokolldateien stets so gering wie möglich zu halten.
Nicht verwendete Datenbankdateien
Möglicherweise befinden sich viele nicht verwendete und nicht angehängte Datenbankdateien auf Ihrer Festplatte und verschwenden Speicherplatz. Führen Sie das Skript auf Ihrem Computer aus SQL Server Instanz, um solche Dateien zusammen mit ihrem Pfad zu identifizieren. Wenn Sie nach einer kurzen Analyse immer noch sicher sind, dass diese Dateien nicht mehr benötigt werden, löschen Sie sie und sparen Sie Platz.
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 Datenbankkorruption
Überwachen Sie nicht nur den Speicherplatz, sondern auch den Zustand Ihrer Festplatte. Eine ungesunde Festplatte kann Ihre beschädigen SQL Server Datenbanken. Verwenden Sie in diesem Fall das Datenbankwiederherstellungstool wie DataNumen SQL Recovery zu Fix beschädigt SQL Server.
Einführung des Autors:
Neil Varley ist ein Experte für Datenwiederherstellung in DataNumen, Inc., das weltweit führend bei Datenwiederherstellungstechnologien ist, einschließlich Relook-E-Mail-Beschädigung reparieren und Excel-Wiederherstellungssoftwareprodukte. Für weitere Informationen besuchen Sie www.datanumen.com €XNUMX