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.