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
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
É isso, finalizado esses dois artigos teremos um ambiente completo e funcional no Oracle Cloud.
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.