21 Kasım 2012 Çarşamba

sql server veritabanların da şuan kaç connection olduğunu listeleyen query

sql server veritabanların da şuan kaç connection olduğunu listelemek için aşağıdaki sorguyu çalıştırabilirsiniz. 

SELECT DB_NAME(dbid) as 'DbNAme', COUNT(dbid) as 'Connections' from master.dbo.sysprocesses with (nolock) WHERE dbid > 0 GROUP BY dbid

Stopping durumda olan bir windows servisini çalıştırma yöntemi

Bir servis uygulamamız veya herhangi bir windows servisi stopping durumda da ise o servisi durdurmada sorun yaşayabiliriz.
Bu durumda presesi kill edip tekrar çalıştırabiliriz.

Kill etmek için ise, command prompt a aşağıdaki komutu çalıştırıp, stopping durumda olan servisin PID (p id sini alıyoruz)

SC QUERYEX genbandSBStransfer 

Bu komutu çalıştırdığımızda aşağıdaki sonucu stopping durumda olan servis için alacağız



SERVICE_NAME:"stopping durumda olan windows service adı"
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 3  STOP_PENDING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 123321
        FLAGS             :



sonrasında almış olduğumuz pid numarasını

TASKkill /F /PID 123321   şeklinde komut satırına yazıp çalıştırarak servisi stop etmiş oluyoruz. 

Stop edilen servisi services  pencersinden tekrar çalıştırabiliriz. 

29 Ağustos 2012 Çarşamba

Bir Sql Serverdan Başka Bir Serverda ki Job'u Çalıştırmak

Farklı iki instance olsun yada farklı serverlarda bulunan sql server üzerindeki jobları diğer bir serverdan çalıştırmak bazen yapmamız gereken bir senaryo olarak karşımıza çıkabilir.

Bu durumda çalıştırılacak script aşağıdaki gibidir.

declare @remotecod int
declare @job_name varchar(300)
declare @server_name varchar(200)
declare @query varchar(8000)
declare @cmd varchar(8000)

set @job_name = 'Gunluk Islemler' --Çalıştırılacak Job ismini tırnak içerisine yazıyoruz.
set @server_name = 'GTSS11'  --Çalıştırılacak Job'ın bulunduğu diğer serverın adı yada ip si.

