Uso do OAKCLI em Oracle Database Appliance (ODA) X5-2 High Availability (HA)

Por Y V Ravi Kumar , Rodrigo Mufalani Oracle ACE e Shireesha Baddam
Publicado en Junho 2017


Revisado por Marcelo Pivovar

Introdução

OAKCLI (Oracle Appliance Kit CommandLine Interface) é uma interface de linha de comando, que pode ser usada para monitorar e manter os componentes de uma Oracle Database Appliance (ODA). Em uma Oracle database appliance, o OAKCLI nos permite realizar tarefas como criar, eliminar e fazer copias de databases com snapshot. Essa interface de linha de comando permite o gerenciamento de tarefas de modo rápido e muito simples.

Configurações do ambiente:

ODA Model:			BM Oracle Database Appliance (ODA) X5-2
Public interface: 	COPPER
ODA Version:		12.1.2.9.0
Operating system: 	Linux version 2.6 (Red Hat 4.4.7-16)
Database: 			Oracle Database 11gR2(11.2.0.4.0)
            		Oracle Database 12c R1 (12.1.0.2.0)
Hostnames: 			DBServer01, DBServer02
Database: 			testdev1
Snapshot database:	testdev2

01

1. Criação de um Database usando OAKCLI emuma Oracle database appliance (ODA).

1.1 o commndooakcli show dbhomes listaas RDBMS homes disponíveis como podemos ver abaixo:

02

1.2 Logado em uma sessão no puttyao node1 com o usuário ‘ROOT’.Use o comando abaixo para criar um database usando o oakcli.

[root@DBServer01: /root]#oakcli create database -db testdev1 -oh OraDb11204_home1

Isso irá criar um database testdev1 com a versão do Oracle Database 11g R2 (11.2.0.4). Para criar um database com a versão do Oracle database 12c R1 (12.1.0.2.0), use oracle home 12102, OraDb12102_home1. Durante a instalação você pode do tipo de database e servidor. Aqui eu selecionei OLTP, Enterprise Edition que é a opção 1. Para criar um RAC database, escolha a opção 1 para OLTP e a opção 3 (RAC) para o deploy do database.

[root@DBServer01: /root ]#oakcli create database  -db testdev1 
-oh OraDb11204_home1
INFO: 2017-03-13 12:56:21: Please check the logfile '/opt/oracle/
oak/log/DBServer01/tools/12.1.2.9.0/createdb_testdev1_50904.log' 
for more details
INFO: 2017-03-13 12:56:23: Database parameter file is not provided.
 Will be using default parameters for DB creation
Please enter the 'SYSASM'  password : (During deployment we set the 
SYSASM password to 'welcome1'):
Please re-enter the 'SYSASM' password:
Please select one of the following for Database type [1 ..2] :
1    => OLTP
2    => DSS
1
The selected value is : OLTP
Please select one of the following for Database Deployment  [1 .. 3] :
1    =>EE : Enterprise Edition
2    => RACONE
3    => RAC
1
The selected value is : EE
Please select one of the following for Node Number  [1 .. 2] :
1    =>DBServer01
2    =>DBServer02
2
The selected value is :DBServer02
...Please select one of the following for Database Class  [1 .. 5] :
1    => odb-01s  (   1 cores ,     4 GB memory)
2    =>  odb-01  (   1 cores ,     8 GB memory)
3    =>  odb-02  (   2 cores ,    16 GB memory)
4    =>  odb-04  (   4 cores ,    32 GB memory)
5    =>  odb-06  (   6 cores ,    48 GB memory)
1
The selected value is : odb-01s  (   1 cores ,     4 GB memory)
Do you want to setup the EM DB Console for this database [ Y | 
N ] ? : N
INFO   : Logging all actions in the file /opt/oracle/oak/log/
DBServer01/patch/12.1.2.9.0/DBServer01-20170313125847.log and 
traces in  the file /opt/oracle/oak/log/DBServer01/patch/
12.1.2.9.0/DBServer01-20170313125847.trc
INFO   : Loading the configuration file /opt/oracle/oak/onecmd/
create_database.params...
INFO   : Creating the node list files...
INFO   : Setting up ssh for root...
INFO   : Setting up SSH across the Private Network...
...INFO   : Running as root: /usr/bin/ssh -l root 192.168.0.11 

