Flere ganger SQL Server kan være årsaken til plassproblemet på disker. I denne artikkelen vil vi se hva som er årsakene til dette problemet og hvordan vi kan fikse det.
Din SQL Server trenger plass.
Mange ganger SQL Server vil trenge diskplass. Dette kan være på grunn av voksende data inne i databasen eller ukrympede loggfiler eller uopprettede sikkerhetskopifiler eller uønskede databasefiler. Uansett hva grunnen er, på en SQL Server, er plass på disken veldig viktig for databasetransaksjoner.
Oppryddingsoppgaven fungerer ikke
Hvis du bruker SQLs opprinnelige vedlikeholdsplaner for å sikkerhetskopiere din SQL server databaser, kan det være sjanser for at oppryddingsmodulen i disse vedlikeholdsplanene ikke gjør oppgaven sin. Når disken går tom for plass vil du innse at gamle sikkerhetskopifiler ikke er ordentlig renset. Du ville ha inkludert oppryddingsmodulen i vedlikeholdsplanen. Til tross for alt dette lurer du på hvorfor det ikke fungerte?
Sjekk om du har nevnt riktig mappe for å slette sikkerhetskopifiler, sjekk om du har nevnt riktig filtype for å slette sikkerhetskopifiler, prøv med punktum "." og uten en prikk i filtypen.
Loggfiler er store enn databasefiler
Most vanlig årsak til plassproblemer på SQL Server er de uovervåkede loggfilene og tempdb-filene. Selv om tempdb vil bli krympet til den opprinnelige størrelsen når SQL Service restarts, det er en god praksis å overvåke tempdb-veksten og krympe den når den er i ferd med å spise opp hele diskplassen. I likhet med tempdb bør loggfilene alltid være under sjekk. Sørg for at du har sikkerhetskopiering av logg for alltid å holde loggfiler i minimal størrelse.
Ubrukte databasefiler
Det kan være mange ubrukte og ikke-tilknyttede databasefiler som sitter på disken din og kaster bort plass. Utfør skriptet på din SQL Server forekomst for å identifisere slike filer sammen med banen deres. Etter en rask analyse, hvis du fortsatt er sikker på at disse filene ikke er nødvendige lenger, slett dem og spar plass.
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 Databasekorrupsjon
I tillegg til å overvåke og vedlikeholde diskplassen din, overvåk også diskens helse. Usunn disk kan ødelegge din SQL Server databaser. Hvis dette skjer, vennligst bruk databasegjenopprettingsverktøy som DataNumen SQL Recovery til reparasjon ødelagt SQL Server.
Forfatterintroduksjon:
Neil Varley er en datagjenopprettingsekspert innen DataNumen, Inc., som er verdensledende innen datagjenopprettingsteknologier, inkludert reparere e-postkorrupsjon i Outlook og excel-programvareprodukter for gjenoppretting. For mer informasjon besøk www.datanumen. Med