Kategoriler
SQL Windows Server Yazılar

SQL Server Aktif olan ve Olmayan Veri Tabanlarını Bulma İşlemi

Sql serverda çok fazla veri tabanı olduğu durumlarda hangilerinin aktif olarak kullanılıp kullanılmadığını belirlemek için aşağıdaki kodu kullanarak bu işlemi gerçekleştireceğiz;

CREATE TABLE #T (dbName varchar(100),last_user_seek datetime,last_user_scan datetime,last_user_lookup datetime,last_user_update datetime)
declare @dbId as int
declare @dbname as varchar(100)
declare crs cursor for select dbid,name from sysdatabases 
open crs
fetch next from crs into @dbId,@dbname
while @@FETCH_STATUS=0
begin
Insert Into #T 
Select @dbname,
last_user_seek = MAX(last_user_seek),
last_user_scan = MAX(last_user_scan),
last_user_lookup = MAX(last_user_lookup),
last_user_update = MAX(last_user_update)
From
sys.dm_db_index_usage_stats
WHERE
database_id=@dbId

fetch next from crs into @dbId,@dbname
end 
close crs
deallocate crs 

select * from #t 
drop table #t
  • Öncelikle SSMS (SQL Server Management Studio) açıyoruz. Eğer sizde yüklü değil ise kurulumunu anlattığım yazıma buradan ulaşabilirsiniz.

  • İlgili alanları doldurarak sql server a giriş yapıyoruz,

  • Giriş işlemi yaptıktan sonra “New Query” diyerek yeni bir sorgu ekranı açıyoruz

  • Gelen sorgu ekranına daha önce verdiğim sorguyu kopyalarak buraya yapıştırıyoruz ve “Execute” yada F5 tuşuna basarak sorguyu gerçekleştiriyoruz

  • sorgu sonrasında yukarıdaki gibi hangi veri tabanınızda ne zaman işlem yapılmış ya da yapılmamış görmüş olacaksınız.

Meraklıları için sorgunun açıklaması;

1. `CREATE TABLE #T` komutu, geçici bir tablo oluşturur. Bu geçici tablo `#T` adını taşır ve içinde birkaç sütun bulunur: `dbName`, `last_user_seek`, `last_user_scan`, `last_user_lookup` ve `last_user_update`. Bu tablo, sonuçları saklamak için kullanılacaktır.

2. `declare @dbId as int` ve `declare @dbname as varchar(100)` komutları, sorguda kullanılacak iki değişkeni tanımlar. `@dbId` bir tamsayı (int) ve `@dbname` bir karakter dizisi (varchar) değişkenidir.

3. `declare crs cursor for select dbid,name from sysdatabases` komutu, `sysdatabases` sistem görünümünden veritabanı kimlikleri (`dbid`) ve isimleri (`name`) seçerek bir imleç (cursor) tanımlar. Bu imleç, tüm veritabanları üzerinde dönmemize izin verecektir.

4. `open crs` komutu, tanımlanan imleci açar ve veritabanı bilgilerini işlemeye başlamak için hazır hale getirir.

5. `fetch next from crs into @dbId,@dbname` komutu, imlecin bir sonraki veritabanı kaydına hareket etmesini ve bu kaydın `@dbId` ve `@dbname` değişkenlerine atanmasını sağlar. İmleç, tüm veritabanları üzerinde dolaşırken bu işlem tekrarlanır.

6. `while @@FETCH_STATUS=0` komutu, imlecin sona erip ermediğini kontrol eder. `@@FETCH_STATUS` değişkeni 0 olduğu sürece, yani imleç daha fazla veritabanı kaydı bulduğu sürece döngü devam eder.

7. Döngü içindeki `Insert Into #T` komutu, `#T` geçici tablosuna verileri ekler. Bu komut, `sys.dm_db_index_usage_stats` sistem görünümünden belirli bir veritabanının dizin kullanım istatistiklerini alır ve bu istatistiklerin maksimum değerlerini `#T` tablosuna ekler. Bu sayede her bir veritabanının en son dizin kullanım istatistikleri bu tabloda birleştirilir.

8. Döngü, bir sonraki veritabanı kaydına geçmek için `fetch next from crs into @dbId,@dbname` komutunu kullanır ve işlem diğer veritabanları üzerinde tekrarlanır.

9. Tüm veritabanları üzerinde dolaşıldığında, `close crs` komutu imleci kapatır ve `deallocate crs` komutu imleci temizler.

10. `select * from #t` komutu, `#T` tablosundaki sonuçları görüntüler. Bu sonuçlar, her bir veritabanının en son dizin kullanım istatistiklerini içerir.

11. Son olarak, `drop table #t` komutu, geçici tabloyu siler, çünkü artık sonuçlara ihtiyaç duyulmamaktadır.

kaynak : https://omercolakoglu.net/


Herhangi bir sorunuz veya eklemek istediğiniz detaylar varsa bana yazmaktan çekinmeyin.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir