Recent comments

None


İçerik Ara











Yasal Uyarı
Bu sitede sunulan tüm bilgi ve dökümanlar Turgay Sahtiyan tarafından yazılmaktadır. Yazıların kaynak göstermek şartıyla kullanılması serbesttir.

© Copyright 2009-2013
Takvim
<<  Ağustos 2017  >>
PaSaÇaPeCuCuPa
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910
Keywords

Hepinizin bildiği gibi SQL Server 2008 kurulumuyla beraber Jobs altına syspolicy_purge_history diye bir job açılmakta. Bu job ın tam olarak ne iş yaptığını öğrenmek için aşağıdaki linkteki dökümanı okuyabilirsiniz.

http://www.haidongji.com/2008/11/20/what-does-syspolicy_purge_history-job-do/

Kısaca bahsedecek olursak, gene SQL Server 2008 ile beraber gelmiş olan Policy Based Management uygulamasının topladığı history leri silmek için bu job kullanılır.

Bizim bugünkü konumuz ise syspolicy_purge_history job ının cluster ortamlarda verdiği hata. [more]

Uzun süre önce kurmuş olduğumuz SQL Server 2008 Cluster environment ımız kurduğumuz zamandan beri Node 1 de çalışmaktaydı. Geçenlerde source ların tamamını node 2 ye aldığık. O günden beri syspolicy_purge_history job ı aşağıdaki hatayı vermekte.

purge

Message
Executed as user: XXXXXXX. The job script encountered the following errors. These errors did not stop the script: A job step received an error at line 1 in a PowerShell script. The corresponding line is '(Get-Item SQLSERVER:\SQLPolicy\XXXXXXX \DEFAULT).EraseSystemHealthPhantomRecords()'. Correct the script and reschedule the job. The error information returned by PowerShell is: 'SQL Server PowerShell provider error: Could not connect to 'XXXXXXXX\DEFAULT'. [Failed to connect to server XXXXXXX. --> A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)] Failed to connect to server XXXXXXX. A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) ' A job step received an error at line 1 in a PowerShell script. The corresponding line is '(Get-Item SQLSERVER:\SQLPolicy\XXXXXXXX\DEFAULT).EraseSystemHealthPhantomRecords()'. Correct the script and reschedule the job. The error information returned by PowerShell is: 'Cannot find path 'SQLSERVER:\SQLPolicy\XXXXXXX\DEFAULT' because it does not exist. ' A job step received an error at line 1 in a PowerShell script. The corresponding line is '(Get-Item SQLSERVER:\SQLPolicy\XXXXXXX\DEFAULT).EraseSystemHealthPhantomRecords()'. Correct the script and reschedule the job. The error information returned by PowerShell is: 'You cannot call a method on a null-valued expression. '. Process Exit Code -1. The step failed.


Hata ile alakalı internette araştırma yaptığımda aşağıdaki KB article a eriştim.

http://support.microsoft.com/?scid=kb;en-us;955726&x=9&y=10

Şimdi gelin Resolution kısmında bahsedilen adımları beraber yapalım.


Hata Çözümü

Hatanın çözümü için microsoft 2 metod sunmakta.

Çözüm 1 - syspolicy_purge_history nin Özelliklerini Düzeltme

  1. SQL Server Agent >> Jobs >> syspolicy_purge_history >> Properties ekranını açalım. 
    purge2
  2. Steps kısmına geçelim 
    purge3
  3. Erase Phantom System Health Record satırını seçip Edit e basalım. 
    purge4
  4. Node un adının yazdığı yeri Cluster Virtual Name ile değiştirelim. Benim örneğimde SAHTIYAN_T kısmı MyCluster ile değiştirildi.
  5. Ok ve Close e basarak ekranlardan çıkalım.

 

Çözüm 2 - syspolicy_purge_history yi Tekrar Create Etme

Bunun için aşağıdaki script i çalıştırmanız yeterli olacaktır.

DECLARE @jobId uniqueidentifier

-- Obtain the current job identifier that is associated with the PurgeHistory
SELECT @jobId = CAST(current_value AS uniqueidentifier)
FROM msdb.dbo.syspolicy_configuration_internal
WHERE name = N'PurgeHistoryJobGuid'

-- Delete the job identifier association in the syspolicy configuration

DELETE FROM msdb.dbo.syspolicy_configuration_internal
WHERE name = N'PurgeHistoryJobGuid'

-- Delete the offending job
EXEC msdb.dbo.sp_delete_job @job_id = @jobId

-- Re-create the job and its association in the syspolicy configuration table
EXEC msdb.dbo.sp_syspolicy_create_purge_job

 


Sonuç

Çözüm yöntemlerinden herhangi birini uygulayıp job ı elle tetiklediğinizde problemsiz olarak çalıştığını göreceksiniz.

İyi Çalışmalar

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Dump Directory, SQL Server Error Log ları ve SQL Server Agent Error Log larının tutulduğu directory dir. System Database lerinin taşınmasından sonra, dump directory nün de disk i boşaltmak amaçlı taşınması gerekebilir.

Bu yazımda Dump Directory nin hem SQL Server Database Engine hemde SQL Server Agent Service i için nasıl değiştirebileceğini anlatacağım. [more]

Yazıma geçmeden önce konusu geçtiği için system database leri ve nasıl taşındıkları hakkındaki makeleme link vermek istiyorum.

http://www.turgaysahtiyan.com/post/SQL-Server-System-Databases-%28Sistem-Veritabanlarc4b1%29.aspx

Şimdi konumuza dönebiliriz. Aşağıdaki adımları uygulayarak Dump Directory i değiştirebilirsiniz.

  1. SQL Server Configuration Manager açılır.
  2. Dump Directory si değiştirilmek istenen Database Engine in properties ine girilir.
  3. Advance tab ından Dump Directory kısmı yeni klasör ile replace edilir. <I style="mso-bidi-font-style: normal">Resim 1</I>
  4. Ok e basılır ve Database Engine Restart edilir.
  5. Dump Directory si değiştirilmek istenen SQL Server Agent ın properties ine girilir.
  6. Advance tab ından Dump Directory kısmı yeni klasör ile replace edilir. <I style="mso-bidi-font-style: normal">Resim 2</I>
  7. Ok e basılır ve SQL Server Agent Restart edilir.

 

Resim 1

image

Resim 2

image

Oluşabilecek Problemler

