Sayfalar

5 Mayıs 2025 Pazartesi

SQL Sunucu Veritabanlarını T-SQL Komutları ile Single veya Multi User Moduna Almak

 SQL Server  2012 sürümünden önce veritabanlarında DBCC işlemlerini yapmadan önce,veritabanımızı single mode durumuna aşağıda ki kod ile almaktaydık:

 

EXEC sp_dboption 'Database', 'single user', 'TRUE'

 

Zannederim ki SQL Server 2012 sürümü ile birlikte bu söz dizimi değişti ve veritabanlarımızı aşağıda ki şekilde  single mode'a almaya başladık;

 

ALTER DATABASE DATABASE

SET SINGLE_USER

 

 

Yukarıda ki kod ile veritabanımızı single mode'a alıp, DBCC işlemlerimizi bitirince aşağıda ki kod ile veritabanımızı tekrar  MULTI_USER mode'a alabiliriz.



ALTER DATABASE DATABASE

SET MULTI_USER

 Eğer benim gibi belirli aralıklarla DBCC işlemlerine ihtiyaç duyarsanız,unutmamak için bu komutları not almakta fayda oldugu görüşündeyim.







29 Nisan 2025 Salı

Logo Netsis Veri Tabanı Kontrol Paneli ve İndexleme

 Kurumsal Kaynak Planlama(ERP) programlarında verilerin saklandıgı veri tabanlarında hareket sıklıgı nedeni ile İndexler parçalanmakta ve bu durum hareketlerde gecikmelere,performans sorunlarına neden olmaktadır.Bizim özelimiz de finansal verilerden ziyade, üretim ve depolar arası transfer,sevkiyat hareketlerinde ve bu hareketlerin  tutuldugu bağlı tablolarda sıklıkla sorun oluşturmakta.Normalde böyle durumlarda SQL SSMS yardımı ile T-SQL komutları,GUI tabanlı veya zamanlanmış görevleri kullanarak index bakımı planlamaktaydık.Logo Netsis 9.0.51.0 versiyonu ile programa Veri Tabanı Kontrol Paneli  eklenmiş olup,bundan böyle bu ekranı kullanarakta  indexleme yapabileceğiz.Normalde bu menünün altında aşağıda ki işlemleri yapmamızı sağlayan seçenekler bulunmaktaydı:


  • Genel Bilgiler(Veri Tabanı Sunucusu versiyonu,mdf-ldf dosyaları,ram,disk bilgileri)
  • Tablo Bilgileri(Veritabanı içinde ki tablolarda ki kayıt sayısı)
  • İndex Bilgileri(Bu yazının konusu buna odaklanmış olup burada index parçalanma durumlarını görüp index ve statistic update işlemleri buradan yapıabilmekte)
  • Şema/Nesne Farkları
  • Performans Testi
Yukarıda ki seçeneklere ek olarak son versiyonda kilitlenen işlemler diye yeni bir sekme güncellemesi yapılmış(Sanırım Deadlock gibi durumlar için).Bizim yazımızın konusu İndexleme oldugu için Logo Netsis  Veri Tabanı Kontrol Paneli  özelinde İndexleme ile ilgili çalışma yapacagız.Öncelikle arama bölümüne veya Genel/Yardımcı Programlar/Raporlar/Veri Tabanı Kontrol Paneli  giderek,Veri Tabanı Kontrol Panelinde indexleme bölümüne gelip,Fragmentation bölümünü büyükten küçüge göre sıralamamız gerekmektedir.









Yukarıda en yüksek parçalanma oranı %80 oldugu için,sınır değeri olarak %85 belirleyerek İstatistic güncellemesi yapılsın seçeneğini işaretliyorum.Bundan sonra  seçilen tablolara bağlı indexler yeniden düzenlecek olup,işlemi profiler ile takip ettiğimizde işlemin aşağıda ki sırada  devam ettiğini göreceğiz:








/*SELECT */
EXEC NSP_INDEXMAINTANCE '_TBLCARISKTOP',85;
 END



Ardından istatistik update seçeneği de seçildiği için,son profiler çıktımız aşağıda ki gibi olacaktır;

/*SELECT */
EXEC SP_UPDATESTATS;
 END


Son olarak işlemin ardından aşağıda görüldüğü gibi parçalanma oranlarının düştüğünü göreceğiz;








Logo Netsis bunlara ek olarak isteğe bağlı olarak,İndexleme'yi zamanlanmış olarakta yaptırabilmektedir.




27 Şubat 2025 Perşembe

Bir Garip Netsis Güncelleme Sorunu

 Geçtiğimiz hafta sonu Netsis programını 9.0.61.2 versiyonuna yükseltip, db update işlemlerini tamamlayıp,programlara giriş yaparken license security lisans bilgisi okuma-hatası sorunu ile karşılaştım.İşin ilginci Netsis servisleri normal çalışıyor,SSO servisi de güncellenmiş ve servisi çalışıyor olmasına ragmen SSO'ya giriş yapılamıyordu.Netsis desteği aldıgımız iş ortagımız ile görüşmemiz sırasında sorunun Windows server 2016 işletim sistemlerinde görülebildiği ve ENTERPRISE9\Kurulum\Utilities altında ki MDAC.exe ve Microsoft OLE DB Driver for MSSQL.msi kurulumlarının yapılmasının ardından sorunun çözüldüğünü gördük.

