logo


Welcome Guest! To enable all features please Giriş or Kayıt.

Bildirim

Icon
Error

Ayarlar
Son mesaja git Go to first unread
mehmetzekikir  
#1 Gönderildi : 7 Mayıs 2014 Çarşamba 13:39:56(UTC)
mehmetzekikir

Sıralama: Administration

Gruplar: Administrators
Katılan: 6.05.2014(UTC)
Mesajlar: 670

19 Kere Teşekkür Etti.
152 Mesajına Toplam 253 Kere Teşekkür Edildi.
Sql Server Job

Sql Job veri tabanının olmazsa olmaz özelliklerinden biridir. Veri tabanın planlanan iş olarak anlatılır. Biraz örneklendirirsek bir adet alış veriş sistemimiz olsun ve gece saat 2 de bir önceki güne ait satış verisini hesaplayıp ayrı bir tabloya yazsın. Böylece satış müdürü işe geldiğinde bir önceki günün satış değerini görmüş olsun. Şimdi diyebilirsiniz niye direk olarak satış tablosundan hesaplatarak bulmadık da neden ayrı bir tabloya yazıyoruz bunu. Bunun nedeni gündüz vakti veri tabanı yoğun olduğu için bizde bu işlem için ekstra bir yoğunluk oluşturmayalım. Burada her gün ki veri ayrı ayrı veri tabanımıza kaydedilecektir. Bu sayede satış müdürü istediği günü 1 saniyeden daha kısa sürece çekebilecektir.

AdventureworksDw veri tabanımızı açıyoruz bir adet tablo ToplamSatis tablosu oluşturalım. Bu tablonun id, SalesDate, SalesSum diye üç adet kolonu olsun.

Kod:

USE [AdventureWorksDW2012]
GO

CREATE TABLE [dbo].[SumSales](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[SalesDate] [datetime] NULL,
	[SalesSum] [decimal](18, 2) NULL,
 CONSTRAINT [PK_SumSales] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]





FactInternetSales tablomuzdaki OrderDate kolonu bakıyoruz. Max ve min OrderDate tarihleri neler,

Kod:

SELECT max(s.OrderDate) FROM FactInternetSales s

SELECT min(s.OrderDate) FROM FactInternetSales s



UserPostedImage

Şekil 1 de minumum ve maximum tarihleri görüyoruz. Şimdi bu günü 2005 06 30 e eşitleyelim ve sonra procedure yazalım. Tarihi 1 gün evvele taşımamızın nedeni çünkü gece saat 12 de tarih 2005 07 02 olacak, bizim sorgumuzdaki tarihte 2005 07 01 olmuş olacak.

Asıl soru Bugünü nasıl eşitleyeceğimiz, herkes bu ayarı kendi yapacak. Bugünün tarihi 11.02.2014. Ben bu tarihi referans alarak sorguyu yazacağım, sizde deneyeceğiniz tarihten yola çıkarak bu sorguyu yazınız.

Bugünden yola çıkarak bize 2005 06 30 e götüren sorgu

Kod:

SELECT DateAdd(dd,-11,(DateAdd(mm,5,(DateAdd(yy, -9, GetDate())))))

2005-06-30 09:56:18.677



Sorguyu biraz açıklarsak dd gün oluyor, mm ay oluyor yy ise yıl oluyor. Biz 9 sene geriye gittik -9 ile. 7. ay olduğu için bizde şuan 2. ay da olduğumuz için 5 ay ileriye gittik. Bugün ayın 11 i olduğu içinde 11 gün geriye gittik.

Tarihimizi bugüne eşitlediğimize göre şimdi verileri atacağımız procedure yazabiliriz.

Kod:
CREATE PROCEDURE dbo.SalesSumInsert
AS
BEGIN 
DECLARE @GETDATE DATE
SET @GETDATE = (SELECT DateAdd(dd,-10,(DateAdd(mm,5,(DateAdd(yy, -9, GetDate()))))))

INSERT INTO SumSales
SELECT @GETDATE,SUM(TotalProductCost) FROM FactInternetSales
WHERE OrderDate = @GETDATE


END


UserPostedImage

Şekil 2 de de görüldüğü gibi proceduremuzu oluşturduk. Burada dikkat etmemiz gereken @GetDate parametresini biz Date olarak tanımladık. Datetime tanımlamadık. Çünkü Datetime saat, dakika ve saniyede alıyor. Bize lazım olan ise sadece tarih. Bu sebepten dolayı Date aldık.

