Alan M Williams .net

I volunteer, love dogs, cycle, day dream, ponder, tinker, practice yoga

About Me

<coming>

Profile

Avid Technologist and Database Solutions Architect
Information Technology and Services | San Francisco Bay Area, US

Summary

Technology Evangelist, Database Architect, Administrator, Engineer, Analyst, Project Manager in a wide variety of business applications with strong interests in database solution architecture, cloud computing, performance tuning and security.
Specialties: Oracle (architecture/design/performance tuning, security on VLDBs), MySQL, Amazon RDS/EC2/S3, UNIX/Linux, solution design/architect

Experience

  • Jan 2012 - Present
    Membership Director / Northern California Oracle Users Group (NoCOUG)
  • Nov 2006 - Present
    Oracle Database Administrator / Autodesk
  • Oct 2005 - Present
    Network Operations Center Team Lead / Autodesk
  • Jan 2001 - Present
    Systems Analyst / Abbott Laboratories
  • Feb 2000 - Present
    IT Manager / Southern Valve & Fitting USA
  • Jun 1999 - Present
    Systems Engineer III / CyberGate\ValueWeb

Education

Additional Information

Websites:
Interests:
technology, computers, electronics, databases, oracle, robotics, computer forensics, lasers, building, designing, cycling, investing, driving, travelling, analytics, music, motorcycles, cloud computing

Posts

March 30, 02:23 AM

To my joy today I was pleased to read about Amazon’s two new offerings, the Amazon Cloud Drive and the Amazon Cloud Player. The first one allows you to upload any file up to 2GB in size to your online account. 5GB of space is included for free, however if you purchase an MP3 Music Album your account is automatically upgraded to 20GB for free (first year only). The storage prices are quite competitive and as should be expected it’s all hosted on Amazon’s Web Services infrastructure, particularly S3. This means that you get the typical reliability and availability like any S3 deployment.

Regarding the pricing, so it works out to be $1 per GB per year, so 20GB = $20 and 100Gb = $100 and 1TB = $1000, that’s much cheaper compared to most comparable services. Two things that are missing from Cloud Drive that I’d love to have are:

  • ability to mount it as a drive from any OS, specifically Mac, Windows and Linux
  • Online backup capability

This is only version 1 so can’t expect it all but hopefully these are both on the roadmap.

Then there’s the Amazon Cloud Player which sits on top of Cloud Drive but is essentially for all your music. So say you purchase an MP3 album from Amazon, you can store it for free (this doesn’t count against your Cloud Drive storage allocation) and play it from anywhere in the world. How cool is that? Also, they took it a bit further by allowing you to upload all your DRM-free music that’s already on your machine to Cloud Drive. You will need to install their Amazon MP3 Uploader (and Adobe AIR) app which courses through your computer (including iTunes library) see what’s DRM-free, compares it to your contents on Cloud Drive to make sure you’re not uploading something that’s already there, then starts the process. It tells you how much will be uploaded and projects how much time it will take. My job looked like this:

…so you can see, I’ll be here for a while.

There’s been rumors that both Google and Apple are working on similar technologies but looks like Amazon beat them to the game. Apple I would have expected to be the first and was the one I was rooting for the most simply because I can’t wait for the day that I never have to plug my iPhone in to sync. The year is still young so hopefully this will come, until then I’ll enjoy the Amazon’s new elegant offerings. I’ll end by saying that Cloud Player so far is working really well. I listened to Elton John’s “Rocket Man – Number Ones” in its entirety with no skips and very acceptable clarity. One thing missing though, no iPhone App.

_Alan

 
January 31, 04:12 AM

Just completed my first installation of RAC One Node (11.2.0.2) on a 2 node Linux cluster. Everything went surprisingly flawless however I noticed that the instance names all have an “_” to denote them from each other. By that I mean, the first instance is <DBNAME>_1 and the second is <DBNAME>_2. This seems a bit strange since “real” RAC is just 1 and 2, without the “_”.

Looking at the documentation I do see that underscores are not allowed in SID names so what gives? Is this just an exception for RAC One Node. Personally I’d prefer without the underscore. I’ll put in an SR with Oracle Support to try to get some clarification on this.

 
January 06, 02:06 AM