root/DoAllcmds.sh
INFO   : Background process 59846 (node: 192.168.0.11) gets 
done with the exit code 0
INFO   : Running as root: /usr/bin/ssh -l root 192.168.0.12 /
root/DoAllcmds.sh
INFO   : Background process 59872 (node: 192.168.0.12) gets 
done with the exit code 0
INFO   : Setting up SSH completed successfully
INFO   : Running the command /usr/bin/rsync -tarqvz /opt/oracle/
oak/onecmd/ root@192.168.0.12:/opt/oracle/oak/onecmd 
--exclude=*zip --exclude=*gz --exclude=*log --exclude=*trc 
--exclude=*rpm to sync directory on 
node <192.168.0.12>
SUCCESS: Ran /usr/bin/rsync -tarqvz /opt/oracle/oak/onecmd/ 
root@192.168.0.12:/opt/oracle/oak/onecmd --exclude=*zip 
--exclude=*gz --exclude=*log --exclude=*trc --exclude=*rpm 
and it returned: RC=0
...INFO   : Did not do scp for node : DBServer01
INFO   : Running as root: /usr/bin/ssh -l root DBServer01 
/root/DoAllcmds.sh
INFO   : Running as root: /usr/bin/ssh -l root DBServer02 
/root/DoAllcmds.sh
INFO   : Background process 60930 (node: DBServer01) gets 
done with the exit code 0
INFO   : Background process 60953 (node: DBServer02) gets 
done with the exit code 0
INFO   : Did not do scp for node : DBServer01
INFO   : Running as root: /usr/bin/ssh -l root DBServer02 
/opt/oracle/oak/onecmd/tmp/DoAllcmds-20170313125929.sh
INFO   : Running as root: /usr/bin/ssh -l root DBServer01 
/opt/oracle/oak/onecmd/tmp/DoAllcmds-20170313125929.sh
INFO   : Background process 61015 (node: DBServer01) gets 
done with the exit code 0
INFO   : Background process 61038 (node: DBServer02) gets 
done with the exit code 0
INFO   : Setting up SSH for user oracle...
...INFO   : checking nodes in /opt/oracle/oak/onecmd/tmp/
db_nodes...
...
SUCCESS: All nodes in /opt/oracle/oak/onecmd/tmp/db_nodes 
are pingable and alive.
INFO   : Checking SSH setup for user (oracle) on nodes in 
/opt/oracle/oak/onecmd/tmp/db_nodes...
INFO   : Did not do scp for node : DBServer01
INFO   : This is root, will become oracle and run: /bin/su 
oracle -c /usr/bin/ssh -l oracle DBServer01 /opt/oracle/oak/
onecmd/tmp/DoAllcmds-20170313125956.sh
INFO   : Running on the local node: /bin/su oracle -c /opt/
oracle/oak/onecmd/tmp/DoAllcmds-20170313125956.sh
INFO   : Background process 62901 (node: DBServer01) gets 
done with the exit code 0
INFO   : This is root, will become oracle and run: /bin/su 
oracle -c /usr/bin/ssh -l oracle DBServer02 /opt/oracle/oak/
onecmd/tmp/DoAllcmds-20170313125956.sh
INFO   : Background process 62945 (node: DBServer02) gets 
done with the exit code 0
INFO   : Setting up ACFS storage
INFO   : Did not do scp for node : DBServer01
INFO   : Running as root: /usr/bin/ssh -l root DBServer01 
/opt/oracle/oak/onecmd/tmp/acfsm_50904.sh
INFO   : Running as root: /usr/bin/ssh -l root DBServer02 
/opt/oracle/oak/onecmd/tmp/acfsm_50904.sh
INFO   : Background process 63082 (node: DBServer01) gets 
done with the exit code 0
INFO   : Background process 63109 (node: DBServer02) gets 
done with the exit code 0
INFO: 2017-03-13 13:00:20: Successfully setup the storage 
structure for the database 'testdev1'
SUCCESS: Successfully setup ACFS storage for the database 
testdev1
INFO   : Creating Database using DBCA...
INFO   : Did not do scp for node : DBServer01
INFO   : Running as root: /usr/bin/ssh -l root DBServer01 
/opt/oracle/oak/onecmd/tmp/DoAllcmds-20170313130020.sh
INFO   : Background process 65647 (node: DBServer01) gets 
done with the exit code 0
INFO   : Running as root: /usr/bin/ssh -l root DBServer02 
/opt/oracle/oak/onecmd/tmp/DoAllcmds-20170313130020.sh
INFO   : Background process 65672 (node: DBServer02) gets 
done with the exit code 0
INFO   : Running DBCA using /opt/oracle/oak/onecmd/tmp/
dbca-testdev1.sh on DBServer02 as oracle...
INFO   : Check output in /opt/oracle/oak/onecmd/tmp/
dbca-testdev1-20170313125847.log on DBServer02
...
INFO   : This is root, will become oracle and run: /bin/
su oracle -c /usr/bin/ssh -l oracle DBServer02 /opt/oracle/
oak/onecmd/tmp/dbca-testdev1.sh
         Instance testdev1 is running on node DBServer02
