Oracle Data Guard 18c
Em Oracle Enterprise Edition RU 18.4.0.0
Em Oracle Enterprise Linux 7.6
Inclui CDB Architecture
Ricardo Portilho Proni
ricardo@nervinformatica.com.br
Esta obra está licenciada sob a licença
Creative Commons Atribuição-SemDerivados 3.0 Brasil.
Para ver uma cópia desta licença, visite
http://creativecommons.org/licenses/by-nd/3.0/br/.
2
Comandos no Treinamento
Comando com o usuário root:
# ls -lhComando com um usuário oracle:
$ ls -lhAdicionar texto a um arquivo:
$ vi initORCL.ora...
db_cache_size=500M ...
Comando no SQL*Plus:
SQL> SELECT STATUS FROM V$INSTANCE;
Comando no RMAN:
RMAN> REPORT SCHEMA;
Algo deve ser alterado de acordo com sua máquina:
Hostname: nerv01.localdomainQuando algo dá errado propositalmente:
O que aconteceu?3
rlwrap
# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm # yum -y install epel-release-latest-7.noarch.rpm
# yum -y install rlwrap
$ rlwrap sqlplus / AS SYSDBA $ rlwrap rman TARGET /
$ rlwrap lsnrctl
4
glogin.sql
$ cat $ORACLE_HOME/sqlplus/admin/glogin.sql … SET PAGESIZE 1000 SET LINESIZE 220 SET TIMING ON SET TIME ONSET SQLPROMPT '&_user@&_connect_identifier> ' DEFINE _EDITOR=vi
…
09:08:44 SYS@ORCL> SELECT 1 FROM DUAL; 1
1
Elapsed: 00:00:00.00 09:09:00 SYS@ORCL>
5 Características da Alta Disponibilidade
• Confiança
• Recuperabilidade
• Detecção de erros em tempo hábil • Continuidade operacional
Análise de Alta Disponibilidade
• Análise de impacto no negócio • Custo de tempo fora de operação
• Objetivo de tempo de recuperação (RTO) • Objetivo de ponto de recuperação (RPO) • Meta de gerenciamento
• Custo total de propriedade (TCO) • Retorno sobre o investimento (ROI)
Sistemas e Alta Disponibilidade
• Camada 1 (Faturamento, Vendas) • Camada 2 (Compras, Estoque) • Camada 3 (BI, Desenvolvimento)
Custos e Alta Disponibilidade
• Tempo máximo de parada tolerado. • Frequência máxima de paradas tolerada.
• Custos facilmente mensuráveis (vendas, funcionários ociosos, multas contratuais) • Custos dificilmente mensuráveis (processos judiciais)
• Custos não mensusáveis (publicidade negativa, clientes irritados)
6
Implantação de Alta Disponibilidade
7
•
Fast-Start Fault Recovery
•
Oracle Restart
•
Oracle Real Application Clusters and Oracle Clusterware
•
Oracle RAC One Node
•
Oracle Data Guard
•
Oracle GoldenGate and Oracle Streams
•
Oracle Flashback Technology
•
Oracle Automatic Storage Management
•
Fast Recovery Area
•
Recovery Manager
•
Data Recovery Advisor
•
Oracle Secure Backup
•
Oracle Security Features
•
LogMiner
•
Oracle Exadata Storage Server Software (Exadata Cell)
•
Oracle Exadata Database Machine
•
Oracle Database File System (DBFS)
•
Client Failover
•
Automatic Block Repair
•
Corruption Prevention, Detection, and Repair
8
•
Operating system and hardware upgrades -> Oracle RAC
•
Oracle Database patches -> Oracle RAC
•
Oracle Grid Infrastructure upgrades and patches -> Oracle RAC
•
Storage Migration -> Oracle ASM
•
Migrating to Exadata Storage -> Oracle MAA best practices
•
Upgrading Exadata Storage -> Exadata Patch Manager
•
Migrating a single-instance database to Oracle RAC -> Oracle Grid Infrastructure
•
Migrating to Oracle ASM -> Oracle Data Guard
•
Migrating a single-instance database to Oracle RAC -> Oracle Data Guard
•
Patch set and database upgrades -> Oracle Data Guard using SQL Apply
•
Oracle interim patches, Oracle clusterware upgrades and patches, Oracle ASM upgrades, Operating
System and Hardware Upgrades -> Oracle Data Guard Standby-First Patch Apply
•
Migration across Windows and Linux -> Oracle Data Guard
•
Platform migration across the same endian format platforms -> Transportable database
•
Platform migration across different endian format platforms -> Transportable tablespace
•
Patch set and database upgrades, platform migration, rolling upgrades, and when different character
sets are required -> Oracle GoldenGate and Oracle Streams
•
Application upgrades -> Online Application Maintenance and Upgrades
9
•
Site Failures -> Oracle Data Guard
•
Site Failures -> Oracle GoldenGate and Oracle Streams
•
Site Failures -> Recovery Manager
•
Computer Failures -> Oracle Real Application Clusters and Oracle Clusterware
•
Computer Failures -> Oracle RAC One Node
•
Computer Failures -> Fast-Start Fault Recovery
•
Computer Failures -> Oracle Data Guard
•
Computer Failures -> Oracle GoldenGate and Oracle Streams
•
Storage Failures -> Oracle Automatic Storage Management
•
Storage Failures -> Oracle Data Guard
•
Storage Failures -> RMAN with Fast Recovery Area and Oracle Secure Backup
•
Storage Failures -> Oracle GoldenGate and Oracle Streams
•
Data Corruption -> Oracle Exadata Storage Server Software (Exadata Cell) and Oracle ASM
•
Data Corruption -> Corruption Prevention, Detection, and Repair
•
Data Corruption -> Data Recovery Advisor and RMAN with Fast Recovery Area
•
Data Corruption -> Oracle Data Guard
•
Data Corruption -> Oracle GoldenGate and Oracle Streams
•
Human Errors -> Oracle Security Features
•
Human Errors -> Oracle Flashback Technology
•
Human Errors -> LogMiner
•
Lost writes -> Oracle Data Guard, RMAN, DB_LOST_WRITE_PROTECT
•
Lost writes -> Oracle Data Guard Oracle Exadata Storage Server Software (Exadata Cell)
•
Hangs or slow down - Oracle Database and Oracle Enterprise Manager
10
High Availability Overview
http://docs.oracle.com/database/122/HAOVW/toc.htm
High Availability Best Practices
https://docs.oracle.com/database/121/HABPT/toc.htm
Data Guard Concepts and Administration
http://docs.oracle.com/en/database/oracle/oracle-database/18/sbydb/index.html
Data Guard Broker
http://docs.oracle.com/en/database/oracle/oracle-database/18/dgbkr/index.html
Global Data Services Concepts and Administration Guide
http://docs.oracle.com/en/database/oracle/oracle-database/18/gsmug/index.html
Oracle Sharding
http://docs.oracle.com/en/database/oracle/oracle-database/18/shard/index.html
11
12
✔ Data Guard Broker Support for RAC
✔ Automatic LogMiner Configuration
✔ Log Miner Support for Index-Organized Tables
✔ LogMiner Support for More Types: LONG, Multibyte CLOB and NCLOB
✔ Fine-Grained Supplemental Logging
✔ Secured Redo Transmission
✔ Uniquely Named Databases with DB_UNIQUE_NAME
✔ Simplified Zero Data Loss for Data Guard SQL Apply
✔ Zero Downtime Instantiation for SQL Apply
✔ Real Time Apply
✔ Automating Recovery Through Open Resetlogs in Standby Databases
✔ Backup and Restore of Standby Control File
13
✔ Fast-Start Failover
✔ Automatic Conversion of the Primary Database to a Standby Database Upon Failover
✔ Optimized Asynchronous Redo Transmission
✔ Faster Redo Apply Failover
✔ Faster SQL Apply Failover
✔ Additional Data Type Support in LogMiner and SQL Apply
✔ Automatic Deletion of Applied Archive Logs
✔ Improved Manageability for Redo Transport, Log Apply, and Broker
✔ Easy Conversion of a Physical Standby Database to a Reporting Database
✔ Flashback Across Data Guard Switchovers
✔ Fine-Grained, Automated Tracking of SQL Apply Runtime Performance
✔ Optimized Creation of Logical Standby Database
14
✔ Fast-Start Failover for Maximum Performance Mode
✔ Compression of Redo Traffic (Only for Gap Resolution)
✔ Real-Time Query Capability of Physical Standby Database
✔ Fast Role Transitions in a Data Guard Configuration
✔ User Configurable Conditions to Initiate Fast-Start Failover
✔ Dynamic Setting of Oracle Data Guard SQL Apply Parameters
✔ Enhanced Data Guard Broker Based Management Framework
✔ Enhanced Data Guard Management Interface (Using SQL*Plus)
✔ Histogram for Redo Transport Response Time
✔ Snapshot Standby
✔ Strong Authentication for Data Guard Redo Transport
✔ Enhanced DDL Handling in Oracle Data Guard SQL Apply
✔ Enhanced Oracle RAC Switchover Support for Logical Standby Databases
✔ Oracle Scheduler Support in Data Guard SQL Apply
✔ Fine-Grained Auditing (FGA) Support in Data Guard SQL Apply
✔ Support Transparent Data Encryption (TDE) with Data Guard SQL Apply
✔ Support XMLType Data Type (Only CLOB) in Data Guard SQL Apply
✔ Virtual Private Database (VPD) Support in Data Guard SQL Apply
✔ SMP Scalable Redo Apply
✔ Archive Log Management Improvements
15
✔ Automatic Block Repair
✔ Compressed Table Support in Logical Standby Databases and Oracle LogMiner
✔ Configurable Real-Time Query Apply Lag Limit
✔ Integrated Support for Application Failover in a Data Guard Configuration
✔ Support Up to 30 Standby Databases
✔ Universal Connection Pool (UCP) Integration with Oracle Data Guard
✔ Enable Sampling for Active Data Guard
✔ SQL Apply Support for Object Relational Model
✔ SQL Apply Support for Binary XML
✔ SPA Support for Active Data Guard Environment
16
✔
Global Data Services (GDS)
✔
Data Guard Support for Separation of Duty (SoD)
✔Advanced Data Guard Broker Manageability
✔
Oracle Data Guard Broker Support for Cascaded Standby Databases
✔Fast Sync
✔
Single Command Role Transitions
✔
Real-Time Apply is Default Setting for Data Guard
✔Resumable Switchover Operations
✔
Active Data Guard Enhanced Security
✔
Active Data Guard Support for DML on Global Temporary Tables
✔Active Data Guard Support for Sequences
✔
Active Data Guard Real-Time Cascade
✔Active Data Guard Far Sync
✔
SQL Apply Extended Data Type Support (EDS)
✔
SQL Apply Support for Objects, Collections, and XMLType
✔SQL Apply Support for XMLType
✔
SQL Apply Support for SecureFiles LOBs
✔
Data Guard Rolling Upgrade Support for Advanced Data Types
✔Data Guard Rolling Upgrade Support for XDB Repository
✔
Disaster Protection During Database Rolling Upgrade
✔
Oracle Advanced Queuing (AQ) Support for Data Guard Database Rolling Upgrade
✔Oracle Data Guard Broker Support for Database Rolling Upgrades
✔
Oracle Scheduler Support for Data Guard Database Rolling Upgrade
✔Rolling Upgrade Using Active Data Guard
17 ✔ Distributed Operations on CLOB, BLOB and XMLType
✔ OCI Support for Distributed LOBs
✔ Minimizing Impact on Primary Database When Using Multiple SYNC Standby Databases ✔ Oracle Data Guard Database Compare
✔ Subset Standby
✔ Oracle Data Guard Broker Support for Multiple Automatic Failover Targets ✔ Oracle Data Guard Broker Support for Multiple Observers
✔ Simplifying Observer Management for Multiple Fast-Start Failover Configurations
✔ Oracle Data Guard Broker Support for Transport Destinations of Different Endianess Than the Primary ✔ Oracle Data Guard Broker Support for Oracle Data Guard Multiple Instance Apply
✔ Oracle Data Guard Broker Support for Enhanced Alternate Destination ✔ Fast-Start Failover in Maximum Protection Mode
✔ Block Comparison Tool Support in Oracle Data Guard Broker DGMGRL Interface ✔ Oracle Data Guard Broker Support for Executing DGMGRL Command Scripts ✔ Broker ConfigurationWideServiceName Configuration Property
✔ Enhancing Support for Alternate Destinations
✔ Automatically Synchronize Password Files in Oracle Data Guard Configurations
✔ Preserving Application Connections to An Active Data Guard Standby During Role Changes ✔ In-Memory in Oracle Active Data Guard (ADG) environments.
✔ Oracle Active Data Guard is integrated with Oracle Sharding. ✔ FARSYNC option on the RMAN DUPLICATE.
✔ Diagnostic Pack in Oracle Active Data Guard.
✔ Rolling upgrades are supported on multitenant container databases (CDBs).
✔ Password file changes done on the primary database are now automatically propagated to standby databases. ✔ Keep any sessions connected to the standby during the switchover/failover.
✔ Encrypt and decrypt both new and existing tablespaces, and existing databases.
New Features Data Guard 12.2
18
✔
Oracle Data Guard Multi-Instance Redo Apply Supports Use of Block Change Tracking Files
✔Automatic Correction of Non-logged Blocks at a Data Guard Standby Database
✔
Copying a PDB in an Oracle Data Guard Environment
✔Refreshable PDB Switchover
✔
The database buffer cache state is now maintained on an Oracle Active Data Guard standby during a role
change.
✔
Global temporary tables can now be dynamically created on an Oracle Active Data Guard standby
database.
✔
A new initialization parameter, ADG_ACCOUNT_INFO_TRACKING, extends control of user account security
against login attacks across a production database and all Oracle Active Data Guard standby databases.
✔
A new view V$DATAGUARD_PROCESS (which replaces V$MANAGED_STANDBY) provides information that
can be queried to verify that redo is being transmitted from the primary database and applied to the
standby database.
✔
Metadata for private temporary tables (also known as local temporary tables) can be stored in memory.
✔Database nologging has been extended with two new modes: Standby Nologging for Load Performance
and Standby Nologging for Data Availability.
✔
A standby database can now be refreshed over the network using one RMAN command, RECOVER
STANDBY DATABASE.
✔
Enhancements have been made to Data Guard broker support for upgrades performed using the
DBMS_ROLLING PL/SQL package.
✔
Block Change Tracking is now supported with multi-instance redo apply.
19
✔
VALIDATE DATABASE SPFILE performs a comparison of server parameter file (SPFILE) entries between the
primary database and a specified standby database.
✔
VALIDATE NETWORK CONFIGURATION performs network connectivity checks between members of a
broker configuration.
✔
VALIDATE STATIC CONNECT IDENTIFIER validates the static connect identifier of a database.
✔
SET ECHO controls whether or not to echo commands that are issued either at the command-line prompt
or from a DGMGRL script.
✔
SHOW ALL (DGMGRL CLI properties) shows the values of DGMGRL CLI properties.
✔
The AlternateLocation configurable property is renamed to StandbyAlternateLocation and has new valid
values.
✔
The StandbyArchiveLocation configurable property has new valid values.
✔
The new OnlineArchiveLocation configurable property specifies the online redo log archive location for
primary, logical, and snapshot standby databases.
✔
The new OnlineAlternateLocation configurable property specifies an alternate online redo log archive
location for primary, logical, and snapshot standby databases when the location specified by the
OnlineArchiveLocation configurable property fails.
✔
The V$DATAGUARD_PROCESS view, introduced in Oracle Database 12c Release 2 (12.2.0.1), now shows
broker processes.
20
21 Configurações
Primary database
Physical standby database Logical standby database Snapshot Standby Database
Serviços
Redo Transport Services Apply Services Role Transitions Role Transitions Switchover Switchback Failover Reinstate Convert Interfaces
Enterprise Manager / Grid Control / Cloud Control DGMGRL SQL*Plus Initialization Parameters Tecnologias Complementares Oracle RAC Flashback Database RMAN
Oracle Global Data Services (GDS)
22
Vantagens
✔ Proteção contra desastres.
✔ Completa proteção de dados.
✔ Uso eficiente de recursos.
✔ Flexibilidade entre disponibilidade e desempenho.
✔ Flexibilidade entre configurações.
✔ Detecção e resolução automática de erros.
✔ Gerenciamento simples e centralizado.
✔ Integração completa com Oracle Database.
✔ Automatic role transitions.
Desvantagens
✔ Maior complexidade do ambiente.
✔ Maior custo de licenças.
✔ Maior custo de equipamentos.
✔ Maior custo de conhecimento.
23
Physical x Logical
24
Vantagens
Proteção contra desastres.
Proteção de dados.
Redução da carga na Produção (RMAN, Read only SQL).
Baixo impacto na Produção.
Desvantagens
Banco de dados disponível apenas para leitura.
O Standby deve ser uma cópia exata da Produção.
25 ● COMPATIBLE (Todos)
● CONTROL_FILE_RECORD_KEEP_TIME (Todos) ● CONTROL_FILES (Todos)
● DB_FILE_NAME_CONVERT (Physical Standby, Snapshot Standby) ● DB_UNIQUE_NAME (Todos)
● FAL_SERVER (Physical Standby, Snapshot Standby) ● INSTANCE_NAME (Todos)
● LOG_ARCHIVE_CONFIG (Todos) ● LOG_ARCHIVE_DEST_n (Todos)
● LOG_ARCHIVE_DEST_STATE_n (Todos) ENABLE, DEFER ou ALTERNATE. ● LOG_ARCHIVE_FORMAT (Todos)
● LOG_ARCHIVE_MAX_PROCESSES (Todos) ● LOG_ARCHIVE_MIN_SUCCEED_DEST (Todos) ● LOG_ARCHIVE_TRACE (Todos)
● LOG_FILE_NAME_CONVERT (Physical Standby, Logical tandby, Snapshot Standby) ● REMOTE_LOGIN_PASSWORDFILE (Todos)
● SHARED_POOL_SIZE (Todos)
● STANDBY_FILE_MANAGEMENT (Primary, Physical Standby, Snapshot Standby)
OBSOLETE
● FAL_CLIENT (Physical Standby, Snapshot Standby) Obsolete
● STANDBY_ARCHIVE_DEST (Physical Standby, Logical Standby, Snapshot Standby) Obsolete ● LOG_ARCHIVE_LOCAL_FIRST (Primary, Snapshot Standby) Obsolete
26
• DB_UNIQUE_NAME
• LOCATION = path_name OU SERVICE=service_name • TEMPLATE = template • GROUP = group • VALID_FOR = (redo_log_type,database_role) • PRIORITY = priority • MANDATORY • ALTERNATE = destination • SYNC | ASYNC • AFFIRM | NOAFFIRM • DELAY = minutes • MAX_CONNECTIONS = count • NET_TIMEOUT = seconds • MAX_FAILURE = count • REOPEN = seconds • COMPRESSION = {ENABLE|DISABLE|ZLIB|LZO} • ENCRYPTION = ENABLED|DISABLED • NOREGISTER
LOG_ARCHIVE_DEST_n
27
●
Modo ARCHIVELOG.
●FORCE LOGGING.
●
Resolução de nomes bilateral.
●Resolução de SQL*Net bilateral.
●Autenticação via PASSWORD FILE.
●
Criação, cópia e Restore de STANDBY CONTROLFILE (ou ACTIVE DUPLICATION).
●Backup e Restore (ou ACTIVE DUPLICATION).
●
No Physical Standby, MOUNT em modo STANDBY DATABASE.
●Adequação de parâmetros no PRIMARY.
●
Adequação de parâmetros no STANDBY.
●Criação de STANDBY REDO LOGs.
●
No Physical Standby, execução de RECOVER MANAGED STANDBY.
28
Na máquina
nerv01
, crie um banco de dados com o nome “TERR”, com um PDB com o nome TERRP.
Na máquina
nerv01
, crie um Listener, e inicie-o.
Na máquina
nerv02
, crie um Listener, e inicie-o.
Na máquina
nerv01
, crie uma entrada no /etc/hosts para a máquina
nerv02
.
Na máquina
nerv02
, crie uma entrada no /etc/hosts para a máquina
nerv01
.
Na máquina
nerv01
, coloque o banco de dados em modo ARCHIVELOG e o FORCE LOGGING.
$ export ORACLE_SID=TERR$ rlwrap sqlplus / as sysdba SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG; SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE FORCE LOGGING;
Copie o PASSWORD FILE da máquina
nerv01
para a máquina
nerv02
, em $ORACLE_HOME/dbs.
$ scp $ORACLE_HOME/dbs/orapwTERR nerv02:$ORACLE_HOME/dbs/29
Copie o SPFILE da máquina
nerv01
para a máquina
nerv02
, em $ORACLE_HOME/dbs.
$ scp $ORACLE_HOME/dbs/spfileTERR.ora nerv02:$ORACLE_HOME/dbs/Na máquina
nerv01
, crie uma entrada no tnsnames.ora para as instâncias das máquinas
nerv01
e
nerv02
.
TERR=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=nerv01)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=TERR)(SERVER=DEDICATED)))TERR02=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=nerv02) (PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=TERR02)(SERVER=DEDICATED)))
Na máquina
nerv02
, crie uma entrada no tnsnames.ora para as instâncias das máquinas
nerv01
e
nerv02
.
TERR=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=nerv01)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=TERR)(SERVER=DEDICATED)))TERR02=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=nerv02) (PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=TERR02)(SERVER=DEDICATED)))
LISTENER_TERR=(ADDRESS=(PROTOCOL=TCP)(HOST=nerv02.localdomain)(PORT = 1521))
Teste a resolução de nomes (ping) e o Oracle Net (tnsping) entre as duas máquinas.
Por que não funciona?
30
Nas máquinas
nerv01
e
nerv02
, crie um diretório para armazenar ARCHIVED REDO LOGs.
Na máquina
nerv02
, inicie a instância, deixando-a no estado NOMOUNT.
$ export ORACLE_SID=TERR SQL> STARTUP NOMOUNT
Por que não funcionou?
Na máquina
nerv02
, crie todos os diretórios utilizados por parâmetros no SPFILE.
$ strings $ORACLE_HOME/dbs/spfileTERR.ora$ mkdir -p /u01/app/oracle/admin/TERR/adump ...
Na máquina nerv02, verifique os SERVICES que o LISTENER provê.
Na máquina
nerv02
, altere o seguinte parâmetro, e a reinicie.
SQL> ALTER SYSTEM SET DB_UNIQUE_NAME=TERR02 SCOPE=SPFILE; SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP NOMOUNT
Na máquina nerv02, veja qual o SERVICE que o LISTENER provê.
Lab 1.3: Data Guard Physical Standby
31
Na máquina
nerv01
, conecte-se com RMAN nas duas instâncias e execute a duplicação.
$ rlwrap rman TARGET SYS/Nerv2018 AUXILIARY=SYS/Nerv2018@TERR02RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK;
Por que não funciona?
Nas máquinas
nerv01
e
nerv02
, acompanhe o Alert Log.
$ tail -f /u01/app/oracle/diag/rdbms/terr/TERR/trace/alert_TERR.log $ tail -f /u01/app/oracle/diag/rdbms/terr02/TERR/trace/alert_TERR.log
Na máquina
nerv01
, altere os parâmetros abaixo.
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(TERR,TERR02)'; SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1= 'LOCATION=/u01/archives/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TERR';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=
'SERVICE=TERR02 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TERR02';
Na máquina
nerv02
, altere os seguintes parâmetros.
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1= 'LOCATION=/u01/archives/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TERR02';
SQL> ALTER SYSTEM SET FAL_SERVER=TERR;
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
32
Na máquina
nerv01
, gere alguns ARCHIVED REDO LOGs, e acompanhe o Alert Log.
SQL> ALTER SYSTEM SWITCH LOGFILE;Na máquina
nerv02
, inicie o RECOVER.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Nas máquinas
nerv01
e
nerv02
, acompanhe o Alert Log.
Na máquina
nerv01
, gere alguns ARCHIVED REDO LOGs.
33
34
Modos de Proteção
35
Nas máquinas
nerv01
e
nerv02
, acompanhe o Alert Log durante este Lab.
Na máquina
nerv02
, adicione STANDBY REDO LOGs.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 209715200;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 209715200; SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 209715200; SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 209715200; SQL> SELECT * FROM V$LOG;
SQL> SELECT * FROM V$STANDBY_LOG; SQL> SELECT * FROM V$LOGFILE;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Na máquina
nerv01
, gere alguns ARCHIVED REDO LOGs, e acompanhe os Alert Logs.
36
Na máquina
nerv01
, verifique qual o PROTECTION MODE atual.
SQL> SELECT PROTECTION_MODE FROM V$DATABASE;Na máquina
nerv01
, crie o SCHEMA para o teste de carga.
SQL> ALTER SESSION SET CONTAINER = TERRP;SQL> SELECT PROTECTION_MODE FROM V$DATABASE;
SQL> CREATE TABLESPACE SOE DATAFILE '/u01/app/oracle/oradata/TERR/TERRP/soe01.dbf' SIZE 10G AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;
$ wget http://www.dominicgiles.com/swingbench/swingbench261090.zip $ unzip -q swingbench261090.zip
$ cd /home/oracle/swingbench/bin $ ./oewizard
37
Lab 2.3: Modos de Proteção
38
Lab 2.4: Modos de Proteção
39
Lab 2.5: Modos de Proteção
40
Lab 2.6: Modos de Proteção
41
Lab 2.7: Modos de Proteção
42
Lab 2.8: Modos de Proteção
43
Lab 2.9: Modos de Proteção
44
Lab 2.10: Modos de Proteção
45
Lab 2.11: Modos de Proteção
46
Lab 2.12: Modos de Proteção
47
Na máquina
nerv01
, execute o teste de carga.
$ cd /home/oracle/swingbench/bin$ ./charbench -uc 10 -cs //localhost/TERRP -rt 00:05 -c ../configs/SOE_Server_Side_V2.xml -r /home/oracle/MaximumPerformance.xml
$ grep Statements /home/oracle/MaximumPerformance.xml
48
Na máquina
nerv01
, altere o PROTECTION MODE.
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=TERR02 SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TERR02';
SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;
Na máquina
nerv01
, verifique qual o PROTECTION MODE atual.
SQL> SELECT PROTECTION_MODE FROM V$DATABASE;
Na máquina
nerv01
, refaça o teste de carga, e compare.
$ cd /home/oracle/swingbench/bin$ ./charbench -uc 10 -cs //localhost/TERRP -rt 00:05 -c ../configs/SOE_Server_Side_V2.xml -r /home/oracle/MaxAvailability.xml
$ grep Statements /home/oracle/MaxAvailability.xml
49
Na máquina
nerv01
, altere o PROTECTION MODE.
SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;
Na máquina
nerv01
, verifique qual o PROTECTION MODE atual.
SQL> SELECT PROTECTION_MODE FROM V$DATABASE;
Na máquina
nerv01
, refaça o teste de carga, e compare.
$ cd /home/oracle/swingbench/bin$ ./charbench -uc 10 -cs //localhost/TERRP -rt 00:05 -c ../configs/SOE_Server_Side_V2.xml -r /home/oracle/MaxProtection.xml
$ grep Statements /home/oracle/MaxProtection.xml
50
Na máquina
nerv02
, execute SHUTDOWN IMMEDIATE.
Por que não funciona?
Na máquina
nerv02
, execute SHUTDOWN ABORT.
Na máquina
nerv01
, execute uma operação de teste.
SQL> CREATE TABLE T AS SELECT * FROM ALL_OBJECTS;
Por que não funciona?
Na máquina
nerv01
, abra outra sessão e altere o PROTECTION MODE.
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=TERR02 ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TERR02';
Por que não funciona?
Altere o modo de proteção para MAXIMIZE PERFORMANCE.
SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
Depois, reinicie a instância da máquina
nerv02
e o RECOVER.
SQL> STARTUP NOMOUNT;
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Na máquina
nerv01
, gere alguns ARCHIVED REDO LOGs, e acompanhe os Alert Logs.
51
Na máquina
nerv01
, altere os seguintes parâmetros.
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO; SQL> ALTER SYSTEM SET FAL_SERVER=TERR02;
Na máquina
nerv02
, altere os seguintes parâmetros.
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=TERR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TERR';
Na máquina
nerv01
, verifique a possibilidade de SWITCHOVER e o execute.
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
SQL> STARTUP NOMOUNT;
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
Na máquina
nerv01
, verifique a possibilidade de SWITCHOVER.
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;Na máquina
nerv02
, verifique a possibilidade de SWITCHOVER e o execute.
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN; SQL> ALTER DATABASE OPEN;
52
Na máquina
nerv01
, inicie o RECOVER como um STANDBY.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Na máquina
nerv02
, gere alguns ARCHIVED REDO LOGs e acompanhe o Alert Log.
Na máquina
nerv01
, adicione STANDBY REDO LOGs.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 209715200;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 209715200; SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 209715200; SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 209715200;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Na máquina
nerv02
, gere alguns ARCHIVED REDO LOGs e acompanhe o Alert Log.
53
Na máquina
nerv02
, verifique a possibilidade de SWITCHOVER e o execute.
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
SQL> STARTUP NOMOUNT;
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
Na máquina
nerv02
, verifique a possibilidade de SWITCHOVER.
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;Na máquina
nerv01
, verifique a possibilidade de SWITCHOVER e o execute.
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN; SQL> ALTER DATABASE OPEN;
Na máquina
nerv02
, inicie o RECOVER como um STANDBY.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Na máquina
nerv01
, gere alguns ARCHIVED REDO LOGs e acompanhe o Alert Log.
54
Na máquina
nerv01
, execute o SWITCHOVER com a sintaxe 12c.
SQL> ALTER DATABASE SWITCHOVER TO TERR02 VERIFY; SQL> ALTER DATABASE SWITCHOVER TO TERR02;SQL> STARTUP NOMOUNT;
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Na máquina
nerv02
, finalize o SWITCHOVER.
SQL> ALTER DATABASE OPEN;
Na máquina
nerv02
, gere alguns ARCHIVED REDO LOGs e acompanhe o Alert Log.
Na máquina
nerv02
, execute o SWITCHBACK com a sintaxe 12c.
SQL> ALTER DATABASE SWITCHOVER TO TERR VERIFY; SQL> ALTER DATABASE SWITCHOVER TO TERR;
SQL> STARTUP NOMOUNT;
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Na máquina
nerv01
, finalize o SWITHBACK.
SQL> ALTER DATABASE OPEN;
Na máquina
nerv01
, gere alguns ARCHIVED REDO LOGs e acompanhe o Alert Log.
55
Na máquina
nerv01
, habilite o FLASHBACK (necessário para o REINSTATE).
SQL> ALTER DATABASE FLASHBACK ON;Na máquina
nerv01
, desligue a instância e o LISTENER.
SQL> SHUTDOWN ABORT;Na máquina
nerv02
, cancele o RECOVER.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
56
Na máquina
nerv02
, verifique a possibilidade de FAILOVER.
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;Na máquina
nerv02
, se o FAILOVER for possível, execute:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN; SQL> ALTER DATABASE OPEN;
Na máquina
nerv02
, se o FAILOVER não for possível, execute:
SQL> ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN; SQL> ALTER DATABASE OPEN;
57
Na máquina
nerv01
, inicie a instância em MOUNT.
SQL> STARTUP MOUNT;Na máquina
nerv01
, volte a um SCN mais antigo que o FAILOVER.
SQL> FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP( '2016-10-03 10:00:00','YYYY-MM-DD HH24:MI:SS');
OU
$ grep SCN /u01/app/oracle/diag/rdbms/terr/TERR/trace/alert_TERR.log SQL> FLASHBACK DATABASE TO SCN 912044;
Na máquina
nerv01
, converta o banco de dados para PHYSICAL STANDBY.
SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP NOMOUNT;
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Na máquina
nerv02
, gere alguns ARCHIVED REDO LOGs e acompanhe o Alert Log.
Depois de concluir o Reinstate, execute o Switchback.
Lab 3.7: Reinstate
58
Logical Standby
59
Vantagens
✔ Proteção contra tipos de falhas adicionais.
✔ Uso eficiente de recursos.
✔ Distribuição de carga.
✔ Otimização para relatórios e requerimentos de suporte a decisões.
✔ Minimizar tempo de parada durante upgrades.
Desvantagens
✔ Diversas limitações de tipos de dados.
✔ Diversas limitações de comandos SQL.
✔ Aplicação do comando SQL, e não do REDO LOG.
60
• BFILE
• ROWID, UROWID
• Collections (including VARRAYs and nested tables)
• Objects with nested tables and REFs
• Spatial type MDSYS.SDO_GEORASTER
• Spatial type MDSYS.SDO_TOPO_GEOMETRY
61
• ALTER DATABASE
• ALTER MATERIALIZED VIEW
• ALTER MATERIALIZED VIEW LOG • ALTER SESSION
• ALTER SYSTEM
• CREATE CONTROL FILE • CREATE DATABASE
• CREATE DATABASE LINK
• CREATE PFILE FROM SPFILE • CREATE MATERIALIZED VIEW
• CREATE MATERIALIZED VIEW LOG • CREATE SCHEMA AUTHORIZATION • CREATE SPFILE FROM PFILE • DROP DATABASE LINK
• DROP MATERIALIZED VIEW
• DROP MATERIALIZED VIEW LOG • EXPLAIN • LOCK TABLE • SET CONSTRAINTS • SET ROLE • SET TRANSACTION
Comandos SQL ignorados
62 DBA_LOGSTDBY_EVENTS DBA_LOGSTDBY_HISTORY DBA_LOGSTDBY_LOG DBA_LOGSTDBY_NOT_UNIQUE DBA_LOGSTDBY_PARAMETERS DBA_LOGSTDBY_SKIP DBA_LOGSTDBY_SKIP_TRANSACTION DBA_LOGSTDBY_UNSUPPORTED V$LOGSTDBY_PROCESS V$LOGSTDBY_PROGRESS V$LOGSTDBY_STATE V$LOGSTDBY_STATS V$LOGSTDBY_TRANSACTION
Views
63
Na máquina
nerv03
, crie um Listener, e inicie-o.
Na máquina
nerv01
, crie uma entrada no /etc/hosts para a máquina
nerv03
.
Na máquina
nerv02
, crie uma entrada no /etc/hosts para a máquina
nerv03
.
Na máquina
nerv03
, crie uma entrada no /etc/hosts para a máquina
nerv01
.
Na máquina
nerv03
, crie uma entrada no /etc/hosts para a máquina
nerv02
.
Na máquina
nerv01
, crie uma entrada no tnsnames.ora (TERR03) para a instância da máquina
nerv03
.
Na máquina
nerv02
, crie uma entrada no tnsnames.ora (TERR03) para a instância da máquina
nerv03
.
Na máquina
nerv03
, crie uma entrada no tnsnames.ora para a instância da máquina
nerv01
.
Na máquina
nerv03
, crie uma entrada no tnsnames.ora para a instância da máquina
nerv02
.
Na máquina
nerv03
, crie uma entrada no tnsnames.ora para a instância da máquina
nerv03
.
Teste a resolução de nomes (ping) e o Oracle Net (tnsping) entre as três máquinas.
Na máquina
nerv03
, crie um banco Standby via DBCA.
$ export ORACLE_SID=TERR$ dbca silent createDuplicateDB gdbName TERR sid TERR sysPassword Nerv2018 -primaryDBConnectionString nerv01:1521/TERR -createAsStandby -dbUniquename TERR03 $ rlwrap sqlplus / AS SYSDBA
SQL> SELECT OPEN_MODE FROM V$DATABASE;
64
Na máquina
nerv03
, crie dois diretórios para armazenar ARCHIVED REDO LOGs.
Na máquina
nerv03
, reinicie a instância, deixando-a em estado NOMOUNT.
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/u01/archives/ VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TERR03';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=TERR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TERR';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='LOCATION=/u01/archives_stb/ VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=TERR03';
SQL> ALTER SYSTEM SET FAL_SERVER=TERR;
Na máquina
nerv01
, habilite o terceiro local de archives.
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='SERVICE=TERR03 ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TERR03';
Por que não funciona?
65
Na máquina
nerv03
, habilite o RECOVER
SQL> SHUTDOWN IMMEDIATE;SQL> STARTUP NOMOUNT;
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 209715200; SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 209715200; SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 209715200; SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 209715200;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Na máquina
nerv01
, gere alguns ARCHIVED REDO LOGs, e verifique se a
nerv03
está sincronizada.
66
Após a máquina
nerv03
estar sincronizada, cancele o RECOVER.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
Na máquina
nerv01
, crie um dicionário dos dados dos REDO LOGs.
SQL> EXECUTE DBMS_LOGSTDBY.BUILD;
Na máquina
nerv03
, faça a conversão para LOGICAL STANDBY.
SQL> ALTER DATABASE RECOVER TO LOGICAL STANDBY BI; SQL> SHUTDOWN IMMEDIATE;SQL> STARTUP MOUNT;
SQL> ALTER DATABASE OPEN RESETLOGS;
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
Verifique a View V$LOGSTDBY_PROGRESS.
67
Na máquina
nerv01
, crie uma tabela de teste.
$ rlwrap sqlplus / AS SYSDBASQL> CREATE TABLE T AS SELECT * FROM ALL_OBJECTS; SQL> SELECT COUNT(*) FROM T;
Na máquina
nerv03
, confira a tabela criada.
SQL> SELECT COUNT(*) FROM T;Por que não funciona?
Na máquina
nerv01
, crie uma tabela de teste com o usuário SCOTT.
$ rlwrap sqlplus / AS SYSDBASQL> ALTER SESSION SET CONTAINER = TERRP;
SQL> CREATE USER SCOTT IDENTIFIED BY TIGER ACCOUNT UNLOCK; SQL> ALTER USER SCOTT QUOTA UNLIMITED ON USERS;
SQL> GRANT CONNECT, RESOURCE TO SCOTT; $ rlwrap sqlplus SCOTT/TIGER@TERRP
Por que não funciona?
SQL> CREATE TABLE T AS SELECT * FROM ALL_OBJECTS;
Na máquina
nerv03
, confira a tabela criada.
$ rlwrap sqlplus / AS SYSDBA
SQL> ALTER SESSION SET CONTAINER = TERRP; SQL> SELECT COUNT(*) FROM SCOTT.T;
Na máquina
nerv03
, crie um índice.
SQL> CREATE INDEX IDX_D_OBJECT_ID ON SCOTT.T(OBJECT_ID);
68
Na máquina
nerv03
, crie um índice.
$ rlwrap sqlplus / as sysdba
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY; SQL> ALTER SESSION SET CONTAINER = TERRP;
SQL> EXECUTE DBMS_LOGSTDBY.SKIP (STMT => 'DML', SCHEMA_NAME => 'SCOTT', OBJECT_NAME => 'T'); SQL> EXECUTE DBMS_LOGSTDBY.UNSKIP (STMT => 'DML', SCHEMA_NAME => 'SCOTT', OBJECT_NAME => 'T'); SQL> CONN / AS SYSDBA
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
69
Na máquina
nerv02
, cancele o RECOVER, e abra o banco de dados para leitura.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE OPEN;SQL> SELECT OPEN_MODE FROM V$DATABASE;
Na máquina
nerv02
, verifique se o PDB TERRP está acessível para leitura.
$ rlwrap sqlplus / AS SYSDBASQL> SHOW PDBS
SQL> ALTER PLUGGABLE DATABASE TERRP OPEN READ ONLY; SQL> SHOW PDBS
SQL> ALTER SESSION SET CONTAINER = TERRP; SQL> SELECT COUNT(*) FROM SCOTT.T;
Na máquina
nerv01
, faça uma alteração na tabela de testes.
SQL> CONN SCOTT/TIGER@TERRPSQL> INSERT INTO T SELECT * FROM T; SQL> SELECT COUNT(*) FROM T;
Na máquina
nerv02
, verifique que a alteração ainda não foi feita.
$ rlwrap sqlplus / AS SYSDBASQL> ALTER SESSION SET CONTAINER = TERRP; SQL> SELECT COUNT(*) FROM SCOTT.T;
Por que não funciona?
70
Na máquina
nerv02
, inicie o RECOVER, com o banco de dados para leitura.
SQL> CONN / AS SYSDBASQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
SQL> SELECT OPEN_MODE FROM V$DATABASE;
Na máquina
nerv02
, verifique que a alteração agora foi feita.
$ rlwrap sqlplus / AS SYSDBASQL> ALTER SESSION SET CONTAINER = TERRP; SQL> SELECT COUNT(*) FROM SCOTT.T;
Por que não funciona?
71
Vantagem
✔ Redução dos tempos de Refresh (Pré-Produção, Homologação, Desenvolvimento).
✔ Garantia da integridade dos ambientes de homologação e testes.
Desvantagens
✔ Maior espaço em disco necessário, para Archives e Fast Recovery Area.
✔ Necessária estrutura de banco de dados igual ao da Produção
✔ Perda de alterações após conversão para Physical Standby.
✔ Maior tempo de RECOVER necessário, em caso de utilização para Disaster Recovery.
72
Na máquina
nerv02
, cancele o RECOVER, e abra o banco de dados para leitura.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> SHUTDOWN IMMEDIATE;SQL> STARTUP NOMOUNT;
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> ALTER DATABASE CONVERT TO SNAPSHOT STANDBY; SQL> ALTER DATABASE OPEN;
SQL> SELECT OPEN_MODE FROM V$DATABASE;
Na máquina
nerv01
, gere vários ARCHIVEs, e veja se são aplicados na máquina
nerv02
.
Na máquina
nerv02
, faça uma alteração na tabela de testes.
$ rlwrap sqlplus / AS SYSDBA
SQL> ALTER SESSION SET CONTAINER = TERRP; SQL> SELECT COUNT(*) FROM SCOTT.T;
SQL> TRUNCATE TABLE SCOTT.T;
SQL> SELECT COUNT(*) FROM SCOTT.T;
Na máquina
nerv02
, reverta o SNAPSHOT STANDBY para PHYSICAL STANDBY.
SQL> CONN / AS SYSDBASQL> SHUTDOWN IMMEDIATE; SQL> STARTUP MOUNT;
SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY; SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP NOMOUNT;
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
73
Na máquina
nerv02
, verifique que a alteração foi desfeita.
$ rlwrap sqlplus / AS SYSDBASQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE OPEN;
SQL> ALTER PLUGGABLE DATABASE TERRP OPEN READ ONLY; SQL> ALTER SESSION SET CONTAINER = TERRP;
SQL> SELECT COUNT(*) FROM SCOTT.T;
Na máquina
nerv02
, retorne a aplicação de ARCHIVEs.
$ rlwrap sqlplus / AS SYSDBASQL> SHUTDOWN IMMEDIATE; SQL> STARTUP NOMOUNT;
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
74
Na máquina
nerv01
, cancele o envio de REDO LOG para a máquina
nerv03
.
Na máquina
nerv02
, habilite o envio de REDO LOG para a máquina
nerv03
.
Na máquina
nerv03
, altere o FAL_SERVER para a máquina
nerv02
.
Na máquina
nerv01
, gere vários ARCHIVEs, e veja se são aplicados na máquina
nerv03
.
Por que não funciona?
Na máquina
nerv01
, faça uma alteração na tabela de testes e veja se é propagada para a máquina
nerv03
.
75
76
Far Sync
77
Na máquina
nerv04
, crie um Listener, e inicie-o.
Na máquina
nerv01
, crie uma entrada no /etc/hosts para a máquina
nerv04
.
Na máquina
nerv02
, crie uma entrada no /etc/hosts para a máquina
nerv04
.
Na máquina
nerv03
, crie uma entrada no /etc/hosts para a máquina
nerv04
.
Na máquina
nerv04
, crie uma entrada no /etc/hosts para a máquina
nerv01
.
Na máquina
nerv04
, crie uma entrada no /etc/hosts para a máquina
nerv02
.
Na máquina
nerv04
, crie uma entrada no /etc/hosts para a máquina
nerv03
.
Na máquina
nerv01
, crie uma entrada no tnsnames.ora (TERR04) para a instância da máquina
nerv04
.
Na máquina
nerv02
, crie uma entrada no tnsnames.ora (TERR04) para a instância da máquina
nerv04
.
Na máquina
nerv03
, crie uma entrada no tnsnames.ora (TERR04) para a instância da máquina
nerv04
.
Na máquina
nerv04
, crie uma entrada no tnsnames.ora para a instância da máquina
nerv01
.
Na máquina
nerv04
, crie uma entrada no tnsnames.ora para a instância da máquina
nerv02
.
Na máquina
nerv04
, crie uma entrada no tnsnames.ora para a instância da máquina
nerv03
.
Na máquina
nerv04
, crie uma entrada no tnsnames.ora para a instância da máquina
nerv04
.
Teste a resolução de nomes (ping) e o Oracle Net (tnsping) entre as máquinas.
Na máquina
nerv01
, copie o PASSWORD FILE para a máquina
nerv04
.
Na máquina
nerv01
, copie o SPFILE para a máquina
nerv04
.
Na máquina
nerv04
, crie todos os diretórios mencionados em parâmetros do SPFILE.
Na máquina
nerv04
, crie um diretório para armazenar ARCHIVED REDO LOGs.
78
Na máquina
nerv01
, crie um FAR SYNC STANDBY CONTROLFILE, e copie para a máquina
nerv04
, para a
localização dos CONTROLFILEs.
SQL> ALTER DATABASE CREATE FAR SYNC INSTANCE CONTROLFILE AS '/tmp/STBFS.ctl'; $ scp /tmp/STBFS.ctl nerv04:/u01/app/oracle/oradata/TERR/control01.ctl
$ scp /tmp/STBFS.ctl nerv04:/u01/app/oracle/fast_recovery_area/TERR/control02.ctl
Na máquina
nerv01
, cancele a replicação para a máquina
nerv02
, e habilite o envio para a máquina
nerv04
.
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_4='SERVICE=TERR04 ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TERR04';
Por que não funciona?
Lab 8.2: Far Sync
79
Na máquina
nerv04
, habilite a replicação para a máquina
nerv02
.
$ export ORACLE_SID=TERR$ rlwrap sqlplus / AS SYSDBA SQL> STARTUP NOMOUNT;
SQL> ALTER SYSTEM SET SERVICE_NAMES=TERR04 SCOPE=SPFILE; SQL> ALTER SYSTEM SET DB_UNIQUE_NAME=TERR04 SCOPE=SPFILE; SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(TERR,TERR02,TERR03,TERR04)'; SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/u01/archives/
VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TERR04'; SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=TERR02 ASYNC VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TERR02';
SQL> ALTER SYSTEM SET FAL_SERVER=TERR;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 209715200; SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 209715200; SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 209715200; SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 209715200;
Na máquina
nerv02
, altere a solicitação de ARCHIVEs para a máquina
nerv04
.
SQL> ALTER SYSTEM SET FAL_SERVER=TERR04;Na máquina
nerv01
, gere alguns ARCHIVED REDO LOGs, e acompanhe os Alert Logs.
Por que não funciona?
Lab 8.3: Far Sync
80
Data Guard Broker
81
Data Guard Broker
82
Componentes Data Guard Broker
83
Bystander Standby Databases
84
Habilite o FLASHBACK DATABASE nos bancos de dados das máquinas
nerv01
,
nerv02
,
nerv03
e
nerv04
.
SQL> SELECT FLASHBACK_ON FROM V$DATABASE;SQL> ALTER DATABASE FLASHBACK ON;
Adicione uma entrada estática para o Data Guard Broker no listener.ora de cada máquina, incluindo todas
as instâncias que rodam nela, e reinicie o Listener.
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = TERR_DGMGRL) (ORACLE_HOME = /u01/app/oracle/product/18.3.0.0/db_1) (SID_NAME = TERR) ) (SID_DESC = (GLOBAL_DBNAME = URAN03_DGMGRL) (ORACLE_HOME = /u01/app/oracle/product/18.3.0.0/db_1) (SID_NAME = URAN) ) ) $ lsnrctl reload $ lsnrctl status
85
Na máquina
nerv01
, habilite o Data Guard Broker.
$ rlwrap dgmgrl SYS/Nerv2018@TERRDGMGRL> CREATE CONFIGURATION 'DRSolution' AS PRIMARY DATABASE IS TERR CONNECT IDENTIFIER IS TERR;
Por que não funciona?
Na máquina
nerv01
, adicione as outras máquinas da configuração.
DGMGRL> ADD DATABASE TERR02 AS CONNECT IDENTIFIER IS TERR02; DGMGRL> ADD DATABASE TERR03 AS CONNECT IDENTIFIER IS TERR03; DGMGRL> ADD FAR_SYNC TERR04 AS CONNECT IDENTIFIER IS TERR04;
Na máquina
nerv01
, verifique a configuração.
DGMGRL> SHOW CONFIGURATION;
Na máquina
nerv01
, habilite a configuração, acompanhando todos os Alert Logs.
DGMGRL> ENABLE CONFIGURATION;Na máquina
nerv01
, verifique a configuração.
DGMGRL> SHOW CONFIGURATION;86
Na máquina
nerv01
, verifique detalhes de um banco de dados.
DGMGRL> SHOW DATABASE TERR;DGMGRL> SHOW DATABASE VERBOSE TERR;
DGMGRL> SHOW DATABASE TERR InconsistentProperties;
DGMGRL> EDIT DATABASE TERR SET PROPERTY 'ArchiveLagTarget'=1200; DGMGRL> SHOW DATABASE TERR 'ArchiveLagTarget';
O que apareceu no Alert Log?
Na máquina
nerv01
, altere o Protection Mode.
DGMGRL> EDIT DATABASE TERR02 SET PROPERTY 'LogXptMode'='SYNC'; DGMGRL> EDIT DATABASE TERR03 SET PROPERTY 'LogXptMode'='SYNC';
O que apareceu no Alert Log?
Esses parâmetros podem ser alterados via ALTER SYSTEM?
DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;
Na máquina
nerv01
, verifique se o Protection Mode foi alterado.
DGMGRL> SHOW CONFIGURATION;
87
Na máquina
nerv01
, simule uma manutenção do ambiente.
DGMGRL> EDIT DATABASE TERR03 SET STATE='APPLY-OFF'; DGMGRL> EDIT DATABASE TERR02 SET STATE='APPLY-OFF'; DGMGRL> EDIT DATABASE TERR SET STATE=TRANSPORT-OFF;
Por que não funciona?
DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MAXPERFORMANCE; DGMGRL> EDIT DATABASE TERR SET STATE=TRANSPORT-OFF;
Na máquina
nerv01
, simule o fim da manutenção do ambiente.
DGMGRL> EDIT DATABASE TERR SET STATE=TRANSPORT-ON; DGMGRL> EDIT DATABASE TERR03 SET STATE='APPLY-ON'; DGMGRL> EDIT DATABASE TERR02 SET STATE='APPLY-ON';Na máquina
nerv03
, simule uma indisponibilidade não planejada, sempre acompanhando os Alert Logs.
SQL> SHUTDOWN ABORT;SQL> STARTUP;
Na máquina
nerv02
, simule uma indisponibilidade não planejada, sempre acompanhando os Alert Logs.
SQL> SHUTDOWN ABORT;SQL> STARTUP;
88
Na máquina
nerv01
, se não tiver nenhum erro, execute Switchover para a máquina
nerv02
.
DGMGRL> SHOW CONFIGURATION;DGMGRL> SWITCHOVER TO TERR02;
Na máquina
nerv01
, se não tiver nenhum erro, execute Switchover para a máquina
nerv01
.
DGMGRL> SHOW CONFIGURATION;DGMGRL> SWITCHOVER TO TERR;
Na máquina
nerv01
, se não tiver nenhum erro, execute Switchover para a máquina
nerv03
.
DGMGRL> SHOW CONFIGURATION;DGMGRL> SWITCHOVER TO TERR03;
O que aconteceu?
Na máquina
nerv01
, execute Switchover para a máquina
nerv01
.
DGMGRL> SHOW CONFIGURATION;DGMGRL> SWITCHOVER TO TERR;
O que aconteceu?
Para corrigir, remova e adicione o Physical Standby da máquina nerv02, e a reabilite no Broker.
DGMGRL> REMOVE DATABASE TERR02;
DGMGRL> ADD DATABASE TERR02 AS CONNECT IDENTIFIER IS TERR02; DGMGRL> ENABLE DATABASE TERR02;
89
A partir da máquina
nerv01
, converta o banco de dados da máquina
nerv02
para SNAPSHOT STANDBY.
$ rlwrap dgmgrl SYS/Nerv2018@TERR02DGMGRL> CONVERT DATABASE TERR02 TO SNAPSHOT STANDBY;
Na máquina
nerv01
, se não tiver nenhum erro, execute Switchover para a máquina
nerv02
.
DGMGRL> SWITCHOVER TO TERR02;Por que não funciona?
Converta o banco de dados da máquina
nerv02
de volta para PHYSICAL STANDBY.
DGMGRL> CONVERT DATABASE TERR02 TO PHYSICAL STANDBY;90
Na máquina
nerv01
, simule uma indisponibilidade não planejada.
SQL> SHUTDOWN ABORT;Na máquina
nerv02
, execute FAILOVER para a máquina
nerv02
.
$ rlwrap dgmgrl SYS/Nerv2018@TERR02DGMGRL> FAILOVER TO TERR02; DGMGRL> SHOW CONFIGURATION;