25 Kasım 2010 Perşembe

RMAN giriş

Merhaba arkadaşlar,

Bu makalemde, veritabanı kullanan her sistemde kaçınılmaz olan hatalar veya göçmeler sonucu ortaya çıkacak problemlerin çözümü üzerinde duracağım. Bu noktada en çok kullanılan yöntem esnek ve pratik olması hasebiyle Oracle’ın sunduğu RMAN dir. Bu yazımda genel olarak RMAN in ne olduğu ve basit komutlarla nasıl kullanıldığı üzerinde duracağım umarım sizler için faydalı olur.

RMAN, adı üzerinde Oracle’ın sunduğu bir backup (yedekleme) aracıdır. Normalde bir system üzerindeki backup işlemlerini DBA ler yaparlar. Bir dba, bu işlemi Rman den once özel scriptler yazarak, database’i backup moda çekerek yapmaktaydı. Yani uzun ve uğraşlı bir yöntem kullanıyorlardı. RMAN ise dba üzerindeki iş yükünü en aza indirecek şekilde bu işlemlerin çoğunu otomatikleştirerek backup görevini olabildiğince kolaylaştırmaktadır.

Eski yöntemlerle yapılan her türlü backup şeklinin Rman tarafında bir karşılığ vardır. Örneğin veritabanını yedeklerken rman sayesinde ister hotbackup ister coldbackup; sıkıştırılmış veya sıkıştırılmamış, archive log’u kapsayarak veya haricinde v.s. seçenekleri iki kelime yazarak dahil edebiliyorsunuz. Yani eğer amacınız genel anlamda basit olarak backup/recovery ise yardımınıza ilk koşacak araç RMAN dir. Neredeyse tüm ihtiyaçlarınıza cevap verebilir.

Şimdi ise gelelim RMAN ile nasıl backup yapacağımıza…Öncelikle database’ imiz hangi işletim sistemi üzerinde ise komut satırına geçerek

rman target /

komutu ile RMAN’ e geçiş yapıyoruz.

RMAN > backup database;

Dediğimizde online olarak database’in full backup’ nı almış oluruz.

RMAN in pratik kullanımına aşağıdaki örnekleri verebiliriz :

RMAN > backup tablespaces system, users;

Komutuyla sadece ‘system’ ve ‘users’ tablespace’lerinin yedeğini alabiliriz.

RMAN > backup datafile 3,29,32;

Komutuyla 3, 29, 32 numaralı datafile ların yedeğini alabiliriz.

RMAN > backup archivelog all;

Tüm arşiv dosyalarını yedekler.
RMAN > backup archivelog from ‘sysdate-3’

Son 3 günün arşiv dosyalarını yedekler.

RMAN ile ilgili daha ayrıntılı bilgi istiyorsanız benim araştırma sürecimde dikkatimi çeken şu makaleye de bir göz atabilirsiniz : http://www.boraovali.com/?p=168&cpage=1#comment-6

Oracle Altert ve Trace Dosyaları


ALERT VE TRACE DOSYALARI

Veritabanı açılıp kapatılırken veya bu aşamanın adımlarında herhangi bir hata durumunda oluşan hatanın bilgileri alertSID.log dosyasına yazılır. Bu dosyada veritabanı ile ilgili bütün bilgiler vardır. Dosyanın default yeri :
$ORACLE_HOME/rdbms/log
Lokasyonu BACKGROUND_DUMP_DEST parametresi ile belirlenebilir.

BACKGROUND TRACE
Background prosesler yürütülürken oluşan hatalar sonucunda oluşan dosyalardır. Lokasyonu BACKGROUND_DUMP_DEST parametresi ile belirlenir ve dosyanın formatı SID_ProcessName_PID.trc şeklindedir. Örnek olarak : db01_lgwr_23845.trc

USER TRACE
User prosessler üzerinde meydana gelen hatalar sonucunda oluşan dosyalardır. Bu dosyaların lokasyonu USER_DUMP_DEST parametresi ile belirlenir ve formatı da SID_ora_PID.trc şeklindedir. Örnek olarak : db01_ora_23845.trc bir user trace dosyasıdır.
User Trace işlemi yine bizde parametrelerce belirlenip yürütülebilen bir bilgidir.

Session bazlı olarak,

SQL > ALTER SESSION SET SQL_TRACE = TRUE

Komutuyla,

Yada Paramatre file’ından

SQL_TRACE = TRUE yapılarak user trace enable edilebilir.

Oracle Mimarisi-2


