Bu gün (04.07.2007) stajın 3. günü. Laptop'umu masama getirip internete bağlayabildim sonunda, bu yazıyı da şu anda burdan yazıyorum :)
Eksiklerimiz yavaş yavaş tamamlanmaya başladı. Gerçekten başta Tonguç bey olmak üzere burdaki herkes bizimle çok güzel ilgileniyor. Bu gün laptopumu da getirdiğim için fazla sıkılmadım, alışık olduğum gibi yoğun çalışma şansım oldu :) Blogumla ilgili eksikleri tamamladım çoğunlukla. Saate de bakıyorum 16:42... Mesai bitimine kadar sanırım bu makaleyi de bitirebilirim :)
Bu gün de sevgili
Osman ÇAM -ki kendisi daha önce de belirttiğim gibi keyifli bir arkadaş olmakla birlikte bizi Turkcell'deki staj organizasyonlarından haberdar eden kişidir, ve şu an karşımda oturuyor :) - bize "Tablespaces, Datafiles and Control Files" başlıklı sunumunu yaptı. Kendisi yapılı bir arkadaşımız olması ve hemen karşımda oturması sebebiyle sunumun keyifle geçmediğini söyleyemem :)) Şaka bir yana, güzel bir sunumdu. Stajyer arkadaşlarımdan da sunum sonrası sohbetlerimizde, yavaş yavaş sunumların bize ne kadar faydalı olacağını anlamaya başladığımız izlenimini aldım. Temel konulardan daha geniş konulara doğru gidecek sunum programımız, eminim bu yaz bize çok şey katacaktır. Bunun yanında, diğer departmanlarda ve Gebze'de staj yapan arkadaşların da sunumlara katılmak için çok yoğun gayret gösterdiğini gözlemledik.
Osman'ın sunumunu da bu linkten indirebilirsiniz. Fakat çok fazla yazı yoktur, Osman'ın bize sözlü anlattıkları önemliydi. Onları da bu makalenin ilerleyen kısımlarında anlatmaya çalışacağım:
● Tablespace tamamen mantıksal bir yapıdır.
Benzer verileri gruplayarak veri yönetimini kolaylaştırmak için oluşturulmuştur. Bunları dosya sistemi üzerindeki klasörler olarak düşünebiliriz. Klasörler, benzer dosyaları gruplayarak işimizi çok kolaylaştırır, fakat onlar aslında gerçek dosyalar değildir, veri taşımazlar, varolan verileri (dosyaları) bir arada tutar, gruplarlar.
● Tablespace, Schema ile aynı şey değildir.
Tablespace verileri, Datafile bazında gruplar, Schema ise kullanım izinleriyle alakalıdır, bir kullanıcının kullanım izni olan objelerinin gruplanması, o kullanıcının Schema'sını oluşturur. Schema da tamamen mantıksaldır, ve mantıksal veriyi gruplar. Ama Tablespace, fiziksel veriyi gruplar.
● SYSAUX ve SYSTEM Tablespace'leri sistem verisine ilişkin datafile'ları gruplar ve bunlar çalışan bir database'de olmak zorundadır. Aynı zamanda Temporary ve Undo datası için de birer tablespace vardır sistemde. Undo Tablespace'de undo datası vardır, Temporary tablespace'de ise, çalıştırılan SQL komutlarının geçici datası vardır. Örneğin iki tablo join edilerek üzerinden gruplama veya filtreleme yapılacaksa, önce join edilir ve join edilen tablo Temporary Tablespace'te oluşturulur, daha sonra onun üzerinden ne yapılacaksa yapılır. (Join edilen tablo direk memory'e sığıyorsa bu tablespace kullanılmayabilir)
● Bigfile Tablespace diye bir tip de vardır. Bunun özelliği, içinde yanlızca bir datafile bulunması ve 128 TB'ya kadar veri saklayabilmesi.
● Daha önce Tablespace'in, datafile'ların benzerliklerine göre gruplandırılması olduğunu söylemiştik. Bu benzerlikler şu açılardan olabilir:
1- İş mantığı: İş mantığı olarak benzer tablolar, aynı tablespace'e ait olacak şekilde gruplanabilir. Bu tablespace'in konfigürasyonu da ona göre yapılarak managability'nin kolaylaşması yanında, performans artışı sağlanabilir. Örneğin, HR ile alakalı Departments tablosuyla Employees tablosunu aynı tablespace'e koymak gibi. (Konumuz performance tuning olmadığı, ve aslında bu levelde performance arttırmak developerların işi olmadığı için fazla ayrıntıya girmiyorum)
2- Objelerin büyüklüğü: Objelerin büyüklüğüne göre, büyük objeler gruplanarak aynı tablespace'e koyulabilir ve konfigürasyonu da ona göre yapılarak (örneğin datablock size'ı arttırılarak) performans artışı sağlanabilir. başak bir bakış açısıyla bu, büyük objeleri farklı tablespace'lere bölerek performansı arttırma anlamında da değerlendirilebilir.
3- İşlevin hacmi: Tablolar üzerindeki işlem yoğunluğuna göre yoğun işlem alan tablolar farklı tablespace'lere bölünebilir veya aynı tablespace'e ait olacak şekilde gruplanabilir.
4- Yedekleme: Yedek datafile'ları aynı tablespace'de gruplanabilir.
5- Tanışabilirlik: Tablespace'ler [bazı şartlarda] farklı database'ler arasında taşınabilir olduğundan, taşınacak objeler aynı tablespace'de gurplanabilir.
6- Zamana göre işlemdeki değişiklik: Örneğin artık kullanılmayacak veriler (objeler), farklı bir tablespace'e taşınarak güncel verilerden ayrılabilir.
● Tablespace'lerde alakalı alan yönetimi(space management) 2 tür olabilir: Dictionary Managed ve Locally managed. Dictionary Managed'da
alan bilgisi Oracle'ın dictionary'sinde tutulur ve gerekli olduğunda ordan okunarak kullanılır. Fakat bu, eski sistemlerde mevcuttu ve 8i ile birlikte Locally Managed Tablespace'ler geldi. Bunun modası geçti :) Maliyet açısından dezavantajları vardı.
Locally Managed'da ise alan bilgisi
datafile header'ı içinde bitmap olarak tutulur ve ihtiyaç duyulduğunda oradan kullanılır.
● Datafile, fiziksel olarak verilerin tutlduğu yerdir. Data Block'lardan oluşan extendler bu dosyalarda tutulur. Offline Datafiles ve Temporary Datafiles gibi çeşitleri vardır.
● Control file, databse'in adı, oluşturulma tarihi, datafile'larının konumu, log dosyalarının konumu, backup bilgisi gibi, database ile ilgili bilgi ve konfigürasyonları tutan dosyalardır. Her database'in mutlaka bir control file'ı vardır. Bu dosyalar database'i ayağa kaldırmak için gerekli bilgileri içerir, haliyle database'in içinde saklanamayacak bilgilerdir bunlar, bu yüzden control file'lara ihtiyaç vardır.
Sevgili Osman'ın değerli sunumuya ilgili olarak aklımda kalanlar ve bu konuda bildiklerimi sizinle paylaşmaya çalıştım. İlerleyen günlerde, bu konular daha ayrıntılı işlenmeye başlayacak ve sunumları da büyük bir zevkle bu yazı dizisi altında size özetlemeye devam edeceğim. Sunumları kaçıran stajler arkadaşlar ve "seneye Turkcell'de staj yapayım", "Oracle hakkında bilgi sahibi olayım", veya "Oracle'a nasıl başlayayım" diyen arkadaşların, bu yazı dizisini ve sunumları takip ederek, çok yüksek bedeller ödeyerek bile sahip olamayacakları bilgi düzeyine sahip olabileceklerine inanıyorum.
Şunu da belirteyim ki, başlangıçta "ben developer olucam bunlardan bana ne" diye aklınıza gelebilir, fakat bir developer'ın mimariyi bilmesi çok önemli. Bunu her makalede yazıyorum, biz de her yerde, herkesten bunu duyduk, bu önemli arkadaşlar. Bunun önemine ilerde de tanık olacağız eminim. çalışmalar başlayınca somut örnekleri de sizinle paylaşacağım umarım.
Şimdilik bu kadar, herkese iyi çalışmalar.
|