Monday, June 11, 2018

Oracle RAC + ASM + NFS home lab

Many people look for ways to emulate enterprise hardware in their home labs in order to get good hands on experience with Oracle products.  One of the harder ones to get working is Oracle RAC due to the need of multiple networks and shared storage.

With the plethora of virtualization software out now, this has gotten much easier.  For my job I needed a two node RAC setup to do some testing of DBCA (Database Creation Assistant) scripts.  I've done 100's of RAC installs, so other than the time, I didn't foresee any issues.  Well, as usual, what can go wrong will go wrong.

Basic RAC Setup

So lets jump to the basics.  For RAC I needed a public network, private network, and shared storage.  For the network pieces I also needed additional virtual IP's for each node as well as a set of three SCAN IP address.

I setup a new virtual private network for my servers.  I added all the new IP's to my DNS server.  Things were going well.  I then did the trick to create shared ASM disks on a shared NFS mount:

dd if=/dev/zero of=/u03/oradata/asm_dsk1 bs=1k count=10000000
dd if=/dev/zero of=/u03/oradata/asm_dsk2 bs=1k count=10000000
dd if=/dev/zero of=/u03/oradata/asm_dsk3 bs=1k count=10000000
dd if=/dev/zero of=/u03/oradata/asm_dsk4 bs=1k count=10000000
dd if=/dev/zero of=/u03/oradata/asm_dsk5 bs=1k count=10000000

I then changed the ownership:
chown grid:asmdba /u03/oradata/asm-dsk?
chmod 660 /u03/oradata/asm-dsk?

That second command, to change the permissions is what I missed.  This was somewhat critical.  It also speaks to a problem I've seen many times over.  How to deal with Oracle access issue when you have role separation setup.  The is particularly common when running Oracle E-Business suite due to the number of assumptions made by the Oracle procedures for cloning an EBS instance.

Troubleshooting Role separation issues.

As mentioned I've done this many times, and the only way to effectively troubleshoot these issues is to methodically go step by step through the setup of Oracle and Grid and ASM.  There are a few notes for help on this in MOS, but not a lot:

  • UNIX: Diagnostic C program for ORA-1031 from CONNECT INTERNAL / AS SYSDBA (Doc ID 67984.1)
  • ORA­15183 Unable to Create Database on Server using 11.2 ASM and Grid Infrastructure (Doc ID 1054033.1)
  • Database Creation on 11.2 Grid Infrastructure with Role Separation ( ORA-15025, KFSG-00312, ORA-15081 ) (Doc ID 1084186.1)
  • How To Recompile config.c / Relink Executables Of A Grid Infrastructure Home (Cluster) (Doc ID 1637766.1)
  • Connect as SYSDBA on 11.2 Cloned Home Gives "ORA-1031: Insufficient Privileges" Error (Doc ID 1061788.1)

These all sound misleading, but lets go through the issue I faced.

The Issue

I had setup all my hardware and ASM raw disks.  After completing the GRID INFRASTRUCTURE installation, things looked good.  ASM was up and running, and the ASM diskgroup (DATA) looked fine.

I then went on to install the database home, and try to create my RAC database with DBCA.  That is when the trouble started.  During the initial create database statement I would get:
ORA-00200: control file could not be created
ORA-00202: control file: '+DATA'
ORA-15045: ASM file name '+DATA' is not in reference form
ORA-17502: ksfdcre:5 Failed to create file +DATA
ORA-27091: unable to queue I/O
ORA-27041: unable to open file

I jumped into the database alert log and DBCA logs, and garnered the following additional error:

Linux-x86_64 Error: 13: Permission denied
Additional information: 3
ORA-1501 signalled during: CREATE DATABASE "mydb2"

Ok, so time to go back and check everything. For role separation to work there is a OS group that is used to allow for the oracle and grid users to have permissions on the ASM disks.  In my case that group was supposed to be asmadmin.  Somewhere during the install I must have picked the wrong item in a pulldown box, or didn't pay attention to a fixup script that ran.  Either way I ended up with a difference.  So here is a list of steps to check that everything is right for role separation.  You need to check every item.

Role Separation Checklist