I just read an article about today’s highlights from CES and boy was I impressed by the announcement of the upcoming Motorola ATRIX 4G.

Here are some of the top features:

  • NVIDIA® Tegra™ mobile processor
  • 4.0″ QHD display
  • MOTOROLA Laptop Dock and HD Multimedia Dock
  • High performance 1 GB RAM
  • Advanced fingerprint recognition reader
  • Android™ 2.2 operating system
  • Front-facing VGA video camera
  • Long-lasting 1930 mAh battery

The first thing that stuck out was the fingerprint reader, this has to be one of my top requests in smartphones for the past couple years. I’ve been spoilt by my laptops which both have a biometric reader that allows me to unlock the screen or log into the system in a split second instead of the few seconds it takes me to type my long and overly crypted passwords. I know it’s just a few seconds but it can be a bit annoying after a while. The ATRIX’s reader is on the back so it stays out of the way when you’re not swiping.

My second treat with this phone is the laptop and multimedia docks. Hmmm this means I might not need a netbook or tablet after all, let’s see.

What I find odd however is that it comes with Firefox built in, no mention of Chrome, but this is Android though so, um, what gives? Again this we’ll see too as more information comes out.

For now, ATT has put together a very nice landing page with pictures and videos that are worth reviewing for more information. Oh and what a bummer there’s no mention of Verizon for this guy.

 
January 04, 04:43 PM

Personally I’m definitely a texter, you don’t want to know the obscene amount of texts I rack up every month, but for some reason unless I’m in the car, I don’t typically care much for talking on the phone. I think I like the casualness of texting in that I can respond whenever and it doesn’t take too much focus or attention.

What do you think?

Take Our Poll

 
January 04, 03:03 PM

Well here I am getting my eyes checked to start off the new year. Getting a field of vision test done today. Those tests always play mind games on me because after a point I begin to think that I’m see the dots everywhere but not very sure so keep pressing the button over and over. So far I’ve always passed with flying colors, maybe that’s why

 
January 04, 03:47 AM

Just read an article on Mashable about the WordPress challenge to post either every day or every week in 2011 and have to admit that it has inspired me. It was something that I’ve been wanting to do all along but hopefully now that I’m signed up they’ll nag and bug me enough that I’m forced to post something at least once a week.

Wish me luck!

_Alan

 
July 23, 05:35 PM

A few months ago when PSU1 was released for 11gR2 it was such a laborious task to apply it in a RAC environment. So many commands, and so many steps but now with PSU2 the documentation was rewritten to make use of opatch auto. At first I thought this was a newly created feature but apparently the “auto” clause has been around since at least 10g. Nonetheless it took a previous 90 minute task down to about 20 minutes most of that involving simply watching the screen as it does its thing. You do have to baby sit it because every once in a while it requires user intervention to press the “y” or “n” allowing it to continue. I do believe there’s an option to force “y”‘s however.

To install PSU2 in our RAC cluster it essentially came down to these steps:

1) Check that OPatch is version 11.2.0.1.3 (in GI and RDBMS OH), if not update using patch 6880880

$ORACLE_HOME/OPatch/opatch lsinventory

2) Complete OCM response file (in GI and RDBMS OH)
$ORACLE_HOME/OPatch/ocm/bin/emocmrsp
3) Check Opatch integrity, from any OH on each node run:
$ORACLE_HOME/OPatch/opatch lsinventory -detail -oh /local/oracle/product/grid11.2.0.1/
$ORACLE_HOME/OPatch/opatch lsinventory -detail -oh /local/oracle/app/product/db11.2.0.1
4) Check for any conflicts by running from the patch unzipped folder (Note: patch 9655006 includes both the RDBMS and GI PSU):
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir ./9655006
5) Run as root from the GI Oracle Home in the same folder where the PSU for both the DB and GI were unzipped:
sudo $ORACLE_HOME/OPatch/opatch auto ./9655006/
6) Run the post-install scripts
All done. Quick and easy. Thanks Oracle!
 
February 24, 01:57 PM

A while back I had to migrate databases from one Oracle Home to another on the same server but before removing the old location I wanted to be certain that there was nothing left running from it. This particular server had a number of databases running so there was a chance that I could have missed one.

