Olá pessoal,

 

Espero que estejam bem.

 

Como já citado em outro post, todo ambiente que utiliza TDE (Transparent Data Encryption) precisa de um wallet para armazenar a encryption key.

 

O wallet é um arquivo extremamente importante e crítico para o funcionamento do banco de dados, uma vez que caso você perca esse arquivo (seja por remoção por acidente, corrupção do filesystem, etc), o seu banco de dados não poderá mais ser aberto!

 

Dessaforma,éimportantíssimofazerbackupsfrequentesdowallet,paragarantirquevocêpossuaumacópiadowalletemmaisdeumlocal.

 

Não entrarei no mérito de fazer backup para fita, cloud, etc, isso será determinado pela sua política de backup.

 

O objetivo do post é mostrar um shell script que realiza a cópia do wallet para dois destinos distintos (ambos em NFS, nesse exemplo), desta forma, você terá mais de uma cópia do wallet. Além disso, recomendo que você faça backups semanais do seu wallet.

 

Você pode agendar o script tanto via Cron quanto via DBMS_SCHEDULER (conforme citado no post aqui).

 

No exemplo deste post, nós faremos o agendamento via Cron.

 

O shell script abaixo, utiliza a localização do wallet em harded code, é possível dinamizar isso, mas isso pode ficar como melhoria do script. 🙂

 

Portanto, o primeiro passo é obter a localização do wallet. Isso é definido pelo valor do parâmetro wallet_root. Vamos executar a query abaixo para obter o valor de wallet_root:

 

SQL> select name,value from v$parameter where name='wallet_root';

NAME         VALUE
------------ ------------------------------
wallet_root  /oracle/PB1/19300/dbs/wallet

 

OK, o valor de wallet_root é /oracle/PB1/19300/dbs/wallet. Vamos chamar esse valor de WALLET_ROOT. Portanto, o wallet SEMPRE ficará na localização definida por WALLET_ROOT/tde, logo, /oracle/PB1/19300/dbs/wallet/tde.

 

A lógica do shell script fará a seguinte:

 

Criará uma variável chamada bkpdate com valor no formato YYYYMMDD, vamos supor a data de hoje: 20230531

 

Em seguida, definirá algumas variáveis, dentre elas, ORACLE_HOME e WALLET_ROOT.

 

Após isso, o script entrará no diretório $WALLET_ROOT/tde e checará se o arquivo ewallet.p12 existe no diretório. Esse script é o arquivo do wallet propriamente dito.

 

Se o arquivo for encontrado (o que esperamos que seja verdadeiro), o wallet será copiado para dois destinos NFS:

 

/oracle/backup/wallet/PB1/
/sapcd/backup/wallet/PB1/

 

O arquivo de backup (na data de hoje) será assim: ewallet.p12.20230531

 

Após a cópia, um e-mail será enviado informando que o backup foi feito. Isso só funcionará se o servidor estiver apto a enviar e-mails (esse post não cobre isso).

 

Substitua o valor de your_email@your_domain.com para o seu e-mail ou uma lista de distribuição utilizada pelo seu time.

 

Nota: esse script não considera o arquivo de autologin no backup, já que o ambiente do cliente não usa autologin. Mas, você pode customizar o script considerando essa opção.

#!/bin/bash
export bkpdate=$(date +%Y%m%d)
export ORACLE_HOME=/oracle/PB1/19300
export PATH=/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/oracle/PB1:.
export WALLET_ROOT=${ORACLE_HOME}/dbs/wallet
cd ${WALLET_ROOT}/tde
if [ -f ewallet.p12 ]
then
cp ewallet.p12/oracle/backup/wallet/PB1/ewallet.p12.${bkpdate}
cp ewallet.p12/sapcd/backup/wallet/PB1/ewallet.p12.${bkpdate}
mail-s"Backup of Wallet - ${db_name} completed."your_email@your_domain.com < /dev/null
else
mail-s"Backup of Wallet - ${db_name} ** FAILED **."your_email@your_domain.com < /dev/null
fi

 

Abaixo temos o agendamento na Cron, o script será executado todos os sábados à meia-noite:

 

00 00 * * 6 /oracle/backup/wallet/PB1/PB1_backup_wallet.sh >/dev/null 2>/dev/null

 

Espero que seja útil!

 

Um abraço!

 

Vinicius