Linux’te Çok Tuşlu Mouse Ayarı

Merhaba sevgili okur,

Linux kullanıyorsun ve çok tuşlu farenin bazı tuşlarını kullanamıyor musun? O zaman bu makaleyi okumalısın…

Aynı dert bende de vardı. Ufak bir araştırmayla sorun halloldu. Ben Ubuntu Linux kullanıyorum ve Vx-Nano farem var. Standart tuşların dışındaki tuşları kullanamıyordum. Araştırmalar sonucunda btnx adlı bir uygulamanın bu iş için yazıldığını öğrendim.

İlk yapman gereken şey bu programı sisteme kurmak. Eğer Ubuntu kullanıyorsan synaptics kullanarak btnx ve btnx-config adlı iki paketi yükle. Daha sonra programı menülerden bulup aç. Bundan sonra ki kısmı kendin tahmin ederek çıkartabilirsin yada aşağıdaki açıklamaları okuyabilirsin. Sana yardımcı olması açısından işine yarayacak şeyleri oraya yazdım.

Program arayüzü aşağıdaki gibi… Ama sendeki farklı olabilir.

 

btnx

 

Ayar Yapma:

1- Programı açtıktan sonra “New” deyip yeni bir ayar dosyası oluşturabilirsin. Ben “Default” olan üzerinden gittim.

2- “Detect mouse & buttons” kısmından farenin her tuşu için (scrolllar için bile) denilenleri yap. O butona tıklayınca karşına bir pencere çıkacak. Çıkan pencerede sana söylenilenleri yap. O işlem bittikten sonra belirlenen tuş sayısı “Device detection” kısmında görülür. Mesela benim 7 tuş + 1 scroll (yukarı + aşağı) olmak üzere toplam 9 tuşum var.

3- Bütün tuşları bulduktan/ekledikten sonra ana pencerenin sol üstündeki tablardan “Buttons” kısmını seç ve her tuş için ilgili ayarları yap. Keycode kısmından uygun fare olayını seç. Örneğin sol tuş için BTN_LEFT yapmalısın.

4- Tüm bunlar bittikten sonra sağ altta “Restart btnx” butonu var. Ona basarak aktifleştir.

5- Eğer canın isterse sol orta kısımdaki “Mouse properties” kısmını doldurabilirsin.

6- Son olarakta uygulamayı kapatmadan önce “Backup” ile yedek almanı öneririm. Eğer bir aksilik olursa “Restore” ile ayarları geri yüklersin.