Oracle Mimarisine Giriş - 2
Oracle Server : Veritabanındaki tüm dosyaları, arka plan prosesleri v.b yapıların tutulduğu sistemin adıdır. Bir veya birden fazla database I barındırır. Açıkçası herhangi bir server makina üzerine kurulan sistemdir.
Oracle Instance : Her veritabanı için bir örnek oluşturulur. Veritabanı dosyaları, arka plan prosesleri ve memory yapılarının barındıldığı katmandır. Veritabanı her açıldığında açılır ve kapatıldığında otomatik olarak kapatılır. İleride bileşenlerin detayına inildiğinde bu kavramlar daha anlaşılır olacaktır.


Oracle Database : Database dediğimiz kavram ise tüm hayati bilgilerimizi içinde muhafaza eden ,gerekitğinde ulaşabildiğimiz İnsatnce ve Server’ın bir parçasıdır.
Şimdi bu yapılara daha detaylı bakacak olursak;
ORACLE SERVER
Oracle server, bizzat makine üzerinde çalışan yapıdır. Biz bu makineye bağlanarak Oracle veritabanını kullanır ve ilgili işlemleri gerçekleştiririz.
Client-Application Server-Server: (Three-tier) Kullanıcılar kendi bilgisayarlarından Application Server’a erişirler buradan yapılan ayarlama ve yetkilendirme ile Database’e erişim sağlanabilmektedir.
Client-Server: (Two-tier) Kullanıcılar kendi bilgisayarlarından direk olarak uzaktaki veritabanına erişebilmektedirer.
Host-Based: Bu yapıda ise kullanıcılar kendi bilgisayarlarından direk kendi makinelarında kurulu olan veritabanına ulaşabilmektedirler.



ORACLE INSTANCE
Bahsettiğimiz gibi veritabanını her açtığımızda otomatik olarak başlar. Bu yapı, Memory ve Proses kısımlarının tamamını oluşturmaktadır. Bu oluşum ileride anlatılacak olan SGA ve PGA vasıtasıyla gerçekleşir. Client tarafından herhangi bir user Oracle Server ile iletişime geçtiğinde, otomatik olarak bir session oluşturulur.



ORACLE DATABASE
Oracle Database dediğimiz kavram ise sistemde bilgilerimizin tutulduğu file’lar topluluğudur


Data files : Sistemle alakalı verileri barındırır. Örnek olarak tablo,view, index gibi şema nesneleri bu yapı bünyesindedir.
Redo log files : Bu dosyalar yapılan transcation’ ları barındırır. Commit edilmiş edilmemiş bilgilerin hepsi bu yapıda saklanır.
Control Files : Bu dosyalar veritabanının genel yapısını tutar. Örnek olarak, tablespace’ların uzunluğui adı, yapısı gibi veritabanını ilgilendiren her yapının saklandığı yer burasıdır.
Parameter Files : Sistemin optimum verimle çalışması için gerekli olan parametreleri barındırır. SPFILE ve PFILE olarak iki versiyonu vardır.
            SPFILE : (ServerParameter Files) kullanıcının müdahale edemediği parametreler barındırılır.
            PFILE : (Parameter Files) kullanıcının üzerinde değişiklik yapabileceği parametrelerden oluşur.
Archived Log Files : Belli bir büyüklük seviyesine gelmiş redo log’ların arşivlenmiş şekilleri tutulur.

Oracle Mimarisi-1


ORACLE MİMARİSİNE GİRİŞ

Oracle veritabanı da diğer ilişkisel veritabanları gibi verilerle beslenir ve bu verilerin birbiri arasındaki senkronizasyonunu tutarak optimum şekilde depolanmasını ve istenilen amaçlara gore sorgulanmasını amaçlamaktadır. Veritabanları, bilişim projeleri ve bilgi yönetiminde en temel faktördür.  Çünkü veri, her projelerin temel yapı taşıdır ve bütün bu gelişen sistemler, veriden optimum fayda sağlamak ve bir nevi ham veriyi optimum şekilde yöneterek ideal stratejiler oluşturma amaçıyla inşa edilmektedir.
Oracle veritabanı, yapı olarak fiziksel ve mantıksal olmak üzere iki kısımdan oluşur. Bu yapılar birbirinden ayrı olduğu için verilerin fiziksel olarak depolanma şekli mantıksal yapıya erişimi etkilemez.
Mantıksal Veritabanı Yapıları

Oracle veritabanındaki mantıksal yapılar tablespaceler, şemalar, segmentler, extentler, veri blokları’dır.