I used the lsof command (available both on Linux and Solaris) to find what processes were running out of the old Oracle home. Here’s how:

1) In every Oracle Home there’s an executable appropriately named “oracle” which is the main file that allows a database to run in that particular OH. From the old oracle home (using either sudo or root):

oracle@oralab02 bin# pwd
/local/oracle/product/db11.2.0.1/bin
oracle@oralab02 bin# sudo /usr/sbin/lsof oracle
There will be no output as above if there are no processes using the Oracle Home. If I do this on the new Oracle Home where there are processes using the oracle executable:
oracle@oralab02 bin# pwd
/local/oracle/app/product/db11.2.0.1/bin
oracle@oralab02 bin# sudo /usr/sbin/lsof oracle
COMMAND   PID   USER  FD   TYPE  DEVICE      SIZE    NODE NAME
oracle   1018 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   1476 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   1850 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3415 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3421 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3423 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3425 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3427 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3429 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3431 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3433 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3435 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3437 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3439 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3441 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3459 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3461 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3463 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3469 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3472 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3474 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3476 oracle txt    REG 253,288 211004337 3295242 oracle
oracle   3478 oracle txt    REG 253,288 211004337 3295242 oracle
You can then use the second column (PID) to find out more information about the process:
oracle@oralab02 bin# ps -ef | grep 1018
oracle    1018     1  0 03:34 ?        00:02:17 oracleTSTSTG042 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
root     10181  3639  0 12:58 ?        00:00:00 sshd: oracle [priv]
oracle   10183 10181  0 12:58 ?        00:00:00 sshd: oracle@pts/0
oracle   10184 10183  0 12:58 pts/0    00:00:00 -bash
oracle   17798 10184  0 13:51 pts/0    00:00:00 ps -ef
oracle   17799 10184  0 13:51 pts/0    00:00:00 grep 1018
oracle@oralab02 bin#
From this we can see that daabase instance TSTSTG042 is running out of this Oracle Home.
Another thing to check is to see if there are any processes that have the same path as the Oracle Home:
oracle@oralab02 db11.2.0.1# ps -ef | grep “/local/oracle/app/product/db11.2.0.1″
oracle    4992     1  0 03:00 ?        00:00:00 /local/oracle/app/product/db11.2.0.1/ccr/bin/nmz -cron -silent
oracle   22471 10184  0 13:54 pts/0    00:00:00 grep /local/oracle/app/product/db11.2.0.1
oracle@oralab02 db11.2.0.1#
Here we see that ccr (Oracle Configuration Manager) is also running from this OH.
Now there should be no doubt that an OH is really unused before it’s de-installed.
 
September 01, 05:24 AM

After installing Snow Leopard this past weekend I quickly found out that I couldn’t get Junpier’s Network Connect to install from Safari. I kept getting the error:

Could not launch. Please restart the web browser and try again

Looking on all the forums many of the suggestions were to run the following commands:

sudo chmod 755 /usr/local/juniper/nc/[version number]/

sudo mkdir ‘/Applications/Network Connect.app/Contents/Frameworks’

The thing is, since Network Connect wasn’t even installing the first command above would fail.

The workaround? Install Network Connect using the standalone installer (available either from your Network Administrator or from a google search for networkconnect.dmg). Don’t worry if the installer that you find online is older than what your company supports because once you successfully connect it will automatically be upgraded. So once manually installed with the standalone installer and BEFORE running network connect, run the 2 sudo commands above.

NOTE: If Network Connect is upgraded when you try to connect, then you’ll need to run the 2 sudo commands again prior to successfully login in with the new version.

I’ve heard that this is all fixed with version 6.5 of Network Connect, however my company doesn’t yet have that version so I can’t yet validate whether that’s true or not.


 
June 27, 01:08 AM

Today I got a request to transfer 20 tables from a large database that’s local to another database across the world in Shanghai. The source database is 1.7Tb in size and the destination is 1.1Tb so transferring the entire database (which was the original request) was completely out of the question. As a compromise they agreed to only copy a subset of data for now, 1 month, for 10 tables, and the remaining tables they would need all the rows from the source.

