SQL Server Veri Tabanı Snapshot Alma

Snapshot ifadesi genel olarak anlık sistemin anlık fotoğrafı olarak tanımlanabilir. Snapshot alma amacı, sistemin anlık görüntüsünü alıp sonradan sistemi önceki haline döndürmek gerekmesi durumunda döndüre bilmektir. Snapshot alındıktan sonra anlık görüntü için bir fark dosyası oluşturulur. Bu andan itibaren veri tabanında bir değişiklik yapıldığında verinin snapshot alındığı andaki hali bu fark dosyasına yazılır ve alınan bu snapshot veri tabanına bir select sorgusu geldiğinde veri değişmemişse orijinal veri tabanından, veri değişti ise önceki halini tutan snapshot veri tabanından sorgu çekilir.

SQL Server Management Studio görsel olarak snapshot alma işlemini desteklemediğinden işlemlerin T-SQL kodu ile yapılması gerekmektedir. Oluşturulan snapshotlar SSMS’de “Database Snapshots” bölümünü altında yer alır.

Oluşturulan bu snapshot veri tabanları salt okunur veri tabanlarıdır ve sadece select cümleciğini desteklerler.

Snapshot veri tabanı üzerinde UPDATE işlemi ve alınan hata

SSMS Database Snapshots

Snapshot almak için yazılması gereken T-SQL kodu aşağıdaki gibidir.

CREATE DATABASE snapshot_olarak_olusturulacak_dbAd

ON

(

NAME =Mantıksal_dosya_ad,

FILENAME ='olusturulacak_dosya_tam_ad'

)

AS SNAPSHOT OF kaynak_dbAd

Aşağıdaki kodda da AdventureWorks veri tabanının bir snapshotunun alınmasını görüyoruz.

CREATE DATABASE AdventureWorks_dbss1800 ON  
( NAME = AdventureWorks2017,
FILENAME =   
'C:\Db\AdventureWorks_data_1800.ss' )  
AS SNAPSHOT OF AdventureWorks2017;  
GO  

Aşağıda snapshot alındıktan sonra değiştirilen verinin orijinal veri tabanından ve aynı verinin snapshot veri tabanından sorgulanması ve sonucunu görüyoruz.

--Snapshot alındıktan sonra değiştirilen veri sorgusu
select 'Orijinal Veri', FirstName, LastName from AdventureWorks2017.[Person].[Person] where BusinessEntityID = 1

--Snapshot alındıktan sonra değiştirilen verinin snapshot veri tabanından sorgusu
select 'Snapshot Veri', FirstName, LastName from AdventureWorks_dbss1800.[Person].[Person] where BusinessEntityID = 1

Sistemde Var Olan Snapshotları Görmek için sys.databases kataloğundan source_database_id değeri NULL olmayan veri tabanları sorgulanır.

select * from sys.databases where source_database_id is not null

Veri tabanının snapshot zamanında ki durumuna dönmek için de aşağıdaki kodu kullanabiliriz. Snapshot verisine dönebilmek için veri tabanına kullanıcıların bağlı olmaması gerekmektedir. Kullanıcıların bağlı olması durumunda geri dönme sırasında aşağıdaki hata alınır.

USE master;  
-- AdventureWorks2017 veri tabanını AdventureWorks_dbss1800 zamanına döndürme  
RESTORE DATABASE AdventureWorks2017 from   
DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';  
GO  

Geri dönüş olduktan sonra az önce değiştirdiğimiz veriyi asıl veri tabanından sorgulayıp sonucu görelim.

Yazımızı bitirmeden snapshot veri tabanları konusunda söylememiz gereken son bir konu da, snapshotların kendi başlarına bir veri tabanı olmadıkları ve sistemde yaşamaları kaynak veri tabanlarının sistemde yaşıyor olması gerekliliğidir.




Python Veri Tipleri ve Print Fonksiyonu

Python dilinde bulunan veri tiplerine geçmeden önce veri tipinin ne olduğunu açıklamak gerekiyor.

