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