You should shutdown CRS before making any changes / updating any of these items.  As the root user run on all nodes: 
$GRID_HOME/bin/crsctl stop crs
  1. Check the user id and group membership for the grid user:
    id grid
    (note the id number and group names, numbers the user is in)
  2. Do the same check for the oracle user:
    id oracle
  3. Make a list of the groups you are using for each role in oracle (ASM access, ASM super user, DB DBA, DB OPER, etc..)
  4. As the grid user, check the configuration for the Grid infrastructure ($GRID_HOME/rdbms/lib/conf.c)
    #define SS_DBA_GRP "asmdba"
    #define SS_OPER_GRP "asmoper"
    #define SS_ASM_GRP "asmadmin"

    If changes are needed, update the config.c and re-link the oracle binary
    cd $GRID_HOME/rdbms/lib
    make -f ioracle
  5. As the oracle user do the same check in the oracle database home:
    #define SS_DBA_GRP "dba"
    #define SS_OPER_GRP "oper"
    #define SS_ASM_GRP "asmadmin"

    (note that the SS_ASM_GRP has to match the grid home setting)
    If you need to make changes, again re-link the oracle binary
    cd $ORACLE_HOME/rdbms/lib
    make -f ioracle
  6. Check that the oracle binary in the grid home has the right permissions and ownership. The user, group ownership are critical.  Also the sitcky bit has to be set for execution:
    ls -l $GRID_HOME/bin/oracle
    -rwsr-s--x. 1 grid asmadmin 291225032 Jun  6 10:15 /u01/app/12.1.0/grid/bin/oracle

    If this is not correct then as the root user run:
    $GRID_HOME/bin/setasmgidwrap $GRID_HOME/bin/oracle
  7. Do the same check for the database home oracle binary (again pay close attention to the user and group ownership as well as the sticky bit on the execution flag):
    ls -l $ORACLE_HOME/bin/oracle
    -rwsr-s--x. 1 oracle asmadmin 323613264 Jun  7 16:08 /u01/app/oracle/product/12.1.0/dbhome_1/bin/oracle

    If this is not correct, then as the root user run:
    $GRID_HOME/bin/setasmgidwrap $ORACLE_HOME/bin/oracle
  8. Check the ownership / permissions on the ASM source disks (in my case this was the raw files I had created on the shared NFS mount):
    ls -l /u03/oradata/asm*
    -rw-rw----. 1 grid asmadmin 10240000000 Jun 11  2018 /u03/oradata/asm_dsk1

    (Again note the user and group ownership, as well as file permissions.  I was missing the write option on the group)
  9. Check NFS mount settings.  Since I'm on a home lab using NFS, this is also important.  If your in a SAN or Exadata situation, you shouldn't have to check this. 
    I use the following settings, which are based on Oracle's recommended settings with the addition of "_netdev" which tells the startup scripts to wait until the network is started before trying to mount this specific mountpoint:
You can now reboot or restart CRS (as the root user run $GRID_HOME/bin/crsctl start crs).

That should take care of permission issues when working with role separation.  It's important to go through every step, and verify everything.  I spent a few hours repeating these steps over a few times, having missed one thing or another.  So even with years of experience it's easy to miss a step.  What should have taken me about 30 minutes to resolve, ended up taking about 3 hours due to this.

Not the end of the world, but really should have been caught sooner.

Thursday, April 5, 2018

DBA, cloud enabled - COLLABORATE 18 IOUG - #C18LV

2018 has entered like a lion, and is rushing by for myself.  COLLABORATE 18 is just around the corner. For the third year I’m again acting as the IOUG conference chair for COLLABORATE.  This is also the 25th anniversary of IOUG.  April 22nd through April 26th will be some of the most packed days of Oracle technical training available in North America!

To start with there are three user groups that come together to bring the best user presentations.  The Oracle Applications User Group (OAUG), Quest user group, and the Independent Oracle Users Group (IOUG).  As I represent the IOUG side of this triangle, lets go through some of the great things we have lined up for this event.

IOUG has 201 education sessions scheduled from Monday to Thursday covering many topics for the modern data professional.  Thats over 196 hours of in person sessions with some of the brightest minds with real world experiences.  Looking to move to the cloud?  We have sessions on that.  Trying to decide which cloud is right for you?  Looking to use new in memory database features, or NOSQL?  Yep we have those also.  Thinking you need more database security, need to catch up on patching, or upgrade?  Those topics are covered as well.