Tavsiye edilen bu yönteme rağmen benim case imde olduğu gibi işlem tamamlanmayabilir. Örneğin benim yaptığım işlem sonucunda SQL Server Agent ın Dump Directory sini değiştirmeme rağmen aşağıdaki resimde göreceğiniz gibi SSMS üzerinden SQL Server Agent ın properties ine baktığımda hala eski directory bulunmaktaydı.

image

Bu problemi çözebilmek için HKEY_Local_Machine/Software/Microsoft/Microsoft SQL Server/ MSSQL10.MSSQLSERVER/SQLServerAgent/ErrorLogFile registry key ini yeni klasör değeri ile replace edip SQL Server Agent ı restart etmeniz gerekmektedir.

Bu yöntem bende işe yaradı. Sizde de işe yarar umarım.

İyi çalışmalar

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Yazılım geliştiricilerin en büyük sıkıntılarından biri geliştirdikleri kodların başkaları tarafından çalınma riskidir. Execute file lar ile bu çalınma riski büyük ölçüde azaltılıyorken .Net yeni mimari yapısından kaynaklanan durum gereği .Net executable file ları bildiğiniz üzere reverse engineering yapılabilmektedir. Gerçi bu durumada önlem olarak obfuscator programları var ki bu konu başlı başına bir konu ve daha önce bloğumuzda işlenmiş durumda.

Peki ya Database Devolopment ? Geliştirdiğimiz SP, Function ve trigger ları müşteriye deploy etmemiz gerektiğinde kodlarıyla beraber apaçık şekilde mi vereceğiz. Ya da kendi firmamızda yazdığımız kodların gözükmesini istemiyorsak.

İşte bu tarz bir istek için SQL Server bize WITH Encryption key word unu sunmakta. Bu parametre ile SP, View, Function ve Trigger ları şifrelemek mümkün. 

WITH Encryption ile SP,View,Function ve Trigger ları Şifrelemek


4 obje içinde şifreleme tekniği aynı olduğu için ben sadece view i anlatacağım. Diğerlerinde aynı kod yapısı kullanılabilir.

Ufak bir view i WITH Encryption parametresi ile yazalım ve neler değiştiğini görelim.

use AdventureWorks2008
GO
CREATE VIEW VEncSample WITH ENCRYPTION
AS
  Select FirstName,LastName from Person.Person

 

View e sorgu çekmeyi deneyelim.

select * from VEncSample

 

Gördüğünüz gibi sorgu sonucunun gelme kısmında herhangi bir değişiklik yok.

Şimdi view i modify etmeye çalışalım bunun için AdventureWorks2008 >> Views kısmından view i bulalım.

view1

Burada ilk dikkatinizi çekmek istediğim konu VEncSample view inin yanındaki kilit işareti. Bu işaret bu view in encrypted olduğunu belirtmekte.

View e sağ tıkladığımızda Design in disable olduğunu göreceksiniz. Bununda sebebi encrypted olması. Dolayısıyla view i modify edemiyoruz.

view2

Peki birde view in Script ini oluşturmaya çalışalım. Bu seferde aşağıdaki gibi bir hata ile karşı karşıya kalıyoruz.

Property TextHeader is not available for View '[dbo].[VEncSample]'. This property may not exist for this object, or may not be retrievable due to insufficient access rights.  The text is encrypted. (Microsoft.SqlServer.Smo)

view3


Gördüğünüz gibi view in içeriğini görüntüleyemiyoruz.

Son bir not. Şifrelediğiniz obje lerin kodlarını kaybetmemek için script lerini açık bir halde yedeklemenizde fayda var.


İyi çalışmalar

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Performance Data Collection SQL Server 2008 ile gelen bir feature dır. Express sürümü hariç bütün Edition larda bulunmaktadır.

Adından da anlaşılacağı üzere DB ler için performance dataları toplamaya ve toplanan bu dataları raporlamaya yarayan bir yapıdır.

Özel bir veritabanı data warehouse olarak kullanılmakta ve toplanan datalar bu veritabanına yazılmaktadır.

Periyodik(Default u 15 dakika) olarak bilgileri topladığı için geriye dönük olarak belirli bir zaman aralığı için rapor alınabilmektedir.

Örneğin Disk Usage Report, Query Report veya server side trace bilgileri raporlanabilmektedir.

Örneğimizi tapmaya başlayalım. Ben bu örneğimde aşağıdaki adımlar üzerinde duracağım.

  • Data Warehouse un kurulumu.
  • Windows login in create edilmesi.
  • SQL Agent Service Account ların değiştirilmesi
  • Collection Set lerin ayarlanması
  • Raporların İzlenmesi

 

Data Warehouse Kurulumu


Daha öncede bahsettiğim gibi toplanan datalar ayrı bir veritabanında tutulmaktadır. Bu veritabanı verinin toplandığı server ın üzerinde olabileceği gibi başka bir server da da bulunabilmektedir. Biz yapımızı geniş kapsamlı düşüneceğiz. Örneğin sisteminizde ki bütün server lardan veri toplayıp farklı bir serverdaki datawarehouse a yazdığımızı düşünelim.

Örneğimizde S10Ent instance ından verileri toplayıp TS2008_1 instance ında ki datawarehouse a yazacağız.

dc1

TS2008_1 instance ındaki datewarehouse kurulumuna geçelim.

Management >> Data Collection a sağ tıklayıp Configure Management Datawarehouse yazısını tıklayalım ve çıkan ekrana next diyerek bir sonraki ekrana geçelim.

Gelen ekranda Create or upgrade a management data warehouse seçeneği seçerek next e basalım.

dc2

Gelen ekranda new butonuna basarak create edeceğimiz data warehouse için bir isim girelim. Örneğin DataCollectionDW ismini kullanalım ve OK e basarak bir önceki ekrana geçelim.

dc3

Bu ekranda Next e basarak user seçimini yapacağımız ekrana geçelim.

dc4

Bu ekranda NT AUTHORITY\SYSTEM account unu seçip next e basalım. Siz diğer hesaplardan kullanacaklarınızıda seçebilirsiniz.

Finish e basarak işlemi sonlandıralım.

TS2008_1 instance de data warehouse hazırlıkları tamamlanmış oldu.

dc5

 


Windows Login Create Edilmesi


Farklı serverlardan veri toplayıp bunları tek bir data warehouse server ına yazacağımız için SQL Server Agent service account u olarak kullanmak üzere bir windows yada domain account u oluşturmanızı tavsiye ederim.