INFO   : One or more Instances running on the cluster nodes.
INFO   : Running export ORACLE_HOME=/u01/app/oracle/product/
11.2.0.4/dbhome_1;/u01/app/oracle/product/11.2.0.4/dbhome_1/
bin/srvctl setenv database -d testdev1 -t 'TZ=America/New_York' 
to set DB timezone
INFO   : Running the command /u01/app/12.1.0.2/grid/bin/crsctl 
stat resource ora.testdev1.db -p
...
INFO   : This is root, will become oracle and run: /bin/su oracle 
-c /usr/bin/ssh -l oracle DBServer02 /opt/oracle/oak/onecmd/tmp/
dbupdates-testdev1.sh
INFO   : Running export ORACLE_HOME=/u01/app/oracle/product/
11.2.0.4/dbhome_1;/u01/app/oracle/product/11.2.0.4/dbhome_1/bin/
srvctl stop database -d testdev1
INFO   : Running export ORACLE_HOME=/u01/app/oracle/product/
11.2.0.4/dbhome_1;/u01/app/oracle/product/11.2.0.4/dbhome_1/bin/
srvctl start database -d testdev1
INFO: 2017-03-13 13:08:12: Successfully set the RMAN SNAPSHOT 
control file
SUCCESS: 2017-03-13 13:08:18: Successfully created the Database : 
testdev1
[ root@DBServer01 : Mon Mar 13, 01:08 PM : /root ]	

1.3Uma vez que o database está criado, cheque ser o serviço estáonline. Para isso, podemos usar o comando crsstat

[oracle@DBServer02 ~]$ crsstat
ora.testdev1.db          ONLINE     ONLINEonDBServer02

1.4 Usando o comando oakclipara verificar se o database está criado na home correta e com a versão desejada.Faça o comando abaixo:

[ root@DBServer01: /root ]# oakcli show databases
testdev1 SINGLE     ACFS      OraDb11204_home1     /u01/app/oracle/product/11.2.0.4/dbhome_1   
11.2.0.4.161018(24006111,23054319)

2. Database upgrade do Oracle Database 11g R2 (11.2.0.4.0)para o Oracle Database 12c R1 (12.1.0.2.0) usando OAKCLI no Oracle Database Appliance (ODA).

2.1.Para atualizar um database Oracle Database 11g R2 (11.2.0.4.0) para o Oracle Database 12c R1 (12.1.0.2.0)primeiro configure o parametrodb_domainpara vazio (‘’) e então reinicie o database usando o srvctl.

03

Abaixo iremos reiniciar o database:

