SQL Server’ınızdan Databases ve Orphaned Datafiles’ları Kaldırma

Posted by: copy_zenx_wordpress_master
Category: Level 50, SQL Server

SQL Server’ınızdan Databases ve Orphaned Datafiles’ları Kaldırma

Orphaned Datafiles Nedir?

Orphaned database dosyaları, herhangi bir ekli database (canlı veritabanı) ilişkili olmayan dosyalardır.

Bazen bir SQL Server örneğinden bir database bıraktığınızda, temeldeki dosyalar kaldırılmaz.

Çok sayıda geliştirme ve test ortamı yönetiyorsanız, bu kesinlikle gerçekleşebilir.

Genellikle, bir database çevrimdışı duruma getirdiğinizde ve kaldırmadan önce tekrar çevrimiçi duruma getirmeyi unuttuğunuzda.

Neden onları önemsemelisiniz?

Çevrimdışı veritabanları ve Orphaned database, SQL Server depolama alanınızda gereksiz alan kullanıyor olabilir.

Onları nasıl kontrol edebiliriz?

Offline databases

Kurulumunuzdaki tüm çevrimdışı veritabanlarını listelemek için aşağıdaki betiği çalıştırın.

SELECT

‘DB_NAME’ = db.name,

‘FILE_NAME’ = mf.name,

‘FILE_TYPE’ = mf.type_desc,

‘FILE_PATH’ = mf.physical_name

FROM sys.databases db

INNER JOIN sys.master_files mf ON db.database_id = mf.database_id

WHERE db.state = 6

 

Orphaned database files

Aşağıdaki betiği çalıştırabilir ve Orphaned database bir örnekten bulabilirsiniz.

DECLARE @DefaultDataPath VARCHAR(512), @DefaultLogPath VARCHAR(512);

SET @DefaultDataPath = CAST(SERVERPROPERTY(‘InstanceDefaultDataPath’) AS VARCHAR(512));
SET @DefaultLogPath = CAST(SERVERPROPERTY(‘InstanceDefaultLogPath’) AS VARCHAR(512));

IF OBJECT_ID(‘tempdb..#OrphanedDataFiles’) IS NOT NULL
DROP TABLE #OrphanedDataFiles;

CREATE TABLE #OrphanedDataFiles (
Id INT IDENTITY(1,1),
[FileName] NVARCHAR(512),
Depth smallint,
FileFlag bit,
Directory VARCHAR(512) NULL,
FullFilePath VARCHAR(512) NULL);

INSERT INTO #OrphanedDataFiles ([FileName], Depth, FileFlag)
EXEC MASTER..xp_dirtree @DefaultDataPath, 1, 1;

UPDATE #OrphanedDataFiles
SET Directory = @DefaultDataPath, FullFilePath = @DefaultDataPath + [FileName]
WHERE Directory IS NULL;

INSERT INTO #OrphanedDataFiles ([FileName], Depth, FileFlag)
EXEC MASTER..xp_dirtree @DefaultLogPath, 1, 1;

UPDATE #OrphanedDataFiles

SET Directory = @DefaultLogPath, FullFilePath = @DefaultLogPath + [FileName]
WHERE Directory IS NULL;

SELECT
f.[FileName],
f.Directory,
f.FullFilePath
FROM #OrphanedDataFiles f
LEFT JOIN sys.master_files mf ON f.FullFilePath = REPLACE(mf.physical_name,’\\’, ‘\’)
WHERE mf.physical_name IS NULL AND f.FileFlag = 1
ORDER BY f.[FileName], f.Directory

DROP TABLE #OrphanedDataFiles;

Ayrıca, bunu dba araçlarını (PowerShell) kullanarak da yapabilirsiniz .

Nasıl düzeltilir?

Hâlâ çevrimdışı olduklarından, muhtemelen gerekli değillerdir.

  1. Dosyaları kaldırmayı düşünün.
  2. Bir potansiyel varsa, onlardan bir şeye ihtiyacınız olabilir, önce yedekleyin.

Size ve Veritabanlarınıza Yardımcı Olmak İçin Bekliyoruz!

Author: copy_zenx_wordpress_master