Oluşturacağınız bu account administrator haklarına sahip olursa ekstra bir ayar yapmanıza gerek kalmayacaktır. Ama administrator olmaz ise Logon Account as a Service e bu account ın her data toplanan server için eklenmesi gerekmektedir. Ayrıca her serverda açılan, collect edilen dataların tutuldukları folder larda bu account un yetkilendirilmesi gerekmektedir.

Biz bu örneğimizde administrator haklarına sahip bir windows user kullanacağız. UserDataCollect isimli bir windows user create ederek bir sonraki adıma geçiyoruz.

 

SQL Agent Service Account ların Değiştirilmesi


Bir önceki adımda dediğim gibi SQL Server Service account ların yeni tanımladığımız windows user olan UserDataCollect ile değiştireceğiz.

Bunun için SQL Server Configuration Manager daki S10Ent ve TS2008_1 instance larında ki SQL Server Agent service lerinde değişiklik yapacağız.

SQL Server Configuration Manager ı açıyoruz ve değiştirmek istediğimiz service ın üzerine sağ tık yapıp properties ekranına geçiyoruz.

dc6

Gelen ekranı resimde görüldüğü gibi düzenliyoruz yani service account olarak UserDataCollect windows account unu kullanıyoruz.

dc7

Aynı işlemi diğer service yada servis ler içinde yapıyoruz. Dediğim gibi bütün data toplanacak server ların agent larında ve data warehouse un olduğu server ın agent ında bu service account değişikliğini yapmamız gerekmekte.

Ayrıca bu windows user ı server larda sysAdmin yapmanızda gerekecektir. Bu noktaya da dikkat etmenizi öneririm.

 

Collection Setlerin Ayarlanması


Artık Data toplanacak server larda tanımlamaları yapma vakti geldi.

Bunun için data toplanacak server da(S10ENT instance ı) Management >> Data Collection a sağ tıklayıp Configure Management Data Warehouse yazısını tıklayalım.

dc8

Gelen ekrana next diyelim ve bir sonraki ekrana geçelim. Bu ekranda bu sefer Set up Data Collection yazısını seçeceğiz. Çünkü artık data toplama ayarlarını yapmaya başlıyoruz.

dc9

Next e basarak bir sonraki ekrana geçelim. Bu ekranda Data Warehouse için ayarladığımız server için bilgiler gireceğiz.ServerName ve Database name seçimini yapalım. Bu bilgiler Data Warehouse un bulunduğu server ve DB adı. Yani bizim örneğimiz için TS2008_1 instance ında DataCollectionDW database i.

Cache Directory kısmında da toplanan verilen yazılması için bir folder seçeceğiz. Bu folder data toplanan server da yani S10ENT instance ının çalıştığı serverda olacak.

C:\ de yeni bir klasor açalım. DataCollectTemp adını verelim ve Cache Directory kısmına C:\DataCollectTemp yazıp next e basalım.

Bilgileri doldurduktan sonra ekran aşağıdaki ekrana benzer olacaktır.

dc10

Not: Daha öncede söylediğim gibi; eğer SQL Server Agent Service Account u olarak bir administrator account u kullanmazsanız, bu account u bu folder ı yetkilendirmeniz gerekmektedir.

Finish e basarak işlemi sonlandıralım.

İşlem tamamlandıktan sonra Data Collection altında aşağıda ki resimde görüldüğü gibi Data Collection Set ler oluşacaktır.

dc11

Aynı zamanda Data Collection setler için oluşan jobları SQL Server Agent >> Jobs un altında görebilirsiniz.

 

Raporların İzlenmesi


Dediğimiz gibi Data Collector default olarak 15 dakikada bir server dan bilgileri toplayacak ve data warehouse a yazacaktır. Peki biz bu bilgileri nasıl raporlayacağız.

Bunun için Data toplanan server da (S10ENT) Management >> Data Collection >> Sağ Tık >> Reports >> Management Data Warehouse kısmından istediğimiz report u seçebiliriz.

dc12

Disk Usage Report

Örneğin Disk Usage Report a bakalım. Management >> Data Collection >> Sağ Tık >> Reports >> Management Data Warehouse >> Disk Usage Report u tıklayalım.

Gelen rapor da server da bulunan DB lerin disk tekapladıkları alanların detayı görülmekte.

Database bazında, data file için başlangıç boyutu, büyüme trend i, şu anki boyutu ve günlük büyüme değerlerini görebiliriz. Aynı değerleri log file ların içinde alabiliriz.

dc13

Bu raporda AdventureWorks DB sine tıklayalım. Gelen raporda AdventureWorks DB sinin data ve log file larının hangi bileşenlerden oluştuğu görülmekte.

dc14

Aynı raporda Data/Log Files Autogrow/Autoshrink Events kısmına dikkatinizi çekmek istiyorum. Bu kısım data ve log file larının auto growth olduğu zamanları ve ne kadar sürdüğünü göstermekte. Eğer çok sık auto growth oluyorsa auto growth değerini performans amaçlı büyütmekte fayda var. bu işlemin nasıl yapıldığı Database ve Database File lar makalemizde inceleyeceğiz.

Server Activity Report


Bu raporda ise Server ın aktivitelerini görüyoruz. CPU, Memory, Disk ve Network kullanım grafikleri ile beraber beklemelerin nereden kaynaklandığını tarih aralığı vererek raporlayabiliriz.

 dc15


Query Statistics History


Son olarak Query İstatistik Tarihçesi raporuna bakalım. Bu rapor vasıtasıyla da CPU, Duration, Total I/O, Physical Reads, Logical Writes bazından bize en pahalı 10 queryi görebiliriz.

dc16

ÖZET


Data Collection SQL Server 2008 ile gelen güzel özelliklerden biri. Server lardaki aktiviteleri raporlayabilir ve performans sıkıntıları çözümünda kullanabiliriz.

 

İyi çalışmalar

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


DBA Mail Alert yazı dizisindeki 4. yazım Disk Kullanım Değerleri üzerine. Bu SP vasıtasıyla server a mount edilmiş disklerin doluluk oranlarını görebilir, belirtiğiniz orandan büyükleri schedule vasıtasıyla belirli aralıklarla mail attırabilirsiniz.

CREATE proc [DiskUsageMailSP]
as

