Database
 sql >> Database >  >> RDS >> Database

Impostazione dello standby fisico di Active Data Guard nell'architettura RAC One Node – Parte 1

Questo articolo è la parte 1 di una serie in due parti che descrive i passaggi per l'impostazione di Active Data Guard Physical Standby in RAC One Node Architecture.

Introduzione

Oracle Data Guard è uno dei componenti principali di Oracle Database High Availability (HA), un insieme integrato di soluzioni, che aiuta le organizzazioni a ridurre al minimo l'inattività, pianificata o meno, per garantire la loro attività che scorre. Active Data Guard è un'opzione concessa in licenza per Oracle Database Enterprise Edition che amplia le funzionalità di base di Data Guard [1] consentendo risorse avanzate, quali:consultazioni, report, aggiornamenti del database in standby che non influiscono sul database primario, ripristino automatico di blocchi di dati danneggiati, backup incrementali, tra gli altri.

Oracle RAC One Node utilizza un'architettura a disco condiviso per fornire una soluzione a disponibilità elevata del database, simile a Oracle Real Application Clusters (RAC). A differenza di Oracle RAC, che esegue diverse istanze contemporaneamente, Oracle RAC One Node fornisce una soluzione di failover in un'unica istanza, inoltre può semplificare l'infrastruttura nel cluster, essendo facilmente aggiornato alle impostazioni di Oracle Real Application Clusters con diverse istanze.

Ambiente

  • Il database primario utilizza Oracle RAC con 2 nodi
  • La modalità di protezione utilizzata sarà "Prestazioni massime" utilizzando la modalità "trasporto di ripristino asincrono"
  • La funzione "Failover di avvio rapido" non verrà utilizzata.
  • Impostazioni di Data Guard Broker

1. Imposta db_unique_name su Database primario:

sqlplus> alter system set db_unique_name='analytics' scope=spfile sid='*';

2. Copia il "file password Oracle" in standby del server:

scp orapwanalytics oracle@hostdr:/u01/app/oracle/product/12.1.0.2/dbhome_1/dbs

3. Nelle istanze bank dei nodi 1 e 2 del server primario, aggiungi le voci in listener.ora:

Nodo 1:

(SID_DESC =
(GLOBAL_DBNAME = analytics1_dgmgrl)
(SID_NAME = analytics1)
(ORACLE_HOME = /u01/app/oracle/product/12.1.0.2/dbhome_1)
)

Nodo 2:

 
(SID_DESC =
(GLOBAL_DBNAME = analytics2_dgmgrl)
(SID_NAME = analytics2)
(ORACLE_HOME = /u01/app/oracle/product/12.1.0.2/dbhome_1)
)

4. Nel server di standby, aggiungi la voce in listener.ora

 
(SID_DESC =
(GLOBAL_DBNAME = analytics_DG_DGMGRL)
(SID_NAME = analytics_dg)
(ORACLE_HOME = /u01/app/oracle/product/12.1.0.2/dbhome_1)
)

Dopo queste impostazioni, è necessario eseguire il comando "listener reload" per forzare l'ascoltatore a leggere nuovamente le voci listener.ora. Attenzione! Questa operazione influirà sulla disponibilità dell'ascoltatore.

5. Aggiungi voci nel file tnsnames.ora nel database primario e di standby;

5.1. Commenta la vecchia voce

 
#analytics =
# (DESCRIPTION =
# (ADDRESS = (PROTOCOL = TCP)(HOST = hostdr-pscan1)(PORT = 1521))
# (CONNECT_DATA =
# (SERVER = DEDICATED)
# (SERVICE_NAME = analytics)
# ))

5.2. Aggiungi nuove voci:

 
analytics =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostdr-pscan1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = analytics)
(UR=A)
))

analytics1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostdr01vmp01-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = analytics)
(SID = analytics1)
(UR=A)
))

analytics2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostdr02vmp01-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = analytics)
(SID = analytics2)
(UR=A)
))

analytics1_DGMGRL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostdr01vmp01-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = analytics_DGMGRL)
(UR=A)
))

analytics2_DGMGRL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostdr02vmp01-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = analytics_DGMGRL)
(UR=A)
))

5.3. Voci della DG:

analytics_DG =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = host01vmp01-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = analytics_dg) (UR = A)
))

analytics_DG_DGMGRL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = host01vmp01-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = analytics_dg_dgmgrl)
(UR=A)
))

6. Testare le nuove voci nel file tnsnames.ora

 
tnsping analytics
tnsping analytics1
tnsping analytics2
tnsping analytics_DG
tnsping analytics1_DGMGRL
tnsping analytics2_DGMGRL
tnsping analytics_DG_DGMGRL

7. Abilitare "Forza registrazione" e "Modalità archivio" nel database primario. Nota:l'istanza era già configurata in modalità archivio.

 
sqlplus> alter database force logging;
sqlplus> select force_logging, log_mode from v$database;

FORCE_LOGGING LOG_MODE
--------------------------------------- ------------
YES ARCHIVELOG

8. Verificare le impostazioni di RedoLogs nel database primario. Lo script utilizzato logfiles.sql è disponibile su oracle-base.com.

9. Aggiungi file di registro in standby.

Per determinare il numero consigliato di registri di ripristino in standby, utilizzare la seguente formula [2]:

(numero massimo di gruppi di file di registro +1) * numero massimo di thread

Il mio database principale ha due thread e ognuno ha quattro gruppi di ripristino online, quindi dovremmo avere dieci registri di ripristino in standby.

