Criação e configuração de ambiente Oracle Cloud Service – Database Cloud Service with Oracle Cloud Backup Service - Parte 2

Por José Mario Barduchi
Publicado em Janeiro 2018

Introdução

Finalizando a criação do nosso ambiente em cloud, vamos agora configurar o WALLET do nosso ambiente e depois utilizar o Oracle Backup Cloud Service que é o serviço de backup da Oracle Cloud.

Se você não leu a primeira parte desse how-to onde configuramos todo o ambiente até a criação de um database, você pode encontrá-lo aqui:

Criação e configuração de ambiente Oracle Cloud Service: Database Cloud Service – Parte 1

Em um ambiente em cloud, uma das maiores preocupações é com a segurança. Por isso o uso do WALLET nesse ambiente é natural e obrigatório.

Para fazer uso do WALLET precisamos fazer algumas configurações, mas antes um ponto importante. Se não fizermos as configurações necessárias nós receberemos erros do Oracle Database ao executarmos determinados comandos. No exemplo abaixo tentamos criar uma nova Tablespace. Veja o erro retornado:

SQL> create tablespace TESTE datafile size 1G autoextend on  next 512M maxsize 32767M;

ERROR at line 1: 
ORA-28374: typed master key not found in wallet

Isso ocorre devido ao WALLET ainda estar indefinido para a base.

select   
WRL_TYPE,  
STATUS,  
WALLET_TYPE,  
WALLET_ORDER,   
FULLY_BACKED_UP,  
CON_ID,  
WRL_PARAMETER  
from  
V$ENCRYPTION_WALLET;
WRL_TYPE  STATUS         
WALLET_TYPE  WALLET_OR  FULLY_BAC  CON_ID  WRL_PARAMETER  
--------- ------------------ -----------  --------- ---------- ------   -------------- 
FILE       OPEN_NO_MASTER_KEY UNKNOWN        SINGLE     UNDEFINED       0
/u01/app/oracle/product/12.1.0/dbhome_1/admin/

Então, vamos efetuar as configurações necessárias para utilizar o WALLET.

Adicionar ao "SQLNET.ORA" a entrada abaixo:

ENCRYPTION_WALLET_LOCATION=
  (
  SOURCE=(METHOD=FILE)
    (
    METHOD_DATA=(DIRECTORY=/u01/app/oracle/admin/WALLET/tde_wallet/$ORACLE_SID)
    )
  )

O nosso diretório que vai receber os arquivos do WALLET deve ser criado:

mkdir -p /u01/app/oracle/admin/WALLET/tde_wallet/$ORACLE_SID

Importante: Conforme o manual "Best Practices do Oracle TDE":

“Multiple databases on the same host: If there are multiple Oracle Databases installed on the same server, they must access their own individual TDE wallet. Sharing the same wallet between independent instances is not supported and can potentially lead to the loss of encrypted data.”

Ou seja, não devemos “reutilizar” o WALLET para diversos bancos de dados, ou seja, devemos criar um WALLET para cada banco de dados.

Outra coisa também importante: O ambiente na nuvem da Oracle já tem um WALLET configurado. Não devemos tentar utilizar os arquivos e diretórios do WALLET já existente. Ele não deve ser alterado.

Prosseguindo com a configuração, agora acessando o SQL Plus:

SQL> ADMINISTER KEY MANAGEMENT CREATE KEYSTORE 
    '/u01/app/oracle/admin/WALLET/tde_wallet/teste/' 
    IDENTIFIED BY aaa123;
SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN 
    IDENTIFIED BY aaa123  CONTAINER=ALL; 
SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY aaa123 
    WITH BACKUP CONTAINER=ALL; 
SQL> ADMINISTER KEY MANAGEMENT CREATE LOCAL AUTO_LOGIN 
    KEYSTORE FROM KEYSTORE 
    '/u01/app/oracle/admin/WALLET/tde_wallet/teste' 
    IDENTIFIED  BY aaa123;

Não seria necessário, mas nunca é demais lembrar, que devemos utilizar senhas extremamente fortes para a criação da KeyStore.

Se chegamos até aqui, basta fazer as conferências relativas a criação e utilização do WALLET.

SELECT 
  WRL_PARAMETER,
  STATUS,
  WALLET_TYPE 
FROM V$ENCRYPTION_WALLET;

WRL_PARAMETER                                  STATUS     WALLET_TYPE
---------------------------------------------- ---------- ----------------
/u01/app/oracle/admin/WALLET/tde_wallet/teste/ OPEN       LOCAL_AUTOLOGIN

SELECT
  KEY_ID,
  KEYSTORE_TYPE,
  CREATOR,
  CREATOR_INSTANCE_NAME,
  CREATOR_PDBNAME 
