Etiket arşivi: alter database flashback on

Flashback Database

Flashback Database

Flashback database ile tüm database’i geçmiş bir zamana ya da bizim belirlediğimiz bir noktaya döndürebiliriz.Aynı işlem rman’den restore-recover ile yapılabilsede flashback çok daha hızlı ve dolayısıyla daha az bir kesintiyle bunu yapmamıza olanak sağlıyor.Flashback verileri flashback loglarına yazılarak FRA(flash recovery area) dizininde tutulur, veri geri sarma anında buradan okunur.Fiziksel bozulmalarda bu özelliği kullanamayız.(disk bozulması, control file kaybı,datafile kaybı vb)

Flashback database aktif etmek için flashback on yapılmalıdır.Defaultta off gelmektedir.

SQL>ALTER DATABASE FLASHBACK ON;

Flashback database’i 3 şekilde kullanabiliyoruz;

1-Flashback database to scn
2-Flashback database to timestamp
3-Flashback database to restore_point

Flashback database’le ilgili önemli noktalar:

*Database’i resetlogsla açtıktan sonra rmanle full backup almamız gerekir.Eski backuplar işe yaramayacaktır.
*Database flashbackle geri sarılınca open resetlogsla açmamız gerekir.
*Flashback default OFF olarak gelir, ON yapılması gerekir.11GR2 ve sonrası versiyonlar ile DB açıkken de bu değişikliği yapabiliyoruz.11GR2 öncesi versiyonlarda database mount moddayken ON yapılabiliyor..

1-FLASHBACK TO SCN

Örneğimizde database’imizi bir saat önceye geri alalım.İlgili flashback ayarlarının set edildiğini
varsayıyorum..İlgili ayarlar için bu makaleye bakabilirsiniz.Bu örnekte scn’e göre flashback yapacağız,
ama diğer yöntemlerde de aynı mantık var. Deneme için bir tablo yaratıp sonra da truncate edelim.

SQL>CREATE TABLE FLASHBACK_TABLE_TEST AS SELECT * FROM ALL_TABLES;

Tablomuzda kaç kayıt var bakalım..

SQL>SELECT COUNT(*) FROM FLASHBACK_TABLE_TEST;
COUNT(*)
2875

Mevcut SCN numarasını öğrenelim(bu scn’e geri döneceğiz)

SQL>SELECT current_scn FROM v$database;
--şu andaki scn numarası 1385587

Şimdi tablomuzu truncate edelim.

SQL>TRUNCATE TABLE FLASHBACK_TABLE_TEST;

Şimdi database’i flashback yapalım.Flashback database yapabilmemiz için database’i mount
moda almalıyız,önce kapatıp sonra mount edelim.

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP MOUNT;

Db’yi istediğimiz ana geri alalım..

SQL>FLASHBACK DATABASE TO SCN 1385587;

Database istediğimiz yere dönmüş mü read only açarak kontrol edelim..

SQL>ALTER DATABASE OPEN READ ONLY;
SQL>SELECT COUNT(*) FROM FLASHBACK_TABLE_TEST;
COUNT(*)
2875

Görüldüğü gibi tablomuz geri gelmiş durumda şimdi database’i kapatıp open resetlogsla açmamız gerekiyor.

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP MOUNT;

SQL>ALTER DATABASE OPEN RESETLOGS;

Flashback database işlemi tamamlanmış oldu.

2- FLASHBACK TO TIMESTAMP:

Belirli bir zamana geri dönmek için kullanabiliriz.Flashback SCN’den pek bir farkı yok aslında.SCN yerine zaman vererek o zamana dönmesini istiyoruz..

SQL>FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP('2014-05-04 22:35:00','YYYY-MM-DD HH24:MI:SS');

SQL>FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP SYSDATE-(2/24); 
-- iki saat öncesine dön demiş olduk..

3- FLASHBACK TO RESTORE POINT:

Yazılım güncelleme vb işlemlerin hemen öncesi bir geri dönüş noktası oluşturularak bu noktaya dönüş
yapılabilir.

Restore Point Oluşturma:

SQL>CREATE RESTORE POINT BEFORE_UPGRADE;
Restore point created.

Garantili Restore Point Oluşturma:

SQL>CREATE RESTORE POINT BEFORE_UPGRADE GUARANTEE FLASHBACK DATABASE;
Restore point created.

Restore Point’e Geri Dönmek:

SQL>FLASHBACK DATABASE TO RESTORE POINT 'before_upgrade';
--Database Mount moddayken yapıyoruz..

Restore Pointleri Görmek:

