Seth Miller dot org

Technical ramblings of an IT Generalist

Monitor NFS I/O

We use RMAN to backup to an NFS share. I was having some very lengthy RMAN backup times during certain time periods and the storage team was not able to correlate the slow downs to anything useful so I decided to monitor the NFS shares.

I looked at the OS Watcher logs for information about NFS, but they were severely lacking in useful information. The program nfsiostat had the information I was looking for but I wanted to collect information over different periods of time so cron was naturally the best way to schedule the collections.

However, like vmstat, iostat and most other programs of this nature, when executed, nfsiostat shows a summary since the last boot as its first iteration. Since I am not interested in the summary, I needed a way to exclude that first iteration. What better way to do line processing than to use the 40+ year old tool awk.

Finding what text to use as the separator between the iterations was easy since the first line of each iteration ends with the nfs mount I’m filtering on. I set the first parameter in the file as the mount point. The command will be executed twice, one second apart, the first being the throw-away summary and the second being the information I want to keep. There is a timestamp captured as well for each execution.

The output is captured in a file.

#!/bin/bash


NFS_IO_STAT_TARG="/backup"
NFS_IO_STAT_PARMS="1 2"
NFS_IO_STAT=/usr/sbin/nfsiostat
NFS_IO_OUT=~/nfsiostat_$(hostname -s).out
TIMESTAMP=$(date +%F_%R)_$(hostname -s)


(
echo -e "\n$TIMESTAMP\n"
$NFS_IO_STAT $NFS_IO_STAT_PARMS $NFS_IO_STAT_TARG | awk 'BEGIN { VAR="'$NFS_IO_STAT_TARG':$" } $0 ~ VAR { ccount++ }; ccount >= 2 { print }'
echo ====================================================
) >> $NFS_IO_OUT

Tnsnames.ora and XML Solution

I have always found the Oracle connection strings (typically tnsnames.ora) difficult to manage. Even when using LDAP instead of the file, the connection strings still need to be managed even though it only has to be done in one place. After some planning and learning (and relearning) some atrophied perl skills, I created a set of scripts to manage the Oracle connection strings using XML and perl.

If you look at the Oracle connection string, it looks a lot like XML. Instead of tags using the format

<ELEMENT>foo</ELEMENT>

it uses

(foo)

I converted the existing tnsnames.ora to XML using Vim’s search and replace and a whole lot of regexp. After converting the file and having a parseable XML file, I realized that the possibilities with this are endless. It doesn’t have to be limited to just the connection strings, a single database entry can contain any amount of information you might want to track with each database. But, we’ll get to more of that later.

Here is what an Example XML entry will look like.

The script requires certain elements to properly function. I will detail them here using XPATH syntax. I have chosen /TNSNAMES as the root but it doesn’t really matter what you use. The required children are as follows:

TNS[@NAME=""]
TNS/DESCRIPTION/ADDRESS_LIST/ADDRESS
TNS/DESCRIPTION/CONNECT_DATA
TNS/DESCRIPTION/CONNECT_DATA/SERVICE_NAMES/SERVICE_NAME[@ID="1"]

There are many more options to add to an Oracle connection string, and there will be additional functionality added in future releases but for now, these additional paths are optional.