[oracle@DBServer02infracdb]$srvctl stop database -d testdev1
[oracle@DBServer02infracdb]$srvctl start database -d testdev1

  • Faça o purgeda recyclebinno database que está planejando atualizar.Logue-se no database testdev1 como syse emita o commando abaixo para limpar a lixeira:
SQL>Purgerecyclebin;

04

2.2 Execute dbms_stats.set_global_prefspackagepara corrigir o bug(Bug 19664340 - ORA-20000).

“Unable to gather statistics concurrently" during upgrade to 12.1( Doc ID 19664340.8 ). Faça o comando abaixo, executando a package:

SQL>execdbms_stats.set_global_prefs('CONCURRENT', 'FALSE');

05

2.4 Logue-se com uma sessão no node1 via putty como root. Use o comando abaixo para realizar o upgrade com a interface de linha de comando oakcli.

[ oracle@DBServer01 /home/oracle ]# oakcli upgrade database 
-db testdev1 -from OraDb11204_home1 -to OraDb12102_home1
INFO: 2017-03-13 14:36:40: Look at the log file '/opt/
oracle/oak/log/DBServer01/tools/12.1.2.9.0/
dbupgrade_59524.log' for more details
Please enter the 'SYS'  password :
Please re-enter the 'SYS' password:
INFO: 2017-03-13 14:37:16: Upgrading the database testdev1. 
It will take few minutes. Pleasewait...
...
...
SUCCESS: 2017-03-13 14:54:05: Successfullyupgradedthe 
database testdev1

2.5 Cheque se a versão do database testdev1 depois que o comandooakcli upgrade foi finalizado, conforme fizemos anteriormente neste artigo.O comandooakcli show databasesirá listar todos os databases no servidor com a Oracle Home e a versão dos mesmos.

[ root@DBServer01 /root ]# oakcli show databases 
testdev1 SINGLE     ACFS      OraDb12102_home1     
/u01/app/oracle/product/12.1.0.2/dbhome_1          
12.1.0.2.161018(24006101,23854735)

2.6 Uma vez que a atualização foi realizada com sucesso, mude o db_domain se necessário e reinicie o database com o utilitário srvctl.

06

Abaixo os comandos para reiniciar o databasetestdev1.

[oracle@DBServer02infracdb]$srvctl stop database -d testdev1
[oracle@DBServer02infracdb]$srvctl start database -d testdev1

3. Criando snapshot database usando OAKCLI no Oracle database appliance (ODA).

Usando o oakcli, podemos criar snapshots (snapshot = cópias, fotografias, imagens)de um database existente. Nesta sessão o database testdev2 é criado usando o testdev1.

3.1 No database de origem (testdev1)configure oparâmetro db_domain para null, se ele estiver diferente disso. Reinicie o database usando o utilitário srvctl.

07

Faça os comandos abaixo com o srvctl para reiniciar o database testdev1.

[oracle@DBServer02infracdb]$srvctl stop database -d testdev1
[oracle@DBServer02infracdb]$srvctl start database -d testdev1

Emita o comando para criar o snapshot database testdev2 do testdev1 (um clone).

[ root@DBServer01 /root ]#oakcli create snapshotdb 
-db testdev2 -from testdev1

INFO: 2017-03-14 12:02:54: Please check the logfile  
'/opt/oracle/oak/log/DBServer01/tools/12.1.2.9.0/
createdb_testdev2_86330.log' for more details
Please enter the 'SYS'  password for the Database 
testdev1:
Please re-enter the 'SYS' password:
Please select one of the following for EE Database 
Node  [1 .. 2] :

1    =>DBServer01
2    =>DBServer02
2

