Πολλές φορές SQL Server μπορεί να είναι ο λόγος για το πρόβλημα του χώρου στους δίσκους. Σε αυτό το άρθρο, θα δούμε ποιες είναι οι βασικές αιτίες για αυτό το ζήτημα και πώς μπορούμε να το διορθώσουμε.
Σας SQL Server χρειάζεται χώρο.
Πολλές φορές SQL Server θα χρειαστεί χώρο στο δίσκο. Αυτό μπορεί να οφείλεται σε αυξανόμενα δεδομένα μέσα στη βάση δεδομένων σας ή κατάργηση αποσύνδεσης αρχείων καταγραφής ή μη διαγραμμένων εφεδρικών αρχείων ή μη διαγραμμένων, ανεπιθύμητων αρχείων βάσης δεδομένων. Όποιος και αν είναι ο λόγος, σε ένα SQL Server, ο χώρος στο δίσκο είναι πολύ σημαντικός για συναλλαγές βάσης δεδομένων.
Η εργασία εκκαθάρισης δεν λειτουργεί
Εάν χρησιμοποιείτε τα εγγενή σχέδια συντήρησης της SQL για να δημιουργήσετε αντίγραφα ασφαλείας του SQL server βάσεις δεδομένων, μπορεί να υπάρχουν πιθανότητες ότι η ενότητα καθαρισμού σε αυτά τα σχέδια συντήρησης δεν εκτελεί το καθήκον τους. Όταν ο δίσκος εξαντληθεί, θα συνειδητοποιήσετε ότι τα παλιά αρχεία αντιγράφων ασφαλείας δεν καθαρίζονται σωστά. Θα συμπεριλάβατε τη μονάδα καθαρισμού στο πρόγραμμα συντήρησης. Παρά όλα αυτά αναρωτιέστε γιατί δεν λειτουργούσε;
Ελέγξτε εάν έχετε αναφέρει τον σωστό φάκελο για τη διαγραφή αντιγράφων ασφαλείας αρχείων, ελέγξτε αν έχετε αναφέρει τη σωστή επέκταση αρχείου για να διαγράψετε αρχεία αντιγράφων ασφαλείας, δοκιμάστε με την τελεία "." και χωρίς τελεία στην επέκταση αρχείου.
Τα αρχεία καταγραφής είναι τεράστια από τα αρχεία βάσης δεδομένων
Η πιο συνηθισμένη αιτία προβλήματος χώρου 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.
Εισαγωγή συγγραφέα:
Ο Neil Varley είναι ειδικός στην ανάκτηση δεδομένων στο DataNumen, Inc., η οποία είναι ο παγκόσμιος ηγέτης στις τεχνολογίες ανάκτησης δεδομένων, συμπεριλαμβανομένων επιδιορθώστε την καταστροφή email του Outlook και υπερέχουν προϊόντα λογισμικού ανάκτησης. Για περισσότερες πληροφορίες επισκεφθείτε www.datanumen.com