set @query = 'exec msdb.dbo.sp_start_job @job_name = ''' + @job_name + ''''
set @cmd = 'osql -E -S ' + @server_name + ' -Q "' + @query + '"'

exec @remotecod = master.dbo.xp_cmdshell @cmd

if @remotecod <> 0 or @retcode is null
begin
print 'xp_cmdshell @retcode = '+isnull(convert(varchar(20),@retcode),'NULL @retcode')
end

24 Ağustos 2012 Cuma

Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection. This ensures consistent query semantics. Enable these options and then reissue your query.

Sql server da bir sp yi çalıştırdığınızda "Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection. This ensures consistent query semantics. Enable these options and then reissue your query." hatasını alırsanız çözüm için
sp tanımlama kısmında aşağıdaki düzenlemeleri yaparak sorunu giderebilirsiniz.

SET ANSI_WARNINGS ON
SET ANSI_NULLS ON
  


 

10 Ağustos 2012 Cuma

SQLIO Disk Subsystem Benchmark Tool raporunu nasıl analiz ederiz

SQLIO Disk Subsystem Benchmark Tool server üzerinde kendi oluşturduğu değişik dosya boyutları ile serverınızın I/O performans sonuçlarını raporlamaya yarayan microsoftun bir toolu dur.

http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=20163
adresinden microsoft üzerinden güvenli bir şekilde indirebilirsiniz.
Kurulumu ve kullanımı için,
http://www.brentozar.com/archive/2008/09/finding-your-san-bottlenecks-with-sqlio/
adresinden bilgi alabilirsiniz.
Sonuçlarının değerlendirmesini yapabilmek için ise aşağıdaki adresten bilgi alabilirsiniz. 
http://support.microsoft.com/kb/231619

Sağlam bir analiz toolu arıyorsanız SQLIO test sonuçları için mutlaka
http://tools.davidklee.net/sqlio/sqlio-analyzer.aspx
adresini deneyin excele dökümünüzü verip raporlar sunuyor, raporu indirebiliyorsunuz.
Analiz için çok büyük bir yükten kurtarıyor sizi.
 

23 Temmuz 2012 Pazartesi

Sql server Standby / read only durumdan çıkarmak

Restore işlemi sonucu veya herhangi bir sebeple standby duruma geçmiş olan database'inizi online yapabilmek için restore etmeniz yeterli olabilir.
aşağıdaki t-sql kullanarak çözüme ulaşabilirsiniz.

RESTORE DATABASE WITH RECOVERY

Bazı durumlarda bu yöntem işe yaramaya bilir, işe yaramadığı durumlar için, aşağıdaki bloğu deneyebilirsiniz.

RESTORE DATABASE FROM
    WITH RECOVERY;
 

SQL server da partition table'a sahip bir veritabınını restore nasıl ederiz

Sql server veritabanımızda bazen performans arttırımı veya güvenliğimiz gibi çeşitli nedenlerden dolayı başvurduğumuz partition table lar restore işleminde başımıza çeşitli sorunlar açabilir ve backupdan geri dönemeyiz.
Aşağıdaki gibi bir hata mesajı alırsanız anlayın ki partition bir tablonuz var ve .ndf dosylarını oluşturmanız kaç partition var ise her biri için ayrı path lere kopyalayıp restore sırasında path'ini göstermeniz gerekmektedir.

Restore failed for Server 'BT-MICRO\TESTSQL'.  (Microsoft.SqlServer.SmoExtended)
ADDITIONAL INFORMATION:

System.Data.SqlClient.SqlError: File 'D:\sqlserver\MSSQL10_50.TESTSQL\MSSQL\DATA\denemece.ndf' is claimed by 'DataFile1'(5) and 'netone2004_IDX'(3). The WITH MOVE clause can be used to relocate one or more files. (Microsoft.SqlServer.Smo)

21 Mayıs 2012 Pazartesi

sql server management studio ide sinde result paneli kapatmak ve açmak

Yoğun T-sql kodları kullandığımız zamanlarda sonuç penceresini kapatmak istedim, bu olayı gizleme işlemiyle gerçekleştirebileceğimi öğrendim.
Kısayol tuş kombinasyonu şu şekilde.
CTRL + R

9 Mayıs 2012 Çarşamba

SQL server 2008 de Resource Governor kullanarak, kullanıcı bazlı aciliyet ve önem sırasına göre öncelik tanımlama

Sql server da Resource Governor kullanaranak serverınızda transactionlara aciliyet ve önemlilik durumlarına göre kısıtlama getirebilirisiniz.
Bu işlemin bir değişik versiyonu default olarak sql server tarafından yapılmakta, incelemek isterseniz management studio interface'imizden magement menüsü altındaki "Resource Governor" grubunu açıp "Resource Pools" ı inceleye bilirsiniz.
burada poollar default olarak sorgular arasında önceliklendirme yapmakta ama yapay zeka kullanamadıklarından henüz aciliyet ve önem derecesine göre öncelik tanıma noktasını ayırt edememektedirler.
Sql server üzerinde bazı kullanıcılara veya gruplara memory ve cpu bazlı çeşitli kısıtlamalar getirerek workload tanımlayıp sorgu, user vb gibi bir çok bazda öncelik tanımlayabilirsiniz.

Resource Governor direk management studio wizart'ı ile yapabiliriz. yanlız işin son bir parçası olan classified funciton tanımlamak için t-sql den faydalanmamız gerekir.

Resource Governor kıstasını şu şekilde tanımlayabiliriz.



use master
go
-- önce workload oluşturuyorum
CREATE WORKLOAD GROUP BI_User_groups;
go
 -- Classifier fonksiyonu tanımlıyorum bun noktada dikkat edilmesi gereken bir Classifier fonksiyonu bir sistem üzerinde yanlızca bir adet çalışır
CREATE FUNCTION dbo.Classifier_fonksiyon()
RETURNS
sysname 
WITH SCHEMABINDING
AS
BEGIN
        
      DECLARE @grp_adi sysname
     
      IF (
                  SUSER_SNAME() IN ('BI_User')
            AND IS_MEMBER ('db_admin') = 1
            --AND HOST_NAME() IN ('BI_User')
            --AND IS_SRVROLEMEMBER('dba') = 1
            --AND APP_NAME()
      )
      BEGIN
            SET @grp_adi= 'BI_User_groups';
      END

      RETURN @grp_adi

END;
GO
-- Resource Governor tanımladığımız classifier fonksiyonu ile register ediyorum
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= dbo.fnResourceGovernorClassifier);

GO
CREATE RESOURCE POOL MaxMemory_icin
WITH (
            MAX_MEMORY_PERCENT = 60
      -- aynı şekilde aşağıdaki kıstaslardada kısıtlama tanımlayabilirsiniz.yuzde olarak
     
--,   MIN_CPU_PERCENT = 0
      --,   MAX_CPU_PERCENT = 80
      --,   MIN_MEMORY_PERCENT = 0
);
GO
ALTER WORKLOAD GROUP BI_User_groups
WITH (
            MAX_DOP = 1
      --,   IMPORTANCE = { LOW | MEDIUM | HIGH }
      --,   REQUEST_MAX_MEMORY_GRANT_PERCENT = 40
      --,   REQUEST_MAX_CPU_TIME_SEC = 600
      --,   REQUEST_MEMORY_GRANT_TIMEOUT_SEC = 600
      --,   GROUP_MAX_REQUESTS = 50

)
USING  MaxMemory_icin
GO

-- Resource Governor ı start ediyorum.
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO
 
  
Resource Governer ile vermiş olduğumuz kıstaslar eşliğinde çalışıp çalışmadığını, kontrol etmek için  ise aşağıdaki sorguyu çalıştırıp kontrollerinizi yapabilirsiniz.
 
 
SELECT
            es.session_id ,
           es.login_time ,
           es.login_name ,
           [Group Name]            = wg.name ,
           [Host Name]             = es.host_name ,
           Application             = es.program_name ,
           Pool_Max_Memory_kb      = rp.max_memory_kb,
           Pool_Max_Memory_kb      = rp.used_memory_kb ,
            es.client_interface_name,
           es.memory_usage,
           es.total_elapsed_time

--buradaki * kullanarak tüm kontrollere de ulaşabiliriz SELECT *
FROM
      sys.dm_resource_governor_workload_groups wg
INNER JOIN
      sys.dm_exec_sessions es
ON es.group_id = wg.group_id
LEFT OUTER JOIN
      sys.dm_resource_governor_resource_pools rp
on rp.pool_id = wg.pool_id
WHERE
      wg.group_id > 2 --grup id ye göre kontrol edebiliriz.


Not: tüm değerler için isteğe göre aşağıdaki sorguları
select * from
sys.dm_resource_governor_workload_groups
select * from sys.dm_exec_sessions
ve
select * from sys.dm_resource_governor_resource_pools
 
  

 


29 Mart 2012 Perşembe

windows service uygulamalarında localde kontrol sağlamak. Yazılan Windows Servicenin Debug edilebilmesi

Bir windows service yazarken en çok ihtiyaç duyulan noktalardan biri de debug ile kontrol işleminin yapılabilmesidir. bunun için bir çok yöntem var, ama ben en kısa ve özet olarak bir yol göstermek istiyorum .
Localde servis kurulumu yapmadan kontrol edebilmemiz için projemize timer ekleyip.
Servisimizin kontrolünü yapabiliriz.

serviceBase clasının OnStart ve OnStop özelliğini de kullanarak aşağıdaki yapıyı oluşturup, her bir olaya breakpoint ile kontol edebilirsiniz.

protected override void OnStart(string[] args)
{
myTimer.AutoReset = true;
myTimer.Enabled = true;
}

protected override void OnStop()
{
myTimer.AutoReset = true;
myTimer.Enabled = false;
}

private void TimerTick(object sender, System.Timers.ElapsedEventArgs e)
{
myTimer.Enabled = false;

try
{
UpdServicesTable();
}
catch (Exception ex)
{
ExceptionHandler.SendExceptionMail(ex);
}
finally
{
transfer_islemi();
myTimer.Enabled = true;
}
}


Not: projeyi derlediğinizde karşınıza servisi kurmanız gerektiğini bildiren uyarı çıkabilir bunu dikkate almadan 10 saniye (timer'ın tick süresi) bekleyiniz.
Ayrıca servisi kurmak isterseniz de, prjenize installer eklyip installerin properties ini, servisinizin çalışacağı yere göre ayarlarsınız. Örneğin user, localsystem vs. gibi.

Eğer kurulum yapmak isterseniz ise comand prompt pencersini açıp, "cd dizinadı" komutunu uygulayarak servisinizin "Debug" klasörüne girip, burada
installUtil serciveismi.exe komutunu çalıştırarak kurulumu yapabilirsiniz.

Kurulum sırasında komut satırında şu hata ile karşılaşırsanız,
şu=

An exception occurred during the Install phase.
System.InvalidOperationException: Installation failed due to the absence of a Se
rviceProcessInstaller. The ServiceProcessInstaller must either be the containing
installer, or it must be present in the Installers collection on the same insta
ller as the ServiceInstaller.

bu demek tir ki daha önce kurulu bu isimde bir servis var, bunu gör bilmek için
ve sile bilmek için de

başlat-> çalıştıra "regedit" yazıp registry Editör pencersine ulaşabilirsiniz.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog
dizinin açıp içerisinde çalışan servisleri görebilirsiniz.
aynı isimde servis var ise kaldırın yok ise
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\eventlog buradaki dizini inceleyiniz
var ise kaldrınız.

bu işlemleri yapmak yerine yine komut satırına
InstallUtil.exe /u "ServiceInstallerismi.exe" yazıp bu şekilde de kaldırabilirsiniz.

Not: kurulumu yaptığınızda servisiniz çalışı çalışmadığın görmek için bilgisayarınıza sağtıklayıp yönet dediğinizde çıkan pencereden, hizmetler(services) i görebilirsiniz.