TNS/DESCRIPTION/*
TNS/DESCRIPTION/CONNECT_DATA/INSTANCES/INSTANCE[@ID="1"]

The INSTANCES/INSTANCE[@ID="1"] was added because I am using this script to create multiple entries for the same connection to be used in the Oracle wallet for different users. When I am connecting as the SYS user to a database to change the password, I am specifying that I want to connect to (CONNECT_DATA(INSTANCE=ORCL1)) so that I know which password file is being changed, therefore making it easy to then copy that changed password file to the rest of the nodes in a cluster. The script is shown here and is being hosted on GitHub. The script, the example XML file above and the result file below are all directly linked to GitHub and will change as updates are made.

Details on how to use the script can be found in the script and listed using the help flag for brief information and the man flag for the full documentation.

This shows what the XML example file above looks like after being parsed using no script options.

I will update this post with usage examples and details of additional functionality as it is added.

I have also written another script that parses the same XML format but the output produces a connections file that can be loaded into Toad. I have my install of Toad set up to use an Oracle wallet that I have populated with all of the database passwords that I use. I use the parser script to produce both the tnsnames.ora that I am using for the connection strings as well as the connections text file that I loaded into Toad to match. I call this script ToadBuilder and I will load it into GitHub as well. I haven’t decided if I will combine the two scripts yet or not since there is a lot of repeated code but I don’t want the script options to become too complicated.

Please feel free to post feedback or contribute to the scripts. I am an amateur with perl and improvements are very much welcome.

Tablespace Size Report Script

I actually found it a little difficult to find a good sql script for reporting tablespace size so I took one that was almost there which I believe came from Oracle-Base and modified it to fit my needs. Feel free to comment or modify.

How Far Back Can I Flashback My Database To?

Flashback Database
Here is a useful query to find out the current limit of flashback database. Change the ‘US/Central’ to your local time zone to convert the time zone your database is in to your local time zone.

The first column is the earliest point in time you can flashback the database to. The second column is the number of hours between now and the earliest point in time you can flashback your database to truncated to one decimal point.

select cast(
            from_tz(
                    cast( oldest_flashback_time as timestamp )
                   ,dbtimezone )
            at time zone 'US/Central' as date ) oldest_db_fb
       ,round((sysdate - oldest_flashback_time) * 24, 1) oldest_db_fb_hours
  from v$flashback_database_log;

SyntaxHighlighter Bash Edits

I installed the SyntaxHighlighter Evolved plugin to better display code in my blog posts. I will be going through old posts and updating them so that any code that is not pulled directly from GitHub uses it.

I’m not a web developer so if I sound like a novice, it’s because I am. I made these edits by looking at examples and copying the work of others. I welcome feedback and corrections.

I generally use the Bash/Shell brush but found it lacking a few features that are pretty basic when looking at shell code so I’ve added them to my templates.

I usually include the shell prompt in my code boxes to differentiate between commands but find it painful when I am trying to select from someone’s code snippet and have to select “around” the prompts so I added a css context that disallows a select and made all of my prompts use that context. Here’s an example. Try to select the code in this box and paste it somewhere else.

[root@shell prompt ~]# The prompt is not selectable but this text is.

There are two parts to this. One is the css piece that I just added into the shThemeDefault.css.

.syntaxhighlighter .bashprompt {
  color: brown !important;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

The second part is the addition of the third line to the shBrushBash.js javascript brush file.

		this.regexList = [
			{ regex: /^#!.*$/gm,											css: 'preprocessor bold' },
			{ regex: /^\[[^\]]+]# ?/g,										css: 'bashprompt' },
			{ regex: /\w+==?/g,												css: 'variable' },
			{ regex: /\/[\w-\/]+/gm,										css: 'plain' },
	//		{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments,		css: 'comments' },		// one line comments
			{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,			css: 'string' },		// double quoted strings
			{ regex: SyntaxHighlighter.regexLib.singleQuotedString,			css: 'string' },		// single quoted strings
			{ regex: new RegExp(this.getKeywords(keywords), 'gm'),			css: 'keyword' },		// keywords
			{ regex: new RegExp(this.getKeywords(commands), 'gm'),			css: 'functions' }		// commands
			];
	}

It is a regular expression that says; look for a left bracket at the beginning of the line followed by one of more characters that are not right brackets, followed by a right bracket and a pound sign and zero or one space and assign the whole thing to the bashprompt css context.

There are two other things I have changed so far. I commented out line six which is the one line comment because it was messing with my root prompt and I added line four for highlighting variable assignments.

		this.regexList = [
			{ regex: /^#!.*$/gm,											css: 'preprocessor bold' },
			{ regex: /^\[[^\]]+]# ?/g,										css: 'bashprompt' },
			{ regex: /\w+==?/g,												css: 'variable' },
			{ regex: /\/[\w-\/]+/gm,										css: 'plain' },
	//		{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments,		css: 'comments' },		// one line comments
			{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,			css: 'string' },		// double quoted strings
			{ regex: SyntaxHighlighter.regexLib.singleQuotedString,			css: 'string' },		// single quoted strings
			{ regex: new RegExp(this.getKeywords(keywords), 'gm'),			css: 'keyword' },		// keywords
			{ regex: new RegExp(this.getKeywords(commands), 'gm'),			css: 'functions' }		// commands
			];
	}

Oracleasmlib Not Necessary

Not only is it not necessary, but it may not even be available. This is in fact exactly what I discovered recently when I installed the Oracle Linux 6u3 and tried to install Clusterware on it.

There are three packages that one would normally install as part of ASM:

  • oracleasm-$( uname -r ) # Kernel driver
  • oracleasmlib # ASM libraries
  • oracleasm-support # Support scripts

In Oracle Linux 6, the driver is built into the kernel so it is no longer necessary to install the first item in the list. The OTN site for ASM claims that the

“oracleasm-support and oracleasmlib packages still need to be installed from ULN.”

However, say you are like me and too lazy to try to get the necessary credentials out of the Unix team for access to ULN and you therefore use the publically available yum repository. The Oracle Linux 5 “Latest” repo has the oracleasm-support packages and the oracleasm kernel drivers for each kernel released for that version. In the Oracle Linux 6 “Latest” repo, only the oracleasm-support packages are there. The oracleasmlib packages are not in any of the public yum repositories. The oracleasmlib package is available for all versions in ULN though as well as a manual download as this OTN note clarifies.

“While the driver and support tools are on the Oracle Linux installation media, the oracleasmlib RPM is not (this package allows Oracle to access the kernel driver). This package is only available on ULN. Subscribers to ULN can use yum(8) or up2date(8) to download and install the package on their servers. Non-subscribers are free to use the similar package built for RHEL on their Oracle Linux machines. New ULN subscribers that happen to be using the RHEL version of the oracleasmlib package are advised to update the package from ULN.”

In other words, if you want oracleasmlib and you don’t have access to ULN, you can download the RPM manually from here. Make sure to download the one that matches your architecture (x86 or x86_64).

Once you have an ASM disk created through oracleasm, there are two ways to test it to make sure it works. One is to use a program that is included in the oracleasmlib package called oracleasm-discover. Running oracleasm-discovery will show a simple text output similar to the following.

[root@generic ~]# oracleasm-discover
Using ASMLib from /opt/oracle/extapi/32/asm/orcl/1/libasm.so
[ASM Library - Generic Linux, version 2.0.4 (KABI_V2)]
Discovered disk: ORCL:DATA1 [192717 blocks (98671104 bytes), maxio 512]
Discovered disk: ORCL:DATA2 [1012032 blocks (518160384 bytes), maxio 512]

You’ll notice that this is using the 32 bit library. The OS that I tested this on is 64 bit and I spent a lot of time wondering why I could see the disks with oracleasm-discover but not with asmca until I came across MOS article 1444115.1. Under Case #1, there is a note about using the wrong library. I uninstalled the 32 bit version and installed the 64 bit version. oracleasm-discover still works but this time I was also able to see the disks in asmca.

[root@generic ~]# rpm -ev oracleasmlib

[root@generic ~]# rpm -ivh http://download.oracle.com/otn_software/asmlib/oracleasmlib-2.0.4-1.el5.x86_64.rpm
Retrieving http://download.oracle.com/otn_software/asmlib/oracleasmlib-2.0.4-1.el5.x86_64.rpm
warning: /var/tmp/rpm-tmp.ZhUEGs: Header V3 DSA/SHA1 Signature, key ID 1e5e0159: NOKEY
Preparing... ########################################### [100%]
1:oracleasmlib ########################################### [100%]

[root@generic ~]# oracleasm-discover
Using ASMLib from /opt/oracle/extapi/64/asm/orcl/1/libasm.so
[ASM Library - Generic Linux, version 2.0.4 (KABI_V2)]
Discovered disk: ORCL:DATA1 [192717 blocks (98671104 bytes), maxio 512]
Discovered disk: ORCL:DATA2 [1012032 blocks (518160384 bytes), maxio 512]

110212 1750 Oracleasmli15 Oracleasmlib Not Necessary

Now back to the title of this post. Oracleasmlib is not necessary to have in order to use ASM. It only offers the management of the disk devices to make them accessible to ASM without a lot of manual intervention. If you would like to understand the philosophical differences between using oracleasmlib or not, there is plenty of debate over at the Oracle Forums.

Very simply, the only thing ASM needs to consider a candidate ASM disk is a block device with the appropriate ownership and permissions. A simple test is to directly change the ownership and permissions of the block devices you have created for ASM and use asmca with a different discovery path that will find them.

[root@generic ~]# service oracleasm stop
Dropping Oracle ASMLib disks: [ OK ]
Shutting down the Oracle ASMLib driver: [ OK ]

[root@generic ~]# rpm -ev oracleasmlib

[root@generic ~]# rpm -ev oracleasm-support
warning: /etc/sysconfig/oracleasm saved as /etc/sysconfig/oracleasm.rpmsave

[root@generic ~]# chown grid.dba /dev/{sdb1,sdc1}

[root@generic ~]# chmod 0660 /dev/{sdb1,sdc1}

[root@generic ~]# ll /dev/{sdb1,sdc1}
brw-rw---- 1 grid dba 8, 17 Nov 2 06:53 /dev/sdb1
brw-rw---- 1 grid dba 8, 33 Nov 2 06:55 /dev/sdc1

110212 1750 Oracleasmli25 Oracleasmlib Not Necessary

110212 1750 Oracleasmli35 Oracleasmlib Not Necessary

That was a lot of work, especially if you are adding more devices and it won’t survive a reboot. Fortunately, there is a supported method to do this with more automation (and more importantly to survive a reboot) using a native Linux tool called “udev”. udev already does what we just did with all of the other devices present in /dev. We just need to tell it what specifically to do by creating a configuration file.

[root@generic ~]# DEVS=(sdb sdc)
NUM=$( sed -r -n -e '$!d' -e 's/.*NAME="asm-disk([^"]+)".*/\1/p' /etc/udev/rules.d/99-oracle-asmdevices.rules 2>/dev/null )
NUM=${NUM:-0}
for I in ${DEVS[*]}; do
  ((NUM++))
  echo 'KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="'\
  "$( /sbin/scsi_id -g -u -d /dev/$I )\", NAME=\"asm-disk$NUM"\
  '", OWNER="grid", GROUP="dba", MODE="0660"'\
  >> /etc/udev/rules.d/99-oracle-asmdevices.rules