One of the topics that IOUG is always proud to bring to COLLABORATE is professional development.  Again we have 13 sessions covering everything from how to improve your presentation skills, making your role more visible, and even what it takes to become a CEO / CTO.

Is BIG DATA / BI your thing?  Well we have that covered as well.  Learn all the new features in modern SQL, or maybe see how you can use NOSQL platforms to get the most out of your data.  Perhaps your more of a developer, well we have a number of sessions on DEVOPS, using docker with Oracle projects, and of course sessions on performance tuning your databases as well as data model design.

So you might be thinking this is all talking and not much doing.  Well that’s not true, on Sunday the 22nd we have 5 hands on labs being put on by Oracle and AWS.  This is your opportunity to try Oracle cloud and AWS cloud yourself.  Leave with real hands on in person experience with these technologies.  Not into the cloud?  How about a hands on training of Python for Oracle DBA’s?  Or Oracle 18c upgrade hands on lab?  Even a lab on javascript notation for Oracle 12c and above.  Finally a lab on Hadoop and Kafka in conjunction with Oracle Database allows us to cover just about anything you would want to know about modern database technology.

Beyond that we are also excited to have Oracle Education working with us this year.  They will have a prominent spot in hall by the education sessions on the 3rd floor.  They will be there to talk to you about Oracle Education opportunities outside of COLLABORATE, as well as certification and testing opportunities.  If you’re trying to advance your Oracle career, we are pleased to have them on site to help.

Don’t forget all the networking opportunities, not just in the hallways and in sessions.  We have a welcome reception on Sunday at 6pm for all IOUG members.  There will be drinks and appetizers, as well as some ice breaker games.  For first time attendees we have a sessions right before at 5pm to introduce you to the conference, the user group, and meet some of the people that help bring this all together.

Which reminds me, I would like to extend a huge thanks to the team from IOUG that helps put the conference on.  There is only a few paid staff members that coordinate all the venue and on-site items.  Everything else is done by a team of 51 volunteers that do everything else from reviewing proposals, working with new speakers, setting up on-site events, coordinating with vendors, and much, much more.  Really, this yearly event would not exist if it wasn’t for the hard work of the team.  If you see someone at the conference wearing a conference committee hat, please say “HI”.  Feel free to ask them your questions, they should be intimately informed on all things COLLABORATE.

Also a big thanks to our 168 speakers.  Thank you for taking the time to work hard and hone your skills, and then going the extra mile to want to train others and explain the gory details.  The committee might bring the skeleton of the conference together, bu the speakers put all the meat on the bones.

Don’t forget the vendor floor reception on Monday after the educational sessions end.  Be sure to stop by the IOUG booth.  Finally we have the thank you party on Wednesday night, for everyone to gather, meet, and have fun!

Really, this is one of the most jam packed COLLABORATEs we have hosted in years.  I’m proud to be a part of it, and extra proud of the entire team that brought this all together.  I hope to see you in Las Vegas, at Mandalay Bay hotel from April 22nd to April 26th 2018!  Please feel free to say Hi if you see me.

Tuesday, October 17, 2017

Oracle Exadata OneCommand - build virtual server April 2017

Many of you are probably very aware of Exadata at this point.  It's many years into its lifecycle (version 7 just announced), and it's very prevalent in the Oracle database landscape.  I was recently asked to rebuild a few physical nodes of Exadata into virtual nodes.  This is covered under MOS Note 2099488 "Migration of a Bare metal RAC cluster to an OVM RAC cluster on Exadata".

I wouldn't call this the best or worst written MOS note.  It contains four options for doing the rebuild.  No matter which option you’re going to use, be sure to read all four.  There are steps outlined in more detail in some options than other, and many of that background information is important.

Also, the Exadata build or deployment process is all based on OneCommand (or the Oracle Exadata Deployment Assistant / OEDA).  Make sure you go through all of the readme files and documentation for this tool as well.


Ok, so I'm not going to go through every step here, as there is a lot of background.  But in general, let’s get a quick outline of what we will be doing:

  1. Building a new configuration file from OEDA that will represent the new build out of the Exadata.
  2. Request any network / DNS changes that are needed to account for your system change (E.G. if you are adding more virtual servers, or clusters).  Once those changes are completed, run through the checkip script and verify the output is what you expect.
  3. Staging all the needed software, patches, and OneCommand tools for the build.   This list does come from the output of OEDA.  Note, if you are rebuilding servers, be sure to keep copies of all these files off of the local storage on your Exadata.  Such as a NFS mount or other shared storage that you can easily get to through the rebuild process.
  4. Downloading the server build USB or PXE image files (these are listed in the additional readme for the QFSDP of the version you are installing).  Then staging these files on your PXE boot / NFS server or creating a USB thumb drive to boot from.
  5. Cleaning up the storage cells if needed.  This depends on what you are doing to your system configuration and if are keeping or destroying your current databases and data.
  6. Rebuild the database nodes using the images setup in step 4.  This will setup the DOM0 / Oracle VM host on the Exadata.  Be sure to use the serial console through the service processor (ILOM), not the GUI / Java based console as it will not work.
  7. Run the post build steps of switching to the VM boot image, and reclaiming free space by removing the physical Exadata OS image.
  8. Setup SSH equivalency between DB nodes and Storage nodes.
  9. Stage the OneCommand utility on the first node, along with the needed patches and software install media.  Be sure to unzip the KLONE gold images from the proper patch zip file.  This is outlined in the OneCommand readme file.
  10. Execute the needed OneCommand steps to build the virtual servers, create the OS users, and setup the CELL connectivity.

From there you can continue on to cluster and database software install and a number of other post Exadata build steps.  There are 17 OneCommand steps in all, and what you will run will depend on your needs and what you are changing.

So, why should I write all this up?  Well during my latest attempt to do this work I ran into a few issues.  I wanted to expand on those here.  This is not all the issues, but it is a specifically tricky one that I did not get any help from Oracle support on.


During step 10 above, I ran into at least three issues.  The OneCommand output was of not help.  While executing step 2 "Create Virtual Machine", I received the following message:
"Error running oracle.onecommand.deploy.machines.VmUtils method createVMs"
There was slightly more information that that, but really nothing of value.

Digging through the log output I found at reference to "Unable to locate file"

So, these two zip files are in the patches that OEDA / OneCommand ask to download in the configuration file.  Buried in the OneCommand readme is the details to unzip those two patches prior to running OneCommand.  In my case it was patches 25898234 and 25898235.  So just unzipping these two patches and I was able to move forward.  Or so I thought.

On the next run the log now changed, still saying "Unable to locate file", but the names changed:

See the issue?  The date stamps have the month and day digits transposed.  I couldn't find this anywhere in any of the OneCommand configuration files that were human readable (XML or Text).
So, I cheated, creating a symbolic link from one file to the other:
cd WorkDir
ln -s ./ ./
ln -s ./ ./

Now feeling confident that run three should just work.  Unfortunately, it did not.
Same error message that is of no value:
"Error running oracle.onecommand.deploy.machines.VmUtils method createVMs"
Back to the log file I go.

In the log file, there is a section where the Java routine gets "Exception: null".  Just prior to this exception the application is trying to get a list of system first boot images.  The last line was referencing "System.first.boot.".  Hum, that is the image file used to build the virtual machine with.

Digging into this some, for my build the version of that image we were using is April 2017.  The information above looks right.  I double checked the patch for that image, patch number 25742355.  This information is in the additional readme for the April 2017 QFSDP for Exadata, and is also in the list from the OEDA Installation Template HTML output.

I also verified that the patch was in my WorkDir location and that the zip file was in good shape.  No issues there.

Next, I dug into the OneCommand configuration files.  In the properties directory there is a es.propreties file that contains all these patch file names and versions.  There is a section that covers the VM first boot images.  Going through the list I find this line:,System.first.boot.,, \,\

Ah, well now I see this issue.  Again, a data miss-match between two things inside OneCommand.  Clearly Oracle updated the patch, but didn't update OneCommand in all the right places.  I moved that line out of the list and commented it out.  Then I added the following line:,System.first.boot.,, \,\

