Oracle Database Appliance (ODA) is a rack mounted "all-in-one" box supplied by Oracle. It contains 2 nodes, 2 networks, 2 power supplies and 1 or 2 storage (magnetic disk or SSD) units accessible to both nodes.\\
The 2 nodes talk to each other and to storage across an internal 40Gb/s InfiniBand network.\\
It can be virtualised or bare-metal. You can setup single instance databases, RAC-One (active-passive) or RAC (active-active) databases.\\
A whole new set of commands is used to interact with ODA - oakcli.\\
* [[https://support.oracle.com/CSP/main/article?cmd=show&type=NOT&id=1417713.2|Oracle Database Appliance Information Centre]]
==== Patching Oracle Database Appliance (ODA) ====
* [[Patching Oracle Database Appliance (ODA)]]
==== Useful commands ====
* [[http://n23haveyoursay.blogspot.be/2015/12/oda-basic-commands-list.html|oda basic commands list (and concise patch instructions)]]
=== Is your ODA installation bare-metal or does it have a virtualised image installed? ===
If virtual, the following command will show 'VM-...' followed by the hardware model used.
oakcli show env_hw
gives...
VM-ODA_BASE ODA X4-2
=== Show server status ===
Shows server details such as power consumption, temperature and ILOM IP address
oakcli show server
=== How many processors are currently allocated to ODA? ===
Also shows total number of available CPUs
oakcli show cpupool -node 0
=== Show installed ORACLE_HOMES ===
oakcli show dbhomes
=== Show installed databases ===
oakcli show databases
Name Type Storage HomeName HomeLocation Version
----- ------ -------- -------------- ---------------- ----------
ANT5O RAC OraDb12102_home1 /u01/app/oracle/product/12.1.0.2/dbhome_1 12.1.0.2.160419(22291127,21948344)
PRJESS2 RAC ASM OraDb12102_home1 /u01/app/oracle/product/12.1.0.2/dbhome_1 12.1.0.2.160419(22291127,21948344)
DEVOTASO SINGLE OraDb12102_home1 /u01/app/oracle/product/12.1.0.2/dbhome_1 12.1.0.2.160419(22291127,21948344)
CHA5O RAC OraDb12102_home1 /u01/app/oracle/product/12.1.0.2/dbhome_1 12.1.0.2.160419(22291127,21948344)
TSTEV3ST SINGLE ASM OraDb12102_home1 /u01/app/oracle/product/12.1.0.2/dbhome_1 12.1.0.2.160419(22291127,21948344)
OEMREP RAC ASM OraDb12102_home1 /u01/app/oracle/product/12.1.0.2/dbhome_1 12.1.0.2.160419(22291127,21948344)
=== Deploy virtualised platform on ODA ===
This will probably be a one-off per system!
oakcli deploy
=== See history of installed patches ===
oakcli inventory -q
=== Clean out old patches ===
Reference: Metalink [[https://support.oracle.com/epmos/faces/DocumentDisplay?id=1681062.1|Note: 1681062.1]]\\
Does not affect the inventory listing.\\
cd /opt/oracle/oak/pkgrepos
du -hsx .
16G .
e.g. This cleans out old logs and patch files up to version 2.5.0.0.0 (probably in /opt/oracle/oak/pkgrepos)
oakcli manage cleanrepo --ver 2.5.0.0.0
=== ODA (Oracle Database Appliance): Cleanup trace and log files Using purgeODALog Tool (Doc ID 2081655.1) ===
Use this tool to clean out general ODA log files. Available in [[https://support.oracle.com/epmos/faces/DocumentDisplay?id=2081655.1|this note]]\\
Specify a general cleanup or individual components
Usage:
purgeODALog [[ -days ]]
[[ -orcl ]] | [[ -tfa ]] |
[[ -osw ]] | [[ -oak ]] |
[[ -extra '': | [[, '':]] ]]
[[ -lsnr ]]
[[ -dryrun ]]
purgeODALog OPTIONS
-days Purge components logs & traces older then # days
-orcl Purge only GI/RDBMS logs & traces (Default 30 days)
-tfa Purge only TFA repository older then # days (Default 30 days)
-osw Purge only OSW archives older then # days (Default 30 days)
-oak Purge only OAK logs and trace older then # days (Default 30 days)
-extra '': Purge only files in user specified folders (Default 30 days)
-lsnr It will force the cleanup of listeners log independently by the age
-dryrun It will show the purge commands w/o execute them
-h Display this help and exit
Example:
purgeODALog
purgeODALog -days 20
purgeODALog -orcl 50
purgeODALog -orcl 50 -lsnr
purgeODALog -tfa 50
purgeODALog -osw 20 -oak 10
purgeODALog -orcl 20 -osw 20 -oak 10
purgeODALog -orcl 20 -osw 20 -oak 10 -extra /tmp:10,/var/log:20
=== Deploy ODA_BASE on ODA ===
oakcli deploy oda_base
=== Create a database ===
oakcli create database -d
e.g.
oakcli create database -d prod
=== Create a new ORACLE_HOME ===
For upgrades etc., you can create a new ORACLE_HOME like this
create dbhome -version
e.g.
create dbhome -version 12.1.0.2
=== Upgrade 1 database to new version ===
oakcli upgrade database -db -to
e.g.
oakcli upgrade database -db prod -to 11r2_dbhome1
=== Upgrade all databases from a given ORACLE_HOME to new version ===
oakcli upgrade database -from -to
e.g.
oakcli upgrade database -from 11r1_dbhome1 -to 11r2_dbhome1
=== Show the available virtual machines ===
oakcli show vm
=== Configure a virtual machine to start on a particular cluster node ===
oakcli configure vm sdtcsynodadb3a -failover true -prefnode 0
=== Start a virtual machine ===
oakcli start vm sdtcsynodadb3a
==== Useful queries ====
As seen on [[https://www.pythian.com/blog/oracle-database-12c-patching-dbms_qopatch-opatch_xml_inv-and-datapatch/|Pythian]]
prompt ------------------------------------------
prompt Patches applied to both the $OH and the DB
prompt ------------------------------------------
with a as (select dbms_qopatch.get_opatch_lsinventory patch_output from dual)
select x.patch_id
, x.patch_uid
, x.rollbackable
, s.status
, x.description
from a
, xmltable('InventoryInstance/patches/*'
passing a.patch_output
columns
patch_id number path 'patchID',
patch_uid number path 'uniquePatchID',
description varchar2(80) path 'patchDescription',
rollbackable varchar2(8) path 'rollbackable'
) x
, dba_registry_sqlpatch s
where x.patch_id = s.patch_id
and x.patch_uid = s.patch_uid
-- and s.bundle_series = 'PSU'
/
prompt --------------------------------------------------------
prompt Patches installed into the $OH but not applied to the DB
prompt --------------------------------------------------------
with a as (select dbms_qopatch.get_opatch_lsinventory patch_output from dual)
select x.patch_id
, x.patch_uid
, x.description
from a
, xmltable('InventoryInstance/patches/*'
passing a.patch_output
columns
patch_id number path 'patchID',
patch_uid number path 'uniquePatchID',
description varchar2(80) path 'patchDescription'
) x
minus
select s.patch_id
, s.patch_uid
, s.description
from dba_registry_sqlpatch s
/
prompt --------------------------------------------------------
prompt Patches applied to the DB but not installed into the $OH
prompt --------------------------------------------------------
with a as (select dbms_qopatch.get_opatch_lsinventory patch_output from dual)
select s.patch_id
, s.patch_uid
, s.description
from dba_registry_sqlpatch s
minus
select x.patch_id
, x.patch_uid
, x.description
from a
, xmltable('InventoryInstance/patches/*'
passing a.patch_output
columns
patch_id number path 'patchID',
patch_uid number path 'uniquePatchID',
description varchar2(80) path 'patchDescription'
) x
/
==== Package up useful diagnostic data when opening an SR at Oracle ====
oakcli manage diagcollect
==== Health check a RAC system on ODA ====
* [[https://support.oracle.com/epmos/faces/DocContentDisplay?id=1268927.2|Metalink note 1268927.2]]
oakcli orachk -h