Etiket arşivi: Oracle mimarisi

Oracle 11g Recovery Manager (Rman) Teknolojisi

 

Oracle Recovery Manager(RMAN) teknolojisi, veritabanının gerek bütünsel gerekse tablespace bazlı olarak yedeğinin alınması ve felaket anında yedekten belirli zaman dilimine yada SCN numarasına dönülmesi şeklinde özetlenebilir.  Oracle 11g veritabanı sürümü ile RMAN teknolojisine pek çok yenilik eklenmiştir. Data Recover Tavsiyecisi(Advisor), muhtemel oluşabilecek hataları analiz etme ve en azından bir tane tamir seçeneğini sunması ile oluşabilecek herhangi bir uygulama hatasından once problemleri teşhis eder ve böylece veritabanının kesintisiz çalışması ve bütünlüğünün bozulmaması için üst düzey bir koruma saplar. Bu amaçla ise RMAN’ın list failure, change failure, advise failure ve repair failure gibi Oracle 11g ile yeni gelen tamir komutları kullanılır.  RMAN, flashback alanı dolu olduğu takdirde arşivlenlenmiş redo günlüklerini kullanır. Duplicate komutu ile de kopya veritabanı veya fiziksel standby veritabanı, yedek dosyalarına gerek kalmaksızın oluşturulabilir.

RMAN teknolojisi, üretim veritabanında yedekleme esnasında performans kaybının olmaması amacıyla recovery katalog metodunu kullanır. RMAN işlemleri sırasında kullanılmak üzere başka bir sunucu üzerinde(veya aynı sunucuda) oluşturulan bir veritabanı, recovery katalog rolüne sahip olur.  RMAN recovery kataloğu, recovery verisini, kendi ayarlarını ve hedef veritabanı şemasını içermektedir. Hedef veritabanının kontrol dosyası bu veriyi, scriptleri saklamak, hedef veritabanı kontrol dosyasının kopyasını sağlayabilmek amacıyla kullanır ve bu sebeple RMAN işlemlerinde recovery kataloğu kullanmak tavsiye edilir.

RMAN Teknolojisinin Geleneksel Yedekleme Teknolojileri Karşı Avantajları

·         Kullanılmayan blokların atlanması: Bir tabloda daha onceden yazılı olmayan bloklar (High Water Mark(HWM) üstünde kalan bloklar gibi) yedeklenmez. Geleneksel yedeklemede hangi bloğun kullanıldığı bilinmediğinden bu atlama işi olamaz.

·         Yedeğin sıkıştırılması(Compression): Oracle’a özgü binary sıkıştırma metodu kullanarak, Oracle data blokları üzerinde bulunan farklı veri tipleri için maksimum sıkıştırma yapılarak backup cihazı üzerinde boş alan ayrılabilir. (“RMAN> configure device type disk backup type to compressed backupset” komutu ile aktive edilir)

·         Veritabanı yedeklerini açma: alter tablespace …. begin/end backup cümleleri kullanmaya gerek kalmadan tablespace yedeklemesi kolayca yapılabilir.

·         Gerçek artalan(incremental) yedekleme: Geri kurtarma esnasındaki süreyi kısaltmak için en son yedekten sonraki değişmeyen yedekler yedek setine yazılmaz. Böylece, CPU süresi, I/O süresi ve disk alanında performans sağlanır. RMAN, geri yükleme ve kurtarma işlemlerinde artalan güncelli yedekleri kullanır.

·         Blok seviyesinde geri kurtarma: Downtime süresini düşürmek için Oracle blok seviyesinde geri kurtarmayı destekler. Bir tablespace, sadece bozulmuş blokların onarma işlemi seviyesinde kapalı kalmaz.

·         Çoklu I/O kanalları: Yedekleme ve geri kurtarma işlemlerinde Oracle birden fazla I/O kanalları açabilir, böylece disk üzerindeki işlemler hızlanmış olur. (“RMAN> configure device type disk parallelism <kanal sayısı> backup type backupset” komutu ile aktive edilir)

·         Platform bağımsız: RMAN her türlü donanım ve işletim sistemi üzerinde aynı komutlarla kullanılır.

·         Kataloglama: Tüm RMAN kayıtları hedef bir veritabanı kontrol dosyası içinde kayıt edilir. Manuel takibe gore avantaj sağlar.

·         Şifreli Yedekleme: Oracle 11g sürümü ile yedekleri şifreli olarak saklama imkanı vardır.

Ambar Veritabanının Oluşturulması

Ambar veritabanı olarak RMAN yedeklerinin tutulacağı bir veritabanı oluşturulmalıdır. Bu veritabanı recovery kataloğu olarak kullanılacaktır. Şimdi sırasıyla recovery catalog oluşturma işlemine başlayalım.

1.       Recovery Catalog olarak kullanılacak hedef veritabanına bağlanılır. Örneğimizde ambar veritabanının ORACLE SID’si “katalog” şeklindedir. Üretim veritabanımızın SID’si ise “orcl” dir.

 

