Oracle Active Data Guard este o opțiune introdusă odată cu Oracle 11g. Prin intermediul acestei funcționalități este permis accesul pentru citirea din baza de date de standby pentru interogări, sortare, raportare, etc, în timp ce se aplică în mod continuu schimbările primite de la baza de date de producție. In imaginea de mai jos (from docs.oracle) este foarte bine descris fluxul datelor folosind Oracle Active Data Guard.
În versiunile mai vechi ale Oracle Data Guard, era posibil sa se deschida baza de date de standby în modul read only, dar baza de date nu putea să primească Redologuri din producție în tot acest timp.
Funcționalitatea Active Data Guard este disponibilă numai în Enterprise Edition și este opțiune contra cost. In rândurile de mai jos va prezint cum se activează opțiunea cu ajutorul lui Data Guard Broker prezentat în articolul precedent.
DGMGRL> connect sys
Password:
Connected as SYSDG.
DGMGRL> show configuration
Configuration – dgmcfg
Protection Mode: MaxPerformance
Members:
orcl – Primary database
orcl_dg – Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS (status updated 12 seconds ago)
DGMGRL> show database orcl_dg
Database – orcl_dg
Role: PHYSICAL STANDBY
Intended State: APPLY-ON
Transport Lag: 0 seconds (computed 1 second ago)
Apply Lag: 0 seconds (computed 1 second ago)
Average Apply Rate: 528.00 KByte/s
Real Time Query: OFF
Instance(s):
orcl_dg
Database Status:
SUCCESS
DGMGRL> edit database ‘orcl_dg’ set state = ‘apply-off’;
Succeeded.
SQL> SELECT database_role, open_mode FROM v$database;
DATABASE_ROLE OPEN_MODE
–––––- –––––––
PHYSICAL STANDBY MOUNTED
SQL> alter database open read only;
Database altered.
SQL> SELECT database_role, open_mode FROM v$database;
DATABASE_ROLE OPEN_MODE
–––––- –––––––
PHYSICAL STANDBY READ ONLY
DGMGRL> edit database ‘orcl_dg’ set state = ‘apply-on’;
Succeeded.
DGMGRL> show database orcl_dg
Database – orcl_dg
Role: PHYSICAL STANDBY
Intended State: APPLY-ON
Transport Lag: 0 seconds (computed 0 seconds ago)
Apply Lag: 0 seconds (computed 0 seconds ago)
Average Apply Rate: 2.00 KByte/s
Real Time Query: ON
Instance(s):
orcl_dg
Database Status:
SUCCESS
SQL> SELECT database_role, open_mode FROM v$database;
DATABASE_ROLE OPEN_MODE
–––––- –––––––
PHYSICAL STANDBY READ ONLY WITH APPLY
Acum nu ne rămâne decât sa verificam ca funcționează:
SQL> SELECT database_role, open_mode FROM v$database;
DATABASE_ROLE OPEN_MODE
–––––- –––––––
PRIMARY READ WRITE
SQL> create user test identified by test;
User created.
SQL> grant connect to test;
Grant succeeded.
SQL> grant CREATE TABLE to test;
Grant succeeded.
SQL> grant UNLIMITED TABLESPACE TO test;
Grant succeeded.
SQL> conn test/test
Connected.
SQL> create table test.t1 as
select rownum id,
trunc(dbms_random.value(1,1e6)) n1
from dual
connect by
level <= 1e4; 2 3 4 5 6
Table created.
SQL>exit
SQL> SELECT database_role, open_mode FROM v$database;
DATABASE_ROLE OPEN_MODE
–––––- –––––––
PHYSICAL STANDBY READ ONLY WITH APPLY
SQL> conn test/test
Connected.
SQL> select count(*) from t1;
COUNT(*)
–––-
10000
SQL> insert into t1 select * from t1;
insert into t1 select * from t1
*
ERROR at line 1:
ORA-16000: database or pluggable database open for read-only access
Am facut ceva de genul asta acum vreo 15 ani mult mai simplu, cu o tehnologie de tip IP switch. Aveam redundanta atat la baza de date cat si la sistemul de operare.