done

[root@generic ~]# cat /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="1ATA_VBOX_HARDDISK_VBa70ffc27-81275aac", NAME="asm-disk1", OWNER="grid", GROUP="dba", MODE="0660"
KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="1ATA_VBOX_HARDDISK_VB3a0c6747-92f57443", NAME="asm-disk2", OWNER="grid", GROUP="dba", MODE="0660"

[root@generic ~]# udevadm test /block/sdb/sdb1
udev_rules_apply_to_event: OWNER 54322 /etc/udev/rules.d/99-oracle-asmdevices.rules:2
udev_rules_apply_to_event: GROUP 54322 /etc/udev/rules.d/99-oracle-asmdevices.rules:2
udev_rules_apply_to_event: MODE 0660 /etc/udev/rules.d/99-oracle-asmdevices.rules:2
udev_rules_apply_to_event: NAME 'asm-disk1' /etc/udev/rules.d/99-oracle-asmdevices.rules:2
udev_rules_apply_to_event: PROGRAM '/sbin/scsi_id -g -u -d /dev/sdb' /etc/udev/rules.d/99-oracle-asmdevices.rules:3
util_run_program: '/sbin/scsi_id -g -u -d /dev/sdb' started
util_run_program: '/sbin/scsi_id' (stdout) '1ATA_VBOX_HARDDISK_VBa70ffc27-81275aac'
util_run_program: '/sbin/scsi_id -g -u -d /dev/sdb' returned with exitcode 0
udev_node_add: creating device node '/dev/asm-disk1', devnum=8:17, mode=0660, uid=54322, gid=54322
udev_node_mknod: mknod(/dev/asm-disk1, 060660, (8,17))
udev_node_mknod: set permissions /dev/asm-disk1, 060660, uid=54322, gid=54322
node_symlink: atomically replace '/dev/block/8:17'


