← Back to list

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

Merhaba,

Ahmet ORHAN in Turk Telekom Bulut Teknolojileri · 2023-10-06 08:32 · 5 claps · 2.5 min read
#sql #sql-server #veritabanı #aktif #pasif
Open on Medium ↗

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

Merhaba,

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.

source: screenshot by author

source: screenshot by author

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

source: screenshot by author

source: screenshot by author

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

source: screenshot by author

source: screenshot by author

  • 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

source: screenshot by author

source: screenshot by author

  • 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](http://twitter.com/dbId) as int ve declare [@dbname](http://twitter.com/dbname) as varchar(100) komutları, sorguda kullanılacak iki değişkeni tanımlar. [@dbId](http://twitter.com/dbId) bir tamsayı (int) ve [@dbname](http://twitter.com/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](http://twitter.com/dbId),[@dbname](http://twitter.com/dbname) komutu, imlecin bir sonraki veritabanı kaydına hareket etmesini ve bu kaydın [@dbId](http://twitter.com/dbId) ve [@dbname](http://twitter.com/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](http://twitter.com/dbId),[@dbname](http://twitter.com/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.

Yazımı beğendiyseniz alkış butonunu kullanabilirsiniz. Ayrıca, herhangi bir sorunuz veya eklemek istediğiniz detaylar varsa bana yazmaktan çekinmeyin.

kaynak : https://omercolakoglu.net/


메타데이터
post_id
b40a746ed131
slug
sql-server-aktif-olan-ve-olmayan-veri-tabanlarını-bulma-i̇şlemi-b40a746ed131
url
https://medium.com/@ahmet-orhan/sql-server-aktif-olan-ve-olmayan-veri-tabanlar%C4%B1n%C4%B1-bulma-i%CC%87%C5%9Flemi-b40a746ed131
canonical_url
https://medium.com/@ahmet-orhan/sql-server-aktif-olan-ve-olmayan-veri-tabanlar%C4%B1n%C4%B1-bulma-i%CC%87%C5%9Flemi-b40a746ed131
author_url
https://medium.com/@ahmet-orhan
status
ok
fetched_at
2026-07-25 03:20:30