Şimdi sıra geldi Sql Job ı oluşturmaya. Sql Joblar , Sql Agent Servisinin altında çalışırlar. Kurulumda eğer ekstra bir ayar yapmadıysanız Sql Agent disable gelir. Sql Agenti enable edelim. Bilgisayarıma geliyoruz sağ tuşa basıp yönet diyoruz.

UserPostedImage

Sql Server Agent'ın üzerine geliyoruz. Sağ tuşa basıp özellikler diyoruz. Şekil 4 de açılan ekranda

UserPostedImage

Startup type dan Automatic i seçiyoruz ve uygula diyip Ok e basıyoruz. Şuan itibari ile Sql Server Agent aktif edildi. Sadece sıra sevisi açmaya geldi . Sql Server Management Studioya gelip Sql Server Agent'ın üzerine sağ tuşla tıklıyoruz.

UserPostedImage

Start'a basınca bize soruyor servis başlatılsın mı diye bizde evet diyoruz ve servis başlıyor. Sql Server Agentta açılan menuden Job ın üzerine gelip (Şekil 6) New Job diyoruz.

UserPostedImage

Karşımıza çıkan ekranda (Şekil 7) General Sekmesinden bizeden Job'a bir isim vermemizi isteyecektir. Bizde isim olarak SumSalesInsert ismini veriyoruz. Description kısmına istediğiniz yazıyı yazabilirsiniz ama biz yine SumSalesInsert yazıyoruz.

UserPostedImage

Daha sonra soldaki sekmelerden Steps e geliyoruz. Step menusunden sol alt köşeden New seçeneğini tıklayarak yeni bir step oluşturuyoruz. Şekil 8 deki ekran karşımıza çıkıyor.Bir adet Step Name veriyoruz. Type olarak Transact Sql i seçiyoruz. Çünkü yazacağımız sorgu bir T-SQL sorgusudur. Daha sonrada yazacağımız sorgunun hangi veri tabanından çalışacağını seçiyoruz.SalesSumInsert ismini verdiğimiz stepte çalışmasını istediğimiz sorgumuzu yazıyoruz.

Kod:
exec SalesSumInsert


Bu sorgu git SalesSumInsert isimli proceduru çalıştır demektir. Sonra ok basıyoruz.

UserPostedImage

Sol Menuden Schedules i seçerek new diyoruz. Schedules adında anlaşılacağı gibi bir iş planıdır. Job ın ne zaman çalışacağını bu ekrandan yönetiyoruz.

UserPostedImage

Öncelikle bir adet Schedule Name veriyoruz. Biz isim olarak yine SalesSumInsert verdik. Occurstan Jobımızın Daily yi seçerek günlük çalışacağını belirledik. Occours Once At menusunden de her gün gece saat 1 de çalışacağını belirledik ve Ok e bastık. New Job ekranında da okey basınca Jobımız oluştu. (Şekil 10)

UserPostedImage

Job ın çalışıp çalışmadığını kontrol etmek için bilgisayarımızın tarihini ve saatini 12.02.2014 00.59 a ayarlıyoruz ve bekliyoruz. (Sekil 11)

UserPostedImage

Saatimiz 1 i geçti şimdi Şekil 12 deki gibi Sql Server Agenttaki Jobın üzerine sağ tuşla tıklayıp

UserPostedImage

View History diyelim. Ve açılan ekranda Jobımızın çalıştığını görmektediyiz. (Şekil 13)

UserPostedImage

Şimdi de gidip kontol edelim Job doğru çalış mı?

Kod:
select * from SumSales


UserPostedImage

Şekil 14 de de görüldüğü gibi Job doğru çalışmakta.

Sizde bu örneği istediğiniz gibi şekillendirebilirsiniz. Temel olarak burada Sql Jobın ne olduğunu nasıl yapıldığını anladık. Artık geriye kalan tek şey sizin hayal gücünüz ve azminizdir.
Sql Server 2016 Eğitimiz 19 Mayıs tarihinde başlayacaktır. 32 Saat Olup Ücret 1450 TL + KDV'dir. Kayıt ve ayrıntılar için tıklayınız

twitter.com/dbakademi
Dua ve teşekkür en büyük servetlere bedel...


Bu konudaki kullanıcılar
Guest
Forumu Atla  
Bu foruma yeni konular postalayamazsınız.
Bu forumda ki konulara yeni posta gönderemezsiniz.
Bu forumdaki postalarınızı silemezsiniz.
Bu forumdaki postalarınızı düzenleyemezsiniz.
Bu forumda anketler yaratamazsınız.
Bu forumdaki anketlere oy veremezsiniz.