Ilmar Kerm

Oracle, databases, Linux and maybe more

Managing Oracle Database homes and patching them on a large scale is a challenge. Patching is a must today due to all the security threats out there plus all the bugs that you will hit during normal database operations.
You can read about the challenges and solutions in Ludovico Caldara blog series

Here I’d like to share my solution. The main idea of this solution is simple:
Never patch existing Oracle home, even when you just need to apply tiny one-off patch. Always install a new home and eventually remove the old one.

It is not possible to execute this strategy in a large environment without automation and here I’m sharing my automation solution using Ansible.

Features of this solution:

  • Oracle home configurations become code
  • Runs over any number of clusters or single hosts, with same configuration in parallel
  • Maintain list of homes or flavours of homes each cluster/single host is having installed or what need to be removed
  • Oracle Grid infrastructure or Oracle Restart installation is required
  • Fully automated, up to the point that you have a job in Jenkins that is triggered by push to version control system (git)
  • Home description in Ansible variable file also servers as documentation
  • All tasks are idempotent, so you can execute playbook multiple times. If the servers already have the desired state, nothing will be changed

Ideal workflow to install a new home:

  • Describe in Ansible variable file the home name, base installer location and list of patches needed
  • Attach home name to clusters/hosts in Ansible files
  • Commit and push to git
  • Go through your typical git workflows to push the change into release branch, create pull requests, have them reviewed by peers, merge pull request into release branch
  • Job in jenkins triggers on push to release branch in git and then executes ansible playbook in target/all hosts

Read more about it and get the code from github

2 comments

  1. Ludovico says:

    Hi Ilmar,
    The ansible guys strike again 😉 it is really a clever solution! I will certainly link to it in my series…
    Just a question… “Oracle Grid infrastructure or Oracle Restart installation is required” means that you need to have GI prior to use the framework? Is there a technical reason why it would not work without it?

    Ludo

  2. ilmarkerm says:

    Thanks Ludo… GI is just requirement from the current code implementation. GI is used for:
    * oracle-deinstall role to check if any database is still using the home to be removed
    * GI also takes care of spfile and passwordfile, so they can be stored together with datafiles and not placed under $ORACLE_HOME/dbs. Current code makes no effort to preserve $ORACLE_HOME/dbs contents

Comments are closed.