DECLARE @CURR INT
CREATE TABLE #T(NAME VARCHAR(100),MINN INT,MAXX INT,CONF INT,RUNN INT)
INSERT INTO #T EXEC sp_configure
SELECT @CURR=RUNN FROM #T WHERE NAME='Ole Automation Procedures'
IF @CURR=0
BEGIN
EXEC sp_configure 'Ole Automation Procedures',1
RECONFIGURE
END

declare @Rpar int
select @Rpar = 50 --Doluluk oranı %50 den büyük olan diskler raporlansın

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE name = 'DiskSpaceStats' AND type='U') 
BEGIN 
declare @RunLocal bit = 1
      CREATE TABLE [dbo].[DiskSpaceStats] 
      ( 
            DriveLetter       char(1),
            TotalSize         decimal(20,0),
            AvailableBytes    decimal(20,0),
            DriveType         char(10),
            PercentFree       decimal(18,3),
            Report_Date       datetime default getdate() 
      )
      ON [PRIMARY]
END 
 
IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE name LIKE '#DiskSpace%') 
DROP TABLE #DiskSpace 
CREATE TABLE #DiskSpace
(
      RowID int Identity Primary Key, 
      DriveLetter char(1),
      TotalSize decimal(20,0),
      AvailableBytes decimal(20,0),
      DriveType char(10),
      PercentFree decimal(18,3)
)
 
DECLARE @counter int
DECLARE @FSOobject int
DECLARE @RecordCount int
DECLARE @count int
DECLARE @string  char(35)
DECLARE @DriveLetter char(1)
DECLARE @TotalSize char(50)
DECLARE @AvailableSpace char(50)
DECLARE @DriveType char(10)
DECLARE @error int
DECLARE @hr int
DECLARE @src varchar(255), @desc varchar(255)

 

SET @count=0
SET @counter=67
SET @error=0
      
EXEC @hr = sp_OACreate 'Scripting.FileSystemObject', @FSOobject OUT
 
IF @hr <> 0
      BEGIN
            EXEC sp_OAGetErrorInfo @FSOobject, @src OUT, @desc OUT
            PRINT @desc
            RETURN
      END
 
WHILE @counter < 91 OR @error <3
      BEGIN
            SET @String='Drives.item("'+char(@counter)+'").DriveLetter'
            EXEC @HR = sp_OAGetProperty @FSOobject, @String, @DriveLetter OUT
            IF @HR <> 0
                  BEGIN
                        EXEC sp_OAGetErrorInfo @FSOobject, @src OUT, @desc OUT
                        SELECT @counter=@counter+1
                        SELECT @error=@error +1
                        GOTO ErrorPoint
                  END
 
            SET @String='Drives.item("'+char(@counter)+'").DriveType'
            EXEC @HR = sp_OAGetProperty @FSOobject, @String, @DriveType OUT
            IF @HR <> 0
                  BEGIN
                        EXEC sp_OAGetErrorInfo @FSOobject, @src OUT, @desc OUT
                        PRINT @desc
                        GOTO ErrorPoint   -- tugi --RETURN                   
                        --RETURN
                  END
 
        IF @DriveType = 2 BEGIN
                  SET @String='Drives.item("'+char(@counter)+'").TotalSize'
                  EXEC @HR = sp_OAGetProperty @FSOobject, @string, @TotalSize OUT
                  IF @HR <> 0
                        BEGIN
                             EXEC sp_OAGetErrorInfo @FSOobject, @src OUT, @desc OUT
                             SELECT @counter=@counter+100
                             SELECT @error=1
                        END 
       
                  SET @String='Drives.item("'+char(@counter)+'").AvailableSpace'
                  EXEC @HR = sp_OAGetProperty @FSOobject, @string, @AvailableSpace OUT
                  IF @HR <> 0
                        BEGIN
                             EXEC sp_OAGetErrorInfo @FSOobject, @src OUT, @desc OUT
                             PRINT @desc
                             GOTO ErrorPoint --tugi --RETURN                      
                             --RETURN
                        END
 
                  IF @Error < 3
                        BEGIN
                             INSERT INTO #DiskSpace (DriveLetter, TotalSize, AvailableBytes, DriveType, PercentFree)
                             VALUES (@DriveLetter, @TotalSize, @AvailableSpace, @DriveType, (convert(decimal(20,0), @AvailableSpace)/convert(decimal(20,0), @TotalSize)))
                        END
            END
   
            SELECT @counter=@counter+1
      END
ErrorPoint:
 
INSERT INTO [dbo].[DiskSpaceStats] (DriveLetter, TotalSize, AvailableBytes, DriveType, PercentFree)
SELECT DriveLetter, TotalSize, AvailableBytes, DriveType, PercentFree 
FROM #DiskSpace
 
      EXEC @hr = sp_OADestroy @FSOobject
      IF @hr <> 0
            BEGIN
                  EXEC sp_OAGetErrorInfo @FSOobject
            RETURN
      END
 
select * from #DiskSpace

IF @CURR=0
BEGIN
EXEC sp_configure 'Ole Automation Procedures',0
RECONFIGURE
END

 

Diğer DBA Mail Alert lerle alakalı yazılarıma ulaşmak için aşağıdaki linkleri kullanabilirsiniz.

Database File Statistics

Log Stats

Long Running Queries

Disk Usage Report

 

İyi Çalışmalar

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


DBA Mail Alert yazı dizisindeki 3. yazım uzun süredir çalışan query ler üzerine. Bu SP vasıtasıyla sistemde uzun süredir çalışan ve kaynakları yiyip tüketen:) queryleri monitor edebilir , belirtiğiniz süreden daha uzun süredir devam edenleri schedule vasıtasıyla belirli aralıklarla mail attırabilirsiniz.

CREATE proc [LongRunningQueriesMailSP]
as
declare @Rparam int
select @Rparam =60 --60 sn den uzun süren queryleri getirmek için


 create table #TempGONDER(
 DBName_SPID varchar(100),
 lastwaittype varchar(100),
 cmd varchar(100),
 Time varchar(100),
 HostAndLogin varchar(100),
 SSS int
 );
 INSERT INTO #TempGONDER  select DB_NAME(p.dbid)+' - '+CONVERT(varchar(5),p.spid) as DBName_SPID,