The selected value is :DBServer02
Please select one of the following for Database Class  
[1 .. 5] :
1    => odb-01s  (   1 cores ,     4 GB memory)
2    =>  odb-01  (   1 cores ,     8 GB memory)
3    =>  odb-02  (   2 cores ,    16 GB memory)
4    =>  odb-04  (   4 cores ,    32 GB memory)
5    =>  odb-06  (   6 cores ,    48 GB memory)
1
The selected value is : odb-01s  (   1 cores ,     
4 GB memory)
......
SUCCESS: All nodes in /opt/oracle/oak/temp_clunodes.txt 
are pingable and alive.
......
SUCCESS: All nodes in /opt/oracle/oak/temp_clunodes.txt 
are pingable and alive.
INFO: 2017-03-14 12:14:31: Creating the SNAP Database 
'testdev2' from the source Database 'testdev1'
INFO: 2017-03-14 12:14:50: Taking SNAP of the Database 
'testdev1'
INFO: 2017-03-14 12:14:52: Successfully took  the SNAP 
of database: testdev1
INFO: 2017-03-14 12:16:10: Creating controlfile for 
database: testdev2
INFO: 2017-03-14 12:16:27: Successfully created the 
control file for the database : testdev2
INFO: 2017-03-14 12:16:31: Recovering the database: 
testdev2,  until time : '2017-03-14:12:15:18'
INFO: 2017-03-14 12:16:33: Successfully recovered the 
database
INFO: 2017-03-14 12:16:33: Opening the database with 
resetlogs
INFO: 2017-03-14 12:16:41: Successfully opened the database 
after recovery
INFO: 2017-03-14 12:16:44: Setting the temporary tablespace 
for database : testdev2
INFO: 2017-03-14 12:16:47: Successfully set the temporary 
tablespace for the database : testdev2
INFO: 2017-03-14 12:17:17: Successfully changed the 
Database ID
INFO: 2017-03-14 12:17:53: Adding the Database resource 
to the clusterware
INFO: 2017-03-14 12:19:54: Successfully started the 
database
INFO: 2017-03-14 12:19:54: Updating the TNS entries for 
the database testdev2
INFO: 2017-03-14 12:20:13: Successfully set the RMAN 
SNAPSHOT control file
INFO: 2017-03-14 12:20:26: Disabling the external references 
in the database 'testdev2' inherited from 'testdev1'
INFO: 2017-03-14 12:20:27: Successfully disabled the 
external references
INFO: 2017-03-14 12:20:53: Run the SQL script '/u01/app/
oracle/product/11.2.0.4/dbhome_1/enable_external_refs_testdev2_zkfw.sql'
 on the database 'testdev2' to enable these external references
 Also need to restart the database after running the SQL script
SUCCESS: 2017-03-14 12:21:30: Successfully created the Database 
'testdev2' from 'testdev1'

4. Deletar um database usando OAKCLI no Oracle database appliance (ODA).

4.1 Logue-senocom usuário oracle via putty e depois como sys no database. Resete o parâmetrodb_domainusando o alter system eentão reinicie o database usandosrvctl.

Para resetar o parâmetro db_domain faça o comando abaixo:

SQL>alter system reset db_domainscope=spfile;

08

Use o comando abaixo para reiniciar usando o srvctlno database testdev1.

[oracle@DBServer02infracdb]$srvctl stop database -d testdev1
[oracle@DBServer02infracdb]$srvctl start database -d testdev1

4.2 Deletandoo database testdev1 usandoo oakcli.

De uma sessão no putty, logado no node1 com o usuário root. Faça o comando abaixo para eliminar o database testdev1.

[ root@DBServer01 : /root ]#oakcli delete database -db 
testdev1
INFO: 2017-03-14 12:27:02: Look at the log file '/opt/
oracle/oak/log/DBServer01/tools/12.1.2.9.0/
deletedatabase_testdev1_71430.log' for more details
Please enter the 'SYS'  password :
Please re-enter the 'SYS' password:
All the storage volumes created for the database 'testdev1' 
will be deleted. Do you want to continue [Y|N]:Y
INFO: 2017-03-14 12:27:43: Deleting the database testdev1. 
It will take few minutes. Please wait...
INFO: 2017-03-14 12:27:46: Setting up SSH
...SUCCESS: Ran /usr/bin/rsync -tarqvz /opt/oracle/oak/
onecmd/ root@192.168.0.12:/opt/oracle/oak/onecmd 
--exclude=*zip --exclude=*gz --exclude=*log --exclude=*trc 
--exclude=*rpm and it returned: RC=0
.........
SUCCESS: All nodes in /opt/oracle/oak/onecmd/tmp/
db_nodes are pingable and alive.
INFO: 2017-03-14 12:28:46: SSH has been successfully 
established
INFO: 2017-03-14 12:29:36: Successfully deleted the 
database 'testdev1'