Fair enough, this is 10g so I decided to put Data Pump to the task. These are the steps I took:

1) Use data pump export with a parfile to export all the tables and their dependent objects (index etc):

expdp system@sourcedb parfile=source_exp.par

The contents of source_exp.par looked like this:

DIRECTORY=data_pump_dir
DUMPFILE=source_exp_%U.dmp
LOGFILE=source_exp.log
JOB_NAME=myschema_exp_job
SCHEMAS=myschema
STATUS=10
INCLUDE=TABLE:”in (
‘TABLE1′,
‘TABLE2′,

‘TABLE19′,
‘TABLE20′)”
QUERY=myschema.TABLE15:”where date_created between to_date(’2/1/2008′,’MM/DD/YYYY’) AND to_date(’2/29/2008 23:59:59′,’MM/DD/YYYY HH24:MI:SS’)”
QUERY=myschema.TABLE16:”where date_created between to_date(’2/1/2008′,’MM/DD/YYYY’) AND to_date(’2/29/2008 23:59:59′,’MM/DD/YYYY HH24:MI:SS’)”

QUERY=myschema.TABLE20:”where date_created between to_date(’2/1/2008′,’MM/DD/YYYY’) AND to_date(’2/29/2008 23:59:59′,’MM/DD/YYYY HH24:MI:SS’)”

From the above parfile, I’m doing a few things in the one job:

  1. DIRECTORY refers to an existing directory object in the database
  2. DUMPFILE specifies the name of the dump file. By adding a %U wildcard in the name, Oracle will automatically create a new file if more space is required for the dump file set. I knew this was going to be a large export ahead of time by looking at the DBA_SEGMENTS view to calculate the size of the tables. The dumpfile was going to be about 80Gb in this case.
  3. LOGFILE specifies the name for the file which will be created to store a log of the session
  4. SCHEMAS specifies the name of schema(s) that I’ll be dumping the tables from
  5. STATUS specifies the frequency at which the job status is updated on the screen
  6. INCLUDE specifies the name of the tables to be exported/dumped and all it’s dependent objects, for instance any indexes. This shouldn’t be confused with the TABLES clause which would only export the table and non of its dependent objects.
  7. QUERY. This is one of my favorite clauses in Data Pump. With the original export/import commands, it was an all or nothing job. Now you can pass a query with the QUERY clause to specify a filtration criteria. It doesn’t necessary have to be a WHERE clause, it can also be an ORDERY BY clause. In my cause it was a WHERE clause specify where date_created was from the beginning of February to the end.

2) Now I let the job run. With data pump you can Ctrl-C while the job is running to drop into interactive mode. In this mode you can run a number of commands, including increasing/decreasing the levels of parallelism, stop/pausing the job, killing it, etc. A cool feature that I like is that if your session were to become disconnected, the entire job doesn’t fail. This is a job in the true sense that it is running completely in the database so you can always attach and detach from job using the ATTACH clause.

Once the job completed the log looked something like this:

;;;
Export: Release 10.2.0.3.0 – 64bit Production on Wednesday, 26 March, 2008 12:48:41

Copyright (c) 2003, 2005, Oracle. All rights reserved.
;;;
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 – 64bit Production
With the Partitioning, OLAP and Data Mining Scoring Engine options
FLASHBACK automatically enabled to preserve database integrity.
Starting “SYSTEM”.”ML_MDS_MLMDEV04″: system/******** parfile=ml_mds_mlmdev04_exp2.par
Estimate in progress using BLOCKS method…
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 2.132 GB
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported “MYSCHEMA”.”TABLE5″ 1.745 GB 40385995 rows
. . exported “MYSCHEMA”.”TABLE6″ 290.1 MB 4040090 rows

. . exported “MYSCHEMA”.”TABLE20″ 7.226 KB 13 rows
Master table “SYSTEM”.”MYSCHEMA_EXP_JOB” successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.MYSCHEMA_EXP_JOB is:
/local/oracle/oradata/SOURCEDB/exp/ml_mds_mlmdev04_exp2.dmp
Job “SYSTEM”.”MYSCHEMA_EXP_JOB” successfully completed at 12:54:16

 

Uploads

Favorites

abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz