Introdução
Quando emitimos o comando zdmcli migrate database, o ZDM solicita algumas credenciais antes de iniciar o JOB de migração (ou de avaliação). A quantidade de credenciais solicitadas depende do cenário de migração, mas em um cenário simples de migração física, pode envolver a senha do usuário SYS do banco sendo migrado, a API Key do Object Storage e a senha do usuário root no servidor de origem.
Este post demonstra como configurar o ZDM para armazenar essas senhas em wallet no ZDM Node, de uma forma segura e que nos permite repetir os comandos com ZDMCLI sem ser solicitados a informar as senhas a cada novo JOB.
Para simplificar os comandos, adicione o diretório do ZDM_HOME/bin na variável PATH:
export PATH=$ZDM_HOME/bin:$PATH
Crie um diretório para cada wallet. Neste exemplo, estou criando abaixo do ZDM_BASE:
mkdir -p $ZDM_BASE/wallet/sysuser
mkdir -p $ZDM_BASE/wallet/ossuser
Wallet Para Senha do SYS
Com o orapki, crie uma wallet do tipo AUTO_LOGIN para a senha de usuário SYS:
orapki wallet create -wallet $ZDM_BASE/wallet/sysuser -auto_login_only
Após criar a wallet, adicione uma nova CREDENTIAL com o utilitário mkstore. Quando solicitado por uma senha / segredo, deve ser informada a senha do usuário SYS do banco de dados que será migrado:
$ mkstore -wrl $ZDM_BASE/wallet/sysuser -createCredential store sysuser
Wallet Para o Auth Token do Object Storage na OCI
Com o orapki, crie uma wallet do tipo AUTO_LOGIN para o Auth Token da OCI.
orapki wallet create -wallet $ZDM_BASE/wallet/ossuser -auto_login_only
Adicione uma nova CREDENTIAL com o utilitário mkstore. Quando solicitado por uma senha / segredo, deve ser informada o Auth Token criado na conta OCI para permitir acesso ao Object Storage:
mkstore -wrl $ZDM_BASE/wallet/ossuser -createCredential store ossuser
Exemplo de Como Utilizar
Com as wallets criadas e configuradas, os comandos zdmcli migrate database (incluindo -eval) podem ser executados com os parâmetros -sourcesyswallet e -osswallet, conforme exemplo a seguir:
zdmcli migrate database \
-rsp /home/zdmuser/orcl_online_physical.rsp \
-sourcenode lab01 \
-sourcedb ORCL \
-targetnode japao \
-srcroot \
-tgtauth zdmauth \
-tgtarg1 user:opc \
-tgtarg2 identity_file:/home/zdmuser/.ssh/zdm.ppk \
-tgtarg3 sudo_location:/usr/bin/sudo \
-targethome /u01/app/oracle/product/19.0.0.0/dbhome_1 \
-backupuser "oracleidentitycloudservice/<sua conta OCI>" \
-sourcesyswallet $ZDM_BASE/wallet/sysuser \
-osswallet $ZDM_BASE/wallet/ossuser \
-eval
Neste exemplo, o ZDM solicitará apenas a senha do usuário root do servidor lab01 (source), devido ao método autenticação não ser por chave SSH.
Dica Para Não Precisar Informar Senha do root
Na documentação informa que se o acesso ao servidor de origem for com usuário root, deve-se utilizar a opção -srcroot ao invés de -srcauth zdmaut. Mas se copiarmos a chave pública do ZDM Node para o arquivo /root/.ssh/authorized_keys no servidor de origem, então conseguimos conectar no servidor com o usuário root, usando a chave ssh e o ZDM não solicitará nenhuma senha (Testado no ZDM 21.2).
O comando seria similar ao seguinte:
zdmcli migrate database \
-rsp /home/zdmuser/orcl_online_physical.rsp \
-sourcenode lab01 \
-sourcedb ORCL \
-targetnode japao \
-srcauth zdmauth \
-srcarg1 user:root \
-srcarg2 identity_file:/home/zdmuser/.ssh/zdm.ppk \
-tgtauth zdmauth \
-tgtarg1 user:opc \
-tgtarg2 identity_file:/home/zdmuser/.ssh/zdm.ppk \
-tgtarg3 sudo_location:/usr/bin/sudo \
-targethome /u01/app/oracle/product/19.0.0.0/dbhome_1 \
-backupuser "oracleidentitycloudservice/<sua conta OCI>" \
-sourcesyswallet $ZDM_BASE/wallet/sysuser \
-osswallet $ZDM_BASE/wallet/ossuser \
-eval