Bilgisayar sistemleri üzerinde çalıştığı verilerin sayı mı, sayı ise tam sayı mı noktalı sayı mı, düz yazı mı olduğunu bilmek zorunda. İşte sisteme bu bilgiyi veren yapı veri tipleri bilgisidir. Python dilinde dört temel veri tipi bulunmaktadır. Bunlar;

  • Tam sayıları tutmak için int
  • Noktalı sayıları tutmak için float
  • Düz metni tutmak için string veya str
  • Mantıksal doğru – yanlış değerlerini tutan bool

Bütün sistem temelde bu dört veri tipi üzerinde çalışmaktadır.

print Fonksiyonu

print(val1, val2, val3,……..,valN) fonksiyonu ekrana bilgi yazmak için kullanılan fonksiyondur.

Kullanımı: print fonksiyonu parantezi içerine ekrana yazdırılmak istenen değerler “,” ile ayrılarak girilir. sep parametresi ile aksi belirtilmediği sürece bu değerler boşluk (” “) karakteri ile bir birinden ayrılarak ekrana yazdırılır.

sep Parametresi:

print fonksiyonu parantezi içerine aşağıdaki gibi tanımlandığında değerler varsayılan boşluk ile değil de sep parametresi ile belirtilen karakter ile birbirinden ayrılır.

print(val1, val2, val3,……..,valN, sep = ” – “) bu şekilde print içerinde sep eklendiğinde değerler arasına ” – ” değeri konur.

end Parametresi:

print fonksiyonu parantezi içerine aşağıdaki gibi tanımlandığında değerlerin sonuna varsayılan boşluk değil de end parametresi ile belirtilen karakter konur.

print(val1, val2, val3,……..,valN, sep = ” – “, end = “!”) bu şekilde print içerinde end eklendiğinde değerler ekrana yazıldıktan sonra, sonuna “!” değeri konur.

x = 5
y = 10.5
z = "Sait ORHAN"
print("sep olmadan",x,y,z)
print("sep ile",x,y,z, sep=" - ")
print("sep ile",x,y,z, sep=" - ", end="!")

Ekran Çıktısı




Python Kurulum ve İlk Kod

Python, nesne yönelimli, yorumlamalı, birimsel (modüler) ve etkileşimli yüksek seviyeli bir programlama dilidir. Girintilere dayalı basit sözdizimi, dilin öğrenilmesini ve akılda kalmasını kolaylaştırır. Bu da ona söz diziminin ayrıntıları ile vakit yitirmeden programlama yapılmaya başlanabilen bir dil olma özelliği kazandırır. Modüler yapısı, sınıf dizgesini (sistem) ve her türlü veri alanı girişini destekler. Hemen hemen her türlü platformda çalışabilir. (Unix , Linux, Mac, Windows, Amiga, Symbian). Python ile sistem programlama, kullanıcı arabirimi programlama, ağ programlama, web programlama, uygulama ve veritabanı yazılımı programlama gibi birçok alanda yazılım geliştirebilirsiniz. Büyük yazılımların hızlı bir şekilde prototiplerinin üretilmesi ve denenmesi gerektiği durumlarda da C ya da C++ gibi dillere tercih edilir.

Vikipedi

Python dilinin kısa tanımından sonra kurulum işlemi ile Python serimize başlıyoruz.

https://www.python.org/downloads/ adresinden Python dilinin son sürümünü bilgisayarımıza indiriyoruz. Daha sonra “Next, Next” diyerek kurulumu yapıyoruz. Kurulum yaparken aşağıdaki ekran görüntüsünde işaretli alanı seçtiğinizden emin olun. Bu seçenek ile Python dili bilgisayarın PATH değişkenine eklenmiş olur. Bu şekilde komut satırına “python” yazıp ENTER’a basıldıktan sonra Python başlayacaktır.

Kurulum işlemi bittikten sonra test işlemini yapabiliriz.

PhCharm İle İlk Proje

Python projelerimizi serimiz süresince PyCharm uygulaması ile yazıyor olacağız. “Create New Project” butonu ile yeni proje oluşturma ekranını açıyoruz.