FROM V$ENCRYPTION_KEYS; 


KEY_ID                                                KEYSTORE_TYPE      CREATOR    CREATOR_INSTANCE_NAME
----------------------------------------------------  -----------------  ---------  ---------------------
AcHxmXlOXU9Yv6Kw5lfCKPUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA  SOFTWARE KEYSTORE  SYS        teste

SELECT 
  TS#, 
  ENCRYPTIONALG, 
  ENCRYPTEDTS, 
  ENCRYTPEDKEY, 
  MASTERKEYID 
FROM V$ENCRYPTED_TABLESPACES;

TS# ENCRYPT ENC  ENCRYTPEDKEY                                                      MASTERKEYID                     
--- ------- ---  ----------------------------------------------------------------  ------------------------------
7   AES128  YES  5646B1FB3E162EBD675E4179AA3B6BF1B5B73DE22F9F7C8AB36363D41CA128ED  C1F199794E5D4F58BFA2B0E657C228

Neste momento podemos fazer a criação da nossa Tablespace, pois já estamos com o WALLET habilitado.

SQL> create tablespace TESTE datafile size 1G autoextend on next 512M maxsize 32767M;

Tablespace created.

Conferindo: Identificamos que a Tablespace criada nesse momento está com a criptografia habilitada.

SELECT TABLESPACE_NAME, ENCRYPTED FROM DBA_TABLESPACES;

  TABLESPACE_NAME                 ENC
  ------------------------------  ---
  SYSTEM                          NO
  SYSAUX                          NO
  UNDOTBS1                        NO
  TEMP                            NO
  USERS                           NO
  TESTE                           YES

Criado o WALLET, podemos fazer as configurações do Oracle Backup Cloud Service.

Para isso, vamos criar o diretório temporário dos arquivos que devem ser baixados para a instalação.

mkdir -p /home/oracle/OPC
  cd /home/oracle/OPC

Para a utilização do Oracle Backup Cloud Service, precisamos fazer a instalação do “Oracle Database Backup Cloud Module”. Mais informações estão disponíveis na página de download do produto.

Download do "Oracle Database Backup Cloud Module"

http://www.oracle.com/technetwork/database/availability/oracle-cloud-backup-2162729.html

Oracle Database Backup Cloud Module

Será baixado o arquivo “opc_installer.zip”.   

Precisamos descompactar o arquivo.
unzip opc_installer.zip
Archive: opc_installer.zip  
inflating: opc_install.jar
inflating: opc_readme.txt

Se necessário, podemos consultar todas as opções no HELP.
java -jar opc_install.jar  

Criar o diretório que receberá os arquivos do WALLET do Backup Cloud Service.

mkdir -p /u01/app/oracle/admin/WALLET/tde_wallet/teste/OPC

Executar o comando abaixo para criar o Bucket na área de backup:

java -jar opc_install.jar -serviceName  Storage 
  -host  https://XXX.storage.oraclecloud.com/v1/Storage-XXX/ 
  -identityDomain XXX 
  -opcId  'usuario@zzz.com.br' 
  -opcPass 'aaa123' 
  -walletDir 
  /u01/app/oracle/admin/WALLET/tde_wallet/teste/OPC
  -libDir  /u01/app/oracle/product/12.1.0/dbhome_1/lib/

A saída esperada é algo desse tipo:

Oracle Database Cloud Backup Module Install Tool, build  2016-10-07
  Oracle Database Cloud Backup Module credentials are valid.
  Oracle Database Cloud Backup Module wallet created in directory 
     /u01/app/oracle/admin/teste/tde_wallet/OPC.
  Oracle Database Cloud Backup Module initialization file 
     /u01/app/oracle/product/12.1.0/dbhome_1/dbs/opcsoulprd.ora  created.
  Downloading Oracle Database Cloud Backup Module Software Library  from file opc_linux64.zip.
  Downloaded 26528348 bytes in 0 seconds.
  Download complete.

Com isto, temos os seguintes arquivos gerados.

ls -lrht /u01/app/oracle/admin/WALLET/tde_wallet/teste/OPC/
  -rw------- 1 oracle oinstall     0 Oct 26 12:11 cwallet.sso.lck
  -rw------- 1 oracle oinstall 2.0K Oct 26 12:11 cwallet.sso

  ls -lrht /u01/app/oracle/product/12.1.0/dbhome_1/dbs/
  -rw-r--r-- 1 oracle oinstall 175 Oct 26 12:11 opcsoulprd.ora

Vamos verificar o conteúdo do arquivo opcsoulprd.ora:

