Oracle Restore to the Point

Bu yazıda oracle veritabanında restore point oluşturulması, oluşturulan restore pointe dönülmesini anlatacağım.

Eğer database’nin archive log modu ve flashback özelliği kapalı ise aşağıdaki şekilde bu özelliklerin açılması gerekiyor. Bu işlemlerin yapılabilmesi için db’nin mount modda olması gerekiyor.

SQL> shutdown immediate;
SQL> startup mount;

Database’i archive log moduna almak için:

SQL> alter database archivelog;

Flashback özelliğinin açılabilmesi için öncelikle aşağıdaki iki parametrenin ayarlanması gerekiyor.

SQL> alter system set db_recovery_file_dest_size = 2G;
SQL> alter system set db_recovery_file_dest = 'path...';

Flashback modunda database log dosyaları oluşturmaktadır. Bu log dosyaları değişen dataların eski görünümünü içermektedir. Logların tutulacağı dizin db_recovery_file_dest parametresiyle belirlenir. Ayrıca dikkat edilmesi gereken db_recovery_file_dest_size değeri diskteki free alan ve oluşacak logların boyutuna yetecek şekilde ayarlanması gerektiğidir.

Parametreler ayarlandıktan sonra flashback özelliği aşağıdaki gibi açılabilir.

SQL> alter database flashback on;

Bu işlem sonunda db açılabilir veya restore point oluşturacaksanız şimdilik veritabanını open moda alma adımını geçmeniz gerekmektedir.

SQL> alter database open;

Archive log modu ve flashback özelliğinin açık olup/olmadığı aşağıdaki gibi teyit edilebilir.

SQL> select flashback_on, log_mode from v$database;
FLASHBACK_ON  LOG_MODE
------------  ----------------
YES           ARCHIVELOG

Bu sonucun döndüğünden emin olduktan sonra restore point oluşturulabilir.

Restore Point Oluşturmak

Veritabanı üzerinde restore point aşağıdaki şekilde oluşturulabilir.

SQL> create restore point RESTORE_POINT_NAME guarantee flashback database;

Burada dikkat edilmesi gereken nokta; restore point create edildiği sırada veritabanının mount modda olması gerekmektedir. Aksi tahtirde oracle data tutarlılığı konusunda garanti vermemektedir.

Create edilen restore pointin teyidi v$restore_point viewinden yapılabilir.

SQL> select name,scn,gua,storage_size from v$restore_point;
NAME                SCN   GUA STORAGE_SIZE
------------------- ---- ---- ------------
RESTORE_POINT_NAME   129  YES      5242800

Restore Point’e Dönmek

Oluşturulan restore pointe dönme işlemi aşağıdaki şekilde yapılabilir.

 SQL> flashback database to restore point RESTORE_POINT_NAME;

Bu işlem sonucunda ilgili restore pointe dönüldüğü kontrolünü v$datafile viewindeki CHECKPOINT_TIME kolonunu kontrol ederek öğrenebilirsiniz. Bu alandaki değerin restore pointi oluşturduğunuz zamanı gösteriyor olması gerekiyor.

ASM Disk Grupları Rebalance İşlemleri

Bu yazı da ASM disk gruplarına eklenen/çıkartılan disklerin ardından mutlaka yapılması gereken rebalance işlemini anlatacağım.

Oracle ASM varolan diskler üzerinde tüm datayı elinden geldiğince eşit şekilde paylaştırmaya çalışır. Bu nedenle yeni disk eklenip çıkartıldığında yapılan rebalance işlemi; dataları disk grubu içerisindeki disklere eşit şekilde paylaştırmaya çalışacaktır.

Örneğin elimizde 10 gb boyutunda 4 adet disk olduğunu varsayalım ve bu disk üzerindeki veriler 4 diske de eşit şekilde dağıtılacağından disklerin doluluk oranı yüzdesel olarak aşağıdaki gibi olacaktır.

DATA disk grubu [Toplam boyut: 40 GB, Free alan: 20,8 GB]
/dev/sdb1  => %48 full
/dev/sdc1  => %48 full
/dev/sdd1  => %48 full
/dev/sde1  => %48 full

Disklerden birini çıkartıp rebalance işlemi yapıldığında tahmini doluluk oranı aşağıdaki gibi olacaktır.

DATA disk grubu [Toplam boyut: 30 GB, Free alan: 10,8 GB]
/dev/sdb1  => %64 full
/dev/sdc1  => %64 full
/dev/sdd1  => %64 full
/dev/sde1  => removed

ASM içerisinde varolan diskleri aşağıdaki komutu kullanarak görebilirsiniz.

$ sqlplus / as sysasm
SQL> select group_number g_n, disk_number d_n, name, total_mb, free_mb, path
from v$asm_disk
g_n d_n name     total_mb free_mb path
1   0   DATA_00  10240    4915    /dev/sdb1
1   1   DATA_01  10240    4915    /dev/sdc1
1   2   DATA_02  10240    4915    /dev/sdd1
1   3   DATA_03  10240    4915    /dev/sde1

Varolan disk(ler) aşağıdaki şekilde çıkartılabilir.

$ sqlplus / as sysasm
SQL> alter diskgroup DATA drop disk DATA_03,DATA...;
 Diskgroup altered.

Bu komutun ardından rebalance işlemi başlayacaktır. İşlem tamamlandıktan sonra varolan disk(ler) removed şeklinde işaretlenecektir. Eğer rebalance işlemini istediğiniz hızda başlatmak istiyorsanız drop komutunu aşağıdaki şekilde kullanmanız gerekmektedir.

SQL> alter diskgroup DATA drop disk DATA_03 rebalance power [0-11];
 Diskgroup altered.

0-11 arası vereceğiniz değer rebalance işleminin hızını belirlemektedir. Öğneğin mesai saatleri içerisinde rebalance işlemini 11 ile başlatırsanız veritabanının response süresi artacaktır. Bu değer veritabanının yoğunluk durumuna göre belirlenmelidir. 0 wait anlamına gelmektedir ve rebalance işlemi o anda başlamaz.

Rebalance işlemini başlattıktan sonra hızını değiştirmemiz mümkün. Bu işlemi aşağıdaki şekilde yapabilirsiniz.

SQL> alter diskgroup DATA rebalance power [0-11];

Rebalance işleminin hangi aşamada olduğu kontrolünü aşağıdaki komutu kullanarak öğrenebilirsiniz.

SQL> select group_number, operation, state, est_minutes
from v$asm_operation;
GROUP_NUMBER OPERA STAT EST_MINUTES
------------ ----- ---- -----------
 1            REBAL RUN  2
 1            REBAL WAIT 0

Varolan disk grubuna yeni disk ekleme işlemi aşağıdaki şekilde yapılabilir.

SQL> alter diskgroup DATA add disk '/dev/sdx1' rebalance power [0-11];

Disk grubuna eklenecek diskin candidate olarak görünmesi gerekmektedir.

Power değeri verilmediği durumlarda bu değer ASM’in asm_power_limit parametresine göre belirlenecektir.

SQL> show parameter limit
NAME                TYPE        VALUE
------------------- ----------- ------
asm_power_limit     integer     1