Sumário de comandos:

  • Help dos comandosparametros do comando oakcli
    oakcli–h
  • Chequeda versão do software do ODA
    oakcli show version
    oakcli show version –detail
  • Mostrartodas asoracle RDBMS homes
    oakcli show dbhomes
  • Mostrar todos os databasesincluindo database home
    oakcli show databases
  • Listar todos os filesystemspara database
    oakcli show dbstorage
  • Criar um databaseusando o oakcli
    oakcli create database -dbdb_name -oh dbhome
  • Deletarum database usando o oakcli
    oakcli delete database -db testdev1
  • Validar ODA components
    Oakcli validate –a
  • Redimensionardb storage
    oakcli resize dbstorage -data size -reco size -redo size -dbdb_name
  • Listar todos os registros do oakinventory
    oakcli inventory –q
  • Checar se o oakclidaemoné rodando
    ps -ef|grepoakd

Conclusão:

Com a utilização da interface de linha de comando do OAKCLI, tarefas de gerenciamento de databases podem ser realizadas de maneira simples. Com o crescimento da demanda de plataformas virtualizadas, o OAKCLI faz a criação, drop e clone de databases de uma maneira muito mais eficiente e simples.


Y V RaviKumar é um Oracle ACE e Oracle Certified Master (OCM) com 18 anos de experiência em instituições financeiras, serviços financeiros e seguros (BFSI) e atuou em diversos papeis como Senior Database Architect e Production DBA. Ele também é OCP em Oracle 8i, 9i, 10g, 11g & 12c e Certificado em Golden Gate, RAC, Performance Tuning& Oracle Exadata. Ele continua motivando muitos DBAs e ajudando a Oracle Community publicando suas dicas /ideias/sugestões/soluções em seu blog. Ele escreveu 40+ artigos OTN sobre Oracle Exadata, Oracle RAC e Oracle GoldenGate para a OTN em Espanhol, OTN em Português e OTN em inglês e 19 artigos para a TOAD World, 2 Artigos para o UKOUG, 3 Artigos para OTech Magazine e 2 Artigos para a Redgate. Ele é membro do AllIndia Oracle UserGroup (AIOUG) e frequente Oracle speaker in @NYOUG, @OTN, AIOUG, Sangam e IOUG. Ele desenha, projeta e implementa Core Banking System (CBS) Databases para o Central Banks em dois países – India e Mahe, Seychelles. Ele é Co-Founder do OraWorld (www.oraworld.com). Leia mais sobre o seu perfil na LaserSoft

Rodrigo Mufalani é um DBA Sr. com mais de 10 anos de experiência, começou com o Oracle 8i, mas teve a oportunidade de dar suporte a Oracle 7.3.4 em diante. É especialista em banco de dados Oracle com foco principal em Performance & Tuning e RAC. É palestrante em eventos de Oracle como: OTN LAD TOUR e outros. Atualmente trabalha como consultor diversas empresas no segmento de variados ramos como: Educação, Saúde, Tecnologia, Seguros e etc. Foi o terceiro Oracle ACE a ser nomeado no Brasil e é OCP DBA nas versões 10g e 11g. Atualmente trabalha na Mufalani. Twitter @mufalani / blog www.mufalani.com.br/blog

Shireesha Baddamé umaprofissional Oracle commais de 8 anos de experiência em TI, nos ramos de serviçosfinanceiros, eletrônicos e de logística. Trabalha como DBA Sênior e também como consultora de TI para dar suporte a diferentes aplicações. É expert em Oracle RAC, ASM, ODA e nasversões de Oracle 9i, 10g, 11g e 12c.

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.