17 Şubat 2025 Pazartesi

SQL Server Transaction ve İş Durumlarını Gösteren Sorgu

 

SELECT tst.session_id, [database_name] = db_name(s.database_id)

    , tat.transaction_begin_time

    , transaction_duration_s = datediff(s, tat.transaction_begin_time, sysdatetime())

    , transaction_type = CASE tat.transaction_type  WHEN 1 THEN 'Read/write transaction'

        WHEN 2 THEN 'Read-only transaction'

        WHEN 3 THEN 'System transaction'

        WHEN 4 THEN 'Distributed transaction' END

    , input_buffer = ib.event_info, tat.transaction_uow    

    , transaction_state  = CASE tat.transaction_state   

        WHEN 0 THEN 'The transaction has not been completely initialized yet.'

        WHEN 1 THEN 'The transaction has been initialized but has not started.'

        WHEN 2 THEN 'The transaction is active - has not been committed or rolled back.'

        WHEN 3 THEN 'The transaction has ended. This is used for read-only transactions.'

        WHEN 4 THEN 'The commit process has been initiated on the distributed transaction.'

        WHEN 5 THEN 'The transaction is in a prepared state and waiting resolution.'

        WHEN 6 THEN 'The transaction has been committed.'

        WHEN 7 THEN 'The transaction is being rolled back.'

        WHEN 8 THEN 'The transaction has been rolled back.' END

    , transaction_name = tat.name, request_status = r.status

    , tst.is_user_transaction, tst.is_local

    , session_open_transaction_count = tst.open_transaction_count 

    , s.host_name, s.program_name, s.client_interface_name, s.login_name, s.is_user_process

FROM sys.dm_tran_active_transactions tat

INNER JOIN sys.dm_tran_session_transactions tst  on tat.transaction_id = tst.transaction_id

INNER JOIN Sys.dm_exec_sessions s on s.session_id = tst.session_id

LEFT OUTER JOIN sys.dm_exec_requests r on r.session_id = s.session_id

CROSS APPLY sys.dm_exec_input_buffer(s.session_id, null) AS ib

ORDER BY tat.transaction_begin_time DESC;

4 Şubat 2025 Salı

Yerel Yönetici Hesabı Gerektirmeden Program Çalıştırmada Oluşan 740 Kodlu Hata

 Bazı programlar yerel yönetici grubuna üyelik gerektirdiğinden runas komutu ile yönetici grubuna uye yapmadan programları çalıştırabilmekteyiz.Son zamanlarda Windows 11 Professional sistemlerde  run as komutu ayarlaması yaparken 740:istenen işlem yükseltme gerekiyor hatası vermekteydi.Sorunun çözümü için DC üzerinde Grop Policy ile veya yerel makinede aşağıda ki  policy ayarlarından User Account Control: Admin Approval Mode for built in Administrator account  ayarı disable edilmelidir.





windows settings / security settings / local policies / security options / User Account Control: Admin Approval Mode for built in Administrator account

12 Ocak 2025 Pazar

SQL Sunucumuzu Azure Ortamına Geçirmeden Önce Uyumluluk Denetimi

 Yerel'de kullandıgımız SQL Sunucumuzu Azure SQL ortamına geçirmeden önce,Yükseltme asistanı çalıştırmamız önerilmekte olup,bu araç olası htaları ve uyumsuzlukları ortaya çıkaracaktır.Aşağıdaki Power Shell komutları ile aracı çalıştırıp bilgi alabiliriz:

DMA aracı

microsoft.com/en-us/download/details.aspx?id=53595



GUI Komutu

Get-AzDataMigrationAssessment -ConnectionString

"Data Source=localhost;Initial Catalog=AdventureWorks;Integrated Security=True" -OutputFolder C:\Output -Overwrite


CLI Komutu

az datamigration get-assessment --connection-string

"Data Source=localhost;Initial Catalog=AdventureWorks;Integrated Security=True" --output-folder "C:\Output" --overwrite

12 Aralık 2024 Perşembe

Active Directory'de Devre Dışı Bırakılmış(Disable) Hesapları Bulma


 Kurumsal Active Directory  Domain ortamlarında işten çıkan kullanıcıların belirli bir süre kurallar gereği hesaplarını silmemek ve şifrelerini değiştirerek devre dışı bırakmak gerekmektedir,yoğun kullanıcısı olan ortamlarda bu tarz hesapları bulmak için  AD Query bölümünde power shell scripti bulunmaktadır.Bunun aktif hale gelmesi için Active Directory Users and Computers'i açıp,saved querys bölümü üzerinde sağ click yaparak,define query kısmına gelip burada ki açılır menü'den,custom search ve Advanced bölümüne girerek Enter LDAP Query alanına aşağıda bulunan script'i ekleyip kaydetmeliyiz:


 (&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=2))


Ardından  Active Directory Disable(bu ismi verdik) alanına baktıgımızda devre dışı kullanıcıları görebileceğiz.