Şemalar ve Şema Nesneleri
Şema, nesneleri kapsayan bir yapıdır ve şema nesneleri veritabanı verilerine doğrudan karşılık gelen mantıksal yapılardır. Bir şema, direk veritabanı kullanıcısına tekabül eder ve aynı ismi taşır. Mesela A şirketi bünyesinde “proje takip sistemi” adında bir proje yapılacaksa, bu proje için örnek olarak ‘PRTAKIP’ adında bir şema oluşturulur. Bu şema (ileride anlatılacak olan) tablo,view,paket,prosedür v.s. gibi şema nesnelerinden oluşur. Proje kullanıcıları ‘PRTAKIP’  adıyla ve bu şemaya atanmış şifre ile veritabanına bağlanarak işlem yaparlar. Şema nesnelerinin detayına indiğimizde konu biraz daha netlik kazanacktır.

Tablolar : Veritabanında saklanacak olan verilerin depolandıpı temel birimdir. Tablolar, kullanıcılar tarafından erişilecek verilerin tümüne sahiptir. Veriler, tablolarda satırlar(rows)/sütünlar(columns) mantığıyla saklanır. Her sütünun adı, niteliği, türü gibi özellikleri vardır. Şöyle bir örnekle daha açık anlaşılacaktır. Okullarda bulunan öğrenci listelerini bir tablo gibi düşünürsek; ‘Öğrenci No’, ‘Adı’ ve ’Soyadı’ sütunları vardır. Bunlar tablonun sütun(column)’larıdır. Altındaki veriler ise 2567, Ercan, Yazgan şeklinde tutulan kayıtlar ise satırlar(rows)’dır.

Viewler : Bir veya daha fazlo tablodaki verilerin özelleşmiş gösterimidir. Bir nevi saklanmış sorgular olarak da tanımlayabiliriz. Viewler fiziksel olarak veri içermezler. Adı üzerinde, verinin asıl kaynağı olan tablolardan çekilen verilerin özel bir görüntüsüdür. Fakat aynı tablolar gibi üzerinde ekleme slime güncelleme gibi işlemlere olanak tanırlar. Bunu da bir örnekle açıkayacak olursak; ‘Öğrenciler’ ve ‘Alınan_Dersler’ isimli iki tablomuz olsun. Biz matematik ve Fizik derslerinde notu 70’ten yüksek olan öğrencileri  özel bir şekilde saklamak istiyoruz. Bunun için ‘Basarililar’ isminde bi view oluşturarak bu gruba ait özel işlemler için, bu verileri özel bir sorgu vasıtasıyle ilgili tablolardan çekip böyle bir view’de tutmuş oluruz.
İndexler : Aranan verinin daha hızlı bulunabilmesi ve kullanıcıya döndürülmesi için anahtar(key) değer mantığı ile çalışırlar. Mantıksal ve fiziksel olarak veriyle bir alakası yoktur. Bir indeks, diğer indeks veya tabloları etkilemeden oluşturulabilir veya yok edilebilir. Oluşturulma amacı, veriye erişim performansını artırmaktır. Oracle indeksi, mimari itibarıyle herhangi bir tablodaki veriye direkt erişim yolu sağlar. İndeksler, bir tablonun belli bir kısmını veya belli bir satırı sorgulamak istediğimizde işe yarar. Örnekle açıklayacak olursak, ‘Öğrenci’ tablosu üzerinde, adı ‘E’ ile başlayanlar şeklinde bir indeks oluşturulabilir. Bu sayede, sorgu çalıştığı zaman tablonun tüm verilerini değil sadece adı ‘E’ ile başlayanlar yanıt olarak dönecektir ve bu da büyük ölçekli projeler bazında düşündüğümüzde büyük performans sağlayacaktır. İndeksler, oluşturulduktan sonra Oracle tarafından otomatik olarak gözlemlenir ve kullanılır. Herhangi bir tablo üzerinde yapılan değişiklikler otomatik olarak ilişkili indeksler üzerine de yansıtılır

Neden "Bye Bye World" ?

Merhaba arkadaşlar,

Bildiğiniz üzere biz bilgisayar mühendisleri/programcıları, herhangi bir programlama dilini öğrenirken ilk başta "Hello World" yazarız. Bu yerli/yabancı kitaplardan tutun da makalelerden, özel derslerden, üniversite eğitimlerine kadar benimsenmiş bir alışkanlıktır. Lakin bir bilgisayar mühendisi "Hello World" diyerek aslında dünyaya merhaba değil, elveda demektedir :) Çünkü bilgisayar mantığı ve algoritmaların içine daldığınızda tamamen bilindik hayattan soyutlanmış ve "0-1" mantığıyla cebelleşir bir kılığa bürünüyorsunuz. Bu vesileyle orada ki hello'nun asıl manası bye bye'dır. Tabi bence...

İyi Seyirler . . .