SQL>SELECT NAME, SCN, TIME, DATABASE_INCARNATION#, GUARANTEE_FLASHBACK_DATABASE,STORAGE_SIZE
FROM V$RESTORE_POINT;

Restore Point Drop Etmek İçin:

SQL>DROP RESTORE POINT BEFORE_UPGRADE;
Restore point dropped.

Umarım faydalı olur..

Flashback Nedir,Nasıl Aktif Edilir?

Flashback Nedir, Nasıl Aktif Edilir?

Flashback fiziksel bozulmalardan çok, kullanıcı hatalarını düzeltmek için kullanılan bir oracle çözümüdür. Örneğin bir tablo yanlış update edilmiş olabilir ya da yanlışlıkla drop edilmiş olabilir. Yedeklerden de veri kaybı olmadan tablonuzu bozulma öncesi haline getirebilirsiniz ama veritabanı büyüklüğüne göre uzun  zaman alabilir ve kesinti oluşturabilir. Oracle bu noktada daha az downtime için Flashback çözümünü öneriyor. Oracle veriyi geri dönerken UNDO tablespace’inden faydalanır, yapılan değişiklikler UNDO tbs üzerinde tutulur ve istenildiği zaman geri çağrılabilir.(belirlediğimiz log tutma süresi kadar)

Flashback işlemlerini yapabilmemiz için database’de bazı ayarları set etmemiz ve/veya  kontrol etmemiz gerekiyor.

Database’i Flashback işlemlerine hazırlamak

1- Database archive log modda olmalı

Database archive log modda değilse Online backup da alamayız, flashback logları da tutamayız.Database’in mevcut durumunu sorgulayalım. NOARCHIVELOG ise aşağıdaki gibi ARCHIVELOG moda alabiliriz.

SQL>SELECT LOG_MODE FROM V$DATABASE;

LOG_MODE
------------
NOARCHIVELOG

SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP MOUNT;
SQL>ALTER DATABASE ARCHIVELOG;
SQL>ALTER DATABASE OPEN;

2-Flashback açık olmalı;

Mevcut durumunu görmek için;

SQL>SELECT FLASHBACK_ON  FROM V$DATABASE;
FLASHBACK_ON
------------
NO

SQL>ALTER DATABASE FLASHBACK ON;

3- Undo retention, retention guarantee ayarları

UNDO_RETENTION geçmişe yönelik ne kadar süre flashback logları tutulacağını gösterir(sn cinsinden) 3600 sn degeriyle 1 saatlik geri dönüşümüz mümkün olsun diyoruz.(3600/60=60 dk) Bu parametre kurulumda default 900 olarak gelir(900/60=15dk)
RETENTION GUARANTEE 1 saatlik geriye yönelik verileri garanti etsin diyoruz.
UNDOTBS1 üzerinde RETENTION GUARANTEE diyerek 1 saatlik veriyi mutlaka tutmasını istiyoruz, bu durumda UNDOTBS1 büyüme yoluna gidecektir.

SQL>ALTER SYSTEM SET UNDO_RETENTION=3600 SCOPE=SPFILE;
SQL>ALTER TABLESPACE UNDOTBS1 RETENTION GUARANTEE;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP;

RETENTION GUARANTEE set edilip edilmediğini aşağıdaki sorgu ile görebiliriz.

SQL>SELECT TABLESPACE_NAME,RETENTION FROM DBA_TABLESPACES WHERE TABLESPACE_NAME='UNDOTBS1';

TABLESPACE_NAME    RETENTION
---------------    ---------
UNDOTBS1           GUARANTEE

4-Supplemental log data enable edilmeli

Transaction query kullanabilmemiz için enable edilmeli.primary key ve foreign key ilişkili kayıtlar için.

SQL>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
SQL>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA(PRIMARY KEY) COLUMNS;
SQL>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA(FOREIGN KEY) COLUMNS;

5- ReycleBin ON olmalı

Çöp kutusu default olarak kurulumla ON gelir, eğer OFF yapılmışsa ON konumuna çekmek gerekir.Drop edilen nesneleri geri döndürmek için on yapılmalıdır.

SQL>ALTER SYSTEM SET RECYCLEBIN=ON;

RECYCLEBIN Durumunu görmek için;

SQL>SELECT M.NAME,M.VALUE FROM V$PARAMETER M WHERE M.NAME LIKE '%recyclebin%';

Name           value
---------      ------
recyclebin     on

Artık database’imiz flashback operasyonlar için hazırdır, sonraki makalelerde flashback ile neler yapabiliriz inceleyeceğiz.