p.lastwaittype,p.cmd,
CONVERT(VARCHAR(5),DATEDIFF(S,p.last_batch,GETDATE())/3600)+' hour '+CONVERT(VARCHAR(5),(DATEDIFF(S,p.last_batch,GETDATE())%3600)/60)+' minute ' +CONVERT(VARCHAR(5),((DATEDIFF(S,p.last_batch,GETDATE())%3600)%60)%60)+' second' as Time,
RTRIM(LTRIM(hostname)) +' - '+RTRIM(LTRIM(loginame))  as HostAndLogin,
DATEDIFF(S,p.last_batch,GETDATE())
from sys.sysprocesses p 
where p.spid >50
and p.lastwaittype!='MISCELLANEOUS' and p.status!='sleeping'
and (p.program_name='Microsoft SQL Server Management Studio - Query' or 
p.program_name  like '%.Net%')
and p.spid!=@@spid 
and DATEDIFF(S,p.last_batch,GETDATE())>@Rparam
 
select *FROM #TempGONDER 

 

Diğer DBA Mail Alert lerle alakalı yazılarıma ulaşmak için aşağıdaki linkleri kullanabilirsiniz.

Database File Statistics

Log Stats

Long Running Queries

Disk Usage Report

 

İyi Çalışmalar

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


DBA Mail Alert yazı dizisindeki 2. yazım Log Statslar üzerine. Bu SP vasıtasıyla hangi DB log unun ne kadar dolulukta olduğunu görebilir, belirtiğiniz orandan büyükleri schedule vasıtasıyla belirli aralıklarla mail attırabilirsiniz.

CREATE proc [LogStatsMailSP]
as
declare @CmpRate float
select @CmpRate = 70 --%70 den fazla kullanılan Log file ları monitor etmek

create table #SQLPerfLogS(DatabaseName varchar(100),LogSize varchar(100),LogUsed varchar(100)
,Status varchar(10));

insert into #SQLPerfLogS exec('dbcc sqlperf(logspace)')
select * from #SQLPerfLogS	

 

Diğer DBA Mail Alert lerle alakalı yazılarıma ulaşmak için aşağıdaki linkleri kullanabilirsiniz.

Database File Statistics

Log Stats

Long Running Queries

Disk Usage Report

 

İyi Çalışmalar





	
Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


DBA lerin en önemli işlerinden biride serverları ı monitor etmektir. Database lerin doluluk durumları, Log file ların kullanım oranları, uzun süredir çalışan query ler yada data file ların bulunduğu disklerin durumunu takip etmek serverların availability lerini sağlamak için oldukça önemlidir.

Size bu konu üzerine yazmış olduğum 4 SP den bahsedeceğim. Bu SP ler için schedule ayarlayarak attıracağınız mailler ile server ların durumlarını monitör edebilirsiniz.Mail göndermek ile alakalı daha önceden yazmış olduğum yazımı okumanızı tavsiye ederim. Bu yazıma aşağıdaki linkten ulaşabilirsiniz.

http://www.turgaysahtiyan.com/post/SQL-Server-2008-den-Mail-Gonderme.aspx


İlk yazım Database File Statistic SP si. Yani verdiğiniz parametreden daha büyük doluluk oranlarına sahip olan DB leri monitör etmek.

Database File Statistic

CREATE proc [DatabaseFileStatsMailSP]
as
declare @Rparam int
select @Rparam = 70 --%70 den fazlası dolu olan DB leri mail atacağız.

 create table #TempGONDER(DatabaseName varchar(100),CurrentDataFileSizes int,CurrentDataSizes int,UnAllocatedDataSize int,UnAllocatedDataRate int,AllocatedDataRate int,HasDisableAutoGrowthFile tinyint,DataFileCount tinyint);
 EXEC sp_MSforeachdb '
 use ?;
 insert into #TempGonder
 select DatabaseName =DB_NAME(),
 CurrentDataFileSizes=(select SUM((size*8)/1024) from sys.database_files(nolock) where type=0),
 CurrentDataSizes=(SELECT     (SUM (reserved_page_count)*8)/1024  FROM sys.dm_db_partition_stats(nolock)),
 UnAllocatedDataSize=(select SUM((size*8)/1024) from sys.database_files(nolock) where type=0)-(SELECT     (SUM (reserved_page_count)*8)/1024  FROM sys.dm_db_partition_stats(nolock)),
 UnAllocatedDataRate=CONVERT(INT,(
 CONVERT(DECIMAL(10,2),(select SUM((size*8)/1024) from sys.database_files(nolock) where type=0)-(SELECT     (SUM (reserved_page_count)*8)/1024  FROM sys.dm_db_partition_stats(nolock)))/
 CONVERT(DECIMAL(10,2),(select SUM((size*8)/1024) from sys.database_files(nolock) where type=0))
 )*100),
 AllocatedDataRate=100-CONVERT(INT,(
 CONVERT(DECIMAL(10,2),(select SUM((size*8)/1024) from sys.database_files(nolock) where type=0)-(SELECT     (SUM (reserved_page_count)*8)/1024  FROM sys.dm_db_partition_stats(nolock)))/
 CONVERT(DECIMAL(10,2),(select SUM((size*8)/1024) from sys.database_files(nolock) where type=0))
 )*100),
 HasDisableAutoGrowthFile=(SELECT CASE WHEN EXISTS(select * from sys.database_files(nolock) where type=0 AND growth=0) THEN 1 ELSE 0 END),
 DataFileCount=(select count(1) from sys.database_files(nolock) where type=0)'
 
Select * FROM #TempGONDER WHERE DatabaseName not in ('master','model','msdb') 
and (HasDisableAutoGrowthFile=1 OR AllocatedDataRate>@Rparam)

 

Kolon adları ve açıklamalarından bahsetmek gerekirse;

DatabaseName Database in Adı
CurrentDataFileSizes DB File ının şu anki büyüklüğü
CurrentDataSizes DB nin gerçek büyüklüğü
UnAllocatedDataSize Boş alan boyutu
UnAllocatedDataRate Boş olan alanın DB File a oranı
AllocatedDataRate Dolu olu alanın DB File oranı
HasDisableAutoGrowthFile(*) DB nin Auto growth özelliği olmayan file ı var mı?
DataFileCount DB kaç data file dan oluşmakta.

(*) HasDisableAutoGrowthFile kolonundan ekstra olarak bahsetmek istiyorum. Eğer Data file ların auto growth ları boş ise ve file lar dolarsa otomatik olarak büyüyemeyecek ve database kullanılamaz hale gelecektir.

 