Umarım yardımcı olabilmişimdir, başka bir anlatımda görüşmek dileğiyle (:

 

Temelleri Abaküse Dayanan Bilim/Meslek Dalı

Bilgisayarlar günümüzde gencinden yaşlısına kadar herkesin hayatına girmiş ve dünyayı tabiri caizse köy haline getirmiş olan elektronik alettir. Onsuz iş yapmanın neredeyse mümkün olmadığı bu şeyin içini gerçekten biliyor veya öğrenmek istiyor musunuz? Peki Bilgisayar Mühendisliği bölümü okunduktan sonra neler yapılır? Çalışmak mı, akademisyenlik mi? Soruların cevabını bu yazıda bulabilirsiniz.

abacus
Babillilerin buluşu olan Abaküs, bilgisayarların atası olarak gösterilir.

Bilgisayar Mühendisliği

Bilgisayar Mühendisliği en genelde yazılım ve donanım ile ilgilenir. Yazılım, bilgisayarın anladığı dildir yani soyuttur. Donanım, bilgisayarı bilgisayar yapan fiziksel parçalardır örneğin sabit disk, hafıza, işlemci vb gibi. Bu iki ana bileşen olmadan bilgisayar olmaz.  Bunlara ek olarak, Bilgisayar Mühendisliği ile Bilgisayar Bilimi birbirine karıştırılmamalıdır. Bilgisayar Bilimi hesaplanabilme kuramı, algoritma analizi, kriptografi gibi dallardan oluşur. Bu alt bilim dalları soyuttur ve matematikle yakından alakalıdır. Bilgisayar Mühendisleri bu bilim dallarını bilgisayara uygularlar. Üniversite alınan eğitim her iki bilim dalını da kapsar. Bu bölümden mezun olduktan sonra işe girerseniz, Bilgisayar Mühendisliği yaparsınız. Eğer akademik ortamda bu bilimin gelişmesine katkıda bulunursanız Bilgisayar Bilimi ile uğraşmış olursunuz.

Yazılım, içerisinde, emirleri okuyup yerine getirme kabiliyeti olan her türlü elektronik veya elektromekanik alete istediğimiz şeyi yaptırmamızı sağlayan emir (instruction) yada emirlerin topluluğudur. Bilgisayarlar yazılım içinde yer alan kodları okur ve verilen emirleri yerine getirirler. Örneğin, bir robotu yürütmek veya hesaplanması vakit alan bir matematiksel işlemi hesaplatmaktır.

Donanım, fiziksel olarak bilgisayarı oluşturan, hesaplama yapabilen (işlemci), bilgileri tutabilen (hafıza veya sabit disk) ve bir takım başka şeyleri yapabilen (veri iletimi gibi) cihazlardır. Cd-Dvd sürücü, soğutucu, klavye, monitör, klavye, sabit disk, hafıza, ekran kartı, tv kartı vb şeklinde sıralanabilir.

Bilim olarak ele aldığımızda, bilgisayarın temeli abaküse dayanır. Çünkü bilgisayarın temelinde hesaplama vardır. Günümüz bilgisayarlara benzer bilgisayarlar ilk olarak II. Dünya Savaşı sırasında kullanılmıştır. Sonraki yıllarda hızla gelişmiş ve günümüzdeki konuma gelmiştir.

Eniac
ENIAC – Elektronik veri işleme özelliği olan ilk bilgisayardır.

Bilgisayar Bilmek Neden Önemli?

Bildiğiniz üzere, bilgisayarlar solunum cihazlarından muhasebeye, oyun konsollarından  silah sanayisine kadar her alanda ve her sektörde kullanılıyor. İnsanların işini kolaylaştırdığı için kullanımı hızla yayılmış ve hala yayılmakta. Bu nedenle çok farklı bir alanda eğitim almış olsanız dahi bilgisayar bilmek işe alım süreçlerinde önemli. En basit işlerde bile ofis yazılımlarını kullanabiliyor olmanız beklenir. Bunun yanında sadece iş hayatı için değil kendi kişisel gelişimizi için, hızla gelişen dünyaya ayak uydurmanız için gerekli, olmazsa olmazlardan.

Bilgisayar Mühendisliğinde İş ve Akademisyenlik

Günümüzde en gelişmiş ülkelerin bile birincil sorunlarının başında geliyor işsizlik. Peki Türkiye ‘de Bilgisayar Mühendisliği alanında bu durum böyle midir? Eğer kendinizi yeterince eğitmemişseniz ve mezun olduğunuz halde hala kafanızda hangi alana doğru yöneleceğiniz konusunda endişeler varsa iş bulmakta zorlanabilirsiniz zor. Fakat üniversitenin üçüncü, dördüncü yıllarında gelecek hedeflerinizi belirlemiş, o alanda çalışmalar yapmış, kendinizi eğitmişseniz iş bulmanız çok kolay.

İş dünyasında, başınızdaki kişinin sizden istediği şey verilen işi en iyi şekilde yapmanız. İşe alım süreçlerinde, yapılan mülakatlarda, aslında sizin  yaptığınız şey karşı tarafa ne kadar “Ben bu işi iyi yapabilirim” ‘i gösterdiğinizdir. Eğer karşı tarafı o işi iyi yapabildiğinize ikna ederseniz işe alınırsınız. Mülakatlarda sorulan soruların başında gelecekte ne yapmak istediğiniz olacaktır. Bu tip sorulara iyi cevap vermeli bilginizi göstermelisiniz.

Türkiye’de bilgisayar mühendislerinin yaptığı işler genel olarak yazılım geliştirme, veritabanı yönetimi, ağ yönetimi, bilgi güvenliği olarak ayrılabilir. Bunların dışında bilgisayar mühendislerinin çalıştıkları başka alanlar da vardır. Bunlara ek olarak, bir şirkette işe başlamak yerine kendi işinizi kurabilir ve patron olabilirsiniz. Ya da freelance olarak çalışabilirsiniz. Freelance olarak çalışma son zamanlarda artan bir çalışma yöntemi olmaya başladı. Evinizde oturduğunuz yerden aldığınız işi halledip ilgililere gönderebilirsiniz. Fakat bunun için çevrenizin geniş olması gerekir.

Türkiye ‘de ar-ge anlamında mühendislik bilginizi kullandığınız TUBITAK veya askeriye gibi sınırlı sayıda yer bulunuyor. O nedenle çoğu kişi yurtdışına çıkmayı hedefliyor. Beyin göçü yaşanıyor. Ar-ge olarak yapılan çalışmalar genelde üniversitelerde oluyor. Yurt dışına çıkma imkanı olmayanlar akademik hayata atılmayı hedefliyor.

İş
Saatlerce bilgisayar başında oturmaktan sıkılır mısınız?

Akademik anlamda Bilgisayar Mühendisliği ve Bilimi alanında çalışmak istiyorsanız elbette ki yapacağınız şey üniversitede kalmaktır. Türkiye’de genellikle hedeflenen şey yüksek lisansı yapıp doktora için yurt dışına çıkmaktır. Sonrasında Türkiye ‘ye geri dönüp burada çalışmalara devam edilir. Akademisyenler için yurt dışında doktora yapmanın önemi büyüktür. Üniversiteye alımlarda yurt dışı eğitimi almış olmanın verdiği avantajları azımsamamak gerekir.

Geleceğiniz için seçim yaparken kendinize sormanız gereken bazı sorular vardır. Bilgisayar alanında ilginizi çeken alan hangisidir? Hangi alanda çalışırken mutlu oluyor, zevk alıyorsunuz? Patron mu olmak istiyorsunuz yoksa yönetici olmakta yeterli mi? Çalışan bir arkadaşınız siz akademisyen olarak çalışırken sizden fazla para kazanıyorsa bu sizin için sorun olur mu? Bir problem üzerinde uzun süre boyunca düşünmek sizi sıkar mı?

Bu alanda kariyer yapmak isteyen arkadaşlara tavsiyem; öncelikli olarak kendinizi iyi yetiştirin. Üniversitede ekstra şeyler yapmak için çok vakit bulacaksınız. Eğlenceden fedakarlık yapıp araştırmalar yapın. Bu neymiş, şu ne demekmiş, bu nasıl olur gibi sürekli bir şeyleri kendinize sorun ve cevaplarını arayın. Ufak ufak projeler geliştirin. Üniversite bittiğinde birilerine gösterecek bir kaç projeniz olsun. Kendinize yukarıdaki gibi soruları sorun ve cevaplar ışında kariyer hedeflerinizi belirleyin. Çalışmak istediğiniz alan nedir? İş yerinde çalışmak istiyorsanız özellikle istediğiniz bir şirket var mı? Eğer varsa işe alma koşulları neler? Akademisyenlik düşünüyorsanız hangi üniversite? Yurt dışı seçenekleriniz arasında mı? İş kurmak size daha mı uygun? Her şeyi ayrıntılı düşünün. Hedefleriniz net olsun. Muallakta kalmayın yoksa düşünürken vakit kaybedersiniz veya elinizdeki seçeneklerin hepsi olumlu/olumsuz görünür ve seçim yapmanız zorlaşır. Kendinize güvenin ve vazgeçmeyin. Her zaman bir projeyi mükemmel yapamayabilirsiniz. Sorunlarla karşılaşabilirsiniz. Sizi mühendis yapacak olan sorunlara çözüm bulmanızdır zaten. Son ve en önemli tavsiyem; kariyer seçiminiz ne olursa olsun yaptığınız iş sevdiğiniz bir şey olsun.

Dizin Listeleme

Allah ‘ın selamı, rahmeti, bereketi, ihsanı, ikramı, affı, mağfireti, rızası üzerinize olsun,

Bugün kısaca dizin listelemeden bahsedeceğim. Diyelim ki kişisel websitenizde dizinlere erişim kapalı. Yani bir klasörün içini göremiyorsunuz/listeleyemiyorsunuz. www.benimsitem.com/ekdosyalar dizinine ulaşmak istiyorsunuz fakat hata alıyorsunuz, ulaşamıyorsunuz. Apache sunucularda bunu yapmanın kolay bir yolu var.

Belki daha önce duymuşsunuzdur, .htaccess diye bir dosya var. Bu dosya bir ayar dosyası. Hangi dizine koyarsanız o dizine ait erişim vb diğer kuralları belirler.

Htaccess’in kendine has kodlama sistemi var. Dizin içindekileri listelemek için öncelikli olarak yapmanız gereken şey .htaccess adında bir dosya oluşturmak ve içine;

Options +Indexes
IndexOptions +FancyIndexing

Indexes dizin içindeki şeyleri indekslemek için kullanılan koddur. Tahmin ettiğiniz üzere + işareti seçeneği etkinleştirmeye yarıyor. Alternatif işaret olan – işareti de etkisizleştirmek için kullanılıyor. Bir sonraki satırda da nasıl bir listeleme yapacağımızı belirliyoruz. FancyIndexing güzel ve ayrıntılı listeleme seçeneğidir. Başka seçenekler de var ama ben burada bahsetmedim. Bu iki kodu .htaccess adlı metin belgesinin içine yazıp kaydettikten sonra listeme yapmak istediğiniz dizinin içine atın.

Eğer herşeyi doğru şekilde yaptıysanız karşınıza çıkacak sayfa şu tip bir şey olmalı (:

Dizin Listeleme
İşlemleri doğru yaptıysanız dizin görünümü bu şekilde olacaktır

Allah ‘a emanet olunuz…

Pardus 2011 Firefox Plugin Ekleme

Öğrendim ki, Pardus’ta tarayıcı pluginlerinin olduğu bir klasör varmış. Bu klasörün yolu: /usr/lib/browser-plugins/. Bir plugin dışında hepsi buradaydı. Sadece flash pluginin yeri farklıydı. Onun yeri de /opt/sun-jdk/jre/lib/i386/ klasörü içinde. Buradaki kütüphanelerin (.so olanlar) kısayolunu indirdiğiniz firefox klasörü içindeki plugins kısmına koymanız yeterli.

Ben sizin için daha kolay olsun diye, çok basit anlamda kullancı hata kontrolü dahi olmayan, bir script yazdım. Scripti çalıştırmak için;

1-Scripti masaüstünüze koyun

2-Terminali açın ve (bilmeyenler için cd komutlarını kullanarak) masaüstüne gelin

3-sudo bash ps.sh yazın entera basın. Daha sonra şifrenizi girin

4-Sizden indirdiğiniz firefox klasörünüzün içindeki plugins klasörünün tam yolunu yazmanızı isteyecek. Tam yolu örnekteki gibi yazın

plugin script

Firefox – Flash Player Plugin – Linux

Küçük bir giriş yaptıktan sonra asıl meseleye gelmek istiyorum. Önce problemi anlatayım. Pardus 2011 ile varsayılan olarak gelen Firefox 4 (Beta 9du sanırım) hotmailde sorun çıkarttı. Hotmailde gelen e postayı okurken sürekli sayfayı yeniliyordu. Bende Firefox’un eski kararlı sürümü v3 ü yükledim. Şu an tam versiyonunu hatırlamıyorum. Fakat bir sorun çıktı, flash player (: Aaaaa yapmaaa evet evet değil mi bende de oldu ne kötüüü… :/ diyor olabilirsiniz (: Ama sorun yok, az önce hallettim bu sorunu. Çözümü gayet basit(miş); önce flash player plugini indiriyoruz. Daha sonra indirdiğimiz Firefox klasörünün içindeki plugins klasörünün içine kopyalıyoruz. Hepsi bu ((: Ben daha zor bir şey sanıyordum, ön yargılı olarak, ama gördüğünüz gibi gayet basit (:

Başka bir anlatımda tekrar görüşmek dileğiyle,

herkese hayırlı akşamlar (:

Nvidia Optimus Teknolojisi ve Linux Dağıtımları

Merhaba sevgili okurlar,

Bildiğiniz gibi uzun süre önce Nvidia’nın ortaya çıkardığı Optimus teknolojisi Linux dağıtımları ile uyumsuz. Bu gün sizlere bu uyumsuzluğun sebebini açıklayacağım.

Öncelikle size Nvidia Optimus teknolojisinden bahsetmem gerekiyor. Bildiğiniz gibi her bilgisayarın bir ekran kartı ihtiyacı vardı. Bu ihtiyaç dahili yada harici ekran kartı kullanılarak giderilir. Fakat bir sorunumuz var. Eğer dahili ekran kartımız varsa o çok sevdiğimiz yada büyük hevesle çıkmasını beklediğimiz ayrıca son çıkan ekran kartlarını bile zorlayan oyunları oynayamayız. Fakat pil ömrümüz daha uzundur çünkü çok alengirli şeyler yapamayız ekran kartımız dahilidir ve bilgisayarı kasar. Hatta çoğu zaman çalıştırmaz.. Şimdi diğer seçeneğe gelelim. Çok harika bir ekran kartımız var. Hangi oyunu açarsan aç, oyun grafik ayarlarını ne yaparsan yap ekran kartımız bana mısın demiyor. Fakat en baba oyun oynarken öve öve bitiremediğimiz ekran kartınımız basit bir resimi açarken, bir pdf dosyasını okurken de devrede oluyor. Yani basit bir işlem için bile koca bir ekran kartını çalıştırıyoruz. Gereksiz yere fazla iş yapıyoruz. Doğal olarakta pili daha çabuk yiyoruz.
Nvidia bu tip durumlara çözüm olması için Optimus teknolojisini geliştirdi. Bu teknolojiyle birlikte bilgisayarımızda iki ekran kartını da bulundurabiliyoruz. Aslında bulundurmaktan ziyade kullanabiliyoruz. Basit işlerimizi yaparken dahili ekran kartımız devrede oluyor. Bir oyun açtığımızda ise harici ekran kartımız devreye giriyor. Önceden bunu yapamazdık. Fakat artık böyle bir teknoloji var. Aynı anda iki ekran kartı kullandığımız için bu sistemi “hibrit” olarak adlandırmışlar.
Bu sistem Microsoft’un işletim sistemlerinde gayet güzel işliyor fakat gel gelelim linuxlarda sorun var. Nvidia linux dağıtımlarında Optimus teknolojisinin kullanılması için bir sürücü yazmıyor. Şuan var olan hiçbir sürücü Optimus teknolojisini desteklemiyor. İnternette yaptığım araştırmalara görede yakın bir zamana kadar da böyle bir sürücü yazılmayacak. Aklıma gelen ilk sebep az linux dağıtımı kullanıcısının olması… Mantıklı mı? Bence değil.. Fakat elimizden gelen bir şey yok. İnşaallah en kısa zamanda Linux dağıtımları için Optimus desteği gelir..
Saat epey ilerlemiş ben yazımı yazarken, artık yatma vakti, herkese iyi geceler (:

Veritabanı Aynalama/Yansıtma (Database Mirroring)

Veritabanı aynalama da sadece bir sunucu müşterilere hizmet verir. Buna esas, asıl ya da ana sunucu (principal server) denir. Ben bana daha anlaşılır geldiği için birincil sunucu tabirini kullandım. Sistemin iki sunucu ile çalıştığını söylemiştik. İşte diğer sunucu beklemededir ve sunucunun bu durumu (beklemede kalma) aynalama oturumuna (mirroring session) göre ve ayarlara göre değişir. Bu sunucuya ayna sunucu (mirror server) denir. Fakat ben yine daha iyi anlaşılması açısından ikincil sunucu olarak bahsettim. Veritabanı aynalama oturumu (iki veritabanı arasındaki bağlantı) senkronize edildiğinde (yani iki veritabanı arasında bilgilerin eşitlenmesi işlemi gerçekleştirildiğinde) veritabanı aynalama olayı gerçekleşir ve hazırda bekleyen ve afet anında devreye girecek olan ikincil veritabanını oluşturur. Veri eşitleme oturumu senkronize olmazsa, veritabanı veri kaybı da olsa, beklemede durur. Veritabanı aynalamada birincil sunucuda gerçekleşen her ekleme, çıkartma ve güncelleme işlemi ikincil sunucu üzerinde de olabildiğince hızlı bir şekilde gerçekleşir. Yeniden gerçekleştirme işlemi birincil sunucunun ikincil sunucuya işlem kayıtlarını (transaction logs) göndermesiyle başlar. İkincil veritabanında bu işlemleri ikincil ve beklemede olan veritabanı üzerinde uygular. Çoğaltmada (Replication) işlemler mantıksal düzeyde gerçekleşirken veritabanı aynalamada işlemler fiziksel düzeyde gerçekleşir. Çünkü direk olarak veriler ayrı bir diske yeniden yazılır. Birincil ve ikincil sunucular aynalama oturumu esnasında birbirleriyle iletişim içerisindedirler ve karşılıklı olarak çalışırlar. Her iki eş (partner) de aynalama oturumu esnasında birbirini tamamlayacak şekilde çalışır. Bu roller birincil ve ikincil rolleridir. Her hangi bir zamanda eşlerden biri birincil rolü gerçekleştirirken diğer eş ikincil rolü gerçekleştirir. Her eş kendi rolünün sahibidir. Birincil rolü üstlenen eş birincil sunucu olarak adlandırılır. Birincil sunucu üzerindeki veritabanına da birincil veritabanı denir. Diğer sunucu ise bu duruma bağlı olarak ikincil sunucu özelliğini gösterir ve onun üzerindeki veritabanı da ikincil ya da ayna veritabanıdır.

Veritabanı aynalamanın bir faydası veriyi korumaktır. Veri eskiden bir veritabanı üzerinde yer alırken şimdi iki ayrı sunucu üzerinde aynı bilgileri içeren iki veritabanı bulunur. Sunucunun birinde bir hata olduğunda ikinci sistem devreye girerek kullanıcıların çalışmasına devam edebilir. Yani veri yedek bir sistemde tutularak korunmuş olur.

Bunun yanı sıra veritabanı aynalama tam anlamıyla ya da neredeyse tam olarak veri yedeği alınır. Bu yedek yüksek güvenlik veya yüksek performans moduna göre değişiklik gösterir. Yüksek güvenlik modu senkronize olarak çalışır. Yüksek performans modu zamandan kazanmak için asenkron olarak çalışır. Çalışma mantıkları aşağıda açıklanacaktır.

Yüksek güvenlik modunda birincil sunucu aktif kayıtları ikincil sunucuya gönderir. İkincil sunucu bu kayıtları alıp ikincil veritabanına yazmadan önce diske yazar ve sonra birincil veritabanına “Ben kayıtları diske yazdım bir sonraki işlemi yapabilirsin” anlamına gelen bir mesaj gönderir.  Sonrada diske yazdığı kayıtları ikincil veritabanına uygular.

Yüksek performans modunda ise birincil sunucu ikincil sunucuya kayıtları gönderip ve ikincil sunucunun kayıtları diske yazdığı onayını beklemeden işlemleri gerçekleştirmeye devam etmesidir. Yani yüksek güvenlik modunda ki ikincil diskin birincil diske olan geribildirimi beklenmez. Bu sayede geribildirimi bekleme süresi ortadan kalktığı için birincil sunucu işlemleri hızlı bir şekilde gerçekleştirir.

Veritabanı aynalamanın bir diğer faydası veritabanına erişimin sürekli kılınmasını sağlamasıdır. Daha öncede bahsettiğimiz gibi birincil sunucu çalışmayı durdursa bile yedek sunucu üzerinden veritabanına erişim mümkün olduğu için sistem çalışmaya devam eder. Bu nedenle afet durumlarında zor durumda kalmamak için tercih edilen yöntemlerdir. Yüksek güvenlik modunda bir afet olması durumunda yedekte beklemede olan veritabanı çevrimiçi hale geçer. Burada çok az bir veri kaybı vardır. Diğer modlarda veritabanı yöneticisi alternatif veritabanını ayağa kaldırır.

Veritabanı aynalama sisteminin son faydası ise güncelleştirmeler sırasında ürün veritabanının (production database) erişimini arttırır. Aynalamanın kullanıldığı sistemlerde veritabanı çevrimdışı süresini azaltmak için bir sistem üzerinde SQL Server güncelleştirmeleri yapılırken yedek sistem çalışır. Daha sonra yedek sistemin güncelleştirilmesi yapılarak hem veritabanı çevrimiçi tutulur hem de sistemler güncellenmiş olur.

Veritabanı Kopyalama/Replikasyon (Replication)

Diyelim ki bir sunucumuz ve bu sunucu üzerinde de bir veritabanımız var. Binlerce kişi aynı anda bu veritabanına bağlandığını düşünelim (Bakınız. Facebook, Twitter vb sosyal medya veritabanları). Bu sunucu, günümüz şartlarında (2014) kaynakları ne kadar kuvvetli olursa olsun, bütün isteklere cevap vermekte zorlanacaktır. Bu nedenle de işlem yapmak çok uzun sürecektir. Ayrıca sadece bir veritabanının sadece bir sunucu üzerinde çalışması veri karmaşasının oluşmasına sebep olur. Buna bağlı olarak da veritabanının yönetimi zorlaşır. Bu durumdan kurtulmak içinde kopyalama/replikastion yapılır. Kopyalama demek bir veritabanının bir veya daha fazla kopyasının aynı anda farklı sunucular üzerinde çalışır durumda olmasıdır. Böylelikle iş yükü dağıtılmış/paylaştırılmış olur. Ya kopyalama banka şubelerindeki veznelerin sayısının birden fazla olması gibi bir şey. Müşteriler (veritabanı üzerinde yapılacak işlemler) bu veznelere (veritabanlarına) gelip işlemlerini (select/insert/update/delete) yaparlar.

Kopyalama işlemini yapabilmek için öncelikle kopyalama modelinin belirlenmesi gerekir. Microsoft SQL Server tarafında işler (jobs) SQL Server Agent tarafından yapılır. Kopyalama işlemi de bir iş olduğu için SQL Server Agent kopyalama işlemini yapar. SQL Server Agent’ın alt birimleri vardır. Bunların her biri bir modele karşılık gelir.

Anlık Görüntü Çoğaltma (Snapshot Replication) yapılmak istenirse veritabanının o anki haliyle alınıp kopyalanır. Anlık kopyalamadan sonra gerçek veritabanında gerçekleştirilen operasyonlar (ekleme, çıkarma, güncelleme vb) kopya veritabanına aktarılmaz. Bu metod en güncel veriye ihtiyaç duyulmayan senaryolarda tercih edilir. Kopya veritabanı statik yani değişmeyen veri içerir. Bu duruma örnek olarak posta kodlarının yeniden düzenlenmesi senaryosunu verebiliriz. Varolan posta kodu tablosunun anlık görüntüsü alınıp ilgili kişiler tarafında işlemler yapılabilir. Posta kodları sürekli değişmediği için bu metodun uygulanması uygundur.

İşlemsel Çoğaltma (Transactional Replication) metodunda çoğaltma yapılmak istendiği zaman ilk olarak anlık görüntü metodu uygulanır. Daha sonra gerçek veritabanının anlık görüntü çekildiği an ile güncel an arasındaki zaman diliminin kayıtları kullanılarak kopya veritabanı üzerinde çalıştırılır. Bu sayede gerçek veritabanı ile kopya veritabanı arasındaki zaman diliminden doğan veri farkı giderilmiş olur. Arada çok az bir gecikmeden doğan veri farklılığı (veritabanının kullanım sıklığına bağlı olarak) bulunabilir. Bu metod sık sık kullanılan veritabanlarında güncel veriyle işlem yapılmak istendiği zamanlarda kullanılabilir.

Birleşik Çoğaltma (Merge Replication) en karmaşık çoğaltma tipidir. Burada bilginin birleştirilmesi ve tek bir güncel bilginin elde edilmeye çalışılması amaçlanır. Birleşik çoğaltmayı bir örnek ile anlatmaya çalışalım. Birden fazla sunucu üzerinde aynı veritabanı bulunsun. Fakat farz edelim ki sunucular arasında ağ bağlantısı olmadığı için haberleşme yapılamıyor olsun. Sadece akşamları tüm sunucular ağ bağlantısını kursunlar. Bu durumda aynı veritabanından sunucu sayısı kadar farklı çeşit olması anlamına gelir. Çünkü her biri başta aynı veriye sahip olan veritabanı üzerinde gün boyu farklı işlemler gerçekleştirirler. Bu durumda tüm bu verilerin zaman değişimine göre birleştirilip en son ve gerçek veriyi gerçek veritabanı üzerine yazması gerekir. Bu işlemler yapılırken veri çakışmaları gerçekleşebilir. Aynı tablonun bir satırındaki bilgi diğer kopya veritabanında farklı bir değere sahip olabilir. Burada hangi bilginin gerçek ya da en son bilgi olduğunu karmaşası yaşanır. Bu nedenle en karmaşık model budur.

Veritabanı Kurtarma/Yedekleme Modeli (Recovery Model)

SQL Server’ın sunduğu kurtarma modeli bir veritabanı özelliğidir. Seçilen kurtarma modeli istenildiği zaman değiştirilebilir. SSMS (SQL Server Management Studio) üzerinde bir veritabanına sağ tıklayıp ilgili bölümlerden kurtarma modelini seçebiliriz. Veritabanı yedeğini alma ya da yedekten geri dönme işlemleri bu modellerin özelliğine göre yapılır. Seçilen model veritabanı trafiğini etkileyeceği için hangi modelin seçileceği büyük önem taşır. Kurtarma modeli işlem kayıtlarının nasıl tutulacağını gösterir. SQL Serverda işlem kayıtlarını tutmamak gibi bir durum söz konusu değildir. Her koşulda da işlem kayıtları tutulur. Fakat bu kayıtların nasıl tutulduğu kurtarma modeline göre değişir.

SQL Server üç veri kurtarma modeli sunar. Bu modeller veritabanı yöneticisinin SQL Server ‘ın kayıt dosyalarını nasıl yöneteceğini belirler ve aynı zamanda bir kriz anında (yanlışlıkla verilerin silinmesi, veritabanının üzerinde bulunduğu diskin bozulması vb) geri kurtarma işlemi için hazırlık yapmasını sağlar. Bahsedilen her üç modelde farklı sebeplere yönelik çözümler olarak tasarlanmıştır. Burada ki çözümler diskte yer tutma ile kriz sonrası geri kurtarma için sağlanacak kayıt dosyalarının ne şekilde tutulduğuyla alakalıdır. Çok ayrıntılı bir kayıt dosyası veri kurtarma için iyidir fakat disk üzerinde çok yer tutar.

Basit Kurtarma Modeli (Simple Recovery Model)

Bu model adından da anlaşılacağı üzere sadedir. Bu yaklaşımda SQL Server minimum miktarda işlem (transaction) kaydını tutar. SQL Server, veritabanı her işlem kontrol noktasına (transaction checkpoint) geldiğinde, işlem kayıtlarının bir kısmını keser. Bu modeli kullanan veritabanlarında, tam (full) ya da diferansiyel (differential) yedekten geri yükleme yapılabilir. Fakat geri yükleme yedek alınan yazana döner. Yani örnek olarak veritabanı silinmeden on gün önce yedek alınmışsa, yedekten geri yükleme yaptığımız zaman o gün ki hali neyse o şekilde gelir. Bu nedenle aradaki on günlük yeni ada değişmiş veri kaybolur.

Tam Kurtarma Modeli (Full Recovery Model)

Bu modelde, SQL Server, işlem kayıtlarının (transaction logs) yedeği alınana kadar onları korur. Bu model sayesinde, olası bir krize karşı bir kriz planı elde bulundurmak açısından işlem kayıtlarının yedeğiyle birleştirilmiş tam ve ya diferansiyel veritabanı yedeği oluşturulabilir. Herhangi bir nedenden dolayı veritabanında bir hata meydana geldiğinde bu model sayesinde geri yükleme konusunda yeterince esnek davranabileceksiniz. Bununla birlikte tam kurtarma modelinin diğer bir özelliği olan istenilen ana geri yükleme de yapılabilir. Burada istenilen ana geri dönüşten kasıt şudur; düşünelim ki bir yıldır var olan bir veritabanımız var. Bu veritabanının bir kısmı bir hafta önce yanlış yazılan bir sorgu yüzünden silindi veya değişti. Bizde bu hatayı geç fark etmiş olalım. Bu durumda yedekten geri yükleme yapmamız gerekir. Fakat veritabanı için bir hafta öncesindeki hali gerekiyor bize. Tam kurtarma modeli sayesinde istediğimiz ana geri dönüş yapabiliriz. Fakat bu modelle alınan yedekler disk çok yer tutar.

Toplu İşlem Kurtarma Modeli (Bulk-Logged Recovery Model)

Bu modelin özel bir amacı vardır. Tam kurtarma modeli gibi davranır. Tek fark ise toplu işlemlerin nasıl üstesinden geldiğidir. Bu modelde toplu işlem kayıtları işlem kayıtlarında minimum düzeyde tutulur. Bu şekilde kayıt tutmak önemli miktarda işlemci yükünü azaltır fakat istenilen zamana geri yükleme yapmayı engeller. Bu nedenle bu modeli sürekli kullanmak yerine toplu işlem yapılmak istendiğinde tanımlı modeli bu modelle değiştirip işlerin yapılmasıdır. Daha sonra işlemler bitince önce ki modele geri dönüş yapılarak iş yükü azaltılmış olur. Aynı zamanda istenilen ana geri yükleme özelliği (eğer önceki model tam kurtarma modeliyse) kaybedilmemiş olur.

 

Saklı Yordamlar (Stored Procedures)

Saklı yordamlar tek çalışma planı (single execution plan) üzerinden çalışan T-SQL ifadelerinden oluşur veya bir Microsoft .Net CLR (Common Language Runtime – Ortak Dil Çalışma Zamanı) metoduna referans gösterir. T-SQL kodlarının el verdiği oranda tıpkı bir programlama dili gibi yordam yazmak mümkündür. Fakat yazılan kod çoğu zaman bir tablo üzerinde çalışır. Yani veritabanı üzerindeki bir tabloda (ya da tablolar üzerinde) işlem yapacak kodlardır.

Saklı yordamlar daha önceden yorumlandıkları için hızlı çalışırlar. Bunun ilk sebebi önceden derlenmiş olmasıdır. Fakat derleme işlemini her çalışmada tekrar yapması istenebilir. Bunun için RECOMPILE anahtar kelimesi kullanılır. Ayrıca tablolarda veri işleyen üçüncü parti programlara oranla veri alışveriş hızı nedeniyle daha hızlıdırlar ve bu nedenle performans konusunda da iyilerdir denebilir. Çoğumuzun bildiği gibi veritabanında bilgiler tutulur ve bu bilgiler şirket için çok değerlidir. İç bir şirket, bilgilerinin ele geçirilmesini istemez. Yani veritabanı bilgi güvenliği çok önemlidir. SQL Server üzerinde bir dizi işlemi üçüncü parti program kullanarak yapmak tehlikelidir çünkü üçüncü parti programların ne derece güvenli olduğunu bilmek her zaman mümkün olmaz. Bu sebeple güvenlik açısından da saklı yordamları kullanmak çok önemlidir. Aksi halde veritabanı üzerindeki bilgiler farkında olmadan başkalarının eline geçebilir. Bunlara ek olarak, saklı yordamlar içerilerine parametre alabilirler. Bu sayede parametreye verilen farklı değerler sayesinde farklı sonuçlar elde etmek mümkündür. Saklı yordamlar çalıştırıldıktan sonra bir değer veya bir satır da döndürebilirler. Satır döndürme işlemini imleçler (cursor) sayesinde yaparlar. Saklı yordamlarda bir parametrenin girdi parametresi mi yoksa çıktı parametresi mi olduğunu belirtmek için INPUT ve ya OUTPUT anahtar kelimeleri kullanılır. Tahmin edeceğiniz gibi INPUT girdi parametresidir ve OUTPUT çıktı parametresidir, yani sonuç olarak döndürülecek değer bu parametrededir. Bu anahtar kelimeler tanımlamanın sonuna yazılır. Bunlarla birlikte, saklı yordamlar içerisinde değişken tanımlamakta mümkündür. Tanımlamayı DECLARE komutuyla yaparız. Fakat burada dikkat etmemiz gereken şey bir parametre veya değişken tanımlarken isimlerin başına @ işaretini koymamız gerekir. Örnek olarak, DECLARE @parametre1 varchar(10) INPUT ya da DECLARE @parametre2 varchar(10) OUTPUT gösterilebilir. Parametre ve değişkenleri kullanırken bir değer atamak istiyorsak SET komutunu kullanırız.

Saklı yordamlar geçici ve ya kalıcı süre için oluşturulabilirler. SQL Server sistem saklı yordamlarının başına sp ön ekini koyar. Örneğin sp_who gibi. Bu nedenle saklı yordamlara isim verirken başına sp koymamaya özen gösterilmelidir. Eğer geçici yerel bir saklı yordam oluşturmak istersek saklı yordam adının önüne # işaretini koymamız gerekir. Eğer global bir saklı yordam oluşturmak istersek bu durumda ##prosedür_ismi şeklinde yazmamız gerekir. Saklı yordamlar başka bir saklı yordam içerisinde, sql sorgusu içerisinde, tetikleyici (trigger) içerisinde veya üçüncü parti bir yazılım içerisinden çağırılabilirler.

En basit anlamda T-SQL kodu oluşturmak için

CREATE PROCEDURE yordam_adı
AS
BEGIN
Değişkenler, sorgu cümleleri vb
END

 

Şeklinde bir yazım yeterlidir. Fakat bu son derece sade bir saklı yordamdır. Daha ayrıntılı olarak bir saklı yordam oluşturmak için aşağıdaki ayrıntılı kod da kullanılabilir. Fakat bu kod aslında tüm kullanım seçenekleriyle birlikte verilmiştir. Bir saklı yordam oluşturmak için aşağıdaki kodun hepsini yazmaya ilgili yerleri değiştirmeye gerek yoktur. (Aşağıdaki ayrıntılı örnek referans kodu SQL Server Books Onlinedan alınmıştır.)

CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ;number ]
    [ { @parameter [ type_schema_name. ] data_type }
    [ VARYING ] [ =default ] [ OUT | OUTPUT ] [READONLY]
    ] [ ,…n ]
[ WITH <procedure_option> [ ,…n ] ]
[ FOR REPLICATION ]
AS { <sql_statement> [;][ …n ] | <method_specifier> }
[;]
<procedure_option> ::=
    [ ENCRYPTION ]
    [ RECOMPILE ]
    [ EXECUTE AS Clause ]
 
<sql_statement> ::=
{ [ BEGIN ] statements [ END ] }
 
<method_specifier> ::=
EXTERNAL NAME assembly_name.class_name.method_name

 

Saklı yordamları çalıştırmak için EXEC ifadesini kullanırız. Kaldırmak için ise DROP ifadesi kullanılır. Kullanım şekilleri aşağıdaki gibidir.

EXEC saklı_yordam;

DROP PROCEDURE saklı_yordam;