(numero massimo di gruppi di file di registro +1) * numero massimo di thread =((4 + 1) * 2 =10)

 
sqlplus> alter database add standby logfile thread 1 group 41 ('+DG_RECO_DR') size 1024M;
sqlplus> alter database add standby logfile thread 2 group 42 ('+DG_RECO_DR') size 1024M;
sqlplus> alter database add standby logfile thread 1 group 43 ('+DG_RECO_DR') size 1024M;
sqlplus> alter database add standby logfile thread 2 group 44 ('+DG_RECO_DR') size 1024M;
sqlplus> alter database add standby logfile thread 1 group 45 ('+DG_RECO_DR') size 1024M;
sqlplus> alter database add standby logfile thread 2 group 46 ('+DG_RECO_DR') size 1024M;
sqlplus> alter database add standby logfile thread 1 group 47 ('+DG_RECO_DR') size 1024M;
sqlplus> alter database add standby logfile thread 2 group 48 ('+DG_RECO_DR') size 1024M;
sqlplus> alter database add standby logfile thread 2 group 49 ('+DG_RECO_DR') size 1024M;
sqlplus> alter database add standby logfile thread 2 group 50 ('+DG_RECO_DR') size 1024M;

10. Nel database primario creare un pfile che sarà la base dei file dei parametri del database in standby.

 
create pfile='/tmp/initanalytics_dg_aux.ora' from spfile;

11. Nel database Standby creare il file pfile con le informazioni del server remoto. Il modo più semplice per creare questo file è copiare il file dei parametri del database primario (elemento 10) nel database di standby e modificarlo.

$ cd $ORACLE_HOME/dbs
$ vi initanalytics_dg_aux.ora

#*.audit_file_dest='/u01/app/oracle/admin/analytics/adump'
*.audit_file_dest='/u01/app/oracle/admin/analytics_dg/adump'
*.audit_trail='db'
#.cluster_database=true
*.cluster_database=false
*.compatible='12.1.0.2.0'
#*.control_files='+DG_DATA_DR/analytics/controlfile/current.1257.954609365','+DG_RECO_DR/analytics/controlfile/current.527.954609365'
*.control_files='+DG_DATA/analytics_dg/controlfile/current1.ctl','+DG_RECO/analytics_dg/controlfile/
current2.ctl'
*.db_block_size=8192
#*.db_create_file_dest='+DG_DATA_DR'
*.db_create_file_dest='+DG_DATA'
#*.db_create_online_log_dest_1='+DG_DATA_DR'
*.db_create_online_log_dest_1='+DG_DATA'
#*.db_create_online_log_dest_2='+DG_RECO_DR'
*.db_create_online_log_dest_2='+DG_RECO'
*.db_domain=''
*.db_name='analytics'
*.db_files=2000
#*.db_recovery_file_dest='+DG_RECO_DR'
*.db_recovery_file_dest='+DG_RECO'
*.db_recovery_file_dest_size=100G
#*.db_unique_name='analytics'
*.db_unique_name='analytics_dg'

12. Crea gerarchie di directory.

12.1. Crea una directory per "audit dump" in cui verranno creati i file e il controllo del database.

 
mkdir -p /u01/app/oracle/admin/analytics_dg/adump

12.2. In ASM, crea directory per file di controllo e file di parametri:

 
mkdir +DG_DATA/analytics_DG/
mkdir +DG_DATA/analytics_DG/PARAMETERFILE
mkdir +DG_DATA/analytics_DG/CONTROLFILE
mkdir +DG_DATA/analytics_DG/BROKERCFG
mkdir +DG_RECO/analytics_DG
mkdir +DG_RECO/analytics_DG/BROKERCFG

13. Crea spfile e pfile in Standby Database

 
$ export ORACLE_SID=analytics_dg
$ sqlplus / as sysdba

13.1. Avvia il database di standby con pfile initanalytics_dg_aux.ora e converti il ​​file dei parametri (pfile) in spfile.

 
sqlplus> startup nomount pfile='/u01/app/oracle/product/12.1.0.2/dbhome_1/dbs/initanalytics_dg_aux.ora';
sqlplus> create spfile='+DG_DATA/analytics_DG/PARAMETERFILE/spfileanalytics_dg.ora' from pfile='/u01/app/oracle/product/12.1.0.2/dbhome_1/dbs/initanalytics_dg_aux.ora';

13.2. Crea pfile e in questo file inserisci la seguente voce:

 
echo "spfile='+DG_DATA/analytics_DG/PARAMETERFILE/spfileanalytics_dg.ora'" >> initanalytics_dg.ora

13.3. Avvio dell'istanza con ripristino da spfile a database posteriore.

$ export ORACLE_SID=analytics_dg
$ sqlplus sys as sysdba

sqlplus> shutdown immediate;
sqlplus> startup nomount;

14. Eseguire il ripristino con il duplicato del database;

 
connect target sys/xxxxxx@analytics1;
connect auxiliary sys/xxxxxx@analytics_dg_dgmgrl;
RUN {
Allocate channel pr1 device type disk;
Allocate channel pr2 device type disk;
allocate auxiliary channel stby1 type disk;
allocate auxiliary channel stby2 type disk;
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE;
RELEASE CHANNEL pr1;
RELEASE CHANNEL pr2;
RELEASE CHANNEL stby1;
RELEASE CHANNEL stby2;
}

Il prossimo post continueremo questa saga!

Riferimenti

[1] Best practice di Oracle Active Data Guard. Disponibile su:https://www.oracle.com/database/technologies/active-data-guard-12c-best-practice.html

[2] Best practice per l'elevata disponibilità di Oracle Database 11g Release 2 (11.2). Disponibile su:https://docs.oracle.com/cd/E24693_01/server.11203/e10803/config_dg.htm

[3] Broker di protezione dei dati. Disponibile su:https://docs.oracle.com/cd/E11882_01/server.112/e40771/dbpropref.htm#DGBKR3781