Çevrimdışı Removing Databases ve Orphaned Datafile’ları SQL Server’ınızdan Kaldırma

Posted by: copy_zenx_wordpress_master
Category: Level 50, SQL Server

Çevrimdışı Removing Databases ve Orphaned Datafile’ları SQL Server’ınızdan Kaldırma

Orphaned Datafile Nedir?

Orphaned database file’ları , herhangi bir ekli veritabanıyla (canlı veritabanı) ilişkili olmayan dosyalardır.

Bazen bir SQL Server örneğinden bir veritabanını bıraktığınızda, temel alınan dosyalar kaldırılmaz.

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

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

Neden onları önemsemelisiniz?

Çevrimdışı veritabanları ve artık dosyalar, SQL Server depolama alanınızda gereksiz alan kullanıyor olabilir.

Onları nasıl kontrol edebiliriz?

Çevrimdışı veritabanları

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 file’ları

Aşağıdaki betiği çalıştırabilir ve artık veritabanını 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üzeltiliriz?

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