cat /u01/app/oracle/product/12.1.0/dbhome_1/dbs/opcsoulprd.ora

  OPC_HOST=https://XXX.storage.oraclecloud.com/v1/Storage-XXX/
  OPC_WALLET='LOCATION=file:/u01/app/oracle/admin/WALLET/tde_wallet/teste/OPC  CREDENTIAL_ALIAS=alias_opc'

A próxima tarefa será configurar o RMAN para realizar o backup como se estivéssemos utilizando uma TAPE.

rman target /


CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;

CONFIGURE CHANNEL DEVICE TYPE sbt
PARMS='SBT_LIBRARY=/u01/app/oracle/product/12.1.0/dbhome_1/lib/libopc.so,SBT_PARMS=
(OPC_PFILE=/u01/app/oracle/product/12.1.0/dbhome_1/dbs/opcsoulprd.ora)';
CONFIGURE DEVICE TYPE sbt BACKUP TYPE TO COMPRESSED BACKUPSET;
CONFIGURE DEFAULT DEVICE TYPE TO sbt;
CONFIGURE ENCRYPTION FOR DATABASE ON;

Devemos também acertar alguns parâmetros na base de dados

alter system set  "_backup_seq_bufcnt"=16 scope=both;
  alter system set  "_backup_seq_bufsz"=4194304 scope=both;
  alter system set  "_backup_file_bufsz"=4194304 scope=both;
  alter system set  "_backup_file_bufcnt"=16 scope=both;
  alter system set  large_pool_size=1G scope=both;

Vamos executar um backup para testar.

RUN {
  CROSSCHECK ARCHIVELOG  ALL;
  CROSSCHECK BACKUPSET;
  SQL 'ALTER SYSTEM  ARCHIVE LOG CURRENT';
  SQL 'ALTER SYSTEM  CHECKPOINT';
  BACKUP AS COMPRESSED  BACKUPSET FILESPERSET 5 DATABASE;
  BACKUP AS COMPRESSED  BACKUPSET FILESPERSET 5 DATABASE 
  PLUS ARCHIVELOG  not backed up 2 times;
  sql 'ALTER SYSTEM  ARCHIVE LOG CURRENT';
  BACKUP AS COMPRESSED  BACKUPSET FILESPERSET 10 
  ARCHIVELOG ALL 
  not backed up 2  times;
  BACKUP AS COMPRESSED  BACKUPSET CURRENT CONTROLFILE;
  BACKUP AS COMPRESSED  BACKUPSET SPFILE;
  DELETE NOPROMPT  ARCHIVELOG UNTIL TIME 'SYSDATE - 3';
  DELETE NOPROMPT OBSOLETE DEVICE TYPE DISK;
  }

Destacando alguns pontos do log do backup. O RMAN reconhece o Oracle Backup Cloud como uma TAPE.

...
  allocated channel: ORA_SBT_TAPE_1
  channel ORA_SBT_TAPE_1: SID=5 device type=SBT_TAPE
  channel ORA_SBT_TAPE_1: Oracle Database Backup Service Library  VER=3.16.9.21
  channel ORA_SBT_TAPE_1: starting compressed full datafile backup  set
  channel ORA_SBT_TAPE_1: specifying datafile(s) in backup set

  ...
  using channel ORA_SBT_TAPE_1
  channel ORA_SBT_TAPE_1: starting compressed archived log backup  set
  channel ORA_SBT_TAPE_1: specifying archived log(s) in backup set

  ...
  channel ORA_SBT_TAPE_1: backup set complete, elapsed time:  00:00:07

Sendo assim, qualquer operação realizada via RMAN pode ser executada. Podemos, por exemplo, fazer um restore validate para verificar o backup executado.

RUN {
  RESTORE VALIDATE CHECK  LOGICAL DATABASE ARCHIVELOG ALL;
  }

Ou fazer um Duplicate. Enfim, é um backup comum, porém está sendo gerenciado e armazenado no Oracle Backup Cloud Service.

Para verificar a utilização da área de backup, podemos utilizar o Dashboard do serviço de Backup

Oracle Backup Cloud Service

É isso, finalizado esses dois artigos teremos um ambiente completo e funcional no Oracle Cloud.

Fontes:

https://docs.oracle.com/en/cloud/paas/db-backup-cloud/index.html

a/tech/docs/technical-resources/twp-transparent-data-encryption-bestpractices.pdf

José Mario Barduchi é um profissional com 18 anos de experiência em coordenação de equipes de DBA's/ATG's em consultoria Oracle Partner. Possui várias certificações Oracle. Atua em definição de arquiteturas para projetos de banco de dados, criação e administração de bases em Oracle Cloud. Articulista em diversos blogs e um dos organizadores dos eventos "DBA Brasil". Atualmente é DBA de uma das maiores redes de hospitais do Brasil.

Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.