Be sure to watch where in the list you make edits, and watch the colons and backslashes’ to not corrupt the data array.


Now the build of the VM's continued normally and I was able to proceed.
What a messy situation where Oracle is just not keeping everything in sync with each other.  It's clear that OneCommand knew what it was looking for in one way (from the log file), but the reality in the configuration files was slightly different.  Seems like a little bit of a house of cards, with too many moving parts. 

I'll leave this story at this point.  Hopefully this helps someone out there that may be running into the same issues with Exadata OneCommand.

Friday, July 21, 2017

Python - cx_Oracle - Mac OS X Sierra - Oracle client - DPI-1047 libclntsh.dylib cannot be loaded

Python - cx_Oracle - Mac OS X Sierra - Oracle drivers

Modern development life seems so easy. Just grab a few libraries or API's, run a few quick installs and everything works. Well in this case, everything didn't just work. Most of my frustration for this issue came from old documentation or just plain lack of documentation.

I've been working in enterprises for 25 years and have been in the middle of a ton of "it doesn't work" conversations. So, digging in and knowing why is pretty much my nature, and I really don't like ambiguity. Terms like "the software just sucks", "something magic happens", or "it just isn't right" doesn't sit well with me.

So here is a quick dive into a recent attempt to get connected from Python to an Oracle database on my Mac Book pro running OS X Sierra.

I just want the solution ->

To start with, this is for those of you trying to do some Python development while accessing a Oracle database and using OS X as your development platform. This may be different than your destination platform (Linux, etc...).