[root@generic ~]# udevadm control --reload-rules

[root@generic ~]# udevadm control --start-exec-queue

[root@generic ~]# partprobe /dev/sdb1

[root@generic ~]# partprobe /dev/sdc1

[root@generic ~]# ll /dev/asm*
brw-rw---- 1 grid dba 8, 17 Nov  2 06:33 /dev/asm-disk1
brw-rw---- 1 grid dba 8, 33 Nov  2 06:33 /dev/asm-disk2

110212 1750 Oracleasmli45 Oracleasmlib Not Necessary

110212 1750 Oracleasmli55 Oracleasmlib Not Necessary

Finally, here is a good overview of the current state of Oracle ASMlib from Wim Coekaerts, the Senior Vice President of Linux and Virtualization Engineering at Oracle.

  • Oracle ASM does not in any way require ASMLib to function completely. ASMlib is a small set of extensions, in particular to make device management easier but there are no extra features exposed through Oracle ASM with ASMLib enabled or disabled. Often customers confuse ASMlib with ASM. again, ASM exists on every Oracle supported OS and on every supported Linux OS, SLES, RHEL, OL without ASMLib
  • Oracle ASMLib userspace is available for OTN and the kernel module is shipped along with OL/UEK for every build and by SuSE for SLES for every of their builds
  • ASMLib kernel module was built by us for RHEL4 and RHEL5 but we do not build it for RHEL6, nor for the OL6 RHCK kernel. Only for UEK
  • ASMLib for Linux is/was a reference implementation for any third party vendor to be able to offer, if they want to, their own version for their own OS or storage
  • ASMLib as provided by Oracle for Linux continues to be enhanced and evolve and for the kernel module we use UEK as the base OS kernel