Yeni proje oluşturma ekranımızda “Location” alanına projenin kaydedileceği klasör yolunu veriyoruz. “Project Interpreter…” seçeneği altında eyr alan “New environment using” seçeneğinde “Virtualenv” seçeneğini seçiyoruz. Bu seçenek sayesinde projemiz için sanal bir Python alanı oluşturuluyor ve Python üzerinde yapılan değişiklik bu projeye özgü olmaktadır. Böylece bilgisayarımızdaki ana Python sürümü yapılan değişikliklerinden etkilenmemektedir. “Create” butonuna basarak projeyi oluşturuyoruz.

Projeye ilk py dosyamızı eklemek için yukarıdaki ekran resminde göründüğü şekilde proje adını sağ tıklayıp New seçeneğinden Python File seçiyoruz.

Açılan açılır pencereden dosya adını yazıp ENTER tuşuna basıyoruz.

İlk kodumuzu yazdıktan sonra ekrana sağ tıklayıp “Run File in Python Console” tıklayarak kodumu çalıştırıyoruz.




SQL 'IN' ve 'NOT IN' Operatörleri

SQL dilinde sorgulama yapılırken bir değeri belli değerler arasından herhangi birine eşit olabileceği istendiği durumda değerler OR şartı ile birbirine bağlanır. “WHERE Id = 4 OR Id = 10 OR Id = 37” gibi… Değerlerin az olduğu durumlarda bu şekilde yazılabilir ancak değerlerin sayısının arttığı veya bu değerlerin aşağıdaki örnekte olduğu gibi kodun yazıldığı zamanda belli olmaması durumunda bu şekilde OR şartı ile bağlama hem zahmetli hem performans olarak sorgu optimizasyonunu olumsuz etkilemektedir.

Kolon değerinin bir liste içerisinden herhangi bir değere eşit olması istenen durumda IN operatörü kullanılabilir. Listede herhangi bir değere eşit olması istenilmeyen durumda da NOT IN operatörü kullanılır.

Konumuzu en iyi şekilde basit bir örnek ile açıklayabiliriz.

Örnek Senaryo Tabloları

Yukarıdaki tablo şemasında;

  • Users tablosu, kullanıcı listesini
  • Groups tablosu, gruplar tablosunu
  • UserGroups tablosu, kullanıcıların üye oldukları grupları n – n ilişkisi içerisinde tutar.

Sorumuz şu: Hiç bir gruba üye olmayan kullanıcıların listesini veren SQL scriptini yazınız.

select Id, UserName, FullName
from Users
where Id NOT IN (select UserId from UserGroups)

Bu sorgu çalışırken öncelikle UserGroups tablosundan her hangi bir gruba üye olan kullanıcıların UserId değerlerini alır, daha sonra Users tablosundan Id değeri UserGroups tablosundan alınan UserId değerlerinin içerisinde olmayan kullanıcıları getirir.

select * from UserGroups
where UserId IN (1,3,6,87,45,332)

Bu sorguda da UserId değeri “1,3,6,87,45,332” değerlerinden herhangi birine eşit olan kayıtlar gelecektir.

Şimdi de sorguyu biraz daha karmaşıklaştırarak “YÖNETİCİLER” grubuna üye olan kullanıcılardan başka gruba da üye olanların listesini ve üye oldukları grupların listesini çekeceğiz.

select 
u.Id UserId, 
g1.Id GroupId, 
u.FullName, 
g1.Name 
from UserGroups ug1 join Groups g1 on ug1.GroupId = g1.Id 
join Users u on ug1.UserId = u.Id
where UserId IN (
select UserId from UserGroups ug join Groups g on ug.GroupId = g.Id 
where g.Name = 'YÖNETİCİLER'
) and g1.Name != 'YÖNETİCİLER'




Vmware Klonlanan Bilgisayarın Domaine Alınamama Hatası

Sanal sistemde bulunan bir makine klonlandıktan sonra aynı yapıda iki tane SID numarasına sahip makine olacağından ikinci klon makinenin lisans bilgisi geçersiz olur. Aynı zamanda domaine alınmaya çalışılırken de yukarıdaki ekranda göründüğü gibi hata verir.

sysprep Programının Kullanımı