Diğer DBA Mail Alert lerle alakalı yazılarıma ulaşmak için aşağıdaki linkleri kullanabilirsiniz.

Database File Statistics

Log Stats

Long Running Queries

Disk Usage Report

 

İyi çalışmalar

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


SQL Server üzerindeki database lerimize daha sağlıklı çalışabilmesi için periyoduk olarak bakım yapmamız gerekmektedir. Aynı zamanda disaster durumları için periyodik olarak yedekleme işlemleride yaparız. Genelde yapılan işlemleri şu şekilde sıralayabiliriz;

  • Shrink (Boş Alanları Sıkıştırma) İşlemleri
  • Index Bakım İşlemleri (reIndex ve ReBuild)
  • BackUp Alma İşlemleri

Bu işlemleri manuel olarak yapmamız mümkün. Ama eğer birden fazla database varsa ve her gece belli bir saatte bu işlemleri yapmak istiyorsak bu durumda job ları devreye sokabiliriz.

SQL Server Maintenance Plan ise bize bu işlemleri belli bir plan içinde yapma şansı tanıyor. Aynı zamanda yapılan tanımlamayı tek bir yerden kontrol edebilme, aynı şekilde işlem sonucunuda tek bir yerden raporlama hakkı veriyor. Bu şekilde karmaşık yapılı veritabanı yönetiminde oldukça büyük rahatlık sağlamakta.

Şimdi isterseniz SQL Server 2008 de Maintenance Plan nasıl tanımlanır ve işletilir görelim.

Maintenance Plan menüsüne SQL Server Management Studio >> Management altından erişiyoruz.

mn1_thumb

Maintenance Plans a sağ tıklayıp yeni bir Maintenance Plan tanımlamak için “Maintenance Plan Wizard” a tıklıyoruz.

mn2_thumb

Gelen karşılama ekranında Next e basıp bir sonraki ekrana geçiyoruz.

mn3_thumb

Hazırladığımız maintenance plan a bir ad ve açıklama veriyoruz. Eğer birden fazla maintenance plan tasarlamayı düşünüyorsanız ad ve açıklama kısmına dikkat etmenizi tavsiye ederim.

Yapılan Maintenance ve BackUp işlemleri için schedule tanımlayabilir ve bu şekilde bu işlemleri periyodik olarak gerçekleşmesini sağlayabilirsiniz.

Bu işlemlerin her biri için ayrı ayrı schedule tanımlayabileceğiniz gibi hepsi için tek bir schedule da tanımlayabilirsiniz. Biz bu örneğimizde bütün işlemler için tek bir schedule tanımlayacağız. Ekrandaki radio butonu 2.seçenek olarak seçip schedule tanımlamak üzere Change butonuna basıyoruz.

mn4_thumb

Daha önceki yazılarımda SQL Server 2008 üzerinde Schedule (Job) tanımlamasını ayrıntılı anlattığım için burada tekrar anlatmıyorum. Schedule ile alakalı yazılarıma buradan erişebilirsiniz.

Biz bu ekranda işimizi 1 dakikada bir tekrarlatmak için 1 minute seçip OK e basıyoruz. Arka ekranda da Next e basıp bir sonraki ekrana geçiyoruz.

mn5_thumb

Bu ekranda Maintenance Plan dahilinde yapılması istenen işlemleri seçiyoruz. İşlemleri kendi bölümlerinde açıklayacağım. Ekranda ki bütün işlemleri seçip Next e basarak bir sonraki ekrana geçiyoruz.

mn6_thumb

Bir önceki ekranda seçtiğimiz işlemleri bu ekranda sıralayabiliriz. İşlemler yukarıdan aşağıya şekilde gerçekleştirilecektir. İstediğiniz sıralama değişikliklerini Move Up ve Move Down butonları vasıtasıyla yapabilirsiniz. Next e basıp bir sonraki ekrana geçiyoruz.

mn7_thumb

Bu aşamadan itibaren yapılacak işlemler için ayarlama tanımlamaları başlıyor.

Check Database Integrity : İstenilen database lerin bütünlüğünü ve sağlamlığını kontrol edip rapor verir. Database seçimi yapmak için Databases yazısının yanındaki combobox a tıklayıp database seçim ekranını açıyoruz.

mn8_thumb

Gelen ekranda istediğimiz databaseleri seçerek Ok e basıyoruz. Arka ekranda da Next e basıp bir sonraki ekrana geçiyoruz.

mn9_thumb

Shrink Database : Database lerdeki boş kullanılmayan alanları sıkıştırmaya yarar. Gerekli shrink ayarlarını yapıp database seçimini de yaptıktan sonra Next e basıyoruz. (Daha sonra bir yazımda Shrink i ayrıntılı ele almayı düşünüyorum. O yüzden burada çok detaylı bilgi vermeyeceğim.)

mn10_thumb

ReOrganize Index : Table ve view lerde kullanılan Index leri ReOrganize edip daha hızlı çalışmasını sağlayabiliriz. Database seçimini yapıp Index işleminin hangi Object lerde yapılmasını istediğimiz belirtip Next e basarak bir sonraki ekrana geçiyoruz.

mn11_thumb

ReBuild Index : Gene Index leri ReBuild ederek daha hızlı çalışmasını sağlayabiliriz. (Daha sonraki yazılarımda ReBuild ile ReOrganize arasındaki farklara değineceğim.) Database ve Object seçimini istediğimiz gibi yapıyoruz. Bu ekranda ayrıca “Keep Index online while reindexing” seçeneği bizim için çok önemli. Bu seçenek vasıtasıyla reindex işlemi yapılırken dahi index e erişimi kesmemiş oluyoruz. Next e basarak bir sonraki ekrana geçiyoruz.

mn12_thumb

Update Statistics : Veritabanı ile alakalı istatistik verilerinin update edilmesini yarayan bu ekranda table ve object seçimlerini yapıp Next e basıyoruz.

mn13_thumb

CleanUp History : Hazırlanan Maintenance Plan lar gerçekleştiğinde hdd de history dosyaları oluşturmaktadır. Bu ekranda bu oluşan history dosyalarının ne kadar süreyle hdd de saklanacağını seçebiliyorsunuz. İstenilen ayarlamaları yapıp Next e basıyoruz.

mn14_thumb

Execute SQL Server Agent Job : Daha önce başka işlemler için hazırladığınız SQL Server Job ları Maintenance Plan ın içine dahil edebilirsiniz. Bu ekranda eklemek istediğiniz Job ları seçip Next e basıyoruz.