References:

http://public-yum.oracle.com
http://www.oracle.com/technetwork/server-storage/linux/asmlib/index-101839.html
http://www.oracle.com/technetwork/server-storage/linux/uln-095759.html
https://support.oracle.com/epmos/faces/DocumentDisplay?id=1444115.1
http://oracle-base.com/articles/linux/udev-scsi-rules-configuration-in-oracle-linux-5-and-6.php
http://fritshoogland.wordpress.com/2012/07/23/using-udev-on-rhel-6-ol-6-to-change-disk-permissions-for-asm
https://blogs.oracle.com/wim/entry/asmlib

Discovering Systemd

I finally started playing with my Raspberry Pi (RP) after looking at it for a month still in the package. I looked at the available pre-built distros and immediately clicked on Arch Linux Arm. I have installed Arch Linux before on an older laptop that I have and was fascinated by it for no other reason than it was so different from the Red Hat type systems that I am so used to. If the terms pacman or rc.conf aren’t familiar to you, give Arch Linux a try and see what you think.

Instead of seeing the familiar boot process of Arch Linux when I powered up the RP, I got a sub-10 second boot with a few messages appearing after the login prompt is already on the screen. Granted, I am booting from an SD card but considering the entire compute power consists of 512MB of RAM (total being shared with the GPU) and a 700MHz processor, that is crazypants fast.

I started exploring the file system and hit one dead end after another looking for familiar files. /etc/inittab, /etc/rc.conf, chkconfig, etc. couldn’t be found. I turned to the documentation. Sure enough, SysVInit had been replaced with Systemd. I had to reset everything I knew about the Linux boot process and learn from scratch which brings me to now. I understand the basic layout and how to query systemd but that’s about it. I’m looking for some good documentation to load onto my Kindle.

My official job title is Oracle DBA but my roots lie in Linux administration. Many of my servers run Oracle Linux which is ostensibly a port of Red Hat Linux. The Wikipedia page for systemd says that RHEL 7 will at least support systemd. Despite the myriad forum posts of neophytes crying about how much more work it will be for sysadmins to support systemd, I see it as an approaching standard along with GPT replacing MBR. I want to learn about this fascinating technology and be on the leading edge of it when it hits mainstream. Next step, talk to the Oracle Linux SE’s and find out where and when.

OpenWorld 2012 Presentation

My presentation for Oracle OpenWorld was titled “Efficient DBA: Save Time by Reducing Command Line Keystrokes”. Here is the slide deck that accompanied that presentation. The scripts that were included are in the notes portion of the slide deck. I have many additional scripts that I will include in the project called the “DBA Toolkit”. Since these scripts are updated often, I will keep them in a Git repository along with most of the files I post to the site. Feel free to provide feedback and changes/improvements.

Efficient DBA: Save Time by Reducing Command Line Keystrokes

Debugging PL/SQL

I recently wrote a stored procedure that wasn’t working so I decided to spend a little time putting in proper debugging. I know there are better ways of doing it including utilizing the IDE capabilities but I just wanted something simple that would be portable with the code.

Oracle OpenWorld 2012 Survey Feedback

OpenWorld exceeded my expectations for both of the last two years that I attended. I have already started planning for 2013 and can’t wait to see what OpenWorld has in store. I have a number of suggestions for improvement, a number of complaints that the planners of the event probably have no control over and both of these are heavily outweighed by my appreciation and praise for the return of value I receive for the price that I and my employer pay for OpenWorld.

2011 was my first attendance of OpenWorld. I planned very poorly for both the event and logistics. The closest decently priced hotel I could find that wouldn’t require me to share a bathroom was in Sausalito. This was, of course, completely my fault and I planned much better this year. I booked my hotel and flight eight months before the event and stayed in Union Square. However, I have a couple of colleagues that ran into the same problem this year that I did the previous and were forced to stay across the bay. I’m sure there is little or nothing to be done about this issue since it is increasingly difficult to fit tens of thousands of people in a relatively small area. But it is worth noting the issue.

The tent over Howard Street is nothing short of incredible. I wish I would have attended OpenWorld before the tent existed to get a real feel for the contrast but I can appreciate it just the same. The extra room the tent provides and advantage to the attendees to be able to walk between the two locations makes it almost necessary and I can’t imagine the landscape without it.

San Francisco is known for its leniency and some would say encouragement of homelessness on its streets. As well behaved as they appear to be, no one (especially 50,000+ people that dedicate themselves to their career) likes to see filthy people sleeping on the sidewalk. No one likes to be approached for money every 50 feet. No one likes to see people rummaging through garbage cans or dumpsters. As much money as OpenWorld (and other large conventions like VMworld) bring into the city, it would seem that the city could at least temporarily help with this problem and make the attendees that bring in so much money feel more comfortable.

Most attendees come for the sessions. These are the meat of the event and should be treated as such. There is no doubt from the quality of the speakers that Oracle and the user groups are very careful about who is selected to speak. The setup of each room including a stage, large screen displays, microphones and sound and technicians in each one makes for an ideal environment for learning and absorbing information.

However, distractions in the sessions are a problem, for me at least. Perhaps I am spoiled by Toastmasters but it is explicitly requested at the start of every Toastmasters meeting that electronic devices be silenced out of respect for the speaker and the audience. I heard this request only once this year at OpenWorld and it was all but ignored. The speakers go through a lot of preparation and hard work on their presentations and I believe this is something they should be afforded. This would also include the constant clicking and beeping of cameras, smart phones and tablets taking pictures of the screen. This practice continues to baffle me. I don’t understand why audience members would take a grainy picture of every slide when the entire presentation is made available in high quality shortly after the event. The only conclusion I can come to is that people are not aware that the presentation will be available.

The refillable water bottles and the ubiquitous refill stations are another fantastic idea. Not only does it do a tremendous amount to reduce trash imposed by plastic cups and bottles, it also allows people to carry water with them, encouraging them to drink more of it. The HCL sponsored glass bottles last year were perfect for the reasons that they could hold a good amount of water and were sealable so they could be put into one’s bag and transported. This year there were more water refill stations available which made it even easier to refill our cups. However, the cups that were included with the materials were a gigantic let-down. They were not sealable making screw-top plastic water bottles a much better alternative to transport water. They were made of plastic instead of glass, increasing the environmental impact and they were cheap and mine ended up leaking after the second day of use.

My reaction to the bag that was handed out with the materials is exactly the opposite of the cup. The bag this year is easily superior to that of last year in style and functionality. I did not use the bag I received last year because it just didn’t have enough functionality to make it worth using. Whereas the bag I received this year has exactly what I need in a daily work bag and I will start using it as soon as I return to work.

There were a lot of bloggers covering OpenWorld. I searched several times for news from the people covering the event. It was easy to find the Oracle blog posts through the Oracle website but surprisingly there is no link for the independent blogs anywhere on the OpenWorld website. I also didn’t find any collection of these bloggers anywhere on OTN, IOUG or other sites I thought would be a good place for them

The “mobile app” that was used this year was useful at best. I quote “mobile app” because a website is not an app. It became unresponsive several times of each day. It was painfully slow when transitioning between screens and didn’t offer enough information. It was also difficult to find. I looked for an “app” for several hours before I realized that the “app” was a website. I know that I was not the only that had issues with it. I met several people that just took screenshots of their schedules instead of using the app because of the issues. On the other hand, the app from last year was incredibly useful and fast. I still had it loaded on my phone and kept making futile checks to see if it was updated.

The social networking locations are awesome. My second goal this year was to network with as many people as possible and being able to sit across from someone in any building and on any floor made that goal very achievable. I also love that there are so many outlets available in those locations for charging electronic devices that are so ubiquitous in this industry. I rarely see an empty seat in these locations and they are always filled with conversation.

I utilized the speaker lounges as well as the certification lounge liberally. I very much appreciate that the attendees that choose to devote so much to their career by becoming certified and speaking at this conference get a little bit of a special treatment. It is nice that when I have to skip meals and need a hot coffee and a snack that it is always available in one of these locations.

The design of the ID pouches is great in many ways. The extra pocket that holds the lunch ticket and information packet is very useful and the information that the booklet provides is also valuable. The name tag is easily readable and really helps to identify people especially when you recognize someone but can’t immediately remember their name. The adhesive tags that attach to the pouch are right up there on my list of most inspirational ideas at OpenWorld. They are useful and effective for so many obvious reasons and I hope they continue to become more heavily utilized. The one correction I would make is to find a way to either keep the name tags facing out at all times or to make them show identification regardless of the direction they are in.

I filled out every survey that was requested. I found them to be simple enough that most people would take the time to fill them out honestly, yet have enough substance to give the speaker valid criticism and praise. I do think it would be valid however to have a freehand field much like this one to offer further feedback.

The evening events are superbly planned and executed. The talent, food, activities and locations leave nothing to be desired. I can’t think of anything that would make events any better.

I am a huge fan of ebooks. In fact, I rarely buy paper books anymore. Especially technical books since they are often large and heavy. I was shopping at the book store in Moscone West and was ready to buy a couple of books but was told that they were not selling ebooks. I wonder how many more would have been sold, had the same offer of 20%/25% off would have been offered to digital books as well as paper. I also was fully prepared to purchase a shirt but my size was not available in any of the button-down styles.

The staff I had contact with, whether they were registration staff, security, badge scanners for the presentations, room attendants, janitorial staff or information desk were all friendly and accommodating. I’m not sure how that can be since they are a mixture of different groups with different employers, but it definitely enhances the experience of the convention.

I am proud to be an ambassador for Oracle products. I am grateful to have a career that involves my passion and to have a passion that drives my career. It always blows me away that I get paid to do what I love. When I show up in San Francisco every year, it never ceases to amaze me that I get to be surrounded by people that feel the same way I do. I appreciate the opportunity to give this type of feedback and I will do my best to offer it again if it helps to make a better OpenWorld.