$  sqlplus sys/***@katalog as sysdba

 

2.       Ardından RMAN tablespace içindeki recovery katalog ve RMAN kullanıcısı oluşturulur. Ardından bu RMAN kullanıcısına haklar verilir.

 

SQL> create tablespace rman datafile ‘/u01/app/oracle/oradata/katalog/rman01.dbf’

         size 125m autoextend on next 50m maxsize 500m;

SQL> create user rman identified by ****

          default tablespace rman

          quota unlimited on rman;

SQL> grant recovery_catalog_owner to rman;

 

3.       Artık ambar veritabanında RMAN kullanıcı yer almaktadır. RMAN’I çalıştırıp kataloğa bağlanabilir ve create catalog komutu ile ambarı tanımlayabiliriz.

 

$ rman catalog rman/rman@katalog

RMAN> create catalog;

 

4.       Şimdi “orcl” adlı üretim veritabanımızı, RMAN ambarındaki “katalog” adlı hedef veritabanına kayıt etmemiz gerekecek. Bu işlem hedef veritabanı şeması ve hedef veritabanı tekil kimlik numarası(DBID) gibi bilgileri kayıt etmeye yarar. Hedef veritabanı bir sefer kayıt edilmelidir, takip eden tüm RMAN oturumu bağlantılarında, artık ambardaki doğru metadata referans olarak kullanılacaktır.

 

$ rman target sys/***@orcl catalog rman@katalog

RMAN> register database;

 

Full Yedekleme İşlemi

 

Örneğimizde flashback recovery alanına tüm veritabanı dosyalarının ve SPFILE’ın backupsetlerini kullanacağız.Compressed seçeneği opsiyoneldir ve yedeği sıkıştırarak almaya yarar.

 

RMAN> backup as [compressed] backupset database spfile;

 

Yedeklerin hedef veritabanı kontrol dosyası ve RMAN ambarı içinde kataloglandığını görmek için list komutunu kullanabiliriz.

 

RMAN> list backup by backup;

 

Sadece tablespace’lerin yedeğini almak için ise;

 

RMAN> backup as backupset tablespace <tablespace_ismi>;

 

Sadece data dosyalarını yedeklemek içi ise;

 

RMAN> backup as backupset datafile ‘<data_dosyası_yeri&ismi>’;

 

Sadece kontrol dosyası ve SPFILE yedeklemek için;

 

RMAN> backup current controlfile spfile;

 

Artalan(Incremental) Yedekleme İşlemi

 

Artalan yedeklemenin en büyük avantajı geri yükleme esnasında zaman kaybının azalması şeklinde özetlenebilir. En son alınan yedek sonrasında, değişen blok içindeki veriler yedeklenir. İki tür artalan yedekleme vardır.

·         Level 0: Bu seviyedeki artalan(incremental) yedeklemede, yedek en son full yedek sonrasından alınır

·         Level 1: Bu seviyedeki artalan(differential) yedeklemede, yedek en son alınan incremental(Level 0) yedekten, aksi takdirde en son full yedek sonrasından alınır.

Yedekleme için saklama aralığı(retention period) olarak tanımlanan zamandan ilerde arşivlenmiş yedeği bulunmayan data dosyalarını listelemek için aşağıdaki komutu çalıştırmak yeterlidir;

                 RMAN> report need backup;

Eğer bu rapor sonucu herhangi bir yada daha fazla data dosyası listelenirse, bunların incremental yedeğini almak için aşağıdaki komut çalıştırılır;

                 RMAN> backup incremental level 0 database;

 

Artalan Yedeklerde Blok Değişikliğinin İzlenmesi

 

Artalan yedeklerde en büyük sorun, çok büyük veritabanlarında en son yedek sonrasında hangi blokların değiştiğini hesaplamasında yaşanan zaman ve performans kaybıdır. Oracle bunun önüne geçmek için değişiklik izleme numarası ile hangi blokların değişikliğe uğradığını kolayca izler ve artalan yedeklemede bu izleme numaralarını kullanarak zaman kaybının önüne geçilir. Blok değişikliği izlemesinin veritabanında etkinleştirilmesi için aşağıdaki SQL cümlesi çalıştırılmalıdır.

 

                 SQL> alter database enable block change tracking

                           using  file ‘+DATA’;

 

Yedeklerin geçerliliğinin gözden geçirilmesi ve tasdik edilmesi

 

Yedek alınan dosyaların zaman içinde bozulup bozulmadığını gözlemlemek için backup validate database [archivelog all]komutu kullanılır. Archivelog all takısı, arşivlenmiş redo log dosyalarınında sağlamlığını test eder. Geri yükleme esnasında bu komut checkup amaçlı kullanılmalıdır.

 

Geri Kurtarma(Recovery) İşlemleri

 

RMAN ile blokları, veri dosyalarını, tablespaceleri ve hatta tüm veritabanını dahi geri kurtarabiliriz.

 

·         Blok Media Recovery: Bir veya birden fazla data bloğunu kurtarabilmek için RMAN, veri dosyası içinden veri dosyası numarası ve blok numarasını bilmek zorundadır. insert veya select durumlarında dahi bozuk bloklar tespit edilebilir. V$DATABASE_BLOCK_CORRUPTION görünümünede sorgu çekilirse veritabanındaki bozuk bloklar adresleri ile listelenir. Aşağıda örnek bir hata mesajı yer almaktadır.

 

                      ORA-01578: ORACLE data block corrupted (file # 8, block # 374)

                      ORA-01110: data file 6: ‘/u01/app/oracle/oradata/orcl/deneme02.dbf’

Bu bozuk bloğu kurtarmak için aşağıdaki komutu çalıştırmak yeterli olacaktır.

 

                                  RMAN> recover datafile 8 block 374;

·         Kontrol dosyasını geri kurtarma: Kontrol dosyasının kopyalarından birisi kaybolduğunda veya bozulduğunda ise aşağıdaki işlemler uygulanmalıdır. Aşağıdaki örnekte “katalog” adlı ambar veritabanımızı kullanmaktayız.

 

                                  SQL> startup mount;

                                   ……

                                  RMAN> restore controlfile;

·         Tablespace geri kurtarma: Eğer bir tablespace’e ait veri dosyalarını içeren fiziksel disk bozulursa, veritabanının çalışmasını kesintiye uğratmadan bu tablespace’in geri kurtarma işlemini yapabiliriz.

 

                  RMAN> sql ‘alter tablespace <tablespace_ismi> offline immediate;

                  RMAN> restore tablespace <tablespace_ismi>;

                  RMAN> recover tablespace <tablespace_ismi>;

                  RMAN> sql ‘alter tablespace <tablespace_ismi> online;

·         Veri dosyasını geri kurtarma: V$DATAFILE_HEADER sorgusunu kullanarak belirlenen kayıp yada bozuk veri dosyaları bu dosyanın ait olduğu tablespace ONLINE durumda iken bile geri kurtarılır.             

 

                RMAN> restore datafile  <veri_dosyası_numarası>;

                RMAN> recover datafile  <veri_dosyası_numarası>;

·         Tüm veritabanını geri kurtarma: Tüm veritabanının geri kurtarılması durumunda aşağıdaki adımlar uygulanır.

 

                RMAN> startup mount;

                RMAN> restore database;

                RMAN> recover database;

                RMAN> alter database open;

·         Zaman bazlı geri kurtarma:  Bu metotta veritabanında sorun meydana gelmeden önceki zaman dilimine veya SCN numarasına geri yükleme ve kurtarma işlemidir. Oracle 11g sürümü ile RMAN içinden list failure komutu ile veritabanında oluşan bir hata listelenir, böylece uyarı günlükleri veya izleme günlüklerinden potansiyel hata aramak zahmetinden kurtulunur. advise failure komutu ilede listelenen potansiyel hataya ne önlem alınacağının tavsiye raporudur ve veritabanı yöneticisine sadece Oracle 11g Veri Kurtarma Tavsiyecisinin oluşturduğu otomatik tamir scriptlerini çalıştırmak kalır

 

                RMAN> list failure;

                RMAN> advise failure; 

                RMAN> repair failure;          

·         Arşiv redo günlük dosyalarını kullanarak geri kurtarma: Belirli bir zaman dilimine geri dönme ihtiyacı olduğunda Flashback Database özelliğinin yanısıra kayıtlı mevcut arşivlenmiş redo günlük dosyalarıda kullanılabilir.

 

                RMAN> restore archivelog from sequence 101 until sequence 300;

Uğur İNAL

Oracle 11g Uzerinde Flashback Ozellikleri

 

Oracle 10g sürümü ile ortaya çıkan Flashback özellikleri pek çok yenilik ile Oracle 11g sürümünde de veritabanı yöneticilerine felaket durumlarında yardımlar sağlamaktadır. Flashback Database, Flashback Data Archive, Flashback Query, Flashback Table, Flashback Version Query, Flashback Drop ve Flashback Transaction Query olarak çeşitli türde bölümlendirilmiş ve herbirinin farklı amaçları olmaktadır.

Flashback Database

Flashback özelliklerinden yararlanmak için veritabanının flashback operasyonları için etkinleştirilmiş olması gerekmektedir. Aşağıda bu etkinleştirme adım-adım anlatılmaktadır.

1.       Oracle Enterprise Manager konsolunda SYS kullanıcısı ve SYSDBA rolü ile oturum açılır.

 

image001

 

2.       Açılan ana konsol penceresinde High Avaliability kısmı altında Flashback Database Logging modunun devredışı olduğu görülmektedir. Flashback Database özelliğinden yararlanmak için bu mod etkin olmalıdır. Bunun için DISABLED üzerine tıklıyoruz.

image002

 

3.       Açılan pencerede Enable Flashback Database seçeneğini tıklıyoruz. Flashback Retention Time seçeneğinin varsayılan ayarı 24 saattir(Flashback Query, DBMS_FLASHBACK ve Flashback Table metotlarında en son geri kurtarma zamanını işaret etmektedir). Dilerseniz bu ayarı arttırabilirsiniz, ancak Flashback Recovery Size ayarınında arttırılması kaçınılmaz olacaktır. APPLY düğmesine tıklayarak Flashback Database modunu etkin hale getiriyoruz.

 

image003

 

4.       Bir sonraki pencerede yapılan ayarların geçerli olması için veritabanının yeniden başlatılacağını onaylamak için OK tuşuna tıklıyoruz.

 

image004

 

5.       Veritabanını yeniden başlatmak için işletim sisteminde yönetici rolüne sahip kullanıcı/şifresi ve Oracle DBA rolündeki sistem kullanıcı/şifresi bilgilerini girip OK tuşuna tıklıyoruz.

 

image005

Bu noktadan itibaren veritabanını istediğimiz zaman dilimine yada SCN numarasına döndürmek istediğimizde ne kadar  zaman öncesine dönebileceğimiz ile ilgili bilgi için aşağıdaki sorgu kullanılır.

image006

 

Örneğin; veritabanını  Flashback Database metodu ile 1 gün önceye geri döndürmek için ;

SQL> shutdown;

SQL> startup mount exclusive;

SQL> flashback database to timestamp sysdate – 1;

 

Flashback Query

Oracle 9i Release 2 sürümü ile başlayarak günümüzde Oracle 11g sürümüne kadar gelen zamanda “as of” takısı SELECT sorgularında bir tablonun belirli bir zaman skalasından veya SCN(System Control Number) numarasından o anki durumu çağırabilmektedir. örneğin, geceyarısıdan sonra silinen satırları bulabilmek veya bir tablonun bugün ile dünkü girilen verileri arasındaki farkları görebilmek için kullanabilmekteyiz.

Aşağıdaki örnekte; UGUR adlı kullanıcı aynı gün içinde yüzlerce kayıt girdikten sonra TB_KURSIYERLER tablosundan 2 kayıdı silmekte ve daha sonra bu işlemi  commit komutu ile diske kalıcı olarak işlemektedir.

SQL > CONN UGUR/****

SQL > DELETE FROM tb_kursiyerler

           WHERE kursiyer_id IN (110,124);

2 rows deleted

SQL> commit;

 

Ancak, mevcut gün içerisinde UGUR adlı kullanıcı bu silinen kursiyerlerin yanlışlıkla silindiğini ve geri getirilmesi gerektiğini belirtmektedir. En son yedek bir gece once olduğundan ve tablomuza bugün içindede yüzlerce kayıt girdiğinden yedekten geri dönme şansımız yok. Bu noktada, silme işleminin 3 saat once yapıldığı bilgisi verilmektedir. Bir Veritabanı Yöneticisi olarak SYS kullanıcısı ve SYDBA rolunde  oturum açtığımızı farzederek;

 

SQL > CONN SYS/**** AS SYSDBA

SQL> INSERT INTO ugur.tb_kursiyerler

          SELECT * FROM ugur.tb_kursiyerler

          as of timestamp systimestamp – interval ‘180’ minute

          WHERE ugur.tb_kursiyerler.kursiyer_id NOT IN

         (SELECT kursiyer_id FROM tb_kursiyerler);

SQL> commit,

 

Yukardaki SQL cümlesini incelersek;  şu anki zamandan 180 dakika önceki TB_KURSİYERLER tablosuna gidiyoruz ve 180 dakika önceki TB_KURSİYER tablosunda yer alan ama şu anki zaman dilimindeki TB_KURSİYERLER tablosunda yer almayan kayıtları bulup, mevcut tablomuza ekliyoruz ve sonra bu işlemi commit ile diske işliyoruz.

 

DBMS_FLASHBACK

 

Flashback Query için diğer bir alternative ise DBMS_FLASHBACK paketidir. İkisinin arasındaki ana farklılık Flashback Query obje seviyesinde işlem yaparken, DBMS_FLASHBACK ise oturum seviyesinde çalışmaktadır ve genellikle kısa zaman dilimlerine dönülmek istendiğinde kullanılır.

 

Kullanıcı oturum seviyesi içinden DBMS_FLASHBACK paketi etkinleştirilebilir ve takip eden tüm işlemleri – çalışan uygulamalarda dahil- “as of” ve “select” sorgusuna gerek kalmadan  geri getirebilir. DBMS_FLASHBACK etkin iken DML işlemlerine izin verilmez.  Aşağıda DBMS_FLASHBACK paketinde kullanılan prosedürler ve bunların tanımları yer almaktadır.

 

Prosedür

Tanım

DISABLE

Oturum için flashback modunu devredışı bırakır

ENABLE_AT_SYSTEM_CHANGE_NUMBER

SCN belirterek oturumda Flashback modu etkinleştirir.

ENABLE_AT_TIME

TIMESTAMP olarak belirtilen e yakın SCNnumarasını kullanarak oturumda Flashback modu etkinleştirir.

GET_SYSTEM_CHANGE_NUMBER

Mevcut SCN numarasını çağırır.

 

Üstteki senaryomuzda olduğu gibi UGUR adlı kullanıcı aynı gün içinde yüzlerce kayıt girdikten sonra TB_KURSIYERLER tablosundan 2 kayıdı silmekte ve daha sonra bu işlemi  commit komutu ile diske kalıcı olarak işlemektedir.

SQL > CONN UGUR/****

SQL > DELETE FROM tb_kursiyerler

           WHERE kursiyer_id IN (110,124);

2 rows deleted

SQL> commit;

 

Ancak, mevcut gün içerisinde UGUR adlı kullanıcı bu silinen kursiyerlerin yanlışlıkla silindiğini ve geri getirilmesi gerektiğini belirtmektedir. En son yedek bir gece once olduğundan ve tablomuza bugün içindede yüzlerce kayıt girdiğinden yedekten geri dönme şansımız yok. Bu noktada, silme işleminin 10 dakika önce yapıldığı bilgisi verilmektedir. UGUR adlı kullanıcı olarak oturum açarak;

 

SQL > CONN UGUR/****

SQL> execute dbms_flashback.enable_at_time(

          to_timestamp(sysdate-interval ‘15’ minute));

 

Bu şekilde UGUR adlı kullanıcının oturumu 15 dakika öncesine geri döndüğünden silinen kayıtlar geri gelmiştir. Tabii, bu 10 dakikalık süre içerisinde UGUR adlı kullanıcı herhangi bir veri girişi yapmadığını farzediyoruz. Aksi durumda, Flashback Query kullanmak zaruri olacaktır.

 

DBMS_FLASHBACK işlemini devredışı bırakmak için UGUR adlı kullanıcı ile aşağıdaki komutu çalıştırmak yeterli gelecektir;

 

SQL> execute dbms_flashback.disable

 

Flashback Table

 

Oracle 10g sürümü ile beraber gelen Flashback table komutu ile bir tablonun sadece geçmiş bir zaman skalasından satırlarını geri kurtarmakla beraber, bu tabloya ait tetikleyiciler, indexler, yordamları dahi veritabanı açıkken geri getirebilmekteyiz. Bir tablo SCN numarasından veya belirli bir zaman diliminden geri getirilebilir. Kullanıcı sayısının az olduğu ve az sayıda tablodan oluşan veritabanı sistemlerinde tavsiye edilen flashback işlemidir. Daha fazla sayıdaki tabloları Flashback Database komutu ile geri getirmek daha avantajlı olacaktır. Flashback Table, standby(beklemede) veritabanlarında ve eklenen/çıkarılan kolonlar gibi bir takım DDL işlemlerinde işlev yapmaz.

 

Flashback Table özelliğini etkinleştirebilmek için once hedef tablolarda row movement özelliğinin etkin olması lazımdır.

 

SQL > ALTER TABLE ugur.tb_kursiyerler ENABLE ROW MOVEMENT;

SQL > ALTER TABLE ugur.tb_egitimler ENABLE ROW MOVEMENT;

SQL > ALTER TABLE ugur.tb_egitmenler ENABLE ROW MOVEMENT;

 

Ertesi gün UGUR adlı kullanıcı, TB_KURSIYERLER tablosundaki 190 kimlik numaralı kursiyer yerine, tüm satırları yanlış bir kopyala-yapıştır işlemi sonucu silmiştir. Bu arada commit ile işlem kalıcı olarak diske yazılmıştır.

 

SQL> DELETE FROM tb_kursiyerler

SQL> /

217 rows deleted

 

SQL > commit;

SQL> WHERE kursiyer_id = 190;

 

Bu durumda UGUR adlı kullanıcı olarak oturum açarak aşağıdaki komut ile bu tabloyu 15 dakika önceki durumuna geri getirme imkanına sahibiz.

 

SQL> flashback table tb_kursiyerler

          to timestamp systimestamp – interval ‘15’ minute;

SQL> SELECT count(*) FROM tb_kursiyerler;

COUNT(*)

____________

          107

 

Flashback Data Archive

 

Gizli verilerin ve müşteri kayıtlarının yer aldığı tablolardaki satırlardaki değişikliklerinin tarihsel olarak saklanmasının gerekliolduğu SOX veya HIPAA gibi kanuni zorunluluklara tabi firmalar için, Oracle Flashback Data Archive metodu ile tablolardaki tüm değişiklikleri zaman bazlı olarak otomatik olarak kaydeder.

 

Flashback Data Archive, Oracle 11g ile yeni gelen bir özelliktir. Etkinleştirmek için bir veya daha fazla sayıda ambar alanı oluşturulması, ambar içindeki objeler için varsayılan saklama zamanının tanımlanması ve ilgili tabloların izleme için işaretlenmesi gerekmektedir. Flashback Data Archive içindeki tablolara Flashback Query komutları ile erişebiliriz.

·         Arşiv oluşturma: Create Flashback Archive komutu ile mevcut tablespaceler için arşiv oluşturulabilsede, Oracle arşiv için ayrı bir tablespace oluşturulmasını ve bu tablespace in sadece arşiv için kullanılmasını tavsiye etmektedir. retention takısı ile varsayılan saklama aralığı belirtilir, eğer disk alanında kota tanınlanmak istenirse quota takısı eklenir.

 

Örneğimizde, arşiv için once bir tablespace oluşturacağız ve daha sonrada SATIŞ departmanı için 2 GB kota limitli ve 3 yıl saklamak üzere bir arşiv oluşturacağız.

 

SQL > create tablespace satisarsiv

           datafile ‘+DATA(datafile)’ size 10g;

 

SQL > create flashback archive fb_satis

           tablespace satisarsiv quota 2g

           retention 3 year;

 

Eğer ilerleyen zamanlarda başka departmanlar içinde arşiv ihtiyacımız olursa, yukardaki create flashback archive komutu ile arşivelemeye devam ederiz. İlerleyen zamanlarda satisarsiv adlı tablespace alanımızda boş alan sıkıntısı ile karşılaşırsak;

 

SQL> alter flashback archive fb_satis

           add tablespace satisarsiv2 quota 1g;

 

komutu ile daha önceden oluşturduğumuzu varsaydığımız satisarsiv2 adlı tablespace fb_satis adlı arşive ilave edilerek ek alan kazanılmış olunur.

 

·         Arşive tablo ekleme:  SQL > ALTER TABLE ugur.tb_kursiyerler flashback archive fb_satis;

 

komutu ilede UGUR kullanıcısına ait olan TB_KURSİYERLER adlı tablo izleme için işaretlenmekte ve bu tablo üzerindeki tüm değişiklikler FB_SATIS adlı arşivde saklanacaktır.

 

 

Flashback Drop ile düşürülen tabloların geri getirilmesi

 

Bir tabloyu düşürdüğünüz zaman, Oracle düşürülen tablo ile meydana gelen boş alanı başka objelerde kullanmak üzere hemen işleme sokmaz ve RECYCLE BIN olarak bilinen veritabanındaki çöp kutusuna yerleştirir.

 

SQL > DROP TABLE tb_kursiyerler;

 

Bu tablo nasıl geri getirilecektir? Düşürülen bir tablonun verilerinin yer aldığı bloklar hala tabloya ait tablespace içerisinde yer alır ve tablespace üzerinde kota olunan durumlarda bu düşürülen tabloya ait bloklar hala kota hesaplamasına dahildir.

 

Bu tablonun eğer satırları, indeksleri ve istatistikleri ile birlikte geri getirilmesi istenirse aşağıdaki komut kullanılabilir(eğebaşka bir tablo ile referans kısıtlamalarına sahipse bu kısıtlamalar geri gelmez);

 

SQL> flashback table tb_kursiyerler before drop;

Uğur İNAL

Asm ile Oracle 11g Veritabani Kurulumu – Bolum 1

 

Oracle 11g, Oracle 10g generasyonundan itibaren “kur ve unut” felsefesinin en son durak noktasıdır. Memory yönetiminin otomatikleştirilmesi, yeni bir takım “advisor” ların eklenmesi ve hayran bırakacak şekilde sürdürülebilirliğin arttırılması ve çökme riskinin neredeyse ortadan kaldırılması ile veritabanı teknolojisinde yeni bir süreçtir.

Oracle mimarisinde “database” ve “instance” kavramları farklılık göstermektedir. Diğer veritabanı ürünlerine gore Oracle tarafında bu iki kavram üzerinden hareket edilmektedir.

Database

Database, ilgili biligileri toplayan ve sürdüren bir database sunucusu üzerinde yer alan fiziksel disk üzerindeki  bir veya birden fazla dosya içindeki data topluluğudur. Database, çeşitli mantıksal ve fiziksel yapılardan oluşur. Tablolar, ilişkili datalardan yeralan satır ve kolonlardan meydana gelir. Genelinde, database datalara yetkisiz erişimi engeleyen güvenlik seviyelerini sağlar. Oracle 11g, güvenlik noktasında  pek çok mekanizma ile veritabanı yöneticilerinin ve yazılımcıların işlerini kolaylaştırır(oturum izleme, transaction izleme, objelerin izlenmesi, tablespace şifreleme metodu ile tablo kolonlarının şifrelenmesi, Oracle Wallet servisi v.b).

Dosya tarafında database 2 kategoriye ayrılır. database dosyaları ve database dışı dosyalar… Database dosyaları data ve metadata ile ilgili bilgileri içerir, database dışı dosyalar ise veritanabının çalışması için gerekli olan başlangıç parametreleri, kayıt günlükleri, alert dosyaları ve control dosyaları gibi sistem dosyaları ile ilgili bilgileri içerir.

Instance

Bir fiziksel sunucunun ana parçaları CPU(lar), disk alanı ve memory(RAM)’dir. Oracle database, fiziksel disk üzerinde saklanır, ancak bir Oracle instance memory içinde saklanır. SGA(system Global Area), içersinde veri barındıran bir grup paylaşımlı bellek yapısı(shared memory structure) ve Oracle veritabanı “instance”’ı hakkında kontrol bilgileri taşıyan bellek kısmıdır.Aynı “instance” ‘a bağlanan birden fazla kullanıcı SGA’da bulunan veriyi paylaşır. SGA ve Oracle işlemleri(processes) bir Oracle “instance”’ını oluşturur.Bu instance başlatıldığı anda SGA bellek alanı tutulur ve instance kapatılınca SGA alanı işletim sistemi tarafından bırakılır.Her bir instance’ın kendi SGA’sı vardır.SGA’da hem okuma hem de yazma işlemleri vardır.

image001

 

ASM-Automatic Storage Management

Otomatik Depolama Yönetimi (Automatic Storage Management-ASM), veritabanı tarafından kullanılan veri dosyalarını ve işletim sistemi seviyesi diğer dosyaların düzenini, ikiden fazla sayıdaki fiziksel disklere dağıtarak otomatikleştirmedir. ASM ortamına, yeni fiziksel diskler ilave edildiğinde veritabanı dosyaları, bu tanımlanan yeni “disk grubuna” optimum performans için yeniden dağıtılır. Bu multiplex özelliği veri kaybı olasılığını ortadan kaldırır ve yedeklerin farklı disklerde saklanması seçeneğine nazaran daha yüksek performans ve kolay yönetim sağlar.

Biz örneğimizde, ASM mimarisini kullanacağız.

ORACLE ENTERPRISE LINUX 5.0 ÜZERİNDE ORACLE 11g ENTERPRISE EDT. VE ASM KURULUMU

Örnekte yer alan Oracle 11g veritabanı için Oracle Enterprise Linux 5.0 işletim sistemi kullanılmış ve kurulum Wmware ESX Server 1.0.5 platformunda yapılmıştır.

Oracle 11g kurulumu için minumu gerekli olan OEL 5.0 gereksinimleri aşağıda yer almaktadır.

Fiziksel RAM : 1024 MB

Kernel : 2.6.18 (uname  -r komutu ile kernel verisyonu görülebilir)

Disk alanı: /tmp için 200 MB, / için 3,6 GB boş disk alanı

ASM için ilave 2 fiziksel disk gereklidir(tercihen RAID-1 yapılandırlımış)

Web browser olarak Mozilla 1.7 veya Firefox 1.5

Alttaki Linux rpm paketleri ayrıca yüklenmeli( OEL 5.0 kurulum CD leri içinde yer almaktadır)

binutils-2.17.50.0.6-2.el5

compat-libstdc++-33-3.2.3-61

elfutils-libelf-0.125-3.el5

elfutils-libelf-devel-0.125

gcc-4.1.1-52

gcc-c++-4.1.1-52

glibc-2.5-12

glibc-common-2.5-12

glibc-devel-2.5-12

glibc-headers-2.5-12

libaio-0.3.106

libaio-devel-0.3.106

libgcc-4.1.1-52

libstdc++-4.1.1

libstdc++-devel-4.1.1-52.e15

make-3.81-1.1

sysstat-7.0.0

unixODBC-2.2.11 (32 bit)

unixODBC-devel-2.2.11 (32 bit)

 

Oracle 11g kurulumu  öncesi LINUX üzerinde yapılacak işlemler;

Kurulum öncesinde, OEL 5.0 işletim sistemine “root” kullanıcısı olarak oturum açarak, adım-adım aşağıda yer alan bir takım ayarların yapılması gerekmektedir.

/etc/hosts dosyası altında ip ve host eşleştirilmesi yapılmalıdır(eğer isim çözümleme için DNS kullanılıyorsa, bu seçenek opsiyoneldir)

127.0.0.1     localhost.oradata.net    localhost

192.168.2.10      linux1.oradata.net         linux1

              2.     Aşağıdakileri /etc/sysctl.conf dosyasına ekleyin ve ekledikten sonra /sbin/sysctl  -p komutunu çalıştırarak kernel parametrelerini değiştirin.

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 1024 65000

net.core.rmem_default=4194304

net.core.rmem_max=4194304

net.core.wmem_default=262144

net.core.wmem_max=262144

 

               3.     /etc/pam.d/login dosyasına aşağıdaki değerleri ekleyin.

session    required     /lib/security/pam_limits.so

session    required     pam_limits.so

 

               4.   Aşağıdaki parametreleri /etc/security/limits.conf dosyasına ekleyin

oracle               soft    nproc   2047

oracle               hard    nproc   16384

oracle               soft    nofile  1024

oracle               hard    nofile  65536

 

               5.   Yeni kullanıcı ve bu kullanıcı için gerekli grupları oluşturun ve yeni bir şifre girin.

#  groupadd oinstall

#  groupadd dba

#  groupadd oper

#  groupadd asmadmin

#  useradd -u 500 -g oinstall -G dba,oper,asmadmin oracle

#  passwd oracle

              

                6.  Oracle kurulumunun yapılacağı dizinleri ve klasörleri oluşturun ve ilgili kullanıcı-gruba sahiplik verin.

#  mkdir -p /u01/app/oracle/product/11.1.0/db_1

#  chown -R oracle:oinstall /u01 

 

                7.  Oracle kullanıcısı olarak oturum açın ve aşağıdakileri /home/oracle/.bash_profile dosyası içine ekleyin.

 

ORACLE_HOSTNAME=linux1.oradata.net; export ORACLE_HOSTNAME

ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE

ORACLE_HOME=$ORACLE_BASE/product/11.1.0/db_1; export ORACLE_HOME

ORACLE_SID=ORCL; export ORACLE_SID

 

if  [ $USER = “oracle” ]; then

  if [ $SHELL = “/bin/ksh” ]; then

    ulimit -p 16384

    ulimit -n 65536

  else

    ulimit -u 16384 -n 65536

  fi

umask 022

fi

 

ASM için fiziksel disklerin Vmware ESX Server üzerinde yapılandırılması

 

Senaryomuzda kullanmak üzere 3 adet fiziksel diski Vmware platformunda ekleyeceğiz.  DATA ve RECO1 olmak üzere 2 adet ASM disk grubu kullanacağız. Bunlar aşağıdaki disklere işaret edecek;

DATA1 ->  /dev/sdb1

DATA2 ->  /dev/sdc1

RECO1 -> /dev/sdd1

 

Flashback database olarak kullanacağımız disk alanımız RECO1 olacak ve mesela, herhangi bir tablodan silinen ve commit edilen kayıtları “as of timestamp” komutu ile ilgili zaman skalasından geri getirme işlemi (flashback query) gibi olağanüstü durumlarda kullanılacak bilgileri içerir. Böylece yedekten erişilemeyecek verilerin kaybıda engellenmiş olur(1 saat öncesi yanlışıkla silinen kayıtların geri çağrılması gibi durumlar v.b)

 

DATA disk grubunda ise veritabanı dosyaları yer alacaktır ve her iki disk birbirleri ile senkronize olarak verileri paylaşmaktadır.

 

Örnekteki her 2 disk grubunada, disk alanı yetersiz olduğu durumlarda ilave diskler ilave edilebildiği gibi, sorunlu olan disklerde kolayca disk grubundan çıkarılabilmektedir.

 

Vmware makinemizde OEM 5.0 işletim sistemini root kullanıcı olarak shutdown -h now komutu ile kapattıktan sonra Wmware Server sistemine 3 adet sanal disk ekleyeceğiz.

Edit Virtual Machine Settings > Add > Hard Disk seçeneklerini tıklıyoruz.

Create a new hard disk seçeneğini seçerek NEXT düğmesine tıklıyoruz.

SCSI seçeneğini değiştirmeden NEXT düğmesine tıklıyoruz.

Disk kapasitesi olarak 4GB giriyorum ve Allocate All Disk Space seçeneğini seçip NEXT düğmesine tıklıyorum.

 

image002

 

asm1.vmdk adını verdikten sonra aynı pencerede ADVANCED sekmesinden Virtual Device Node olarak SCSI 1:2 ve mode olarak Independent – Persistent seçeneğini seçip FINISH düğmesine basıp ASM disk grubunda kullanmak üzere ilk diskimizi oluşturuyorum.

image003

Sırasıyla ikinci ve üçüncü disklerimizi oluşturmak için 2-6 arasındaki maddeleri teker teker uygulayarak, disk isimlerini sırasıyla asm2.vmdk ve reco1.vmdk olarak veriyorum. 

 

Fiziksel diskleri /devsdb1, /dev/sdc1 ve /dev/sdd1 olarak oluşturmak için makimemizi çalıştırarak root kullanıcısı ile oturum açıyoruz ve açacağımız terminal penceresinde aşağıdaki kırmızı renkte yazılı komutları giriyoruz.

 

# fdisk  /dev/sdb

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-522, default 1): <ENTER’a basınız>

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-522, default 522): <ENTER’a basınız>

Using default value 391

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

 

Sırasıyla /dev/sdc1 ve /dev/sdb1 disk partitionlarını oluşturmak için üstteki adımları takip ediyoruz. (fdisk <disk>, n, p , 1 , ENTER tuşuna bas, ENTER tuşuna bas, w)

Oracle kullanıcımızın oluşturulan sdb1, sdc1 ve sdd1 partitionlarındaki ASM disk gruplarında veritabanı dosyalarını kurabilmesi için sahiplik ve erişim izinleri vermemiz gerekmektedir. Bu amaçla /etc/rc.local dosyasını açarak içine aşağıdaki satırları ekliyoruz ve makinemizi reboot ediyoruz.

 

                      chown oracle:oinstall /dev/sdb1

                      chown oracle:oinstall /dev/sdc1

                      chown oracle:oinstall /dev/sdd1

                      chmod 600 /dev/sdb1

                      chmod 600 /dev/sdc1

                      chmod 600 /dev/sdd1

Reboot ederek tekrar açılan makinemizide root kullanıcısı ile oturum açarak ASM disk gruplarını oluşturacağız. Bu amaçla sırasıyla aşağıdaki kırmızı renkli komutları terminal penceresinde çalıştıyoruz.

 

# service oracleasm configure

Configuring the Oracle ASM library driver.
This will configure the on-boot properties of the Oracle ASM library driver. The following questions will determine whether the driver is loaded on boot and what permissions it will have. The current values will be shown in brackets (’[]’). Hitting <ENTER> without typing an
answer will keep that current value. Ctrl-C will abort.
Default user to own the driver interface []: oracle
Default group to own the driver interface []: oinstall
Start Oracle ASM library driver on boot (y/n) No: y
Fix permissions of Oracle ASM disks on boot (y/n) Yes: y
Writing Oracle ASM library driver configuration: [ OK ]
Loading module “oracleasm”: [ OK ]
Mounting ASMlib driver filesystem: [ OK ]
Scanning system for ASM disks: [ OK ]

 

        Oracle adlı kullanıcı ve bu kullanıcının asıl üyesi olduğu oinstall grubu Oracle veritabanı kurulumda kullanılacağından, ASM sürücü kütüphanesinde bu kullanıcı ve grubunaa sahiplik atadık. Her reboot esnasında ASM sürücüsünün otomatik çalıştılması, konfigürasyon dosyasının yazılması-yüklenmesi ve fix izinlerin atanmasını EVET seçeneği ile kabul ettikten sonra şimdi ASM disklerini aşağıdaki kırmızı renkli komutları çalıştırarak MÜHÜRLEYECEĞİZ ve ardından sistemimiz reboot edeceğiz.

                  # service oracleasm createdisk DATA1 /dev/sdb1
                  # service oracleasm createdisk DATA2 /dev/sdc1
                  # service oracleasm createdisk RECO1 /dev/sdd1

                  # service oracleasm scandisks
                  # service oracleasm listdisks

Bir sonraki makalede ASM disk grupları üzerinde Oracle 11g veritabanı kurulumunu anlatacağız.

Uğur İNAL