mn15_thumb

BackUp Database (Full) : Bu ekranda FULL BackUp ının alınmasını istediğimiz Database leri belirliyoruz. Database seçimini yaptıktan sonra “Create a sub-directory for each database” yazısını işaretleyerek her database için bir klasör oluşmasını sağlıyoruz. Folder kısmına da BackUp ların alınacağı folder ı belirtiyoruz. Son olarak Compression Type ı seçerek Next e basıyoruz.

mn16_thumb

BackUp Database (Differential) : Differential BackUp alınmasını istediğimiz veritabanlarını bu ekranda belirliyoruz. Diğer ayarlamalar bir önceki ekrandaki gibidir. Next e basıp bir sonraki ekrana geçiyoruz.

mn17_thumb1

BackUp Database (Transaction Log) : Transaction Log BackUp alınmasını istediğimiz veritabanlarını bu ekranda belirliyoruz. Diğer ayarlamalar bir önceki ekrandaki gibidir. Next e basıp bir sonraki ekrana geçiyoruz.

mn18_thumb

Maintenance CleanUp Task : Maintenance Plan gerçekleşmeleri sonucunda oluşan BackUp ve Maintenance Plan Report dosyalarının hdd de ne kadar süre ile saklanacağını bu ekran vasıtasıyla ayarlayabilirsiniz. Gerekli ayarlamaları yapıp Next e basıyoruz.

mn19_thumb

Son olarak Maintenance Plan gerçekleştiğinde report dosyasının nereye oluşturulacağını ve bu sonucun mail olarak kime gönderileceğini seçerek Next e basıyoruz. Eğer SQL Server için mail ayarlarının anlatıldığı şu yazımı okumadıysanız okumanızı tavsiye ederim.

mn20_thumb

Yaptığımız Maintenance Plan ın bir summary si olan bu ekranı kontrol ettikten sonra Next e basıyoruz.

mn21_thumb

Ve son olarak close a basıp Maintenance Plan ı tanımlama işlemimizi bitiriyoruz.

Artık Maintenance Plan ımız hazır. Bu işlemin tamamlanmasından sonra Maintenance Plans kısmında ve Jobs kısmında 1 er yeni item oluşmuş olması lazım.

mn22_thumb mn23_thumb

Maintenance Plan a bir schedule atadığımız için burada atadığımız schedule Jobs kısmında görüntülenmekte.

Schedule 1 dakikada 1 olarak ayarlamıştık. Dolayısıyla her 1 dakikada 1 ayarladığımız bütün işlemler gerçekleşecektir. Biz genede bu işlemi elle çalıştırmak isteyebiliriz. Bunun için Maintenance Plans altından hazırladığımız Plan ı bulup sağ tıkla açılan ekranda Evecute e basabiliriz.

mn24_thumb

Bu işlem sonucunda Plan çalışmaya başlayacak ve aşağıdaki ekran açılacaktır.

mn25_thumb

Hata verirse bu ekranda message kısmında verdiği hatayı görebilirsiniz.

Son olarak oluşan backup dosyalarına HDD de bakalım ve yazımızı noktalayalım.

mn26_thumb

SQL Server 2008 de Maintenance Plan oluşturma ve yönetme işlemleri bu şekilde. Umarım açıklayıcı bir yazı olmuştur ve işinize yarar.

 

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


SQL Server üzerinde bulunan Job (Schedule) mantığıyla bir çok işi otomatik olarak SQL Server a yaptırmak mümkün. Bu işlemlerden biride otomatik yedek aldırma. Örneğin bir job tasarlayıp her akşam gece 12.00 da database veya databaselerin yedeğini aldırabiliriz.

Örneğin, SQL Server 2008 üzerinde AdventureWorks databasenin otomatik yedeğini almak için bir job tasarlayalım.

Management Studio >> SQL Server Agent >> Jobs kısmına gelip sağ tık ile New job a geçelim.

sc1

General kısmında Name ve istediğiniz bir category i seçtikten sonra Steps kısmına geçiniz.

sc2

Steps kısmında bu job için uygulanacak adımlar tanımlanmaktadır. Yani burda birden fazla database in yedeklenmesini farklı adımlar olarak tanımlayabiliriz. Biz bu örneğimiz için sadece tek adım yani AdventureWorks ün yedeklenmesini tanımlayacağız.

Bunun için New butonuna basalım.

sc3

Resimde görüldüğü gibi alanları dolduralım. Command kısmında yazan yazı BackUp alma işlemini gerçekleştirecek T-SQL komutudur.

BACKUP DATABASE [AdventureWorks] 
TO DISK = N'c:\\AdventureWorks.bak' 

Gerekli alanların tamamını resimdeki gibi doldurduktan sonra OK e basıp arka ekranda Schedules kısmına gelelim.

sc4

Schedules bölümü job un hangi otomatik süreyle işleneceğinin belirleneceği bölümdür. Resimde de görmüş olduğunuz üzere günlük,haftalık,aylık istediğimiz gibi ayarlama yapabilmekteyiz. Biz bu örneğimizde sonucu hızlıca alabilmek açısından dakikada 1 seçeneğini ayarlıyoruz.

Resimde görüldüğü gibi alanları doldurduktan sonra OK e basıp arka ekranda Notifications kısmına geçelim.

sc5

Notifications kısmı, job görevini tamamladıktan sonra ilgili kişilere bilgi vermelerin ayarlandığı bölümdür. Ben bu örnek için işlem tamamlandığımda kendimi mail attırıyorum. Bu arada SQL Server 2008 de Mail Gönderme işlemi ile alakalı yazdığım yazıyı okumadıysanız okumanızı tavsiye ederim. Buradan erişebilirsiniz.

Notification larıda ayarladıktan sonra OK e basıyoruz. Job görevini almış durumda.:)

Bu arada ek bir bilgi vermek istiyorum. Bu jobların çalışabilmesi için SQL Server Agent in çalışır durumda olması gerekiyor. Bu bilgide aklınızda bulunsun.

Şimdi 3-4 dk kadar bekleyelim. Bu bekleme sırasında 3-4 defa BackUp işlemi gerçekleşecek ve mailler de mail kutumuza düşecektir.

Evet yeteri kadar bekledik. Mailimizi kontrol ettiğimizde BackUp Complete maillerinin gelmiş olduğunu görüyoruz.

sc6