Ok so let's get started, what do you need? Should be three simple things:
  1. Python - a "good" version is pre-installed on MAC, so that is what I started with
  2. Oracle driver - Oracle Instant Client for MAC on Oracle Technet (I'm using 12c)
  3. cx_Oracle - Python extension for using Oracle Database (I downloaded the source and built it local.  You will need XCode installed to do this)
Ok, so again a few simple steps, install the Oracle client as outlined on Oracle TechNet.  Note I used the $HOME/instantclient_12_1 folder.  If you follow all the instructions you will also have a $HOME/lib directory with most of the same files installed.  This second directory is for non-Oracle software to find the driver, or at least that is the theory (based on a lot of other forum postings and a few blogs).

Then I built the cx_Oracle extension:
python build
sudo python install
Note: second line has to be run with sudo to allow the install to put the library (egg file) into a system folder.

Finally a simple test and we should be all set.  Right?
python -c "import cx_Oracle; print cx_Oracle.version"
Traceback (most recent call last):
  File "", line 1, in 
  File "build/bdist.macosx-10.12-intel/egg/", line 7, in 
  File "build/bdist.macosx-10.12-intel/egg/", line 6, in __bootstrap__
cx_Oracle.DatabaseError: DPI-1047: Oracle Client library cannot be loaded: dlopen(libclntsh.dylib, 1): image not found. See for help
Poof, or maybe I should say "Boom".  Well that didn't work.

Wild goose chase

Ok, so jump into google and start searching for answers.  This is where things go south pretty fast.  There are a number of references to this issue, but nobody is really pointing in the right direction, or at minimum all the answers are very dated.

The normal answer is "you need to set environment variable" to have the correct libraries to be found.  From a legacy perspective, these would-be LD_LIBRARY_PATH and DYLD_LIBRARY_PATH.  Except these no longer work on modern OS like Sierra.  Which again is not well documented.  You can spend a lot of time digging but short answer is Python is not seeing these set even if you set them.

This then leads down another rabbit hole.  Mac OS X has System Integrity Protection (SIP), which is intended to help make sure applications do not do inappropriate things.  I'm not going to get into a lot of detail, but in short applications have to be configured at creation (link) time as to what is allowed to be called or pulled in (libraries).  I couldn't find any official Apple documents on this, but in general this does back up the above comment that you can't just set an environment variable and your program will load a somewhat random binary library.

Ok, so then you get pulled into another set of solutions.  Basically, they all say that if you put your libraries under /usr/local/lib then SIP will allow them to be loaded.  There is another set of postings that will suggest $HOME/lib is a safe zone also for SIP.  Again, I couldn't find any Apple document that stated this, nor did anyone give a lot of details other than "it worked for me".  Well it didn't work for me.

Time for the next rabbit hole, which is basically a number of postings that say, "built in Python on OS X sucks".  Well isn't that interesting.  Ok, well that might be a statement of opinion, but it doesn't provide any details.  Again, just not in my nature.

You will find postings that suggest you disable SIP, I personally don't think this is a good idea.  With a lot of years of IT experience, its best to work with security, not around it.

Finding the answer

Ok, so here is the solution I found.  I'm sure this is not the only solution, but it did work well for me.

Make sure you have your Oracle instant client installed in a good location.  I really don't think the exact location matters, use what works for you as long as you're consistent.  I stuck with the Oracle directions and used $HOME/instantclient_12_1 for this case.

I then went back to the cx_Oracle source and did the build again with one minor change:
python build
install_name_tool -add_rpath $HOME/instantclient_12_1 ./build/lib.macosx-10.12-intel-2.7/
sudo python install
Ok so what did I just do?  Well I updated the header to include a new path to locate libraries during run time. You can read more about RPATH here.  This could also be done at link time, but that is inside the process, and I didn't want to dig into that.

You should now have a working cx_Oracle driver, and you can use the Apple provided Python.

Further digging / background

With these changes, when the install is run, the Python egg is created.  This second time it includes my so slightly modified library file.  I can verify this in two ways, both using the otool command.

First we can check the .so file that is created during the build process (run this while in the cx_Oracle source directory).
otool -l ./build/lib.macosx-10.12-intel-2.7/ |grep -A 4 -B 1 RPATH
It should return something like this:
Load command 12
          cmd LC_RPATH
      cmdsize 48
         path /Users/ggordham/instantclient_12_1 (offset 12)
The Load command number might be different than 12 for your install or in future or past versions.  That just means it's the 12th location in the header.

The second way to check is after you run python with the cx_Oracle.  When you do that the egg file is opened and the .so file is copied to a temporary directory in your home directory.
So, let's do a quick test on cx_Oracle first (Note, be sure to change out of the source directory for cx_Oracle before trying this):
python -c "import cx_Oracle; print cx_Oracle.version"
Now we a temporary copy of the .so file here:
So, we can do the same test on the "run time" version of the library
otool -l $HOME/.python-eggs/cx_Oracle-6.0rc1-py2.7-macosx-10.12-intel.egg-tmp/ | grep -A 4 -B 1 RPATH

That's it, hope this helps.  I've already let the cx_Oracle developers know of this information.  Not sure if it will end up changing anything.  At a minimum, the documents should show what works and what doesn't.


Wednesday, March 15, 2017

Oracle Database - inside looking out #C17LV

It's March of 2017 and the years continue to click by at an increasing rate.
Oracle just made available the second major release of it's 12c database product.  Yes it was available in the Oracle cloud last fall, but with 420,000 customers I'm sure there are still a few of us waiting for the "run it on your own hardware" release.

This is all very timely, learning new Oracle technology has been a life long journey for myself.  My first Oracle database was version 6 which required me sitting with a consultant for a few weeks to learn the details of how to manage it and how to find what you needed in the dozen or so printed manuals.

Well it's 26 years latter, and things sure do change, but they also stay the same.  With google, My Oracle support, and countless blogs; we still search for truth.  Most of the time this means talking to a trusted, and hopefully knowledgable expert.  That discussion might be virtual, but boy is a lot lost.  I believe the statistic thrown around is something like 93% of communication is non-verbal.

For the second year in a row I'm the conference chair for IOUG at COLLABORATE 17.  This is the number one technical conference for people in the Oracle technology business, and has been for the past 17 years (having changed names just a little).  The IOUG again brings a lot of DBA centric sessions and unique opportunities:

  • Sunday pre-conference workshops on Oracle 12c new features, Cloud DBA, and SQL tuning.
  • Cloud workshop during the week with Oracle - learn how to get your Oracle system in the cloud
  • OakTable world - a mini conference in a conference put on by OakTable Oracle scientists 
  • Hands on labs throughout the week - Oracle 12c database upgrade, Apache Hadoop, Oracle Database 12c in-memory, Oracle Database 12c multitenant
  • In person networking opportunities - meet fellow professionals working on the same technical challenges
  • 220+ technical sessions, quick tips, and hands on labs about Oracle Database, Development, Engineered Systems, OEM, and more.
This year I'll be presenting four times.
  • Session 333 - Oracle and NLS - a detailed look at how data is stored in Oracle databases, and why you should always be using international character sets correctly.
    Add to your schedule: Thursday, Apr 06, 2017 (09:45 AM - 10:45 AM) Palm D 
  • Session 352- DBA 201: Database Listener registration - a quick tip detailing how the Oracle Listener becomes aware of databases, especially important for multiple networked systems like Exadata.
    Add to your schedule: Monday, Apr 03, 2017 (12:00 PM - 12:30 PM) Palm C
  • Session 196 - Cloud DBA transformation, futuristic TomorrowLand, or desolate wasteland - I'm co-presenting with another great speaker, Jim Czuprynski where we will be musing on the future of DBA's in the cloud based on 50+ years of combined experience.  Be sure to check his blog out.
    Add to your schedule: Tuesday, Apr 04, 2017 (04:15 PM - 05:15 PM) Banyan C
  • Session 10183 - Essential Skills for the EBS DBA: past and present, the future is Cloudy - Again I'm co-presenting, this time with Jeffrey Weiss about what skills will make you a better E-Business Suite Applications DBA, along with the OAUG group.  This type of cross over could only happen at COLLABORATE.
    Add to your schedule: Tuesday, Apr 4, 2017 11:00:00 AM PDT Breakers I

Note: all times are PDT local to Las Vegas.
For those that can't make it out to Las Vegas to be in person, IOUG offers a virtual conference pass. This allows remote attendees to participate in over 30 of the technical sessions. 

Jim and I will be having some special buttons for those that find us at the conference.

The future is in your hands, make sure you have the tools, and network of people to help you get there.  That's my view, from the inside of the database looking out.

If you see me in Vegas, say HI! #C17LV
Keep in touch through twitter @ggordham, blogging, or LinkedIn


Friday, September 9, 2016

Oracle OpenWorld 2016 - IOUG COLLABORATE 2017

Yes it's that time of year again, Oracle OpenWorld 2016 is upon us.  Hopefully you have your plans ready and have chosen from the 1,800+ sessions going on.  Sunday the 18th, as usual will be the annual user group mini-conference.  In Moscone West almost all the sessions will be presented exclusively by users from user groups including IOUG, OAUG, Quest and more.

As a member and volunteer of IOUG, I would be remiss if I didn't point out a great article by IOUG president Maria Anderson, outlining some of the great IOUG happenings at OOW16
"From Database 12c to PaaS – Watch for IOUG at Oracle OpenWorld 2016"

For those in the know, and if you don't know, now you do.  There is a hidden conference inside of (well next to) OpenWorld put on by the great people of the OakTable.  These sessions tend to be a little more artistic in direction, and research focused, but contain awesome technical detail.   Kellyn Pot'Vin has all the details here
Oak Table World 2016- Oracle Open World Edition!

While you might be focusing on what Oracle will be announcing in the coming weeks, or possibly strategizing for your 2017 IT plans, many of us are also preparing for COLLABORATE 2017.  IOUG is currently soliciting speakers to submit abstracts for sessions for the annual conference in April of 2017.  You can learn more at

If you are more interested in just attending COLLABORATE, registration will open on Thursday October 27th at

If you have submitted sessions before, and possibly not made the cut.  Perhaps you are wondering how you could improve your abstract or chances of getting accepted?  Veteran speaker and performance expert Craig Shallahamer has a great blog:
5 Ways To Help Get Your 2017 IOUG Abstracts Accepted

I'll be presenting Sunday Sept 18th, at  Moscone West - 3022 from 2:15pm - 3:00pm PDT, the session number UGF1765 "10 Things Every DBA Needs to Learn That Have Nothing to Do with Databases".

So if you see me out at OpenWorld, feel free to say hi, and ask some great technical questions.  I'll be running between OpenWorld, JavaOne and of course Oak Table World throughout the week.

Sunday, March 27, 2016

Oracle User Groups - Collaborate 2016

What is Collaborate 2016?  It is the yearly meeting of three of the largest Oracle product user groups in the world.  This conference brings together three unique sets of groups.  Oracle is a very large company and addresses the needs of many things in the technology world.  From the start Oracle has been a technology company, building one of the first relational database platforms, and from that time to today they continue to build  the main technology that drives modern businesses.

Somewhere in the late 1980's Oracle started building out specific application software.  Software that could be used to meet the functional needs of large companies and even governments.  The first version I used was only for financial transactions, but since then Oracle has expanded into many fields spanning all types of businesses, their flagship product: Oracle E-Business Suite.  In the 2000's Oracle has also procured other software products to extend their business application functions into Human Capital Management with Peoplesoft, Customer Relationship Management Siebel, and small to medium manufacturing businesses with JD Edwards.  Oracle's technology list goes on and on, including tools like WebCenter Portal and GoldenGate just to name a few.

Collaborate is the only conference where you can see a global collection of professionals covering all of these technologies in one place.  Bringing together the Independent Oracle Users Group (IOUG), Oracle Applications User Group (OAUG), and the QUEST user group.  Why is this unique or important?

Oracle technology is complex, sometimes it can be the most complex software in your data center.  This is not specifically by design, but with many years of design for reliability and thousands of features, this may be inevitable.  The hundreds of thousands of customers of Oracle is a testament to this.  Again at it's foundation 76% Oracle customers run the Oracle database, and all of them use Oracle Java.  Both of these require deep technical expertise, and all OAUG and most QUEST customers use these technologies to keep their businesses running 24x7.  Who keeps all this running?  Just a small group of people, whose business titles could be just about anything, but we generally call them developers, web administrators, application administrators, and database administrators (DBA).  Only the DBA seem to have been given the 3 letter acronym treatment for 30+ years, but very few go by this title any more.

Is a DBA built?  No one is born as DBA, nobody learns a software product from DNA.  Often DBA is much more of a state of mind, and of course a set of skills.  Skills learned and honed through practice, training, and making mistakes.  Often the main view of a technical expert is the lone wolf sitting in a room at a terminal.  Making genius decisions, taking big risks, and finding amazing answers at the last moment.  This Hollywood view is probably the farthest from the truth.

Everyone learns from someone.  That someone could be the technical author who wrote the manual for Oracle database install guide.  It could be the person who wrote a blog entry that you found and answers that critical question on how to setup a TNS names entry for a RAC database custom service.  Mostly we learn from our peers, fellow students in school, our coworkers, or even the person that left the system in the state you inherited it.  Now the question one has to ask is this.  Is this the best way to learn?

What if you could find the a person who has already done what you are trying to accomplish?  What if you could find someone who has done the one thing not equal to your project, but the one thing that fits into your project.  What if you could find three people that have done three differently unique things with Oracle database that you are trying to combine?

Those are the interactions that user groups make possible.  It's not the main presentation, it's the question after the presentation.  It's exchanging a business card at the end of the session.  It's meeting the person in the room waiting for the same speaker as you that just finished implementing what you are now trying to implement.  It might even be meeting the product director, or even the developer.  These are not things that happen to the lone wolf sitting in their room.  You could search google and the internet for hours or days and this would never happen.  But at Collaborate this happens a 100 times a day.

Why?  It's actually very simple.  Out of every 100 people doing Oracle work, maybe 1 does a blog.  Of 100 tasks a week that each blogger does, they may blog on one of them.  That's one article out of 10,000 possible.  Blogging takes time, DBA's don't have it.  Manuals are written in a one direction style, if you want to travel from Chicago to New York, you get on the freeway, and you drive straight, and you exit in New York.  Anything beyond that and you are on your own.

So why did I write all this?  What am I asking for?

Take time, go to a Collaborate.
Persuade the managers of tight budgets that attending Collaborate is worth weeks of google searches.
Those that go to Collaborate go to share, inform, and learn.

For me Collaborate is five 14 hour days of talking Oracle, meeting Oracle professionals, learning, and sharing.

The last 25+ years of how we got here is due to a small group of technical people that work hard, share their knowledge, and grow the profession as a whole.  The next 25 years will be no different.