როგორ მოვაგვაროთ კოსმოსური პრობლემები გამოწვეული SQL Server

გააზიარე ახლა:

Რამდენჯერმე SQL Server შეიძლება იყოს დისკებზე სივრცის პრობლემის მიზეზი. ამ სტატიაში ჩვენ ვნახავთ, რა არის ამ პრობლემის ძირითადი მიზეზები და როგორ შეგვიძლია მისი გამოსწორება.

თქვენი SQL Server სივრცე სჭირდება.

SQL-ით გამოწვეული სივრცის პრობლემებიᲑევრჯერ SQL Server დასჭირდება დისკის ადგილი. ეს შეიძლება იყოს თქვენი მონაცემთა ბაზის შიგნით მზარდი მონაცემების ან ჩაშლილი ჟურნალის ფაილების ან წაშლილი სარეზერვო ფაილების ან წაშლილი, არასასურველი მონაცემთა ბაზის ფაილების გამო. რაც არ უნდა იყოს მიზეზი, ა SQL Server, დისკზე სივრცე ძალიან მნიშვნელოვანია მონაცემთა ბაზის ტრანზაქციებისთვის.

დასუფთავების ამოცანა არ მუშაობს

თუ იყენებთ SQL-ის მშობლიურ ტექნიკურ გეგმებს თქვენი სარეზერვო ასლის შესაქმნელად SQL server მონაცემთა ბაზებში, შეიძლება არსებობდეს შანსი, რომ გასუფთავების მოდული ამ ტექნიკურ გეგმებში არ ასრულებს თავის დავალებას. როდესაც დისკი ამოიწურება, თქვენ მიხვდებით, რომ ძველი სარეზერვო ფაილები არ არის სათანადოდ გაწმენდილი. თქვენ შეიტანეთ გაწმენდის მოდული სარემონტო გეგმაში. ამ ყველაფრის მიუხედავად გაინტერესებთ რატომ არ მუშაობდა?

შეამოწმეთ თუ მიუთითეთ სწორი საქაღალდე სარეზერვო ფაილების წასაშლელად, შეამოწმეთ თუ მიუთითეთ ფაილის სწორი გაფართოება სარეზერვო ფაილების წასაშლელად, სცადეთ წერტილით "." და წერტილის გარეშე ფაილის გაფართოებაში.

ჟურნალის ფაილები უფრო დიდია, ვიდრე მონაცემთა ბაზის ფაილები

SQL Server მონაცემთა ბაზაMost სივრცის პრობლემის საერთო მიზეზი SQL Server არის უყურადღებო ჟურნალის ფაილები და tempdb ფაილები. თუმცა tempdb შემცირდება თავდაპირველ ზომამდე, როდესაც SQL Service Restarც, კარგი პრაქტიკაა 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 to გაასწორონ დაზიანებული SQL Server.

ავტორი შესავალი:

ნილ ვარლი არის მონაცემთა აღდგენის ექსპერტი DataNumen, Inc., რომელიც მსოფლიო ლიდერია მონაცემთა აღდგენის ტექნოლოგიებში, მათ შორის Outlook ელფოსტის კორუფციის შეკეთება და Excel-ის აღდგენის პროგრამული პროდუქტები. დამატებითი ინფორმაციისთვის ეწვიეთ www.datanumen. ერთად

გააზიარე ახლა:

კომენტარები დახურულია.