Oracle Data Guard 12cR1
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
Alta Disponibilidade
3
• Confiança
• Recuperabilidade
• Detecção de erros em tempo hábil
• Continuidade operacional
Características da Alta Disponibilidade
4
• 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)
Análise de Alta Disponibilidade
5
• Camada 1 (Faturamento, Vendas)
• Camada 2 (Compras, Estoque)
• Camada 3 (BI, Desenvimento)
Sistemas e Alta Disponibilidade
6
• 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)
Custos e Alta Disponibilidade
7
Implantação de Alta Disponibilidade
8
• 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
Soluções Oracle para Alta Disponibilidade
9
• 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
Indisponibilidades Planejadas
10
• 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
Indisponibilidades não Planejadas
11
High Availability Overview:
http://docs.oracle.com/database/121/HAOVW/toc.htm High Availability Best Practices:
http://docs.oracle.com/database/121/HABPT/toc.htm
Maiores informações
12
Oracle Data Guard: Evolução
13
• 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
New Features Data Guard 10.1
14
• 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
• Data Guard: 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
New Features Data Guard 10.2
15
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
New Features Data Guard 11.1
16
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
New Features Data Guard 11.2
17
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
New Features Data Guard 12.1.0.1
18
Oracle Data Guard - Conceitos
19
Primary database
Physical standby database
Logical standby database
Snapshot Standby Database
Configurações
20
Redo Transport Services
Apply Services
Role Transitions
Serviços
21
Switchover
Switchback
Failover
Reinstate
Convert
Role Transitions
22
Enterprise Manager / Grid Control / Cloud Control
DGMGRL
SQL*Plus
Initialization Parameters
Interfaces
23
Maximum Performance
Maximum Availability
Maximum Protection
Modos de Proteção
24
Oracle RAC
Flashback Database
RMAN
Tecnologias Complementares
25
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.
Por que Data Guard?
26
Lab 1: Standby Manual
27
Na máquina nerv01, crie um banco de dados com o nome “SeuNome01”.
$ dbca -silent -createDatabase -templateName New_Database.dbt -gdbName TERRA01 -sysPassword Nerv2015 -systemPassword Nerv2015 -characterset WE8ISO8859P1
-nationalCharacterSet AL16UTF16 -emConfiguration NONE -databaseType OLTP Na máquina nerv01, coloque o banco de dados em modo ARCHIVELOG.
Na máquina nerv01, Habilite o FORCE LOGGING.
SQL> ALTER DATABASE FORCE LOGGING;
Na máquina nerv01, habilite o backup automático de CONTROLFILE.
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
Na máquina nerv01, execute um backup:
RMAN> BACKUP DATABASE;
Copie para a máquina nerv02 os BACKUPPIECEs criados pelo backup executado na máquina nerv01, para qualquer diretório.
Copie o SPFILE da máquina nerv01 para a máquina nerv02, em $ORACLE_HOME/dbs.
Na máquina nerv02, crie todos os diretórios utilizados por parâmetros no SPFILE.
Lab 1.1: Standby Manual
28
Na máquina nerv02, inicie a instância em NOMOUNT.
RMAN> STARTUP NOMOUNT;
Na máquina nerv02, restaure o CONTROLFILE.
RMAN> RESTORE CONTROLFILE FROM ‘/home/oracle/o1_mf_s_775375054_7msfqgo1_.bkp’;
Na máquina nerv02, altere a instância para o estágio MOUNT.
RMAN> ALTER DATABASE MOUNT;
Na máquina nerv02, catalogue o BACKUPPIECE do BACKUP DATABASE.
RMAN> CATALOG BACKUPPIECE '/home/oracle/TAG20120216T055648.bkp';
Na máquina nerv02, restaure o banco de dados.
RMAN> RESTORE DATABASE;
Na máquina nerv02, abra a instância em READ ONLY.
RMAN> ALTER DATABASE OPEN READ ONLY;
Por que não funciona?
Na máquina nerv02, execute RECOVER no banco de dados.
RMAN> RECOVER DATABASE;
Por que não funciona?
Lab 1.2: Standby Manual
29
Na máquina nerv01, verifique os ARCHIVED REDO LOGs gerados antes e depois do BACKUP DATABASE.
RMAN> ALTER SYSTEM SWITCH LOGFILE;
RMAN> ALTER SYSTEM SWITCH LOGFILE;
RMAN> ALTER SYSTEM SWITCH LOGFILE;
RMAN> LIST ARCHIVELOG ALL;
Na máquina nerv01, copie os ARCHIVED REDO LOGs para a máquina nerv02, para qualquer diretório.
Na máquina nerv02, catalogue os ARCHIVED REDO LOGs copiados.
RMAN> CATALOG ARCHIVELOG '/home/oracle/o1_mf_1_70_7mshox4j_.arc';
Na máquina nerv02, execute RECOVER no banco de dados.
RMAN> RECOVER DATABASE;
Por que continua com erro?
Na máquina nerv02, abra a instância em READ ONLY.
RMAN> ALTER DATABASE OPEN READ ONLY;
Lab 1.3: Standby Manual
30
Na máquina nerv01, gere mais ARCHIVED REDO LOGs RMAN> ALTER SYSTEM SWITCH LOGFILE;
RMAN> ALTER SYSTEM SWITCH LOGFILE;
RMAN> ALTER SYSTEM SWITCH LOGFILE;
Na máquina nerv01, copie os ARCHIVED REDO LOGs para a máquina nerv02, para o mesmo diretório que está na máquina nerv01.
Na máquina nerv02, execute RECOVER no banco de dados.
RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;
RMAN> RECOVER DATABASE;
Por que continua com erro?
Na máquina nerv02, abra a instância em READ ONLY.
RMAN> ALTER DATABASE OPEN READ ONLY;
Lab 1.4: Standby Manual
31
Physical Standby
32
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.
Por que?
33
● 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)
● 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
Parâmetros
34
AFFIRM / NOAFFIRM
ALTERNATE
COMPRESSION
DB_UNIQUE_NAME
DELAY
LOCATION and SERVICE
MANDATORY
MAX_CONNECTIONS
MAX_FAILURE
NET_TIMEOUT
NOREGISTER
REOPEN
SYNC / ASYNC
TEMPLATE
VALID_FOR
LOG_ARCHIVE_DEST_n
35
Lab 2: Physical Standby
36
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, crie um arquivo (se não tiver um) listener.ora e inicie-o.
Na máquina nerv01, crie uma entrada no tnsnames.ora para as instâncias das máquinas nerv01 e nerv02.
TERRA01=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=nerv01) (PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=TERRA01)(SERVER=DEDICATED))) TERRA02=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=nerv02) (PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=TERRA02)(SERVER=DEDICATED))) Na máquina nerv01, copie o tnsnames.ora para a máquina nerv02.
Na máquina nerv01, copie o listener.ora para a máquina nerv02.
Na máquina nerv02, corrija o listener.ora, e inicie o LISTENER.
Na máquina nerv02, veja qual o SERVICE que o LISTENER provê.
Na máquina nerv01, copie o PASSWORD FILE para a máquina nerv02.
Teste a resolução de nomes (ping) e o Oracle Net (tnsping) entre as duas máquinas.
Por que não funciona?
Na máquina nerv02, passe a instância ao estado SHUTDOWN.
Lab 2.1 (Cold Filesystem Backup)
37
Nas máquinas nerv01 e nerv02, crie um diretório para armazenar ARCHIVED REDO LOGs.
Na máquina nerv01, altere os parâmetros abaixo.
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(TERRA01,TERRA02)';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1= 'LOCATION=/home/oracle/archives/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TERRA01';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=
'SERVICE=TERRA02 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TERRA02';
Na máquina nerv01, copie o SPFILE para a máquina nerv02.
Na máquina nerv01, crie um STANDBY CONTROLFILE.
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/stbCF.ctl';
Na máquina nerv01, copie o STANDBY CONTROLFILE para a máquina nerv02, para os locais indicados no SPFILE.
Lab 2.2 (Cold Filesystem Backup)
38
Na máquina nerv01, passe a instância ao estado SHUTDOWN, e copie todos os DATAFILEs para a máquina nerv02, para o mesmo diretório da máquina nerv01.
Na máquina nerv02, inicie a instância, deixando-a no estado NOMOUNT, e altere o seguinte parâmetro.
SQL> ALTER SYSTEM SET DB_UNIQUE_NAME=TERRA02 SCOPE=SPFILE;
Na máquina nerv02, reinicie a instância, deixando-a em estado NOMOUNT.
Na máquina nerv02, veja qual o SERVICE que o LISTENER provê.
Na máquina nerv02, altere os seguintes parâmetros.
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1= 'LOCATION=/home/oracle/archives/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TERRA02';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2= '';
SQL> ALTER SYSTEM SET FAL_SERVER=TERRA01;
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
Na máquina nerv01, inicie a instância, deixando-a em estado OPEN.
Na máquina nerv01, gere alguns ARCHIVED REDO LOGs.
Nas máquinas nerv01 e nerv02, acompanhe o Alert Log.
Lab 2.3 (Cold Filesystem Backup)
39
Na máquina nerv02, passe a instância ao estágio MOUNT.
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
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.
Lab 2.4 (Cold Filesystem Backup)
40
Modo ARCHIVELOG.
FORCE LOGGING.
Resolução de nomes bilateral.
Resolução de SQL*Net bilateral.
Autenticação via PASSWORD FILE.
Adequação de parâmetros no PRIMARY.
Adequação de parâmetros no STANDBY.
Criação e cópia de STANDBY CONTROLFILE.
Backup e Restore.
No Physical Standby, MOUNT em modo STANDBY DATABASE.
Criação de STANDBY REDO LOGs.
No Physical Standby, execução de RECOVER MANAGED STANDBY.
Checklist para Physical Standby
41
Na máquina nerv02, passe a instância ao estágio SHUTDOWN.
Na máquina nerv01, crie um STANDBY CONTROLFILE.
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/stbCF.ctl';
Na máquina nerv01, copie o STANDBY CONTROLFILE para a máquina nerv02, para os locais indicados no SPFILE.
Na máquina nerv01, passe o banco de dados ao modo BEGIN BACKUP.
SQL> ALTER DATABASE BEGIN BACKUP;
Na máquina nerv01, copie por scp todos os DATAFILEs.
Na máquina nerv01, finalize o modo BEGIN BACKUP.
SQL> ALTER DATABASE END BACKUP;
Lab 3.1 (User Managed Backup)
42
Na máquina nerv02, inicie a instância, deixando-a em estado NOMOUNT;
Na máquina nerv02, passe a instância ao estágio MOUNT.
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
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.
Lab 3.2 (User Managed Backup)
43
Na máquina nerv02, passe a instância ao estágio SHUTDOWN.
Na máquina nerv01, crie um STANDBY CONTROLFILE.
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/stbCF.ctl';
Na máquina nerv01, copie o STANDBY CONTROLFILE para a máquina nerv02, para os locais indicados no SPFILE.
Na máquina nerv01, execute um backup do banco de dados pelo RMAN.
RMAN> BACKUP DATABASE;
Copie para a máquina nerv02 os BACKUPPIECEs criados pelo backup executado na máquina nerv01, para qualquer diretório.
Lab 4.1 (RMAN Hot Backup)
44
Na máquina nerv02, inicie a instância em NOMOUNT.
RMAN> STARTUP NOMOUNT;
Na máquina nerv02, altere a instância para o estágio MOUNT.
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
Na máquina nerv02, catalogue o BACKUP PIECE do BACKUP DATABASE.
RMAN> CATALOG BACKUPPIECE '/home/oracle/TAG20120216T055648.bkp';
Na máquina nerv02, restaure o banco de dados.
RMAN> RESTORE DATABASE;
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.
Lab 4.2 (RMAN Hot Backup)
45
Na máquina nerv02, passe a instância ao estágio SHUTDOWN.
Na máquina nerv01, execute um backup do banco de dados pelo RMAN.
RMAN> BACKUP DATABASE;
Copie para a máquina nerv02 os BACKUPPIECEs criados pelo backup executado na máquina nerv01, para os mesmos diretórios.
$ scp -Cr /u01/app/oracle/fast_recovery_area/* nerv02:/u01/app/oracle/fast_recovery_area/
Na máquina nerv02, reinicie a instância, deixando-a em estado NOMOUNT.
SQL> STARTUP NOMOUNT;
Na máquina nerv01, conecte-se com RMAN das duas instâncias e execute a duplicação.
$ rman TARGET / AUXILIARY=SYS/Nerv2015@TERRA02
RMAN> DUPLICATE TARGET DATABASE FOR STANDBY DORECOVER NOFILENAMECHECK;
Lab 5.1 (RMAN Duplication)
46
Na máquina nerv02, altere os seguintes parâmetros.
SQL> ALTER SYSTEM SET DB_UNIQUE_NAME=TERRA02 SCOPE=SPFILE;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1= 'LOCATION=/home/oracle/archives/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TERRA02' SCOPE=SPFILE;
SQL> ALTER SYSTEM SET FAL_SERVER=TERRA01 SCOPE=SPFILE;
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SCOPE=SPFILE;
Na máquina nerv02, reinicie a instância, deixando-a em estado NOMOUNT;
Na máquina nerv02, passe a instância ao estágio MOUNT.
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
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.
Lab 5.2 (RMAN Duplication)
47
Na máquina nerv02, passe a instância ao estágio SHUTDOWN.
Na máquina nerv02, reinicie a instância, deixando-a em estado NOMOUNT.
SQL> STARTUP NOMOUNT;
Na máquina nerv01, conecte-se com RMAN das duas instâncias e execute a duplicação.
$ rman TARGET SYS/Nerv2015 AUXILIARY=SYS/Nerv2015@TERRA02
RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK;
Lab 6.1 (RMAN Active Duplication)
48
Na máquina nerv02, altere os seguintes parâmetros.
SQL> ALTER SYSTEM SET DB_UNIQUE_NAME=TERRA02 SCOPE=SPFILE;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1= 'LOCATION=/home/oracle/archives/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TERRA02' SCOPE=SPFILE;
SQL> ALTER SYSTEM SET FAL_SERVER=TERRA01 SCOPE=SPFILE;
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SCOPE=SPFILE;
Na máquina nerv02, passe a instância ao estágio MOUNT.
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
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.
Lab 6.2 (RMAN Active Duplication)
49
Modos de Proteção
50
- Maximum Performance (NOAFFIRM, ASYNC) - Maximum Availability (AFFIRM, SYNC)
- Maximum Protection (AFFIRM, SYNC)
Modos de Proteção
51
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 52428800;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Lab 7.1: Modos de Proteção
52
Na máquina nerv01, verifique qual o PROTECTION MODE atual.
SQL> SELECT PROTECTION_MODE FROM V$DATABASE;
Na máquina nerv01, crie uma tabela de testes e duplique-a 8 vezes, contando o tempo.
SQL> SET TIMING ON
SQL> CREATE TABLE T AS SELECT * FROM ALL_OBJECTS;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> COMMIT;
Lab 7.2: Modos de Proteção
53
Na máquina nerv01, altere o PROTECTION MODE.
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=
'SERVICE=TERRA02 SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TERRA02';
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, remova a tabela teste e refaça o teste, comparando o tempo.
SQL> SET TIMING ON SQL> DROP TABLE T;
SQL> CREATE TABLE T AS SELECT * FROM ALL_OBJECTS;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> COMMIT;
Lab 7.3: Modos de Proteção
54
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, remova a tabela teste e refaça o teste, comparando o tempo.
SQL> SET TIMING ON SQL> DROP TABLE T;
SQL> CREATE TABLE T AS SELECT * FROM ALL_OBJECTS;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> COMMIT;
Lab 7.4: Modos de Proteção
55
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> DROP TABLE T;
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=TERRA02 ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TERRA02';
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.
Lab 7.5: Modos de Proteção
56
Switchover
57
Na máquina nerv01, altere os seguintes parâmetros.
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
SQL> ALTER SYSTEM SET FAL_SERVER=TERRA02;
Na máquina nerv02, altere os seguintes parâmetros.
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=TERRA01 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TERRA01';
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> SHUTDOWN ABORT;
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;
Lab 8.1: Switchover
58
Na máquina nerv01, inicie o RECOVER como um STANDBY.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Na máquina nerv01, adicione STANDBY REDO LOGs.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Na máquina nerv02, gere alguns ARCHIVED REDO LOGs e acompanhe o Alert Log.
Lab 8.2: Switchover
59
Switchback
60
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> SHUTDOWN ABORT;
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.
Lab 9.1: Switchback
61
Na máquina nerv01, execute o SWITCHOVER com a sintaxe 12c.
SQL> ALTER DATABASE SWITCHOVER TO TERRA02 VERIFY;
SQL> ALTER DATABASE SWITCHOVER TO TERRA02;
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, execute o SWITCHBACK com a sintaxe 12c.
SQL> ALTER DATABASE SWITCHOVER TO TERRA01 VERIFY;
SQL> ALTER DATABASE SWITCHOVER TO TERRA01;
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;
Lab 9.2: Switchback
62
Failover
63
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;
Lab 10.1: Failover
64
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;
Lab 10.2: Failover
65
Reinstate
66
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
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;
Depois de concluir o Reinstate, execute o Switchback.
Lab 11.1: Reinstate
67
Logical Standby
68
Logical Standby
69
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.
Por que?
70
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
Identity columns
Tipos de dados não suportados
71
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
72
SQL> EXECUTE DBMS_LOGSTDBY.SKIP (STMT => 'DML', SCHEMA_NAME => 'HR', OBJECT_NAME => 'EMPLOYEES');
SQL> EXECUTE DBMS_LOGSTDBY.SKIP (STMT => 'SCHEMA_DDL', SCHEMA_NAME => 'HR', OBJECT_NAME => 'EMPLOYEES');
SQL> EXECUTE DBMS_LOGSTDBY.UNSKIP(STMT => 'DML', SCHEMA_NAME => 'HR', OBJECT_NAME => 'EMPLOYEES');
SQL> EXECUTE DBMS_LOGSTDBY.UNSKIP(STMT => 'SCHEMA_DDL', SCHEMA_NAME =>
'HR', OBJECT_NAME => 'EMPLOYEES');
Controle
73
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
SQL> ALTER SESSION DISABLE GUARD;
SQL> CREATE INDEX EMP_SOUNDEX ON SCOTT.EMP(SOUNDEX(ENAME));
SQL> ALTER SESSION ENABLE GUARD;
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
Adaptações
74
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
75
Lab 12: Logical Standby
76
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 (TERRA03) para a instância da máquina nerv03.
Na máquina nerv01, copie o tnsnames.ora para a máquina nerv03.
Na máquina nerv01, copie o tnsnames.ora para a máquina nerv02.
Na máquina nerv01, copie o listener.ora para a máquina nerv03.
Na máquina nerv03, corrija o listener.ora, e inicie o LISTENER.
Na máquina nerv01, copie o PASSWORD FILE para a máquina nerv03.
Na máquina nerv03, crie um diretório para armazenar ARCHIVED REDO LOGs.
Teste a resolução de nomes (ping) e o Oracle Net (tnsping) entre as três máquinas.
Por que não funciona?
Lab 12.1: Logical Standby
77
Na máquina nerv01, copie o SPFILE para a máquina nerv03.
Na máquina nerv03, crie todos os diretórios mencinados em parâmetros do SPFILE.
Na máquina nerv03, reinicie a instância, deixando-a em estado NOMOUNT.
SQL> STARTUP NOMOUNT;
SQL> ALTER SYSTEM SET SERVICE_NAMES=TERRA03 SCOPE=SPFILE;
SQL> ALTER SYSTEM SET DB_UNIQUE_NAME=TERRA03 SCOPE=SPFILE;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP NOMOUNT;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/archives/
VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TERRA03';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=TERRA01 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TERRA01';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='LOCATION=/home/oracle/archives_stb/
VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=TERRA03';
SQL> ALTER SYSTEM SET FAL_SERVER=TERRA01;
Lab 12.2: Logical Standby
78
Na máquina nerv01, conecte-se com RMAN das duas instâncias e execute a duplicação.
$ rman TARGET SYS/Nerv2015 AUXILIARY=SYS/Nerv2015@TERRA03
RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK;
Na máquina nerv01, habilite o terceiro local de archives.
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='SERVICE=TERRA03 ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TERRA03';
Por que não funciona?
Na máquina nerv03, habilite o RECOVER e espere a instância estar sincronizada.
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP NOMOUNT;
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Lab 12.3: Logical Standby
79
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.
Lab 12.4: Logical Standby
80
Na máquina nerv01, crie uma tabela de teste.
$ sqlplus / AS SYSDBA SQL> DROP TABLE T;
SQL> 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.
$ sqlplus / AS SYSDBA
SQL> CREATE USER SCOTT IDENTIFIED BY TIGER ACCOUNT UNLOCK;
SQL> ALTER USER SCOTT QUOTA UNLIMITED ON USERS;
SQL> GRANT CONNECT, RESOURCE TO SCOTT;
SQL> CONN SCOTT/TIGER
SQL> CREATE TABLE T AS SELECT * FROM ALL_OBJECTS;
SQL> SELECT COUNT(*) FROM T;
Lab 12.5: Logical Standby
81
Active Data Guard
82
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 banco de dados está acessível para leitura.
SQL> CONN SCOTT/TIGER
SQL> SELECT COUNT(*) FROM T;
Na máquina nerv01, faça uma alteração na tabela de testes.
SQL> CONN SCOTT/TIGER
SQL> 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.
SQL> CONN SCOTT/TIGER
SQL> SELECT COUNT(*) FROM T;
Lab 13.1: Active Data Guard
83
Na máquina nerv02, inicie o RECOVER, com o banco de dados para leitura.
SQL> CONN / AS SYSDBA
SQL> 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.
SQL> CONN SCOTT/TIGER
SQL> SELECT COUNT(*) FROM T;
Lab 13.2: Active Data Guard
84
Snapshot Standby
85
Vantagen
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.
Por que?
86
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;
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.
SQL> CONN SCOTT/TIGER
SQL> SELECT COUNT(*) FROM T;
SQL> TRUNCATE TABLE T;
SQL> SELECT COUNT(*) FROM T;
Na máquina nerv02, reverta o SNAPSHOT STANDBY para PHYSICAL STANDBY.
SQL> 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;
Lab 14.1: Snapshot Standby
87
Na máquina nerv02, verifique que a alteração agora foi feita.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL> ALTER DATABASE OPEN;
SQL> CONN SCOTT/TIGER
SQL> SELECT COUNT(*) FROM T;
Na máquina nerv02, retorne a aplicação de ARCHIVEs.
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP NOMOUNT;
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Lab 14.2: Snapshot Standby
88
Cascade Standby
89
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.
Por que não funciona?
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.
Na máquina nerv01, faça uma alteração na tabela de testes e veja se é propagada para a máquina nerv03.
Lab 15.1: Cascade Standby
90
Far Sync
91
Far Sync
92
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 nerv01.
Na máquina nerv01, crie uma entrada no tnsnames.ora para a instância da máquina nerv04.
Na máquina nerv01, copie o tnsnames.ora para a máquina nerv02.
Na máquina nerv01, copie o tnsnames.ora para a máquina nerv03.
Na máquina nerv01, copie o tnsnames.ora para a máquina nerv04.
Na máquina nerv01, copie o listener.ora para a máquina nerv04.
Na máquina nerv04, corrija o listener.ora, e inicie o LISTENER.
Na máquina nerv01, copie o PASSWORD FILE para a máquina nerv04.
Na máquina nerv04, crie um diretório para armazenar ARCHIVED REDO LOGs.
Teste a resolução de nomes (ping) e o Oracle Net (tnsping) entre as três máquinas.
Por que não funciona?
Lab 16.1: Far Sync
93
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';
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=TERRA04 ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TERRA04';
Por que não funciona?
Lab 16.2: Far Sync
94
Na máquina nerv01, copie o SPFILE para a máquina nerv04.
Na máquina nerv04, crie todos os diretórios mencinados em parâmetros do SPFILE.
Na máquina nerv04, habilite a replicação para a máquina nerv02.
SQL> STARTUP NOMOUNT;
SQL> ALTER SYSTEM SET SERVICE_NAMES=TERRA04 SCOPE=SPFILE;
SQL> ALTER SYSTEM SET DB_UNIQUE_NAME=TERRA04 SCOPE=SPFILE;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/archives/
VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TERRA04';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=TERRA02 ASYNC VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TERRA02';
SQL> ALTER SYSTEM SET FAL_SERVER=TERRA01;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;
SQL> ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;
Na máquina nerv02, altere a solicitação de ARCHIVEs para a máquina nerv04.
SQL> ALTER SYSTEM SET FAL_SERVER=TERRA04;
Lab 16.3: Far Sync
95
Data Guard Broker
96
Data Guard Broker
97
Data Guard Broker
98
Componentes Data Guard Broker
99
Bystander Standby Databases
100
Habilite o FLASHBACK DATABASE em todos os bancos de dados.
Adicione uma entrada estática para o Data Guard Broker no listener.ora de cada máquina.
LISTENER =
(DESCRIPTION_LIST = (DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = nerv01.localdomain)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
) )
SID_LIST_LISTENER = (SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = MARC01_DGMGRL)
(ORACLE_HOME = /u01/app/oracle/product/12.1.0.2/db_1) (SID_NAME = MARC01)
)
(SID_DESC =
(GLOBAL_DBNAME = EDGAR03_DGMGRL)
(ORACLE_HOME = /u01/app/oracle/product/12.1.0.2/db_1) (SID_NAME = EDGAR01)
) )
Lab 17.1: Data Guard Broker
101
Na máquina nerv01, habilite o Data Guard Broker.
[oracle@nerv01 ~]$ dgmgrl SYS/Nerv2015@TERRA01
DGMGRL> CREATE CONFIGURATION 'DRSolution' AS PRIMARY DATABASE IS TERRA01 CONNECT IDENTIFIER IS TERRA01;
Por que não funciona?
Na máquina nerv01, adicione as outras máquinas da configuração.
DGMGRL> ADD DATABASE TERRA02 AS CONNECT IDENTIFIER IS TERRA02;
DGMGRL> ADD DATABASE TERRA03 AS CONNECT IDENTIFIER IS TERRA03;
Na máquina nerv01, verifique a configuração.
DGMGRL> SHOW CONFIGURATION;
Na máquina nerv01, habilite a configuração.
DGMGRL> ENABLE CONFIGURATION;
Na máquina nerv01, verifique a configuração.
DGMGRL> SHOW CONFIGURATION;
Lab 17.2: Data Guard Broker
102
Na máquina nerv01, verifique detalhes de um banco de dados.
DGMGRL> SHOW DATABASE VERBOSE TERRA01;
DGMGRL> EDIT DATABASE TERRA01 SET PROPERTY 'ArchiveLagTarget'=1200;
DGMGRL> SHOW DATABASE TERRA01 'ArchiveLagTarget';
Na máquina nerv01, altere o Protection Mode.
DGMGRL> EDIT DATABASE TERRA02 SET PROPERTY 'LogXptMode'='SYNC';
DGMGRL> EDIT DATABASE TERRA03 SET PROPERTY 'LogXptMode'='SYNC';
Você pode alterar estes parâmetros com ALTER SYSTEM SET?
DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;
Na máquina nerv01, verifique se o Protection Mode foi alterado.
DGMGRL> SHOW CONFIGURATION;
Lab 17.3: Data Guard Broker
103
Na máquina nerv01, simule uma manutenção do ambiente.
DGMGRL> EDIT DATABASE TERRA03 SET STATE='APPLY-OFF';
DGMGRL> EDIT DATABASE TERRA02 SET STATE='APPLY-OFF';
DGMGRL> EDIT DATABASE TERRA01 SET STATE=TRANSPORT-OFF;
Por que não funciona?
Na máquina nerv01, simule o fim da manutenção do ambiente.
DGMGRL> EDIT DATABASE TERRA01 SET STATE=TRANSPORT-ON;
DGMGRL> EDIT DATABASE TERRA03 SET STATE='APPLY-ON';
DGMGRL> EDIT DATABASE TERRA02 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;
Lab 17.4: Data Guard Broker
104
Na máquina nerv01, se não tiver nenhum erro, execute Switchover para a máquina nerv02.
DGMGRL> SHOW CONFIGURATION;
DGMGRL> SWITCHOVER TO TERRA02;
Na máquina nerv01, se não tiver nenhum erro, execute Switchover para a máquina nerv01.
DGMGRL> SHOW CONFIGURATION;
DGMGRL> SWITCHOVER TO TERRA01;
Na máquina nerv01, se não tiver nenhum erro, execute Switchover para a máquina nerv03.
DGMGRL> SHOW CONFIGURATION;
DGMGRL> SWITCHOVER TO TERRA03;
Por que não funciona?
Na máquina nerv01, se não tiver nenhum erro, execute Switchover para a máquina nerv01.
DGMGRL> SHOW CONFIGURATION;
DGMGRL> SWITCHOVER TO TERRA01;
O que aconteceu?
Para corrigir, recrie o Physical Standby na máquina, nerv02, e a reabilite no Broker.
DGMGRL> REMOVE DATABASE TERRA02;
DGMGRL> ADD DATABASE TERRA02 AS CONNECT IDENTIFIER IS TERRA02;
DGMGRL> ENABLE DATABASE TERRA02;
Lab 17.5: Data Guard Broker
105
A partir da máquina nerv01, converta o banco de dados da máquina nerv02 para SNAPSHOT STANDBY.
[oracle@nerv01 ~]$ dgmgrl SYS/Nerv2014@TERRA02
DGMGRL> CONVERT DATABASE TERRA02 TO SNAPSHOT STANDBY;
Na máquina nerv01, se não tiver nenhum erro, execute Switchover para a máquina nerv02.
DGMGRL> SWITCHOVER TO TERRA02;
Por que não funciona?
Converta o banco de dados da máquina nerv02 de volta para PHYSICAL STANDBY.
DGMGRL> CONVERT DATABASE TERRA02 TO PHYSICAL STANDBY;
Lab 17.6: Data Guard Broker
106
Na máquina nerv01, simule uma indisponibilidade não planejada.
SQL> SHUTDOWN ABORT;
Na máquina nerv02, execute FAILOVER para a máquina nerv02.
[oracle@nerv02 ~]$ dgmgrl SYS/Nerv2014@TERRA02 DGMGRL> FAILOVER TO TERRA02;
DGMGRL> SHOW CONFIGURATION;
Reative a instância na máquina nerv01.
EXECUTE o REISNTATE do banco da máquina nerv01.
DGMGRL> REINSTATE DATABASE TERRA01;
EXECUTE o REISNTATE do banco da máquina nerv03.
DGMGRL> REINSTATE DATABASE TERRA03;
Faça o SWITCHOVER de volta para a máquina nerv01.
Lab 17.7: Data Guard Broker
107
Fast-Start Failover
108
Lights out administration
109
Lights out administration
● Produção:
srvctl add service -d TERRA01 -s OLTP -l PRIMARY -w 1 -z 10
srvctl add service -d TERRA01 -s OLAP -l PHYSICAL_STANDBY -w 1 -z 10
● Standby:
srvctl add service -d TERRA02 -s OLTP -l PRIMARY -w 1 -z 10
srvctl add service -d TERRA02 -s OLAP -l PHYSICAL_STANDBY -w 1 -z 10
● Client tnsnames.ora:
OLTP =
(DESCRIPTION=
(LOAD_BALANCE=OFF) (FAILOVER=ON)
(ADDRESS=(PROTOCOL=TCP)(HOST=nerv01)(PORT=1521)) (ADDRESS=(PROTOCOL=TCP)(HOST=nerv02)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=OLTP))
)
● Failover pela aplicação:
SQL> DBMS_DG.INITIATE_FS_FAILOVER
110
Confira se os bancos da máquina nerv01 e nerv02 estão com FLASHBACK ativado.
Na máquina nerv01, configure o Fast-Start Failover.
DGMGRL> EDIT CONFIGURATION SET PROPERTY FastStartFailoverLagLimit=600;
DGMGRL> EDIT CONFIGURATION SET PROPERTY FastStartFailoverThreshold = 30;
DGMGRL> EDIT CONFIGURATION SET PROPERTY FastStartFailoverAutoReinstate = TRUE;
DGMGRL> EDIT CONFIGURATION SET PROPERTY FastStartFailoverPmyShutdown = TRUE;
DGMGRL> EDIT DATABASE TERRA01 SET PROPERTY FastStartFailoverTarget=TERRA02;
DGMGRL> ENABLE FAST_START FAILOVER;
DGMGRL> SHOW CONFIGURATION;
DGMGRL> SHOW FAST_START FAILOVER;
Copie o tnsnames.ora da máquina nerv01 para o Client na máquina nerv04.
Na máquina nerv04, conecte-se na máquina nerv02 e inicie o OBSERVER.
oracle@nerv04 ~]$ dgmgrl SYS/Nerv2014@TERRA02 DGMGRL> START OBSERVER;
Lab 18.1: Fast-Start Failover
111
Na máquina nerv01, simule uma indisponibilidade não planejada.
SQL> SHUTDOWN ABORT;
Inicie novamente a instância da máquina nerv01.
Execute o SWITCHOVER de volta para a máquina nerv01.