sc7

Birde management studio üzerinde ki job un history sine bakalım. Bunun için Management Studio >> SQL Server Agent >> Jobs >> JobumuzunAdi kısmından sağ tık ile View History kısmını açalım.

sc8

Bu ekranda, oluşturduğumuz job un bütün tamamlanmış step history sine bakabilirsiniz.

Aklınıza takılan bir şey olursa yorum kısmından sorabilirsiniz.

 

İyi çalışmalar

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Uygulamalarımızda SQL Server üzerinden direk mail gönderebiliriz. Örneğin bir job hazırlayıp doğum günü olan kişilere otomatik olarak mail gönderme yada otomatik backup alan job larda herhangi bir hata oluştuğunda yetkili kişilere mail gönderilmesini sağlayabiliriz.

Bunun için SQL Server üzerinde bazı ayarlamaların yapılması gerekmektedir.

İlk olarak Database Mail ayarlamasının nasıl yapıldığına bakalım.

Management Studio >> Management >> Database Mail kısmında sağ tık yapıp Configure Database Mail i seçelim. Açılan ekranda next e basıp bir sonraki gelen ekranda ilk seçenek seçiliyken next e basalım ve aşağıdaki ekrana erişelim.

dm1

Profile Name kısmına bir isim yazıp SMTP ayarlamalarını yapmak üzere Add butonuna basalım.

dm2

Gelen bu ekranı kendi mail hesabınızın özelliklerine göre doldurun. Eğer SMTP sunucunuz kullanıcı onaylama istiyorsa bunu basic authentication kısmında tanımlayın eğer istemiyorsa anonymous authentication kısmını seçip Ok e basın.

dm3

Gelen ekranlara next-next diyerek Database Mail yapılandırmasını sonlandırın.

Yapılan ayarlamaların doğru olduğunu test etmek için Database Mail e sağ tıklayıp Send Test E-Mail bölümüne geçelim

dm4 

Bu bölümde gerekli alanları doldurup Test mailini gönderin ve size ulaştığına emin olun.

 

Şimdi bir sonraki ayarlamaya geçelim. Bu işlemimizde az önce tanımlamış olduğumuz database mail i SQL Server Agent a tanımlayacağız.

Bunun için Management Studio da SQL Server Agent a sağ tıklayıp properties ini açıp Alert System bölümüne geçelim.

dm5

Gelen ekranda Mail system olarak Database Mail seçip Mail profile olarak az önce tanımlamış olduğumuz mail profile ı seçelim ve bu ekranı OK diyerek kapatalım.

Artık profiller tanımlayıp bu profilleri job ta kullanıp mail gönderebilirsiniz. Son olarak job da bu işlemin nasıl tanımlanacağı ile alakalı bir ekran görüntüsü vererek yazımızı noktalayalım.

dm6

Eğer buraya kadar her şey normal olmasına rağmen job tamamlanmasında mail atmıyorsa ve error log u incelediğinizde “An attempt was made to send an email when no email session has been established” tarzı bir hata görüyorsanız bu hatanın çözümü ile ilgili bu linki ziyaret edebilirsiniz.

İyi çalışmalar,

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


SQL Server da bir SQL Server Agent Job unun tamamlanmasından sonra otomatik mail göndermesini sağlayabiliriz.

Bu amaçla SQL Server Database Mail yapılandırması yapılıp gerekli operatorler ayarlanıp job a tanımlanmasına rağmen aşağıdaki tarzda bir hata log unu Error Logs da görmek mümkün;

An attempt was made to send an email when no email session has been established

Bu problemin sebebi, yeni bir profil tanımlandıktan yada Database Mail ayarlamaları yapıldıktan sonra SQL Server Agent in restart edilmemesidir.

Eğer SQL Server Agent i restart ederseniz bu hata ortadan kalkacaktır.

 

Kolay Gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar,

Bu yazımda SQL Server 2008 Agent kullanarak SQL Server 2008’i otomatik olarak nasıl restart edebiliriz anlatmaya çalışacağım.

SQL Server stop ve start işlemlerini komut dosyası vasıtasıyla yapabilmekteyiz. Bunun için kullanmamız gereken kodlar aşağıdaki gibidir;

Default SQL Server instance ını stop etmek için komut dosyasında aşağıdaki komutu yazıp enter a basıyoruz.

net stop MSSQLSERVER

rst1

Start etmek için ise komut dosyasında aşağıdaki komutu yazıp enter a basıyoruz.

net start MSSQLSERVER

rst2


Şimdi bu işlemi SQL Server Agent a yaptırarak SQL Server ı her gece veya her hafta 1 gün otomatik olarak nasıl restart edebileceğimize bakalım.

Bunun için SQL Server Agent üzerinde yeni bir job tanımlamamız gerekiyor.

Management Studio/SQL Server Agent/Jobs kısmına gelip sağ tık ile New Job sekmesini seçiyoruz.

rst3

 

Açılan pencerede bu yeni job umuzun ayarlarını yapmamız gerekiyor. İlk olarak General/Name kısmına bir isim veriyoruz.

rst4


Daha sonra job umuzun yapacağı iş adımlarını belirtmek için Steps kısmına geçiyoruz. Bu kısımda new butonuna basarak yeni bir step tanımlama ekranını açıyoruz. Bir job da birden fazla step bulunabilmekte. Stepler yukarıdan aşağıya doğru sırayla işlenmektedir.

Açılan step tanımlama ekranında aşağıdaki resimdeki gibi değişiklikleri yapıyoruz.

rst5


Bu ekranla işimiz bittikten sonra kapatıyoruz ve tanımladığımız bu job un belirli periyotlarda (örneğin her gece belli bir saatte) çalışabilmesi için gerekli ayarları yapmak için schedule kısmına geçiyoruz.

Schedule kısmında new tuşuna basıyoruz ve gerekli ayarların yapılacağı ekranı açıyoruz. Biz bu örneğimizde SQL Server ı her gece 02.00 da restart ettirelim. Bu Schedule için gerekli ayarlamaları aşağıdaki resimdeki gibi yapıyoruz. (Siz işlemin doğruluğunu görebilmek açısından Schedule Type tan One Time ı seçip Date-Time kısmından da yakın bir saati seçip işlem sonucunu görebilirsiniz.)

rst6

 

Değişiklikleri yaptıktan sonra ekranları kapatıyoruz. Restart etme job u göreve hazırdır:)

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan