Oracle Veritabanına Kuşbakışı – 5.Ders

@ 21 Ocak 2010 tarihinde yazdı. Yazıya yorum yazın.

ORACLE’DA YEDEK ALMA VE GERİ GETİRME

Oracle, verileri her ne kadar güvenli tutsa da, fiziksel sebeplerden(disk hataları), kullanıcı hatalarından veya benzer durumlardan dolayı yedeklere ihtiyaç duyulmaktadır. Yedek alma, veritabanı yöneticisinin yapacağı önemli işlerden birisidir.

Oracle’da, yedek almayla ilgili değişik yöntemler vardır. Veritabanı yöneticisi, kendi veritabanının durumuna göre, yedek almayla ilgili bir veya birden fazla yöntemi kullanmaya karar vermelidir. Bu kararı vermede, yönetici, yedeği kimin alacağı, hangi tür depolama ünitesine alınacağı, ne kadar sıklıkla alınacağı, alınan yedeklerin büyüklüğü, veritabanında küçük de olsa bir kayıba tahammül olup olmadığı gibi çok değişik sebepleri gözönünde bulundurmak zorundadır.

Fiziksel Yedek Alma

Fiziksel yedek alma veri dosyalarının, redo log dosyalarının ve kontrol dosyalarının yedeklerinin alınması işlemidir. Bir veritabanı ARCHIVELOG ve NOARCHIVELOG olmak üzere iki farklı modda çalışabilir. ARCHIVELOG modunda yapılan tüm işlemler redo log dosyalarına otomatik olarak kaydedilir. Bunun anlamı veritabanındaki değişikliklerin sürekli dosyalara kaydedilmesidir. Kaydedilen bu dosyaların hangileri olduğu ve nerede bulundukları gibi bilgiler init<SID>.ora dosyası içerisinde yer alır. ARCHIVELOG modda çalışan bir veritabanında veri kaybı söz konusu değildir. Eğer veritabanı NOARCHIVELOG modda çalışıyorsa yapılan değişiklikler bir yere kaydedilmeyecektir. Bu yüzden sistemin bozulması durumunda ancak son alınan yedekler geri getirilebilir. Yani son alınan yedekten sonra yapılan değişiklikler kaybolur. İşletim sistemi yedeği alma olarak ta bilinen fiziksel yedek alma işleminin dezavantajı, yedek alma işlemi boyunca veritabanının kapatılması gereğidir.

NOARCHIVELOG Modunda Yedek Alma

Bu modda yedek almak için komut moduna geçilerek aşağıdaki işlemleri yapmak gerekir. Bundan önce SQL*Plus içerisinde yedeği alınacak dosyaların tespiti yapılmalıdır.

Burada kullanılan V$LOGFILE, V$CONTROLFILE ve DBA_DATFILES dosyaları veri sözlüğündeki görüntülerdir. Bu görüntüleri sorgulayarak yedeklememiz gereken dosyaları ve bunların nerede bulunduklarını öğreniyoruz. Burada yapacağımız iş veritabanı oturumunu kapattıktan sonra, bu dosyaları bir başka depolama ünitesine kopyalamak. Veritabanını Windows NT veya Windows 2000 içerisinde, Denetim Masası’na girip “Sevices” simgesine çift tıkladıktan sonra burada “Oracle” ile başlayan tüm servisleri durdurarak kapatabiliriz. Bu işlemler komut modundan da yapılabilir. Bunun için veritabanı yüklenirken belirtilen dizin içerisindeki “Svrmgrl” programı çalıştırılır. Eğer varsayılan dizini seçtiyseniz bu “c:\oracle\ora81\bin” dizinidir. Komut modunda şu adımlar gerçekleştirilir:

svrmgr>connect internal

svrmgr>shutdown immediate

svrmgr>exit

>lsnrctl stop

Buradaki işlemlerde önce sunucu yöneticisine(server manager) bağlanılıyor  ve sonra da veritabaını kapatılıyor. En sonda da Dinleyici(Listener) durduruluyor. İlgili dosyalar kopyalandıktan sonra :

svrmgr>connect internal

svrmgr>startup

Bu dosyları bir bozulma anında tekrar geri yüklemek için veritabanını kapatıp dosyaları geriye kopyalamak ve sonra yeniden veritabanını açmak gerekir. İşte burada son yapılan değişiklikler kaybolur.

ARCHIVELOG Modunda Yedek Alma

Bu modda yapılan değişiklikler otomatik olarak redo log dosyalarına yazıldığı için dosyaları tek tek kopyalamak gerekmez. Fakat bu değişikliklerin kaydedildiği dosyaları yedeklemek yararlı olabilir. Veritabanında bir bozukluk durumunda yapacağımız iş veritabanını kapatıp “Recover Database” komutunu kullanmak ve sonra veritabanını yeniden açmak. “Recover Database” komutunu kullanmak için veritabanı “Mount” modunda açılır.

svrmgr>connect internal

svrmgr>shutdown immediate

>exit

>lsnrctl stop

>svrmgr

svrmgr>connect internal

svrmgr>startup mount

svrmgr>recover database

Mantıksal Yedek Alma

Oracle’da mantıksal yedek alma denince Export ve Import anlaşılır. Bunlar Oracle firmasının geliştirdiği komut modunda çalışan yardımcı programlardır. Bu tür yedek alma veritabanı nesnelerinin yedeklenmesi olduğu için mantıksal yedek olarak adlandırılır. Yani export ile log dosyalarının ya da kontrol dosyalarının yedeği alınmaz.

Export

Export Oracle’ın mantıksal yedek alma işlemleri için geliştirdiği bir üründür. Mantıksal yedek alma veritabanının kapatılmaması gerektiği zaman kullanılan bir yedek alma türüdür. Bu yöntemle farklı modlarda yedek alınabilir. Bunlar aşağıda açıklanacaktır. Export ile alınan yedekler ancak Import ile geri yüklenebilir. Export kullanılarak bir veritabanının yapısı veriler olmadan yedeklenebilir, belli tablolar verilerle birlikte ya da sadece yapıları ile yedeklenebilir, yani yedeklenecek veritabanı nesnelerinin seçimi yapılabilir.

Export almada 4 mod vardır: Birincisi Tablo Modu(Table Mode)’dur. Bu modda kullanıcılar kendi tablolarının yedeklerini alabilirler ya da hakkı olan kullanıcı bir başka kullanıcnın tablolarının yedeklerini alabilir. İkincisi Kullanıcı Modu(User Mode)’dur. Bu modda bir kullanıcının nesnelerinin yedeği alınabilir. Üçüncüsü Tam Veritabanı Modu’dur(Full Database Mode). Bu modda tüm veri tabanının yedeği alınabilir. Bu modu gerçekleştirmek için kullanıcının bazı özel haklara sahip olması gerekir. EXP_FULL_DATABASE rolüne sahip olan kullanıcı ya da DBA rolüne sahip olan kullanıcılar bu modu kullanabilir. Dördüncüsü Tablo Uzayı Modu’dur. Bu modda da tablo uzaylarının yedeği alınır.

Export yardımcı programını çalıştırmak için komut moduna geçilmelidir. Exp.exe dosyası Oracle8i kurulurken varsayılan dizin adı kabul edildiyse “c:\oracle\ora81\bin” dizini içerisinde bulunabilir. Aşağıdaki örnekler bu dizine geçip komut modunda yazılarak çalıştırılabilir.

Tam Veritabanı Modu örnekleri:

>exp system/manager full=Y file=deneme.dmp

Yukarıdaki komut tüm veritabanının yedeğini alır. Eğer tüm veritabanı içerisinde istenilen belli özelliklerin yedeği alınmak istenirse etkileşimli metod kullanılır(aşağıdaki gibi).

>exp system/manager

……..

Enter array buffer size:4096>(return)    ‘veri tamponunun büyüklüğü

Export file:EXPDAT.DMP>deneme.dmp   ‘varsayılan yedekleme dosyası ismi EXPDAT.dmp

E(ntire databese), U(sers), T(ables):U>e ‘tüm veritabanı mı? Kullanıcı ya da Tablo yedeği mi?

Export grants(Y/N):Y>y               ‘kullanıcı haklarının yedeği alınsın mı?

Export Table Data(Y/N):Y>y    ‘ veriler kopyalansın mı?

…….

Kullanıcı Modu Örnekleri:

>exp scott/tiger file=scott.dmp

Scott kullanıcısının tüm nesneleri ve verileri scott.dmp dosyasına yedeklenir. Etkileşimli mod için yine “>exp scott/tiger”   şeklinde komut girilir.

Tablo Modu Örnekleri:

>exp system/manager tables(a,scott.b,ahmet.d) rows=n

System kullanıcısı kendisine ait olan a tablosunu, scott kullanıcısına ait olan b tablosunu ve ahmet kullanıcısına ait olan d tablosunu yedekliyor. “rows=n” bildirisiyle tablo verilerinin alınmamasını sadece tablonun yapılarının kopyalanmasını sağlıyor.

Import

Export ile yedeklenen veriler Import yardımcı programıyla geri getirilebilir. Yedeklenmiş dosyanın tamamı ya da bir kısmı yedekleyen kullanıcı için geri getirilebildiği gibi bir başka kullanıcıya da aktarılabilir.

>imp system/manager file=deneme.dmp fromuser=usr_esef  tables=(isci,bolum)

usr_esef kullanıcısının dneme.dmp tablosuna yedeklediği  isci ve bolum tabloları geri getirlir.

>imp system/manager file=scott.dmp fromuser=scott touser=esef tables=(*)

scott kullanıcısının scott.dmp ismli yedek dosyasındaki tüm tablolar esef kullanıcısına aktarılır. Tüm tablolar için “*” işareti kullanılır

Hayrullah AYAN