Switchover to a Physical Standby Database (11GR2)

Selamlar, bu makalede Oracle Database 11GR2’de dataguard switchover işlemi gerçekleştiricez. Switchover senaryomuz RAC to standalone olacak. Ortam bilgileri şu şekilde;

RAC (primary) database;
Node1 SID -> lefkosa1
Node2 SID -> lefkosa2

Standalone (standby) database;
SID -> stdlefkosa

1. [lefkosa] Öncelikle primary database’imiz RAC olduğu için bir node’u kapatmamız gerekli. Ben 2. node’u kapatıyorum ve 1. node üzerinden işlemlere devam ediyorum.

[oracle@lefkosa2 ~]$ srvctl stop instance -d lefkosa -i lefkosa2

2. [lefkosa] Herhangi bir GAP olmadığından emin oluyorum ve primary database’in switchover status’ünü kontrol ediyorum.

SQL> SELECT STATUS, GAP_STATUS FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID = 2;
STATUS     GAP_STATUS
-------    ----------
VALID      NO GAP
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
------------------------------------------------------------
TO STANDBY

3. [lefkosa] Primary database’i standby’a dönüştürmek için aşağıdaki komutu çalıştırıyorum.

ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;

4. [lefkosa] Yeni standby database’i kapatıp mount modda açıyorum.

SQL> SHUTDOWN ABORT;
SQL> STARTUP MOUNT;

5. [stdlefkosa] Standby database’in switchover status’üne bakıyorum

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
------------------------------------------------------------
TO PRIMARY

6.  [stdlefkosa] Standby database’i primary database’e çevirmek için aşağıdaki komutu çalıştırıyorum.

ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;

7. [stdlefkosa] Yeni primary database’i açıyorum.

ALTER DATABASE OPEN;

8. [lefkosa] Yeni standby database’de real-time apply’ı başlatıyorum.

alter database recover managed standby database using current logfile disconnect;

9. [stdlefkosa] Yeni primary database’in switchover statüs’üne bakıyorum.

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
------------------------------------------------------------
TO STANDBY

Switchover işlemi başarılı şekilde gerçekleşti. Kolay gelsin.

Incremental Merge (updated) Backups

Selamlar,

bu makalede Oracle 11G üzerinde Incremental Merge (updated) Backup yöntemini örnekler ile anlatıcam. Bu yöntem çok büyük hacimlerdeki database’lerin backup’lama politikalarında kullanılabilecek bir yöntem. Çünkü ilk başta sadece bir kez level 0 image copy backup alınıyor (yani full backup) ve ardından alınan her level 1 backup full backup ile merge ediliyor. Yani günün sonunda aslında her gün full backup alınmış gibi oluyor.

Bu yöntemi normal incremental yönteminden ayıran taraf; alınan level 1 backup kaybedilse bile, full backup üzerine merge edildiği için geri dönüş anında herhangi bir veri kaybının yaşanmaması. Normal incremental yönteminde alınan level 1 backup eğer kaybedilir ise maximum dönülebilecek nokta level 0 oluyor.

Bu yöntemi kullanmak için RMAN üzerinde “recover copy of database with tag” komutunu kullanıcaz. Komuttan da anlaşılacağı gibi merge işleminin gerçekleşebilmesi için full backup ile level 1 backup’ın tag’leri aynı olmalı. Şimdi adım adım bakalım.

BACKUP

1. Block Change Tracking’i aktif hale getiriyorum.
(ortamında RAC kurulu olduğu için bu dosyayı shared bir alanda tutmam gerekli.)

SQL> alter database enable block change tracking using file '+data';

2. Level 0 image copy backup alıyorum.

run
{
 allocate channel ch01 device type disk format '/zfs/backup/merge_inc_backup1/%U';
 allocate channel ch02 device type disk format '/zfs/backup/merge_inc_backup2/%U';
 allocate channel ch03 device type disk format '/zfs/backup/merge_inc_backup3/%U';
 allocate channel ch04 device type disk format '/zfs/backup/merge_inc_backup4/%U';
 backup current controlfile format '/zfs/backup/merge_inc_backup1/controlfile_%U';
 backup as copy incremental level 0 database tag 'inc_merge';
 backup archivelog all;
}

Okumaya devam et

Switch database to copy ( RMAN-06571 ) hatası

Selamlar,

bu makalede image copy restore sırasında alınan RMAN-06571 hatasının çözümünden bahsedicem. Image copy alınan backup’tan database geri dönerken “switch database to copy” komutundan sonra aşağıdaki gibi bir hata aldım;

RMAN> switch database to copy;
RMAN-00571: ===========================================================
 RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
 RMAN-00571: ===========================================================
 RMAN-03002: failure of switch to copy command at 04/27/2015 09:47:20
 RMAN-06571: datafile 1 does not have recoverable copy

Aslında elimdeki backup gayet sağlıklı. Buradaki sorun database’in incarnation’ı ile ilgili. Incarnation’ın tanımını Oracle şöyle yapıyor;

incarnation
A separate version of a database. The incarnation of the database changes when you open it with the RESETLOGS option, but you can recover backups from a prior incarnation so long as the necessary redo is available.

Okumaya devam et

Add disk to ASM (solaris 10 x84_64)

1. Öncelikle format komutu ile ilgili diskimi buluyorum.

root@OBT-MRXDB2 # format
Searching for disks...done

AVAILABLE DISK SELECTIONS:
 0. c0t0d0 <HP -LOGICAL VOLUME -3.22 cyl 17841 alt 2 hd 255 sec 63>
 /pci@0,0/pci8086,3c06@2,2/pci103c,3354@0/sd@0,0
 1. c6t50002AC2AC8E2171d0 <3PARdat-VV -3123 cyl 1532 alt 2 hd 128 sec 32> OV03
 /scsi_vhci/disk@g50002ac2ac8e2171
 2. c6t50002AC48CF32171d0 <3PARdat-VV -3123 cyl 2044 alt 2 hd 128 sec 32> OV04
 /scsi_vhci/disk@g50002ac48cf32171
 3. c6t50002AC81D7A2171d0 <3PARdat-VV -3123 cyl 13051 alt 2 hd 255 sec 63> FRA01
 /scsi_vhci/disk@g50002ac81d7a2171
 4. c6t50002AC81D752171d0 <3PARdat-VV -3123 cyl 6524 alt 2 hd 255 sec 63> DATA01
 /scsi_vhci/disk@g50002ac81d752171
 5. c6t50002AC81D762171d0 <3PARdat-VV -3123 cyl 6524 alt 2 hd 255 sec 63> DATA02
 /scsi_vhci/disk@g50002ac81d762171
 6. c6t50002AC81D772171d0 <3PARdat-VV -3123 cyl 6524 alt 2 hd 255 sec 63> DATA03
 /scsi_vhci/disk@g50002ac81d772171
 7. c6t50002AC90E102171d0 <3PARdat-VV -3123 cyl 32632 alt 2 hd 255 sec 63> DATA10
 /scsi_vhci/disk@g50002ac90e102171
 8. c6t50002AC182C72171d0 <3PARdat-VV -3123 cyl 6524 alt 2 hd 255 sec 63> DATA04
 /scsi_vhci/disk@g50002ac182c72171
 9. c6t50002AC182C82171d0 <3PARdat-VV -3123 cyl 6524 alt 2 hd 255 sec 63> DATA05
 /scsi_vhci/disk@g50002ac182c82171
 10. c6t50002AC182C92171d0 <3PARdat-VV -3123 cyl 6524 alt 2 hd 255 sec 63> DATA06
 /scsi_vhci/disk@g50002ac182c92171
 11. c6t50002AC182CA2171d0 <3PARdat-VV -3123 cyl 6524 alt 2 hd 255 sec 63> DATA07
 /scsi_vhci/disk@g50002ac182ca2171
 12. c6t50002AC182D62171d0 <3PARdat-VV -3123 cyl 13051 alt 2 hd 255 sec 63> DATA08
 /scsi_vhci/disk@g50002ac182d62171
 13. c6t50002AC182D72171d0 <3PARdat-VV -3123 cyl 13051 alt 2 hd 255 sec 63> DATA09
 /scsi_vhci/disk@g50002ac182d72171
 14. c6t50002AC785A92171d0 <3PARdata-VV-3123-150.00GB> u02
 /scsi_vhci/disk@g50002ac785a92171
 15. c6t50002AC183102171d0 <3PARdat-VV -3123 cyl 1532 alt 2 hd 128 sec 32> OV01
 /scsi_vhci/disk@g50002ac183102171
 16. c6t50002AC183112171d0 <3PARdat-VV -3123 cyl 1532 alt 2 hd 128 sec 32> OV02
 /scsi_vhci/disk@g50002ac183112171

2. Diski formatlıyorum ve label’lıyorum.

Okumaya devam et

Oracle Database Granule Size

Selamlar,

Oracle database açılırken memory parametrelerinin gösterdiği kadar memory database için allocate edilir. Bu işlem sırasında en küçük memory boyutu 1 granule size kadardır. Yani bir memory parametresi granule size’a tam olarak bölünebilmedilir ki bu ilgili memory ram üzerinde allocate edilebilsin. Eğer verilen parametre granule size’a tam bölünmüyor ise Oracle bu parametreyi otomatik olarak granule size’a bölünen bir sayıya set edecektir.

Database’in granule size’ını öğrenmek için aşağıdaki tablo kullanılabilir;

granule-1

 

Benim üzerinde çalıştığım database 11gR2 ve sga_max_size=9G, yani granule size = 32Mb.

Gidip large_pool_size parametresini 200 yaptığım zaman, Oracle otomatik olarak bunu 224 yapıyor ki 32’ye (granule size) tam olarak bölünebilsin.

Memory parametrelerini set ederken granule size’ı gözönünde bulundurmakta fayda var.

Kaynaklar;
How To Determine Granule Size (Doc ID 947152.1)

Kolay gelsin.

Data Guard Monitoring

Selamlar,

bu makalede Data Guard ile ilgili aşağıdaki konularda script’ler paylaşıcam;

Replikasyon Başlatma/Durdurma

  • Replikasyon başlatma
Real Time Apply:
alter database recover managed standby database using current logfile disconnect;

Redo Apply:
alter database recover managed standby database disconnect from session;
  • Replikasyon durdurma
alter database recover managed standby database cancel;
  • Redo Shipping Durdurma
    Bu sayede eğer aradaki hat gitmişse alert.log’a sürekli hata basmasını önlemek için aşağıdaki komut çalıştırılabilir. Bu data guard için gerekli servisleri durdurmaz, sadece archive log’ların primary’den standby’a gitmesini durdurur.
alter system set log_archive_dest_state_2='DEFER' sid='*';
  • Redo Shipping Başlatma
alter system set log_archive_dest_state_2='ENABLE' sid='*';

Database Açma/Kapatma

  • Primary Database Kapatma Adımları
alter system set log_archive_dest_state_2='DEFER' sid = '*';
alter system switch logfile ;
shutdown immediate

Okumaya devam et

Data Guard Kurulumu (11G R2 on Solaris 10 x86_64)

Selamlar,

bu makalede Oracle Database 11G R2 için Data Guard konfigürasyonunu yapıcaz. Data Guard Oracle’ın en stabil ve konfigürasyonu en kolay replikasyon yöntemidir. Bu sayede X lokasyonundaki bir database Y lokasyonuna replike edilebilir ve bir felaket durumunda switchover yapılarak database replike edilen Y lokasyonundan hizmete açılabilir.

Data Guard’ın asıl amacı data protection’dır. Yani bizim X lokasyonundaki server’larımız deprem, sel, yangın gibi doğal afetler sonucu kullanılamaz hale gelebilir ve tüm data’larımız kaybolabilir. Data kaybolmasının önüne geçebilmek için database’imizi mutlaka başka bir lokasyona replike etmemiz gerekmektedir.

Data Guard aynı zamanda migration’larda da oldukça sık kullanılır. Downtime’ı çok kısa olduğu için (duruma göre 2-3 dakika ya da max 10dk) backup/restore’dan daha hızlı bir şekilde yeni server/storage’a migrate edilebilir.

Elimde single instance production database var (11.2.0.1). Data Guard kurulumuna başlamadan önce kurulumun yapılacağı ortamda software only rdbms kuruyorum, database create etmiyorum.

Data Guard adımları aşağıdaki gibi;

1. Öncelikle her iki tarafta da /etc/hosts dosyalarını ayarlıyorum.
[Primary]

bash-3.2# vi /etc/hosts
"/etc/hosts" [Read only] 6 lines, 93 characters
#
# Internet host table
#
::1 localhost
127.0.0.1 localhost
10.1.1.99 koop-primary loghost
10.1.1.100 koop-standby

[Standby]

bash-3.2# vi /etc/hosts
"/etc/hosts" [Read only] 6 lines, 94 characters
#
# Internet host table
#
::1 localhost
127.0.0.1 localhost
10.1.1.100 koop-standby loghost
10.1.1.99 koop-primary

2. [Primary] force logging kapalı ise aşağıdaki şekilde açıyorum.

SQL> SELECT force_logging FROM v$database;
FORCE_LOG
---------
NO

SQL> alter database force logging;
Database altered.

SQL> SELECT force_logging FROM v$database;
FORCE_LOG
---------
YES

Okumaya devam et