Alınan bu hatanın çözümü için C:\WINDOWS\System32\Sysprep\sysprep.exe adresinde bulunan programı yönetici olarak çalıştırın. Bu işlem ile makineye yeni bir SID numarası üretir. Program çalıştırılırken dikkat edilmesi gereken nokta “Generalize” seçeneğinin seçili olması gerekiyor ve “Shutdown Options” seçeneğinin “Shutdown” olarak ayarlanmış olması gerekiyor. Bu işlemden sonra bilgisayar kapanacaktır. Tekrar açıldıktan sonra sıkıntısız şekilde domaine dahil edilebilecektir.




C# Mükemmel Sayı Testi

Kendisi hariç bütün pozitif çarpanları (tam bölenleri) toplamı, yine kendisine eşit olan sayılara ”mükemmel sayı” denir. Örneğin 6=1+2+3 ve 28=1+2+4+7+14 gibi. Buna göre klavyeden girilen bir tam sayının “mükemmel sayı” olup olmadığını kontrol eden C# programını kodlarını yazınız




C# Console Komisyon Hesaplama

Bir komisyoncu sattığı mallardan fiyatı 50 TL kadar olanlardan %3, daha fazla olanlardan ise %2 komisyon almaktadır. Klavyeden girilen teker teker girilen 5 malın komisyonlarını bulup ekrana yazdıran ve en sonunda da toplam komisyonu ekrana yazdıran programını yazınız.




(C# Console, Diziler) Meteoroloji Sıcaklık Analizi

Meteoroloji merkezi için bir program tasarlanılması istenilmiştir. Programın çalışma şekli ise şöyle olmalıdır:

a. İlk önce hangi ay için sıcaklık bilgisi girileceği kullanıcıya sorulacaktır.

b. Girilen ay bilgisine uygun olarak o ayda kaç tane gün var ise kullanıcıdan gün sayısı kadar sıcaklık bilgisi girilmesi istenilecektir (şubat ayı için gün sayısını 28 alınız).

c. Sıcaklık veri girişi bittikten sonra o ayın sıcaklık ortalaması ve en düşük sıcaklık bilgisi ekrana yazdırılacaktır. Bu işlemden sonra program sonlanacaktır. Örnek Çıktı: Şubat Ayına ait Ortalama Sıcaklık=15,6 derecedir ve En düşük sıcaklık 6.Gün=10, 1 derecedir.




C# Console Toplama İşlemi Oyunu

Toplama işlemini öğretmeye çalışan bir oyun programı yazılacaktır. Oyun başladığı zaman rastgele 2 tane 1-100 arasında sayı tutulacak, tutulan sayılar ekrana gösterilecek ve kullanıcıya bu sayıların toplamı nedir diye sorulacaktı Eğer kullanıcı doğru cevap verirse “Tebrikler Bildiniz” Değil ise “Üzgünüm Bilemediniz” diye mesaj verecektir. Her cevaptan sonra “Tekrar Oynamak istiyormusunuz(e/E)?” şeklinde bir soru sorulacak ve eğer kullanıcı “e” veya “E” ile karşılık verirse oyun tekrar başlayacaktır. Kullanıcının puanı her doğru cevap için 5 puan artacak, her yanlış cevap için ise 2 puan azalacaktır. Oyun sonlandığında kullanıcının verdiği doğru cevap sayısı, yanlış cevap sayısı ve puanı ekranda listelenmelidir. Bu işlemleri yapan programın C# kodlarını yazınız.

Toplama oyunu
https://github.com/saitorhan/SizdenGelenler03
0 forks.
0 stars.
0 open issues.
Recent commits:




C# Sayıyı Basamaklarına Ayırma

Klavyeden girilen herhangi bir sayıyı basamaklarına ayırıp her bir basamak değerini ve sayının kaç basamaklı olduğunu ekrana yazan C# programını yazın? Not: Hazır string ya da char fonksiyonlar kullanmayın. Girilen sayının basamak sayısı belli değildir. Her hangi bir sayı girildiğinde program doğru bir şekilde çalışmalıdır. Örneğin 123 girilmişse programın ekran çıktısı: 1 tane 100’luk, 2 tane 10’luk, 3 tane 1’lik; sayı 3 hanelidir şeklinde olmalıdır.

Sayıyı basamaklarına ayırma
https://github.com/saitorhan/SizdenGelenler02
0 forks.
0 stars.
0 open issues.
Recent commits: