<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>ORA600 blogs</title>
  <subtitle>Last resort Oracle recovery</subtitle>
  <link rel="alternate" type="text/html" href="http://www.ora600.be/blog"/>
  <link rel="self" type="application/atom+xml" href="http://www.ora600.be/blog/atom/feed"/>
  <id>http://www.ora600.be/blog/atom/feed</id>
  <updated>2009-10-09T09:48:57+02:00</updated>
  <entry>
    <title>Recover from unusable dictionary indexes in 10g using 11g</title>
    <link rel="alternate" type="text/html" href="http://www.ora600.be/unusable+dictionary+indexes" />
    <id>http://www.ora600.be/unusable+dictionary+indexes</id>
    <published>2013-02-12T23:07:57+01:00</published>
    <updated>2013-02-13T09:33:26+01:00</updated>
    <author>
      <name>kurtvm</name>
    </author>
    <category term="I_DEPENDENCY1" />
    <category term="ORA-01502" />
    <category term="unusable dictionary index" />
    <summary type="html"><![CDATA[<div>
<br />
</div>
<div>
Some time ago was contacted by a company where someone had generated a script to move tables to another tablespace. Unfortunately, they had made an error and included sys and system tables.
</div>
<div>
Luckely, Oracle does not allow you to move base dictionary tables, throwing an ORA-00701 error.
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">ERROR at line 1:</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-00701: object necessary for warmstarting database cannot be altered</span></i>
</div>
<div>
<br />
</div>
<div>
Anyway, some tables were moved out of the system tablespace and this left a trail of unusable dictionary indexes.
</div>
<div>
This resulted in a database throwing various errors and when the database was restarted, it just gave up.
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL*Plus: Release 10.2.0.5.0 - Production on Tue Feb 12 17:24:03 2013</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Connected to an idle instance.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt; startup</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORACLE instance started.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Total System Global Area 1015021568 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Fixed Size                  2101168 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Variable Size             243269712 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Database Buffers          734003200 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Redo Buffers               35647488 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Database mounted.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-01092: ORACLE instance terminated. Disconnection forced</span></i>
</div>
<div>
<br />
</div>
<div>
Alert.log snippet :
</div>
<div>
<i><span style="font-family: 'courier new', courier">Tue Feb 12 17:24:12 GMT+01:00 2013ALTER DATABASE OPEN</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Tue Feb 12 17:24:12 GMT+01:00 2013Thread 1 opened at log sequence 18</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">  Current log# 3 seq# 18 mem# 0: /redoctl1/TEST/redo03.rdo</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Successful open of redo thread 1</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Tue Feb 12 17:24:12 GMT+01:00 2013MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Tue Feb 12 17:24:12 GMT+01:00 2013SMON: enabling cache recovery</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Tue Feb 12 17:24:12 GMT+01:00 2013Errors in file /home/app/oracle/admin/TEST/udump/test_ora_48496640.trc:</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-00704: bootstrap process failure</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-00604: error occurred at recursive SQL level 1</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-01502: index 'SYS.I_DEPENDENCY1' or partition of such index is in unusable state</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Tue Feb 12 17:24:12 GMT+01:00 2013Error 704 happened during db open, shutting down database</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">USER: terminating instance due to error 704</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Instance terminated by USER, pid = 48496640</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-1092 signalled during: ALTER DATABASE OPEN...</span></i>
</div>
<div>
<br />
</div>
<div>
Trace file snippet :
</div>
<div>
<i><span style="font-family: 'courier new', courier">*** ACTION NAME:() 2013-02-12 17:24:12.414</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">*** MODULE NAME:(sqlplus@ab00s123 (TNS V1-V3)) 2013-02-12 17:24:12.414</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">*** SERVICE NAME:(SYS$USERS) 2013-02-12 17:24:12.414</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">*** SESSION ID:(152.3) 2013-02-12 17:24:12.414</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-00704: bootstrap process failure</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-00604: error occurred at recursive SQL level 1</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-01502: index 'SYS.I_DEPENDENCY1' or partition of such index is in unusable state</span></i>
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
The customer was on 10.1.0.3. I'm reproducing the case on a 10.2.0.5 database for the purpose of this blogpost.
</div>
<div>
The database was already down for 4days and a SR1 was already raised with Oracle.
</div>
<div>
Their first solution was to restore the backup - that was a bit tricky as apparently... as usual in these situations, there was no backup (they thought there was but there wasn't)
</div>
<div>
<br />
</div>
<div>
At first I focused on getting the data out with DUDE which took about 4hours for about 40GB, producings lots of DMP's and DDL scripts. 
</div>
<div>
Then a buddy of mine would take over and do the dirty work of rebuilding a new database and reload all data based on DUDE's output.
</div>
<div>
<br />
</div>
<div>
During the unload I had glanced at the SR1 call and noticed that the Oracle support engineer had done an effort to revive the crashed database by opening the 10G database using a 11G instance in upgrade mode. 
</div>
<div>
Which at first sounded strange to me as that would introduce an extra complexity  because of mis-matching dictionaries.
</div>
<div>
<br />
</div>
<div>
Once I had unloaded all data with DUDE (and most pressure was gone), I tried to open the database using an 11.2.x instance, making sure the COMPATIBLE parameter was set to 10.1.0.3 (otherwise you can't start your db with 10.1.0.3 anymore)
</div>
<div>
At least there was a cold backup of the database from just after the table moves, so I could play around a bit.
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">sqlplus / as sysdba</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL*Plus: Release 11.2.0.3.0 Production on Tue Feb 12 17:36:33 2013</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Copyright (c) 1982, 2011, Oracle.  All rights reserved.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Connected to an idle instance.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt; startup upgrade pfile=/tmp/init.ora</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-32006: BACKGROUND_DUMP_DEST initialization parameter has been deprecated</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-32006: USER_DUMP_DEST initialization parameter has been deprecated</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORACLE instance started.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Total System Global Area 1010479104 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Fixed Size                  2227776 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Variable Size             260047296 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Database Buffers          713031680 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Redo Buffers               35172352 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Database mounted.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Database opened.</span></i>
</div>
<div>
<br />
</div>
<div>
Interesting enough the instance opened using the 11g instance in upgrade mode!
</div>
<div>
<br />
</div>
<div>
He then suggested to update ind$ and set the flag column to 1024 (0x400) for SYS.I_DEPENDENCY1.
</div>
<div>
Looking at dcore.bsq or sql.bsq this means disabling an index the quick and dirty way (/* index is disabled : 0x400 */).
</div>
<div>
<br />
</div>
<div>
This made the instance crash after bouncing it - game over. So that was clearly not the way the go.
</div>
<div>
I thought it could have something to do with the many differences between the 10g and 11g dictionary, so in my next attempt I tried the folowing steps:
</div>
<div>
- open system datafile in a hexeditor
</div>
<div>
- lookup SYS.I_DEPENDENCY1 in obj$ (based on dataobjectid and info produced by dude)
</div>
<div>
- mark SYS.I_DEPENDENCY1 as deleted in obj$ 
</div>
<div>
- see what happens if I fire up the db using 10g instance
</div>
<div>
Unfortunately I had forgotten to edit the blockheader (mainly the nrow value and the row directory) resulting in yet again a burning instance.
</div>
<div>
I did not take another attempt as it took to long to restore the db and my job was done.
</div>
<div>
<br />
</div>
<div>
But after thinking about it later that evening I reckoned, why not try to rebuild the indexes in 11g ?
</div>
<div>
So I tried one more time :
</div>
<div>
<br />
</div>
<div>
After starting the 10g db with 11g software and issueing a rebuild on SYS.I_DEPENDENCY1, this was the error returned :
</div>
<div>
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt; alter index I_DEPENDENCY1 rebuild ;</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">alter index I_DEPENDENCY1 rebuild</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">*</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ERROR at line 1:</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-00604: error occurred at recursive SQL level 1</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-00904: &quot;DEFMAXSIZE&quot;: invalid identifier</span></i>
</div>
<div>
<br />
</div>
<div>
Question is - where is DEFMAXSIZE coming from ?
</div>
<div>
So I issued a trace of my session and here's the recursive sql that's issued during a rebuild :
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">=====================</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">PARSE ERROR #4577143416:len=453 dep=1 uid=0 oct=3 lid=0 tim=5543224986472 err=904</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">select parttype, partcnt, partkeycols, flags, defts#, defpctfree, defpctused, definitrans, defmaxtrans, deftiniexts, defextsize, defminexts, defmaxexts, defextpct, deflists, defgroup</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">s, deflogging, spare1, mod(spare2, 256) subparttype, mod(trunc(spare2/256), 256) subpartkeycols, mod(trunc(spare2/65536), 65536) defsubpartcnt, mod(trunc(spare2/4294967296), 256) def</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">hscflags, mod(spare3, 256) interval_dty, rowid, defmaxsize from partobj$ where obj# = :1</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">=====================</span></i>
</div>
<div>
<br />
</div>
<div>
Now remember - this is an 11g instance running a 10g database with it's original dictionary - when comparing dictionaries (sql.bsq versus dpart.bsq), the column DEFMAXSIZE did not exist in 10g.
</div>
<div>
So instead of introducing the complexity of running the migrate scripts, I decided to just add the column and see what happens :
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt;  alter table partobj$ add defmaxsize number ;</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Table altered.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt; alter index I_DEPENDENCY1 rebuild ;</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Index altered.</span></i>
</div>
<div>
<br />
</div>
<div>
Bonus !
</div>
<div>
During the actual case the above would also fail - it would complain about index I_WRI$_OPTSTAT_IND_OBJ#_ST being unusable.
</div>
<div>
This index seems related to the set of tables responsible for storing object statistics (index statistics in this case) - it seems logical that if you rebuild an index, oracle adds some stats in these tables. 
</div>
<div>
If the related index is then not usable, it's only logical it complains.
</div>
<div>
So in fact I had to rebuild that index first :
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt; alter index I_WRI$_OPTSTAT_IND_OBJ#_ST rebuild ;</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Index altered.</span></i>
</div>
<div>
<br />
</div>
<div>
And now I was able to rebuild all indexes without issues.
</div>
<div>
<br />
</div>
<div>
We could now start the db back in oracle 10g :
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL*Plus: Release 10.2.0.5.0 - Production on Tue Feb 12 17:48:00 2013</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Connected to an idle instance.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt; startup</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORACLE instance started.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Total System Global Area 1015021568 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Fixed Size                  2101168 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Variable Size             243269712 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Database Buffers          734003200 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Redo Buffers               35647488 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Database mounted.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Database opened.</span></i>
</div>
<div>
<br />
</div>
<div>
Double BONUS !
</div>
<div>
<br />
</div>
<div>
Now all that was left was to recompile the invalid objects :
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt; select count(*) from dba_objects where status='INVALID' and owner='SYS' ;</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">       496</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt; @?/rdbms/admin/utlrp</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt; select count(*) from dba_objects where status='INVALID' and owner='SYS' ;</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">  COUNT(*)</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">----------</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">         0</span></i>
</div>
<div>
<br />
</div>
<div>
And voila - the db is back among the living !
</div>
<div>
<br />
</div>
<div>
Again, when I reproduced this on my test kit, I had no invalid objects left after utlrp ran the first time, but on the actual database I was left with invalid KU$ views which are related to metadata generation needed for exp/expdp utilities.
</div>
<div>
I noticed this when I tried to do a full export :
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">About to export the entire database ...</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting tablespace definitions</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting profiles</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting user definitions</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting roles</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting resource costs</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting rollback segment definitions</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting database links</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting sequence numbers</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting directory aliases</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting context namespaces</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting foreign function library names</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting PUBLIC type synonyms</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting private type synonyms</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting object type definitions</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting system procedural objects and actions</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting pre-schema procedural objects and actions</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting cluster definitions</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">EXP-00056: ORACLE error 24324 encountered</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-24324: service handle not initialized</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">EXP-00056: ORACLE error 24324 encountered</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-24324: service handle not initialized</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">EXP-00056: ORACLE error 24324 encountered</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-24324: service handle not initialized</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">EXP-00000: Export terminated unsuccessfully</span></i>
</div>
<div>
<br />
</div>
<div>
Datapump as well as exp was tumbling down half way through ddl generation.
</div>
<div>
So the last step to do was regenerate these views :
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">-- re-install DataPump types and views</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">@?\rdbms\admin\catdph.sql</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">-- re-install tde_library packages</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">@?\rdbms\admin\prvtdtde.plb</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">-- re-install DataPump packages</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">@?\rdbms\admin\catdpb.sql</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">-- re-install DBMS DataPump objects</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">@?\rdbms\admin\dbmspump.sql</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">-- recompile invalid objects</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">@?\rdbms\admin\utlrp.sql</span></i>
</div>
<div>
<br />
</div>
<div>
And finally we can do a full export and regenerate the database !
</div>
<div>
</div>
<div>
Final note - I also tested this starting on an 11gR2 (moving sys tables in 11gR2) - and it seems 11gR2, allthough bitching and moaning, does not crash after restart and allows you to rebuild the indexes.
</div>
<div>
</div>
<div>
ps - if you were thinking about using SKIP_UNUSABLE_INDEXES - that didn't work either on the dictionary indexes ;-)
</div>
<div>
 
</div>
<div>
Final note - it's not possible to disable normal btree indexes (alter index disable) - only function based indexes.
</div>
<div>
</div>
<div>
<br />
</div>
    ]]></summary>
    <content type="html"><![CDATA[<div>
<br />
</div>
<div>
Some time ago was contacted by a company where someone had generated a script to move tables to another tablespace. Unfortunately, they had made an error and included sys and system tables.
</div>
<div>
Luckely, Oracle does not allow you to move base dictionary tables, throwing an ORA-00701 error.
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">ERROR at line 1:</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-00701: object necessary for warmstarting database cannot be altered</span></i>
</div>
<div>
<br />
</div>
<div>
Anyway, some tables were moved out of the system tablespace and this left a trail of unusable dictionary indexes.
</div>
<div>
This resulted in a database throwing various errors and when the database was restarted, it just gave up.
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL*Plus: Release 10.2.0.5.0 - Production on Tue Feb 12 17:24:03 2013</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Connected to an idle instance.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt; startup</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORACLE instance started.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Total System Global Area 1015021568 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Fixed Size                  2101168 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Variable Size             243269712 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Database Buffers          734003200 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Redo Buffers               35647488 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Database mounted.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-01092: ORACLE instance terminated. Disconnection forced</span></i>
</div>
<div>
<br />
</div>
<div>
Alert.log snippet :
</div>
<div>
<i><span style="font-family: 'courier new', courier">Tue Feb 12 17:24:12 GMT+01:00 2013ALTER DATABASE OPEN</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Tue Feb 12 17:24:12 GMT+01:00 2013Thread 1 opened at log sequence 18</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">  Current log# 3 seq# 18 mem# 0: /redoctl1/TEST/redo03.rdo</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Successful open of redo thread 1</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Tue Feb 12 17:24:12 GMT+01:00 2013MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Tue Feb 12 17:24:12 GMT+01:00 2013SMON: enabling cache recovery</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Tue Feb 12 17:24:12 GMT+01:00 2013Errors in file /home/app/oracle/admin/TEST/udump/test_ora_48496640.trc:</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-00704: bootstrap process failure</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-00604: error occurred at recursive SQL level 1</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-01502: index 'SYS.I_DEPENDENCY1' or partition of such index is in unusable state</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Tue Feb 12 17:24:12 GMT+01:00 2013Error 704 happened during db open, shutting down database</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">USER: terminating instance due to error 704</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Instance terminated by USER, pid = 48496640</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-1092 signalled during: ALTER DATABASE OPEN...</span></i>
</div>
<div>
<br />
</div>
<div>
Trace file snippet :
</div>
<div>
<i><span style="font-family: 'courier new', courier">*** ACTION NAME:() 2013-02-12 17:24:12.414</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">*** MODULE NAME:(sqlplus@ab00s123 (TNS V1-V3)) 2013-02-12 17:24:12.414</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">*** SERVICE NAME:(SYS$USERS) 2013-02-12 17:24:12.414</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">*** SESSION ID:(152.3) 2013-02-12 17:24:12.414</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-00704: bootstrap process failure</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-00604: error occurred at recursive SQL level 1</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-01502: index 'SYS.I_DEPENDENCY1' or partition of such index is in unusable state</span></i>
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
The customer was on 10.1.0.3. I'm reproducing the case on a 10.2.0.5 database for the purpose of this blogpost.
</div>
<div>
The database was already down for 4days and a SR1 was already raised with Oracle.
</div>
<div>
Their first solution was to restore the backup - that was a bit tricky as apparently... as usual in these situations, there was no backup (they thought there was but there wasn't)
</div>
<div>
<br />
</div>
<div>
At first I focused on getting the data out with DUDE which took about 4hours for about 40GB, producings lots of DMP's and DDL scripts. 
</div>
<div>
Then a buddy of mine would take over and do the dirty work of rebuilding a new database and reload all data based on DUDE's output.
</div>
<div>
<br />
</div>
<div>
During the unload I had glanced at the SR1 call and noticed that the Oracle support engineer had done an effort to revive the crashed database by opening the 10G database using a 11G instance in upgrade mode. 
</div>
<div>
Which at first sounded strange to me as that would introduce an extra complexity  because of mis-matching dictionaries.
</div>
<div>
<br />
</div>
<div>
Once I had unloaded all data with DUDE (and most pressure was gone), I tried to open the database using an 11.2.x instance, making sure the COMPATIBLE parameter was set to 10.1.0.3 (otherwise you can't start your db with 10.1.0.3 anymore)
</div>
<div>
At least there was a cold backup of the database from just after the table moves, so I could play around a bit.
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">sqlplus / as sysdba</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL*Plus: Release 11.2.0.3.0 Production on Tue Feb 12 17:36:33 2013</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Copyright (c) 1982, 2011, Oracle.  All rights reserved.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Connected to an idle instance.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt; startup upgrade pfile=/tmp/init.ora</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-32006: BACKGROUND_DUMP_DEST initialization parameter has been deprecated</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-32006: USER_DUMP_DEST initialization parameter has been deprecated</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORACLE instance started.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Total System Global Area 1010479104 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Fixed Size                  2227776 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Variable Size             260047296 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Database Buffers          713031680 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Redo Buffers               35172352 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Database mounted.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Database opened.</span></i>
</div>
<div>
<br />
</div>
<div>
Interesting enough the instance opened using the 11g instance in upgrade mode!
</div>
<div>
<br />
</div>
<div>
He then suggested to update ind$ and set the flag column to 1024 (0x400) for SYS.I_DEPENDENCY1.
</div>
<div>
Looking at dcore.bsq or sql.bsq this means disabling an index the quick and dirty way (/* index is disabled : 0x400 */).
</div>
<div>
<br />
</div>
<div>
This made the instance crash after bouncing it - game over. So that was clearly not the way the go.
</div>
<div>
I thought it could have something to do with the many differences between the 10g and 11g dictionary, so in my next attempt I tried the folowing steps:
</div>
<div>
- open system datafile in a hexeditor
</div>
<div>
- lookup SYS.I_DEPENDENCY1 in obj$ (based on dataobjectid and info produced by dude)
</div>
<div>
- mark SYS.I_DEPENDENCY1 as deleted in obj$ 
</div>
<div>
- see what happens if I fire up the db using 10g instance
</div>
<div>
Unfortunately I had forgotten to edit the blockheader (mainly the nrow value and the row directory) resulting in yet again a burning instance.
</div>
<div>
I did not take another attempt as it took to long to restore the db and my job was done.
</div>
<div>
<br />
</div>
<div>
But after thinking about it later that evening I reckoned, why not try to rebuild the indexes in 11g ?
</div>
<div>
So I tried one more time :
</div>
<div>
<br />
</div>
<div>
After starting the 10g db with 11g software and issueing a rebuild on SYS.I_DEPENDENCY1, this was the error returned :
</div>
<div>
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt; alter index I_DEPENDENCY1 rebuild ;</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">alter index I_DEPENDENCY1 rebuild</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">*</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ERROR at line 1:</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-00604: error occurred at recursive SQL level 1</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-00904: &quot;DEFMAXSIZE&quot;: invalid identifier</span></i>
</div>
<div>
<br />
</div>
<div>
Question is - where is DEFMAXSIZE coming from ?
</div>
<div>
So I issued a trace of my session and here's the recursive sql that's issued during a rebuild :
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">=====================</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">PARSE ERROR #4577143416:len=453 dep=1 uid=0 oct=3 lid=0 tim=5543224986472 err=904</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">select parttype, partcnt, partkeycols, flags, defts#, defpctfree, defpctused, definitrans, defmaxtrans, deftiniexts, defextsize, defminexts, defmaxexts, defextpct, deflists, defgroup</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">s, deflogging, spare1, mod(spare2, 256) subparttype, mod(trunc(spare2/256), 256) subpartkeycols, mod(trunc(spare2/65536), 65536) defsubpartcnt, mod(trunc(spare2/4294967296), 256) def</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">hscflags, mod(spare3, 256) interval_dty, rowid, defmaxsize from partobj$ where obj# = :1</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">=====================</span></i>
</div>
<div>
<br />
</div>
<div>
Now remember - this is an 11g instance running a 10g database with it's original dictionary - when comparing dictionaries (sql.bsq versus dpart.bsq), the column DEFMAXSIZE did not exist in 10g.
</div>
<div>
So instead of introducing the complexity of running the migrate scripts, I decided to just add the column and see what happens :
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt;  alter table partobj$ add defmaxsize number ;</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Table altered.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt; alter index I_DEPENDENCY1 rebuild ;</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Index altered.</span></i>
</div>
<div>
<br />
</div>
<div>
Bonus !
</div>
<div>
During the actual case the above would also fail - it would complain about index I_WRI$_OPTSTAT_IND_OBJ#_ST being unusable.
</div>
<div>
This index seems related to the set of tables responsible for storing object statistics (index statistics in this case) - it seems logical that if you rebuild an index, oracle adds some stats in these tables. 
</div>
<div>
If the related index is then not usable, it's only logical it complains.
</div>
<div>
So in fact I had to rebuild that index first :
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt; alter index I_WRI$_OPTSTAT_IND_OBJ#_ST rebuild ;</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Index altered.</span></i>
</div>
<div>
<br />
</div>
<div>
And now I was able to rebuild all indexes without issues.
</div>
<div>
<br />
</div>
<div>
We could now start the db back in oracle 10g :
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL*Plus: Release 10.2.0.5.0 - Production on Tue Feb 12 17:48:00 2013</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Connected to an idle instance.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt; startup</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORACLE instance started.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Total System Global Area 1015021568 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Fixed Size                  2101168 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Variable Size             243269712 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Database Buffers          734003200 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Redo Buffers               35647488 bytes</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Database mounted.</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">Database opened.</span></i>
</div>
<div>
<br />
</div>
<div>
Double BONUS !
</div>
<div>
<br />
</div>
<div>
Now all that was left was to recompile the invalid objects :
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt; select count(*) from dba_objects where status='INVALID' and owner='SYS' ;</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">       496</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt; @?/rdbms/admin/utlrp</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">SQL&gt; select count(*) from dba_objects where status='INVALID' and owner='SYS' ;</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier"><br />
</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">  COUNT(*)</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">----------</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">         0</span></i>
</div>
<div>
<br />
</div>
<div>
And voila - the db is back among the living !
</div>
<div>
<br />
</div>
<div>
Again, when I reproduced this on my test kit, I had no invalid objects left after utlrp ran the first time, but on the actual database I was left with invalid KU$ views which are related to metadata generation needed for exp/expdp utilities.
</div>
<div>
I noticed this when I tried to do a full export :
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">About to export the entire database ...</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting tablespace definitions</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting profiles</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting user definitions</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting roles</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting resource costs</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting rollback segment definitions</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting database links</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting sequence numbers</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting directory aliases</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting context namespaces</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting foreign function library names</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting PUBLIC type synonyms</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting private type synonyms</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting object type definitions</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting system procedural objects and actions</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting pre-schema procedural objects and actions</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">. exporting cluster definitions</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">EXP-00056: ORACLE error 24324 encountered</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-24324: service handle not initialized</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">EXP-00056: ORACLE error 24324 encountered</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-24324: service handle not initialized</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">EXP-00056: ORACLE error 24324 encountered</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">ORA-24324: service handle not initialized</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">EXP-00000: Export terminated unsuccessfully</span></i>
</div>
<div>
<br />
</div>
<div>
Datapump as well as exp was tumbling down half way through ddl generation.
</div>
<div>
So the last step to do was regenerate these views :
</div>
<div>
<br />
</div>
<div>
<i><span style="font-family: 'courier new', courier">-- re-install DataPump types and views</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">@?\rdbms\admin\catdph.sql</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">-- re-install tde_library packages</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">@?\rdbms\admin\prvtdtde.plb</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">-- re-install DataPump packages</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">@?\rdbms\admin\catdpb.sql</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">-- re-install DBMS DataPump objects</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">@?\rdbms\admin\dbmspump.sql</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">-- recompile invalid objects</span></i>
</div>
<div>
<i><span style="font-family: 'courier new', courier">@?\rdbms\admin\utlrp.sql</span></i>
</div>
<div>
<br />
</div>
<div>
And finally we can do a full export and regenerate the database !
</div>
<div>
</div>
<div>
Final note - I also tested this starting on an 11gR2 (moving sys tables in 11gR2) - and it seems 11gR2, allthough bitching and moaning, does not crash after restart and allows you to rebuild the indexes.
</div>
<div>
</div>
<div>
ps - if you were thinking about using SKIP_UNUSABLE_INDEXES - that didn't work either on the dictionary indexes ;-)
</div>
<div>
 
</div>
<div>
Final note - it's not possible to disable normal btree indexes (alter index disable) - only function based indexes.
</div>
<div>
</div>
<div>
<br />
</div>
    ]]></content>
  </entry>
  <entry>
    <title>FRM-92095: Oracle Jnitiator version too low - patch fix for Forms 10.1.2.3</title>
    <link rel="alternate" type="text/html" href="http://www.ora600.be/FRM-92095%3A+Oracle+Jnitiator+version+too+low+-+please+install+version+1.1.8.2+or+higher+patch" />
    <id>http://www.ora600.be/FRM-92095%3A+Oracle+Jnitiator+version+too+low+-+please+install+version+1.1.8.2+or+higher+patch</id>
    <published>2013-01-20T21:55:47+01:00</published>
    <updated>2013-01-20T21:55:47+01:00</updated>
    <author>
      <name>kurtvm</name>
    </author>
    <category term="FRM-92095" />
    <summary type="html"><![CDATA[<p>
It seems pigs can fly.
</p>
<p>
&nbsp;
</p>
<p>
I must admit I had a few doubts if there would ever be a patch that would fix the FRM-92095 on Forms 10g when running Java plugin 1.7.x.
</p>
<p>
But here we are - almost a year later and there is a patch for Forms 10g. It seems the patch is already available since November 21 2012. I only picked up on it because of<a href="https://blogs.oracle.com/stevenChan/entry/latest_forms_and_reports_10g?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+orana_boc+%28blogs.oracle.com%29"> this blogpost</a> by Steve Chan stating Forms 10.1.2.3.2 bundle patch 2 is now certified with EBS12. 
</p>
<p>
Bundle patch 2 is patch number 14825718 and one of the bug fixes is :
</p>
<p>
#  11782681 - APPS6  FORMS DO NOT LAUNCH WITH BETA JRE 1.7
</p>
<p>
The patch is basically an opatch which copies new libraries and jar files to your system including a new frmall.jar. It's available for all platforms and is only about 7.5MB.
</p>
<p>
&nbsp;
</p>
<p>
So a big high five to Oracle - let's all install it so we can get rid of java 1.6.x and get on with our lifes ! 
</p>
<p>
&nbsp;
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
It seems pigs can fly.
</p>
<p>
&nbsp;
</p>
<p>
I must admit I had a few doubts if there would ever be a patch that would fix the FRM-92095 on Forms 10g when running Java plugin 1.7.x.
</p>
<p>
But here we are - almost a year later and there is a patch for Forms 10g. It seems the patch is already available since November 21 2012. I only picked up on it because of<a href="https://blogs.oracle.com/stevenChan/entry/latest_forms_and_reports_10g?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+orana_boc+%28blogs.oracle.com%29"> this blogpost</a> by Steve Chan stating Forms 10.1.2.3.2 bundle patch 2 is now certified with EBS12. 
</p>
<p>
Bundle patch 2 is patch number 14825718 and one of the bug fixes is :
</p>
<p>
#  11782681 - APPS6  FORMS DO NOT LAUNCH WITH BETA JRE 1.7
</p>
<p>
The patch is basically an opatch which copies new libraries and jar files to your system including a new frmall.jar. It's available for all platforms and is only about 7.5MB.
</p>
<p>
&nbsp;
</p>
<p>
So a big high five to Oracle - let's all install it so we can get rid of java 1.6.x and get on with our lifes ! 
</p>
<p>
&nbsp;
</p>
    ]]></content>
  </entry>
  <entry>
    <title>ORA600 Oracle News Aggregator decommissioned</title>
    <link rel="alternate" type="text/html" href="http://www.ora600.be/ora600+news+aggregator+decommissioned" />
    <id>http://www.ora600.be/ora600+news+aggregator+decommissioned</id>
    <published>2012-08-20T21:35:24+02:00</published>
    <updated>2012-08-20T21:43:41+02:00</updated>
    <author>
      <name>kurtvm</name>
    </author>
    <category term="news" />
    <summary type="html"><![CDATA[<p>
I've decided today to decommission my oracle news aggregator.
</p>
<p>
I started it a couple of years ago when orablogs.com stopped its RSS aggregation. I was a big of orablogs but I was too late in offering the owner a price for the domain. Otherwise I would have continued orablogs.com.
</p>
<p>
As it happened - I was too late and some other guy swept up the domain to make a quick buck. If I remember correctly, he was asking around 6000$ for the domain.
</p>
<p>
So - I decided to start my own RSS aggregator under the ora600 site. 
</p>
<p>
I only added feeds that actually interested me (*no* Oracle EBS stuff!!!)
</p>
<p>
&nbsp;
</p>
<p>
At the time, a nice side effect was the extra traffic and higher google ranking.
</p>
<p>
However, lately, the site's ranking is actually being hurt by the aggregator as google seems to be punishing aggregators because of duplicate content.
</p>
<p>
Anyway, with all the smart phone apps and news readers websites - aggregator sites have almost become obsolete.
</p>
<p>
And if you're interested in a pure Oracle RDBMS RSS aggregator - have a look at the <a href="http://www.oaktable.net/oakienews">oaktable aggregator</a>. 
</p>
<p>
&nbsp;
</p>
<p>
So with a couple of swift delete and truncate sql commands, I have purged just around 20000 blog entries.
</p>
<p>
Once I issued commit, I had the idea of maybe setting up a seperate site for the RSS entries ... but oh well ... too late.
</p>
<p>
&nbsp;
</p>
<p>
It was a good run ! 
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
I've decided today to decommission my oracle news aggregator.
</p>
<p>
I started it a couple of years ago when orablogs.com stopped its RSS aggregation. I was a big of orablogs but I was too late in offering the owner a price for the domain. Otherwise I would have continued orablogs.com.
</p>
<p>
As it happened - I was too late and some other guy swept up the domain to make a quick buck. If I remember correctly, he was asking around 6000$ for the domain.
</p>
<p>
So - I decided to start my own RSS aggregator under the ora600 site. 
</p>
<p>
I only added feeds that actually interested me (*no* Oracle EBS stuff!!!)
</p>
<p>
&nbsp;
</p>
<p>
At the time, a nice side effect was the extra traffic and higher google ranking.
</p>
<p>
However, lately, the site's ranking is actually being hurt by the aggregator as google seems to be punishing aggregators because of duplicate content.
</p>
<p>
Anyway, with all the smart phone apps and news readers websites - aggregator sites have almost become obsolete.
</p>
<p>
And if you're interested in a pure Oracle RDBMS RSS aggregator - have a look at the <a href="http://www.oaktable.net/oakienews">oaktable aggregator</a>. 
</p>
<p>
&nbsp;
</p>
<p>
So with a couple of swift delete and truncate sql commands, I have purged just around 20000 blog entries.
</p>
<p>
Once I issued commit, I had the idea of maybe setting up a seperate site for the RSS entries ... but oh well ... too late.
</p>
<p>
&nbsp;
</p>
<p>
It was a good run ! 
</p>
    ]]></content>
  </entry>
  <entry>
    <title>FRM-92095: Oracle Jnitiator version too low - please install version 1.1.8.2 or higher</title>
    <link rel="alternate" type="text/html" href="http://www.ora600.be/FRM-92095%3A+Oracle+Jnitiator+version+too+low+-+please+install+version+1.1.8.2+or+higher" />
    <id>http://www.ora600.be/FRM-92095%3A+Oracle+Jnitiator+version+too+low+-+please+install+version+1.1.8.2+or+higher</id>
    <published>2012-01-29T18:07:02+01:00</published>
    <updated>2013-02-13T09:24:13+01:00</updated>
    <author>
      <name>kurtvm</name>
    </author>
    <category term="FRM-92095" />
    <category term="java 1.7" />
    <category term="Oracle Forms" />
    <summary type="html"><![CDATA[<div>
A customer of mine who deploys Oracle Forms 10g  on the wild wild web, ran into a little problem. 
</div>
<div>
They don't have control over the java plugin being installed on the client machine and with the latest java 1.7 update 
</div>
<div>
they encountered the following forms error : 
</div>
<div>
<br />
</div>
<div>
FRM-92095: Oracle Jnitiator version too low - please install version 1.1.8.2 or higher 
</div>
<div>
<br />
</div>
<div>
Doh - we're running java 1.7 - not Oracle's obscure Jnitiator. 
</div>
<div>
<br />
</div>
<div>
This seems to be a know issue on metalink see  
</div>
<div>
FRM-92095 Error When Running Forms Using JRE 7 (JRE 1.7) [ID 1348436.1] 
</div>
<div>
A bug has been filed Bug:11782681 APPS6: FORMS DO NOT LAUNCH WITH BETA JRE 1.7 
</div>
<div>
<br />
</div>
<div>
There's no patch yet(not even for the latest 11g Forms). And because Forms 10.1.2.x permier support 
</div>
<div>
ended in December 2011... God only knows there will be a back-port. So for now - we're on our own ! 
</div>
<div>
<br />
</div>
<div>
However ... why does the Forms applet thinks it is running on an Oracle Jnitiator ? 
</div>
<div>
Can it be that Java's vendor system property changed from 'Sun Microsystems Inc' to 'Oracle Corporation' ? 
</div>
<div>
<br />
</div>
<div>
A little test program will show : 
</div>
<div>
import java.util.* ; 
</div>
<div>
<br />
</div>
<div>
class test 
</div>
<div>
{ 
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span"></span><span class="Apple-tab-span" style="white-space: pre">	</span>public static void main(String args[]) 
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span"></span><span class="Apple-tab-span" style="white-space: pre">	</span>{ 
</div>
<div>
<span class="Apple-tab-span" style="white-space: pre">		</span>System.out.println(&quot;java.version =&quot; + System.getProperty(&quot;java.version&quot;) ) ;
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span"></span><span class="Apple-tab-span" style="white-space: pre">	</span>       System.out.println(&quot;java.vendor =&quot; + System.getProperty(&quot;java.vendor&quot;) ) ; 
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span"></span><span class="Apple-tab-span" style="white-space: pre">	</span>} 
</div>
<div>
} 
</div>
<div>
<br />
</div>
<div>
On java 1.6: 
</div>
<div>
java test 
</div>
<div>
java.version =1.6.0_30 
</div>
<div>
java.vendor =Sun Microsystems Inc.
</div>
<div>
</div>
<div>
</div>
<div>
On java 1.7: 
</div>
<div>
java.version =1.7.0_02 
</div>
<div>
java.vendor =Oracle Corporation 
</div>
<div>
</div>
<div>
<br />
</div>
<div>
I tracked down where in the Forms code the version is checked - it's situated in the HTTPConnection.class which compares 
</div>
<div>
the vendor property string of the plugin with either 'MICROSOFT' or 'Oracle Corporation' and then acts accordingly. 
</div>
<div>
<br />
</div>
<div>
This property string for Java 1.6 and below is 'Sun Microsystems Inc' - starting from 1.7 it is 'Oracle Corporation'. 
</div>
<div>
Oracle Jnitiator also used the vendor string 'Oracle Corporation'. 
</div>
<div>
So - Forms now thinks it is running on an old jnitiator instead of the latest java 1.7 plugin. 
</div>
<div>
<br />
</div>
<div>
This is easily fixed with an hexeditor or decompiler but it's not really elegant and can affect other parts of the code. 
</div>
<div>
(with a hexeditor - unjar frmall.jar - open HTTPConnection.class - look for string 'Oracle Corporation' in the neighborhood of 'MICROSOFT' - change 
</div>
<div>
the string in something else - save - jar classes ... haven't tested it - should work <b>update - someone actually tested this - see comments - however... this is a big no no solution :-)</b>) 
</div>
<div>
<br />
</div>
<div>
Instead I used a bootstrapper applet which sets the vendor property back to 'Sun Microsystems inc' like this : 
</div>
<div>
- System.setProperty(&quot;java.vendor&quot;, &quot;Sun Microsystems Inc.&quot;) ; 
</div>
<div>
Then the applet(stub) loads Oracle Forms' main engine class. 
</div>
<div>
- Class oforms = Class.forName(&quot;oracle.forms.engine.Main&quot;); 
</div>
<div>
- init and start the Forms applet 
</div>
<div>
<br />
</div>
<div>
I can't share the code nor class as the IP belongs to my employer but this fixed the problem and we can now run Forms on Java 1.7 ! 
</div>
<div>
The great part of this is - we don't touch the original frmall.jar, which is important if 3000 end users need a new jar downloaded over limited bandwidth !  
</div>
<div>
</div>
<div>
Then, I went into a creative overdrive :-)  
</div>
<div>
In the spirit of the 80's and 90's atari and amiga demo scene I added an intro with plasma effect. 
</div>
<div>
</div>
<div>
<b>Update</b> <b>- see also a very elegant workaround by Didier Marcelis in the comments (add -Djava.vendor=&quot;Sun Microsystems Inc.&quot;)</b>
</div>
<div>
</div>
<div>
<b>Update - if you are interested in the Forms bootstrapper (without plasma intro) - send me a mail.</b>
</div>
<div>
</div>
<div>
Check out the flash screen capture I've made of the application loading :-)))
</div>
<div>
</div>
<div>
<a href="http://www.ora600.be/forms_java7swf.swf">http://www.ora600.be/forms_java7swf.swf</a> 
</div>
<div>
</div>
<div>
</div>
<div>
<b>Update - it looks like there is a patch for forms 10g (bundle patch 10.1.2.3.2) that will solve the problem !</b>
</div>
<div>
The patch number is 14825718 - and can be downloaded <a href="https://updates.oracle.com/download/14825718.html">here</a>.
</div>
<div>
One of the fixed bugs is 
</div>
<pre>
#  11782681 - APPS6  FORMS DO NOT LAUNCH WITH BETA JRE 1.7
</pre>
<div>
I have not yet installed and tested it - so if someone has - please leave a comment !
</div>
<div>
</div>
<div>
</div>
<div>
<br />
</div>
<div>
<object id="movie" width="640" height="400" type="application/x-shockwave-flash" data="http://www.ora600.be/forms_java7swf.swf">
	<param name="movie" value="forms_java7swf.swf">
	</param>
	<param name="quality" value="high">
	</param>
	<param name="bgcolor" value="#ffffff">
	</param>
	<param name="LOOP" value="true">
	</param>
</object>
</div>
    ]]></summary>
    <content type="html"><![CDATA[<div>
A customer of mine who deploys Oracle Forms 10g  on the wild wild web, ran into a little problem. 
</div>
<div>
They don't have control over the java plugin being installed on the client machine and with the latest java 1.7 update 
</div>
<div>
they encountered the following forms error : 
</div>
<div>
<br />
</div>
<div>
FRM-92095: Oracle Jnitiator version too low - please install version 1.1.8.2 or higher 
</div>
<div>
<br />
</div>
<div>
Doh - we're running java 1.7 - not Oracle's obscure Jnitiator. 
</div>
<div>
<br />
</div>
<div>
This seems to be a know issue on metalink see  
</div>
<div>
FRM-92095 Error When Running Forms Using JRE 7 (JRE 1.7) [ID 1348436.1] 
</div>
<div>
A bug has been filed Bug:11782681 APPS6: FORMS DO NOT LAUNCH WITH BETA JRE 1.7 
</div>
<div>
<br />
</div>
<div>
There's no patch yet(not even for the latest 11g Forms). And because Forms 10.1.2.x permier support 
</div>
<div>
ended in December 2011... God only knows there will be a back-port. So for now - we're on our own ! 
</div>
<div>
<br />
</div>
<div>
However ... why does the Forms applet thinks it is running on an Oracle Jnitiator ? 
</div>
<div>
Can it be that Java's vendor system property changed from 'Sun Microsystems Inc' to 'Oracle Corporation' ? 
</div>
<div>
<br />
</div>
<div>
A little test program will show : 
</div>
<div>
import java.util.* ; 
</div>
<div>
<br />
</div>
<div>
class test 
</div>
<div>
{ 
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span"></span><span class="Apple-tab-span" style="white-space: pre">	</span>public static void main(String args[]) 
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span"></span><span class="Apple-tab-span" style="white-space: pre">	</span>{ 
</div>
<div>
<span class="Apple-tab-span" style="white-space: pre">		</span>System.out.println(&quot;java.version =&quot; + System.getProperty(&quot;java.version&quot;) ) ;
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span"></span><span class="Apple-tab-span" style="white-space: pre">	</span>       System.out.println(&quot;java.vendor =&quot; + System.getProperty(&quot;java.vendor&quot;) ) ; 
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span"></span><span class="Apple-tab-span" style="white-space: pre">	</span>} 
</div>
<div>
} 
</div>
<div>
<br />
</div>
<div>
On java 1.6: 
</div>
<div>
java test 
</div>
<div>
java.version =1.6.0_30 
</div>
<div>
java.vendor =Sun Microsystems Inc.
</div>
<div>
</div>
<div>
</div>
<div>
On java 1.7: 
</div>
<div>
java.version =1.7.0_02 
</div>
<div>
java.vendor =Oracle Corporation 
</div>
<div>
</div>
<div>
<br />
</div>
<div>
I tracked down where in the Forms code the version is checked - it's situated in the HTTPConnection.class which compares 
</div>
<div>
the vendor property string of the plugin with either 'MICROSOFT' or 'Oracle Corporation' and then acts accordingly. 
</div>
<div>
<br />
</div>
<div>
This property string for Java 1.6 and below is 'Sun Microsystems Inc' - starting from 1.7 it is 'Oracle Corporation'. 
</div>
<div>
Oracle Jnitiator also used the vendor string 'Oracle Corporation'. 
</div>
<div>
So - Forms now thinks it is running on an old jnitiator instead of the latest java 1.7 plugin. 
</div>
<div>
<br />
</div>
<div>
This is easily fixed with an hexeditor or decompiler but it's not really elegant and can affect other parts of the code. 
</div>
<div>
(with a hexeditor - unjar frmall.jar - open HTTPConnection.class - look for string 'Oracle Corporation' in the neighborhood of 'MICROSOFT' - change 
</div>
<div>
the string in something else - save - jar classes ... haven't tested it - should work <b>update - someone actually tested this - see comments - however... this is a big no no solution :-)</b>) 
</div>
<div>
<br />
</div>
<div>
Instead I used a bootstrapper applet which sets the vendor property back to 'Sun Microsystems inc' like this : 
</div>
<div>
- System.setProperty(&quot;java.vendor&quot;, &quot;Sun Microsystems Inc.&quot;) ; 
</div>
<div>
Then the applet(stub) loads Oracle Forms' main engine class. 
</div>
<div>
- Class oforms = Class.forName(&quot;oracle.forms.engine.Main&quot;); 
</div>
<div>
- init and start the Forms applet 
</div>
<div>
<br />
</div>
<div>
I can't share the code nor class as the IP belongs to my employer but this fixed the problem and we can now run Forms on Java 1.7 ! 
</div>
<div>
The great part of this is - we don't touch the original frmall.jar, which is important if 3000 end users need a new jar downloaded over limited bandwidth !  
</div>
<div>
</div>
<div>
Then, I went into a creative overdrive :-)  
</div>
<div>
In the spirit of the 80's and 90's atari and amiga demo scene I added an intro with plasma effect. 
</div>
<div>
</div>
<div>
<b>Update</b> <b>- see also a very elegant workaround by Didier Marcelis in the comments (add -Djava.vendor=&quot;Sun Microsystems Inc.&quot;)</b>
</div>
<div>
</div>
<div>
<b>Update - if you are interested in the Forms bootstrapper (without plasma intro) - send me a mail.</b>
</div>
<div>
</div>
<div>
Check out the flash screen capture I've made of the application loading :-)))
</div>
<div>
</div>
<div>
<a href="http://www.ora600.be/forms_java7swf.swf">http://www.ora600.be/forms_java7swf.swf</a> 
</div>
<div>
</div>
<div>
</div>
<div>
<b>Update - it looks like there is a patch for forms 10g (bundle patch 10.1.2.3.2) that will solve the problem !</b>
</div>
<div>
The patch number is 14825718 - and can be downloaded <a href="https://updates.oracle.com/download/14825718.html">here</a>.
</div>
<div>
One of the fixed bugs is 
</div>
<pre>
#  11782681 - APPS6  FORMS DO NOT LAUNCH WITH BETA JRE 1.7
</pre>
<div>
I have not yet installed and tested it - so if someone has - please leave a comment !
</div>
<div>
</div>
<div>
</div>
<div>
<br />
</div>
<div>
<object id="movie" width="640" height="400" type="application/x-shockwave-flash" data="http://www.ora600.be/forms_java7swf.swf">
	<param name="movie" value="forms_java7swf.swf">
	</param>
	<param name="quality" value="high">
	</param>
	<param name="bgcolor" value="#ffffff">
	</param>
	<param name="LOOP" value="true">
	</param>
</object>
</div>
    ]]></content>
  </entry>
  <entry>
    <title>Oracle ASS - one time it will save yours !</title>
    <link rel="alternate" type="text/html" href="http://www.ora600.be/Oracle+ASS+-+one+time+it+will+save+yours+%21" />
    <id>http://www.ora600.be/Oracle+ASS+-+one+time+it+will+save+yours+%21</id>
    <published>2011-10-31T10:25:43+01:00</published>
    <updated>2011-10-31T10:25:43+01:00</updated>
    <author>
      <name>kurtvm</name>
    </author>
    <category term="ass.awk" />
    <summary type="html"><![CDATA[<div>
<br />
</div>
<div>
For those who don't know Oracle ASS - it's an awk script that is hidden in Oracle's LTOM (aka Lite Onboard Monitoring).
</div>
<div>
You can download it from metalink - see note ID 352363.1.
</div>
<div>
<br />
</div>
<div>
It's an awk script that formats system state dumps. I now and then use it to format massive trace files to something I can actually use.
</div>
<div>
<br />
</div>
<div>
A couple of months ago I had to investigate why a 2 node RAC on windows kept on crashing.
</div>
<div>
The dba managing it didn't really bother to check the system state dump - instead they just open a call with Oracle and uploaded the trace files.
</div>
<div>
As usual, the dba blamed the developers - 'it's the app - it's the app' - and I had to defuse the situation and as the developers couldn't see anything wrong and the relationship started to turn sour.
</div>
<div>
I wasn't allowed access to the system but I was able to have a look at the trace files - or as the dba called it 'a very complex logfile'.
</div>
<div>
<br />
</div>
<div>
Fair enough - the system state dump was several megabytes larges but luckely I had Oracle ASS ;-)
</div>
<div>
Within minutes I kind of figured out what the problem was. 
</div>
<div>
<br />
</div>
<div>
Just looking at some of the wait events from the output below:
</div>
<div>
SGA: allocation forcing component growth
</div>
<div>
cursor: pin S wait on X
</div>
<div>
row cache lock
</div>
<div>
<br />
</div>
<div>
This looks like an sga resize operation, at which point library cache locks arise.
</div>
<div>
A sga resize operation can hang the database for brief moments of time especially when the shared pool needs to be resized.
</div>
<div>
However it this case, the instance was crashing.
</div>
<div>
<br />
</div>
<div>
With no access to the system I told the dba to have a look v$sga_resize_ops. If there are excessive resize operations, the sga might simply be sized too small.
</div>
<div>
I also got hand of the alert logs - as the instances were frequently crashing, I could see the startup in the alert.log, showing me sga settings.
</div>
<div>
And I kid you not - these 2 nodes were configure with SGA_TARGET=256M !!! I was surprise this thing even started !
</div>
<div>
Bumping up sga_target basically solved all issues.
</div>
<div>
<br />
</div>
<div>
This puppy was running in production for a month, had lots of issues and yet, the dba hadn't even bothered to check even the most basics settings.
</div>
<div>
Instead, they just blamed the app, opened a call with oracle, getting some general advise and be done with it. Amazing...
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
awk -f ass109.awk tracefile.trc &gt; out
</div>
<div>
<br />
</div>
<div>
Starting Systemstate 1
</div>
<div>
..............................................................................
</div>
<div>
.................................................................
</div>
<div>
Ass.Awk Version 1.0.9 - Processing xyz_ora_4948.trc
</div>
<div>
<br />
</div>
<div>
System State 1
</div>
<div>
~~~~~~~~~~~~~~~~
</div>
<div>
1:                                      
</div>
<div>
2:  waiting for 'pmon timer'            
</div>
<div>
3:  waiting for 'DIAG idle wait'        
</div>
<div>
4:  waiting for 'rdbms ipc message'     
</div>
<div>
5:  waiting for 'rdbms ipc message'    [Latch received-location:] 
</div>
<div>
6:  waiting for 'ges remote message'    
</div>
<div>
7:  waiting for 'gcs remote message'    
</div>
<div>
8:  waiting for 'gcs remote message'    
</div>
<div>
9:  waiting for 'gcs remote message'    
</div>
<div>
10: waiting for 'gcs remote message'    
</div>
<div>
11: waiting for 'gcs remote message'    
</div>
<div>
12: waiting for 'gcs remote message'    
</div>
<div>
13: last wait for 'rdbms ipc message'   
</div>
<div>
14: waiting for 'rdbms ipc message'     
</div>
<div>
15: waiting for 'rdbms ipc message'     
</div>
<div>
16: waiting for 'rdbms ipc message'     
</div>
<div>
17: waiting for 'rdbms ipc message'     
</div>
<div>
18: waiting for 'rdbms ipc message'     
</div>
<div>
19: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
20: waiting for 'enq: DR - contention' [Enqueue DR-00000000-00000000] 
</div>
<div>
21: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
22: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
23: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
24: waiting for 'rdbms ipc message'     
</div>
<div>
25: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
     Cmd: Select
</div>
<div>
26: waiting for 'ASM background timer'  
</div>
<div>
27: waiting for 'rdbms ipc message'     
</div>
<div>
28: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
29: waiting for 'rdbms ipc message'     
</div>
<div>
30: waiting for 'rdbms ipc message'     
</div>
<div>
31: waiting for 'Streams AQ: qmn coordinator idle wait' 
</div>
<div>
32: waiting for 'cursor: pin S wait on X' 
</div>
<div>
     Cmd: Select
</div>
<div>
33: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
34: waiting for 'SQL*Net message from client' 
</div>
<div>
35: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
     Cmd: Select
</div>
<div>
36: waiting for 'cursor: pin S wait on X' 
</div>
<div>
     Cmd: Select
</div>
<div>
37: waiting for 'cursor: pin S wait on X' 
</div>
<div>
     Cmd: Select
</div>
<div>
38: waiting for 'cursor: pin S wait on X' 
</div>
<div>
     Cmd: Select
</div>
<div>
39: waiting for 'cursor: pin S wait on X' 
</div>
<div>
     Cmd: Select
</div>
<div>
40: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
     Cmd: Select
</div>
<div>
41: waiting for 'Streams AQ: qmn slave idle wait' 
</div>
<div>
42: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
     Cmd: Select
</div>
<div>
43: for 'Streams AQ: waiting for time management or cleanup tasks' 
</div>
<div>
44: waiting for 'PX Deq: Execution Msg' 
</div>
<div>
     Cmd: Select
</div>
<div>
45: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
     Cmd: Select
</div>
<div>
46: waiting for 'PX Deq: Execution Msg' 
</div>
<div>
     Cmd: Select
</div>
<div>
47: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
     Cmd: Select
</div>
<div>
48: waiting for 'enq: PS - contention' [Enqueue PS-00000002-00000E0C] 
</div>
<div>
     Cmd: Select
</div>
<div>
49: waiting for 'class slave wait'      
</div>
<div>
50: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
     Cmd: PL/SQL Execute
</div>
<div>
51:                                     
</div>
<div>
52: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
53: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
     Cmd: PL/SQL Execute
</div>
<div>
54: waiting for 'PX Deq: Execution Msg' 
</div>
<div>
     Cmd: Select
</div>
<div>
55: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
     Cmd: Select
</div>
<div>
56: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
57: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
58: waiting for 'PX Deq: Execution Msg' 
</div>
<div>
     Cmd: Select
</div>
<div>
59: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
     Cmd: Select
</div>
<div>
60: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
     Cmd: Select
</div>
<div>
61: waiting for 'PX Deq: Execution Msg' 
</div>
<div>
     Cmd: Select
</div>
<div>
62: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
63: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
64: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
65: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
66: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
67: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
68: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
69: last wait for 'ksdxexeotherwait'   [Rcache object=000007FF88BFD200,] 
</div>
<div>
70: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
71: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
72: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
73: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
74: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
75: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
76: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
77: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
78: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
79: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
80: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
81: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
82: waiting for 'row cache lock'       [Rcache object=000007FF88AC2658,] 
</div>
<div>
83: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
84: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
85: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
86: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
87: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
88: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
89: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
90: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
91: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
92: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
93: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
94: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
95: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
96: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
97: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
98: waiting for 'row cache lock'       [Rcache object=000007FF88AC2658,] 
</div>
<div>
99: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
100:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
101:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
102:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
103:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
104:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
105:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
106:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
107:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
108:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
109:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
110:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
111:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
112:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
113:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
114:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
115:waiting for 'row cache lock'       [Rcache object=000007FF88AC2658,] 
</div>
<div>
116:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
117:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
118:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
119:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
120:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
121:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
122:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
123:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
124:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
125:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
126:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
127:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
128:waiting for 'row cache lock'       [Rcache object=000007FF88AC2658,] 
</div>
<div>
129:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
130:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
131:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
132:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
133:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
134:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
135:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
136:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
137:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
138:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
139:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
140:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
141:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
142:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
143:waiting for 'row cache lock'       [Rcache object=000007FF88AC2658,] 
</div>
<div>
Blockers
</div>
<div>
~~~~~~~~
</div>
<div>
<br />
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span">	</span>Above is a list of all the processes. If they are waiting for a resource
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span">	</span>then it will be given in square brackets. Below is a summary of the
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span">	</span>waited upon resources, together with the holder of that resource.
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span">	</span>Notes:
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span">	</span>~~~~~
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span">	</span> o A process id of '???' implies that the holder was not found in the
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span">	</span>   systemstate.
</div>
<div>
<br />
</div>
<div>
                    Resource Holder State
</div>
<div>
    Latch received-location:    ??? Blocker
</div>
<div>
Enqueue DR-00000000-00000000    ??? Blocker
</div>
<div>
Rcache object=000007FF88BFD200,    57: waiting for 'SGA: allocation forcing component growth'
</div>
<div>
Enqueue PS-00000002-00000E0C    48: Self-Deadlock
</div>
<div>
Rcache object=000007FF88AC2658,    68: waiting for 'SGA: allocation forcing component growth'
</div>
<div>
<br />
</div>
<div>
Query Co-Ordinator to Query Slave Mapping
</div>
<div>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</div>
<div>
QC=  33:  [Count=1]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E0E)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
QC=  35:  [Count=2]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E0F)
</div>
<div>
           Communicates with Slave 0 (hex) on instance 1 (PS-01-0E0F)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
  44: PS-01-0E0F   1   00000,         35:         44:  DTA,     FRE     STRE    0
</div>
<div>
QC=  42:  [Count=2]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E0D)
</div>
<div>
           Communicates with Slave 0 (hex) on instance 1 (PS-01-0E0E)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
  46: PS-01-0E0E   1   00000,         42:         46:  DTA,     FRE     STRE    0
</div>
<div>
QC=  45:  [Count=2]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E07)
</div>
<div>
           Communicates with Slave 0 (hex) on instance 1 (PS-01-0E09)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
  61: PS-01-0E09   1   00000,         45:         61:  DTA,     FRE     STRE    0
</div>
<div>
QC=  47:  [Count=2]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E0B)
</div>
<div>
           Communicates with Slave 0 (hex) on instance 1 (PS-01-0E0C)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
  54: PS-01-0E0C   1   00000,         47:         54:  DTA,     FRE     STRE    0
</div>
<div>
QC=  48:  [Count=2]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E0C)
</div>
<div>
           Communicates with Slave 0 (hex) on instance 1 (PS-01-0E0D)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
QC=  52:  [Count=1]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E0A)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
QC=  55:  [Count=2]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E08)
</div>
<div>
           Communicates with Slave 0 (hex) on instance 1 (PS-01-0E0A)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
  58: PS-01-0E0A   1   00000,         55:         58:  DTA,     FRE     STRE    0
</div>
<div>
QC=  56:  [Count=1]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E05)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
QC=  62:  [Count=1]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E06)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
QC=  66:  [Count=1]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E09)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
                         ------------------------
</div>
<div>
STATUS Key:
</div>
<div>
  DEQ = buffer has been dequeued
</div>
<div>
  EML = buffer on emergency message list
</div>
<div>
  ENQ = buffer has been enqueued
</div>
<div>
  FLST= buffer is on SGA freelist
</div>
<div>
  FRE = buffer is free (unused)
</div>
<div>
  GEB = buffer has been gotten for enqueuing
</div>
<div>
  GDB = dequeued buffer has been gotten 
</div>
<div>
  INV = buffer is invalid (non-existent)
</div>
<div>
  QUE = buffer on queue message list
</div>
<div>
  RCV = buffer has been received 
</div>
<div>
  NOFL= not on freelist (just removed)
</div>
<div>
                              ------------------------
</div>
<div>
<br />
</div>
<div>
Object Names
</div>
<div>
~~~~~~~~~~~~
</div>
<div>
Latch received-location:<span style="white-space: pre" class="Apple-tab-span">	</span>              last post received-location: kjmdrms
</div>
<div>
Enqueue DR-00000000-00000000<span style="white-space: pre" class="Apple-tab-span">	</span>                              
</div>
<div>
Rcache object=000007FF88BFD200,<span style="white-space: pre" class="Apple-tab-span">	</span>                              
</div>
<div>
Enqueue PS-00000002-00000E0C<span style="white-space: pre" class="Apple-tab-span">	</span>                              
</div>
<div>
Rcache object=000007FF88AC2658,<span style="white-space: pre" class="Apple-tab-span">	</span>                              
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
53697 Lines Processed.
</div>
<div>
<br />
</div>
    ]]></summary>
    <content type="html"><![CDATA[<div>
<br />
</div>
<div>
For those who don't know Oracle ASS - it's an awk script that is hidden in Oracle's LTOM (aka Lite Onboard Monitoring).
</div>
<div>
You can download it from metalink - see note ID 352363.1.
</div>
<div>
<br />
</div>
<div>
It's an awk script that formats system state dumps. I now and then use it to format massive trace files to something I can actually use.
</div>
<div>
<br />
</div>
<div>
A couple of months ago I had to investigate why a 2 node RAC on windows kept on crashing.
</div>
<div>
The dba managing it didn't really bother to check the system state dump - instead they just open a call with Oracle and uploaded the trace files.
</div>
<div>
As usual, the dba blamed the developers - 'it's the app - it's the app' - and I had to defuse the situation and as the developers couldn't see anything wrong and the relationship started to turn sour.
</div>
<div>
I wasn't allowed access to the system but I was able to have a look at the trace files - or as the dba called it 'a very complex logfile'.
</div>
<div>
<br />
</div>
<div>
Fair enough - the system state dump was several megabytes larges but luckely I had Oracle ASS ;-)
</div>
<div>
Within minutes I kind of figured out what the problem was. 
</div>
<div>
<br />
</div>
<div>
Just looking at some of the wait events from the output below:
</div>
<div>
SGA: allocation forcing component growth
</div>
<div>
cursor: pin S wait on X
</div>
<div>
row cache lock
</div>
<div>
<br />
</div>
<div>
This looks like an sga resize operation, at which point library cache locks arise.
</div>
<div>
A sga resize operation can hang the database for brief moments of time especially when the shared pool needs to be resized.
</div>
<div>
However it this case, the instance was crashing.
</div>
<div>
<br />
</div>
<div>
With no access to the system I told the dba to have a look v$sga_resize_ops. If there are excessive resize operations, the sga might simply be sized too small.
</div>
<div>
I also got hand of the alert logs - as the instances were frequently crashing, I could see the startup in the alert.log, showing me sga settings.
</div>
<div>
And I kid you not - these 2 nodes were configure with SGA_TARGET=256M !!! I was surprise this thing even started !
</div>
<div>
Bumping up sga_target basically solved all issues.
</div>
<div>
<br />
</div>
<div>
This puppy was running in production for a month, had lots of issues and yet, the dba hadn't even bothered to check even the most basics settings.
</div>
<div>
Instead, they just blamed the app, opened a call with oracle, getting some general advise and be done with it. Amazing...
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
awk -f ass109.awk tracefile.trc &gt; out
</div>
<div>
<br />
</div>
<div>
Starting Systemstate 1
</div>
<div>
..............................................................................
</div>
<div>
.................................................................
</div>
<div>
Ass.Awk Version 1.0.9 - Processing xyz_ora_4948.trc
</div>
<div>
<br />
</div>
<div>
System State 1
</div>
<div>
~~~~~~~~~~~~~~~~
</div>
<div>
1:                                      
</div>
<div>
2:  waiting for 'pmon timer'            
</div>
<div>
3:  waiting for 'DIAG idle wait'        
</div>
<div>
4:  waiting for 'rdbms ipc message'     
</div>
<div>
5:  waiting for 'rdbms ipc message'    [Latch received-location:] 
</div>
<div>
6:  waiting for 'ges remote message'    
</div>
<div>
7:  waiting for 'gcs remote message'    
</div>
<div>
8:  waiting for 'gcs remote message'    
</div>
<div>
9:  waiting for 'gcs remote message'    
</div>
<div>
10: waiting for 'gcs remote message'    
</div>
<div>
11: waiting for 'gcs remote message'    
</div>
<div>
12: waiting for 'gcs remote message'    
</div>
<div>
13: last wait for 'rdbms ipc message'   
</div>
<div>
14: waiting for 'rdbms ipc message'     
</div>
<div>
15: waiting for 'rdbms ipc message'     
</div>
<div>
16: waiting for 'rdbms ipc message'     
</div>
<div>
17: waiting for 'rdbms ipc message'     
</div>
<div>
18: waiting for 'rdbms ipc message'     
</div>
<div>
19: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
20: waiting for 'enq: DR - contention' [Enqueue DR-00000000-00000000] 
</div>
<div>
21: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
22: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
23: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
24: waiting for 'rdbms ipc message'     
</div>
<div>
25: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
     Cmd: Select
</div>
<div>
26: waiting for 'ASM background timer'  
</div>
<div>
27: waiting for 'rdbms ipc message'     
</div>
<div>
28: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
29: waiting for 'rdbms ipc message'     
</div>
<div>
30: waiting for 'rdbms ipc message'     
</div>
<div>
31: waiting for 'Streams AQ: qmn coordinator idle wait' 
</div>
<div>
32: waiting for 'cursor: pin S wait on X' 
</div>
<div>
     Cmd: Select
</div>
<div>
33: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
34: waiting for 'SQL*Net message from client' 
</div>
<div>
35: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
     Cmd: Select
</div>
<div>
36: waiting for 'cursor: pin S wait on X' 
</div>
<div>
     Cmd: Select
</div>
<div>
37: waiting for 'cursor: pin S wait on X' 
</div>
<div>
     Cmd: Select
</div>
<div>
38: waiting for 'cursor: pin S wait on X' 
</div>
<div>
     Cmd: Select
</div>
<div>
39: waiting for 'cursor: pin S wait on X' 
</div>
<div>
     Cmd: Select
</div>
<div>
40: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
     Cmd: Select
</div>
<div>
41: waiting for 'Streams AQ: qmn slave idle wait' 
</div>
<div>
42: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
     Cmd: Select
</div>
<div>
43: for 'Streams AQ: waiting for time management or cleanup tasks' 
</div>
<div>
44: waiting for 'PX Deq: Execution Msg' 
</div>
<div>
     Cmd: Select
</div>
<div>
45: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
     Cmd: Select
</div>
<div>
46: waiting for 'PX Deq: Execution Msg' 
</div>
<div>
     Cmd: Select
</div>
<div>
47: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
     Cmd: Select
</div>
<div>
48: waiting for 'enq: PS - contention' [Enqueue PS-00000002-00000E0C] 
</div>
<div>
     Cmd: Select
</div>
<div>
49: waiting for 'class slave wait'      
</div>
<div>
50: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
     Cmd: PL/SQL Execute
</div>
<div>
51:                                     
</div>
<div>
52: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
53: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
     Cmd: PL/SQL Execute
</div>
<div>
54: waiting for 'PX Deq: Execution Msg' 
</div>
<div>
     Cmd: Select
</div>
<div>
55: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
     Cmd: Select
</div>
<div>
56: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
57: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
58: waiting for 'PX Deq: Execution Msg' 
</div>
<div>
     Cmd: Select
</div>
<div>
59: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
     Cmd: Select
</div>
<div>
60: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
     Cmd: Select
</div>
<div>
61: waiting for 'PX Deq: Execution Msg' 
</div>
<div>
     Cmd: Select
</div>
<div>
62: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
63: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
64: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
65: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
66: waiting for 'PX Deq: Parse Reply'   
</div>
<div>
67: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
68: waiting for 'SGA: allocation forcing component growth' 
</div>
<div>
69: last wait for 'ksdxexeotherwait'   [Rcache object=000007FF88BFD200,] 
</div>
<div>
70: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
71: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
72: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
73: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
74: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
75: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
76: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
77: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
78: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
79: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
80: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
81: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
82: waiting for 'row cache lock'       [Rcache object=000007FF88AC2658,] 
</div>
<div>
83: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
84: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
85: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
86: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
87: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
88: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
89: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
90: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
91: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
92: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
93: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
94: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
95: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
96: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
97: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
98: waiting for 'row cache lock'       [Rcache object=000007FF88AC2658,] 
</div>
<div>
99: waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
100:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
101:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
102:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
103:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
104:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
105:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
106:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
107:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
108:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
109:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
110:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
111:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
112:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
113:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
114:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
115:waiting for 'row cache lock'       [Rcache object=000007FF88AC2658,] 
</div>
<div>
116:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
117:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
118:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
119:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
120:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
121:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
122:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
123:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
124:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
125:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
126:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
127:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
128:waiting for 'row cache lock'       [Rcache object=000007FF88AC2658,] 
</div>
<div>
129:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
130:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
131:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
132:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
133:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
134:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
135:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
136:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
137:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
138:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
139:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
140:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
141:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
142:waiting for 'row cache lock'       [Rcache object=000007FF88BFD200,] 
</div>
<div>
143:waiting for 'row cache lock'       [Rcache object=000007FF88AC2658,] 
</div>
<div>
Blockers
</div>
<div>
~~~~~~~~
</div>
<div>
<br />
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span">	</span>Above is a list of all the processes. If they are waiting for a resource
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span">	</span>then it will be given in square brackets. Below is a summary of the
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span">	</span>waited upon resources, together with the holder of that resource.
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span">	</span>Notes:
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span">	</span>~~~~~
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span">	</span> o A process id of '???' implies that the holder was not found in the
</div>
<div>
<span style="white-space: pre" class="Apple-tab-span">	</span>   systemstate.
</div>
<div>
<br />
</div>
<div>
                    Resource Holder State
</div>
<div>
    Latch received-location:    ??? Blocker
</div>
<div>
Enqueue DR-00000000-00000000    ??? Blocker
</div>
<div>
Rcache object=000007FF88BFD200,    57: waiting for 'SGA: allocation forcing component growth'
</div>
<div>
Enqueue PS-00000002-00000E0C    48: Self-Deadlock
</div>
<div>
Rcache object=000007FF88AC2658,    68: waiting for 'SGA: allocation forcing component growth'
</div>
<div>
<br />
</div>
<div>
Query Co-Ordinator to Query Slave Mapping
</div>
<div>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</div>
<div>
QC=  33:  [Count=1]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E0E)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
QC=  35:  [Count=2]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E0F)
</div>
<div>
           Communicates with Slave 0 (hex) on instance 1 (PS-01-0E0F)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
  44: PS-01-0E0F   1   00000,         35:         44:  DTA,     FRE     STRE    0
</div>
<div>
QC=  42:  [Count=2]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E0D)
</div>
<div>
           Communicates with Slave 0 (hex) on instance 1 (PS-01-0E0E)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
  46: PS-01-0E0E   1   00000,         42:         46:  DTA,     FRE     STRE    0
</div>
<div>
QC=  45:  [Count=2]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E07)
</div>
<div>
           Communicates with Slave 0 (hex) on instance 1 (PS-01-0E09)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
  61: PS-01-0E09   1   00000,         45:         61:  DTA,     FRE     STRE    0
</div>
<div>
QC=  47:  [Count=2]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E0B)
</div>
<div>
           Communicates with Slave 0 (hex) on instance 1 (PS-01-0E0C)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
  54: PS-01-0E0C   1   00000,         47:         54:  DTA,     FRE     STRE    0
</div>
<div>
QC=  48:  [Count=2]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E0C)
</div>
<div>
           Communicates with Slave 0 (hex) on instance 1 (PS-01-0E0D)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
QC=  52:  [Count=1]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E0A)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
QC=  55:  [Count=2]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E08)
</div>
<div>
           Communicates with Slave 0 (hex) on instance 1 (PS-01-0E0A)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
  58: PS-01-0E0A   1   00000,         55:         58:  DTA,     FRE     STRE    0
</div>
<div>
QC=  56:  [Count=1]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E05)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
QC=  62:  [Count=1]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E06)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
QC=  66:  [Count=1]
</div>
<div>
           Communicates with Slave 0 (hex) on instance 2 (PS-02-0E09)
</div>
<div>
Slave     Info Msg    State        From          To  Type  Status     Mode  Err
</div>
<div>
                         ------------------------
</div>
<div>
STATUS Key:
</div>
<div>
  DEQ = buffer has been dequeued
</div>
<div>
  EML = buffer on emergency message list
</div>
<div>
  ENQ = buffer has been enqueued
</div>
<div>
  FLST= buffer is on SGA freelist
</div>
<div>
  FRE = buffer is free (unused)
</div>
<div>
  GEB = buffer has been gotten for enqueuing
</div>
<div>
  GDB = dequeued buffer has been gotten 
</div>
<div>
  INV = buffer is invalid (non-existent)
</div>
<div>
  QUE = buffer on queue message list
</div>
<div>
  RCV = buffer has been received 
</div>
<div>
  NOFL= not on freelist (just removed)
</div>
<div>
                              ------------------------
</div>
<div>
<br />
</div>
<div>
Object Names
</div>
<div>
~~~~~~~~~~~~
</div>
<div>
Latch received-location:<span style="white-space: pre" class="Apple-tab-span">	</span>              last post received-location: kjmdrms
</div>
<div>
Enqueue DR-00000000-00000000<span style="white-space: pre" class="Apple-tab-span">	</span>                              
</div>
<div>
Rcache object=000007FF88BFD200,<span style="white-space: pre" class="Apple-tab-span">	</span>                              
</div>
<div>
Enqueue PS-00000002-00000E0C<span style="white-space: pre" class="Apple-tab-span">	</span>                              
</div>
<div>
Rcache object=000007FF88AC2658,<span style="white-space: pre" class="Apple-tab-span">	</span>                              
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
53697 Lines Processed.
</div>
<div>
<br />
</div>
    ]]></content>
  </entry>
  <entry>
    <title>Are you the smartest 2011</title>
    <link rel="alternate" type="text/html" href="http://www.ora600.be/are-you-the-smartest-2011-ayts2011" />
    <id>http://www.ora600.be/are-you-the-smartest-2011-ayts2011</id>
    <published>2011-06-26T13:57:32+02:00</published>
    <updated>2011-06-26T14:03:44+02:00</updated>
    <author>
      <name>kurtvm</name>
    </author>
    <category term="ayts" />
    <category term="ayts2011" />
    <category term="oraclehq" />
    <summary type="html"><![CDATA[<div>
It's been a long time since I've written something here, but I reckon the following is worth a post.
</div>
<div>
<br />
</div>
<div>
For those of you who don't know what Oracle 'Are you the smartest' is (or ayts short), have a look at this post <a href="http://www.ora600.be/ayts2008-are-you-the-smartest" target="_blank">I wrote a couple of years back</a>.
</div>
<div>
Basically it's a competition for Oracle partners in the Benelux - I've entered the first time in 2008 and since then I've won it twice and became second once. 
</div>
<div>
Have a look at this year's topics (<a href="http://www.ayts.be/" target="_blank">http://www.ayts.be/</a>)
</div>
<div>
All Benelux based Oracle partners can enter, and there is a winner per partner. 
</div>
<div>
This year, AXI was the smartest partner in Benelux, meaning, on average, we had the highest scores on the exams... again.
</div>
<div>
</div>
<div>
Anyhow - I've won it this year for AXI - and the first price is a trip to Oracle HQ, followed by a quick stop in Vegas. Now that's a cool incentive !
</div>
<div>
</div>
<div style="text-align: center">
<img src="/system/files/u1/2011-06-17_13_19_02.jpg" height="500" width="375" /> 
</div>
<div>
<br />
</div>
<div>
Have a look at <a href="http://marcel.vandewaters.nl/ayts-2011" target="_blank">Marcel's blog</a> for a more detailed overlook of the trip.
</div>
<div>
<br />
</div>
<div>
I've been to SF and Vegas numerous times, but it never gets old ! 
</div>
<div>
Although this year, I must it admit, I was very tired before I even started the trip.
</div>
<div>
I've become a father 6months ago and this sort of starts to work on your sleep patterns <img src="http://www.ora600.be/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cool.gif" title="Cool" alt="Cool" border="0" />
</div>
<div>
So I was looking forward to some rest, but these were 4days packed full of action and this tired me down even more. 
</div>
<div>
Also the group was quit large (25people), and people who know me, know I don't thrive that well in big groups.
</div>
<div>
This meant that by the end of the trip I hadn't talk to all the people I wanted to talk to !
</div>
<div>
<br />
</div>
<div>
The trip was a blast tho - I teamed up with Geert Depaep (the guy from <a href="http://www.dba-village.com" target="_blank">DBA-Village</a>)  as a room-mate. He also won in 2008, the same year I last won.
</div>
<div>
Two high lights stand out 
</div>
<div>
- the visit to Oracle HQ, were we had 2 presentations.
</div>
<div>
One from Wim Coeckaerts on Oracle virtualisations and one from Jeff Davis on SOA.
</div>
<div>
I can't really say much about it since we had to sign an NDA, other than, OracleVM 3.0 does exist.
</div>
<div>
(it has been in beta so long, I started to wonder if it acutally existed !)
</div>
<div>
Also, have a look at <a href="http://www.oracle.com/us/products/middleware/application-server/virtual-assembly-builder-067878.html" target="_blank">Oracle Virtual Assembly Builder</a>.
</div>
<div>
I had never heard about this tool but it looks pretty cool if you want to deploy VM images and customize them.
</div>
<div>
</div>
<div style="text-align: center">
<img src="/system/files/u1/2011-06-17_09_11_51.jpg" height="500" width="375" title="wim coeckaert" alt="wim coeckaert" /> 
</div>
<div>
<br />
</div>
<div>
- my poker session at the Venetian
</div>
<div>
I didn't enter a tournament (allthough those deep stack tournaments look mighty tempting) - just played cash games 4h straight.
</div>
<div>
Most of the guys went to the V club after 1h of gambling - apperently I was the only one not there ... but when I'm at the tables
</div>
<div>
I lose time and interests in anything else ... and I made some money as a bonus.
</div>
<div>
<br />
</div>
<div>
Anyway, overall excellent trip, a great incentive from Oracle, and a big thanks to Yves Van Looy.
</div>
<div>
<br />
</div>
<div>
Now if only I could get this song out of my head they were playing at the <a href="http://www.parislasvegas.com/casinos/paris-las-vegas/casino-misc/chateau-nightclub-and-gardens-detail.html" target="_blank">Paris Chateau Nightclub</a>.
</div>
<div>
<br />
</div>
<div style="text-align: center">
<iframe src="http://www.youtube.com/embed/t4H_Zoh7G5A" width="560" height="349" frameborder="0"></iframe>
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
<br />
</div>
    ]]></summary>
    <content type="html"><![CDATA[<div>
It's been a long time since I've written something here, but I reckon the following is worth a post.
</div>
<div>
<br />
</div>
<div>
For those of you who don't know what Oracle 'Are you the smartest' is (or ayts short), have a look at this post <a href="http://www.ora600.be/ayts2008-are-you-the-smartest" target="_blank">I wrote a couple of years back</a>.
</div>
<div>
Basically it's a competition for Oracle partners in the Benelux - I've entered the first time in 2008 and since then I've won it twice and became second once. 
</div>
<div>
Have a look at this year's topics (<a href="http://www.ayts.be/" target="_blank">http://www.ayts.be/</a>)
</div>
<div>
All Benelux based Oracle partners can enter, and there is a winner per partner. 
</div>
<div>
This year, AXI was the smartest partner in Benelux, meaning, on average, we had the highest scores on the exams... again.
</div>
<div>
</div>
<div>
Anyhow - I've won it this year for AXI - and the first price is a trip to Oracle HQ, followed by a quick stop in Vegas. Now that's a cool incentive !
</div>
<div>
</div>
<div style="text-align: center">
<img src="/system/files/u1/2011-06-17_13_19_02.jpg" height="500" width="375" /> 
</div>
<div>
<br />
</div>
<div>
Have a look at <a href="http://marcel.vandewaters.nl/ayts-2011" target="_blank">Marcel's blog</a> for a more detailed overlook of the trip.
</div>
<div>
<br />
</div>
<div>
I've been to SF and Vegas numerous times, but it never gets old ! 
</div>
<div>
Although this year, I must it admit, I was very tired before I even started the trip.
</div>
<div>
I've become a father 6months ago and this sort of starts to work on your sleep patterns <img src="http://www.ora600.be/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cool.gif" title="Cool" alt="Cool" border="0" />
</div>
<div>
So I was looking forward to some rest, but these were 4days packed full of action and this tired me down even more. 
</div>
<div>
Also the group was quit large (25people), and people who know me, know I don't thrive that well in big groups.
</div>
<div>
This meant that by the end of the trip I hadn't talk to all the people I wanted to talk to !
</div>
<div>
<br />
</div>
<div>
The trip was a blast tho - I teamed up with Geert Depaep (the guy from <a href="http://www.dba-village.com" target="_blank">DBA-Village</a>)  as a room-mate. He also won in 2008, the same year I last won.
</div>
<div>
Two high lights stand out 
</div>
<div>
- the visit to Oracle HQ, were we had 2 presentations.
</div>
<div>
One from Wim Coeckaerts on Oracle virtualisations and one from Jeff Davis on SOA.
</div>
<div>
I can't really say much about it since we had to sign an NDA, other than, OracleVM 3.0 does exist.
</div>
<div>
(it has been in beta so long, I started to wonder if it acutally existed !)
</div>
<div>
Also, have a look at <a href="http://www.oracle.com/us/products/middleware/application-server/virtual-assembly-builder-067878.html" target="_blank">Oracle Virtual Assembly Builder</a>.
</div>
<div>
I had never heard about this tool but it looks pretty cool if you want to deploy VM images and customize them.
</div>
<div>
</div>
<div style="text-align: center">
<img src="/system/files/u1/2011-06-17_09_11_51.jpg" height="500" width="375" title="wim coeckaert" alt="wim coeckaert" /> 
</div>
<div>
<br />
</div>
<div>
- my poker session at the Venetian
</div>
<div>
I didn't enter a tournament (allthough those deep stack tournaments look mighty tempting) - just played cash games 4h straight.
</div>
<div>
Most of the guys went to the V club after 1h of gambling - apperently I was the only one not there ... but when I'm at the tables
</div>
<div>
I lose time and interests in anything else ... and I made some money as a bonus.
</div>
<div>
<br />
</div>
<div>
Anyway, overall excellent trip, a great incentive from Oracle, and a big thanks to Yves Van Looy.
</div>
<div>
<br />
</div>
<div>
Now if only I could get this song out of my head they were playing at the <a href="http://www.parislasvegas.com/casinos/paris-las-vegas/casino-misc/chateau-nightclub-and-gardens-detail.html" target="_blank">Paris Chateau Nightclub</a>.
</div>
<div>
<br />
</div>
<div style="text-align: center">
<iframe src="http://www.youtube.com/embed/t4H_Zoh7G5A" width="560" height="349" frameborder="0"></iframe>
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
<br />
</div>
    ]]></content>
  </entry>
  <entry>
    <title>Memory Footprint For Dedicated Server Processes More Than Doubled After 11g Upgrade On AIX Platform</title>
    <link rel="alternate" type="text/html" href="http://www.ora600.be/Memory+Footprint+For+Dedicated+Server+Processes+More+Than+Doubled+After+11g+Upgrade+On+AIX+Platform" />
    <id>http://www.ora600.be/Memory+Footprint+For+Dedicated+Server+Processes+More+Than+Doubled+After+11g+Upgrade+On+AIX+Platform</id>
    <published>2011-03-15T06:00:08+01:00</published>
    <updated>2011-03-15T09:35:46+01:00</updated>
    <author>
      <name>kurtvm</name>
    </author>
    <category term="11g" />
    <category term="AIX" />
    <category term="memory" />
    <summary type="html"><![CDATA[<div>Another one I categorize under 'I should write this down before I forget'.</div><div><a href="http://www.oracledba.co.uk/" target="_blank">Connor Mcdonald</a> - Oracle geek and entertainer extraordinaire - shared this with me last week. Apparently, he was having some memory issues after upgrading to 11gR2 under AIX. As we run 80% of our databases under AIX, I thought I should make a mental note about it (some may call it a blogentry).</div><div>For those with metalink access - lookup note id ID 1246995.1 titled 'Memory footprint for dedicated server processes more than doubled after 11g upgrade on AIX platform'.</div><div> </div><div><br /></div><div>The symptoms are :</div><div><ul>													<li>excessive memory utilization for dedicated server process after upgrade to 11.2.0.1 or 11.2.0.2 on AIX</li>							<li>svmon on oracle OS process id shows size of USLA, User-Space Loader Assistant, heap of about 7M bytes</li></ul></div><div> </div><div> </div><div>Example </div><div>svmon -P &lt;PID&gt;</div><div>outputs</div><div><ul>													<li>11.2.0.1.0 -&gt; 7M bytes (=USLA x 4k page size)</li>							<li>11.1.0.7.0 -&gt; 60KB </li>							<li>10.2.0.4.0 -&gt; 420KB</li></ul><div><br /></div><div>Example on 11.2.0.1 (<b>unpatched</b>)</div></div><div><span class="Apple-style-span" style="font-family: 'courier new', courier"> svmon -P 1368120 | grep USLA</span></div><div><span class="Apple-style-span" style="font-family: 'courier new', courier"> 10e811d  9fffffff clnt USLA text,/dev/hd2:8227      s     17     0    -       -</span></div><div><span class="Apple-style-span" style="font-family: 'courier new', courier"> 10d89b9  80020014 work USLA heap                   sm      0     0 1895    1895 ---&gt; x4K = 7Mb</span></div><div> </div><div>Example on 11.2.0.1 (<b>patched</b>)</div><div><span class="Apple-style-span" style="font-family: 'courier new', courier">  c291c2  80020014 work USLA heap                   sm     31     0    0      31 ---&gt; x4K = 124K</span></div><div> </div><div> </div><div> </div><div>This is apparently a bug</div><div>Bug 10211065.-P Base Bug 9796810</div><div>Abstract: MEMORY FOOTPRINT FOR DEDICATED SERVER PROCESSES MORE THAN DOUBLED AFTER 11G UGP</div><div> </div><div> </div><div>Bug 9796810.-P Base Bug 10190759</div><div>Abstract: 11G SERVER PROCESSES CONSUMING MUCH MORE MEMORY THAT 10G OR 9I</div><div> </div><div> </div><div>Bug 10190759.-P</div><div>Abstract:  PROCESSES CONSUMING ADDITIONAL MEMORY DUE TO 'USLA HEAP'</div><div><br /></div><div> </div><div> </div><div>The good news is - there's a 'interim' patch - number 10190759.</div><div>It basically changes the make file so that it excludes certain options (-bexpfull and -brtllib) related to 11g's online patching feature.</div><div>It's not really an Oracle problem but it seems related to a bug in runtime loader on AIX.</div><div> </div><div> </div>    ]]></summary>
    <content type="html"><![CDATA[<div>Another one I categorize under 'I should write this down before I forget'.</div><div><a href="http://www.oracledba.co.uk/" target="_blank">Connor Mcdonald</a> - Oracle geek and entertainer extraordinaire - shared this with me last week. Apparently, he was having some memory issues after upgrading to 11gR2 under AIX. As we run 80% of our databases under AIX, I thought I should make a mental note about it (some may call it a blogentry).</div><div>For those with metalink access - lookup note id ID 1246995.1 titled 'Memory footprint for dedicated server processes more than doubled after 11g upgrade on AIX platform'.</div><div> </div><div><br /></div><div>The symptoms are :</div><div><ul>													<li>excessive memory utilization for dedicated server process after upgrade to 11.2.0.1 or 11.2.0.2 on AIX</li>							<li>svmon on oracle OS process id shows size of USLA, User-Space Loader Assistant, heap of about 7M bytes</li></ul></div><div> </div><div> </div><div>Example </div><div>svmon -P &lt;PID&gt;</div><div>outputs</div><div><ul>													<li>11.2.0.1.0 -&gt; 7M bytes (=USLA x 4k page size)</li>							<li>11.1.0.7.0 -&gt; 60KB </li>							<li>10.2.0.4.0 -&gt; 420KB</li></ul><div><br /></div><div>Example on 11.2.0.1 (<b>unpatched</b>)</div></div><div><span class="Apple-style-span" style="font-family: 'courier new', courier"> svmon -P 1368120 | grep USLA</span></div><div><span class="Apple-style-span" style="font-family: 'courier new', courier"> 10e811d  9fffffff clnt USLA text,/dev/hd2:8227      s     17     0    -       -</span></div><div><span class="Apple-style-span" style="font-family: 'courier new', courier"> 10d89b9  80020014 work USLA heap                   sm      0     0 1895    1895 ---&gt; x4K = 7Mb</span></div><div> </div><div>Example on 11.2.0.1 (<b>patched</b>)</div><div><span class="Apple-style-span" style="font-family: 'courier new', courier">  c291c2  80020014 work USLA heap                   sm     31     0    0      31 ---&gt; x4K = 124K</span></div><div> </div><div> </div><div> </div><div>This is apparently a bug</div><div>Bug 10211065.-P Base Bug 9796810</div><div>Abstract: MEMORY FOOTPRINT FOR DEDICATED SERVER PROCESSES MORE THAN DOUBLED AFTER 11G UGP</div><div> </div><div> </div><div>Bug 9796810.-P Base Bug 10190759</div><div>Abstract: 11G SERVER PROCESSES CONSUMING MUCH MORE MEMORY THAT 10G OR 9I</div><div> </div><div> </div><div>Bug 10190759.-P</div><div>Abstract:  PROCESSES CONSUMING ADDITIONAL MEMORY DUE TO 'USLA HEAP'</div><div><br /></div><div> </div><div> </div><div>The good news is - there's a 'interim' patch - number 10190759.</div><div>It basically changes the make file so that it excludes certain options (-bexpfull and -brtllib) related to 11g's online patching feature.</div><div>It's not really an Oracle problem but it seems related to a bug in runtime loader on AIX.</div><div> </div><div> </div>    ]]></content>
  </entry>
  <entry>
    <title>_memory_imm_mode_without_autosga - no really ! don&#039;t resize my sga ! I mean it !</title>
    <link rel="alternate" type="text/html" href="http://www.ora600.be/_memory_imm_mode_without_autosga+-+no+really+%21+don%27t+resize+my+sga+%21+I+mean+it+%21" />
    <id>http://www.ora600.be/_memory_imm_mode_without_autosga+-+no+really+%21+don%27t+resize+my+sga+%21+I+mean+it+%21</id>
    <published>2011-03-08T17:44:48+01:00</published>
    <updated>2011-03-08T17:53:51+01:00</updated>
    <author>
      <name>kurtvm</name>
    </author>
    <category term="amm" />
    <category term="ora-4031" />
    <category term="sga resize" />
    <category term="_memory_imm_mode_without_autosga" />
    <summary type="html"><![CDATA[<div>Wow - I need a mental note for this one ! (hence the blogpost)</div><div><br /></div><div>So you've disable Automatic Memory Management (AMM/ASMM) on your new 11.2 instance - memory_target and sga_target are set to zero ... because ... the dba knows best!</div><div>You've configure large pages - locked the sga in memory - manual configured buffercache etc - you've got the luxury of finally having a machine with gigs and gigs of memory.</div><div><br /></div><div>And then one day you find out that your buffercache is 256Mb in size, the large pool is now 20Gb (coming from 1Gb) and the alert file is screaming ORA-4031, ORA-4031 !!!</div><div><br /></div><div>How did that happen !!!!!! We didn't use automatic memory management ! You scream and yell - who touched the instance parameters..... no fool would set a large pool of 20Gb and a buffer cache of 256Mb manually.</div><div>Looking in the audit logs reveals nobody touched the instance ... it seems AMM/ASMM *is* at play - how can that be if we disabled it ?</div><div><br /></div><div>You open a SR with support and everything becomes clear now :</div><div>- we just ignore your settings and do AMM anyway - if you don't want that set this underscore parameter :</div><div>alter system set &quot;_memory_imm_mode_without_autosga&quot;=FALSE scope=both;</div><div><br /></div><div>Quote - &quot;This is expected behavior in 11.2 for immediate memory allocation requests, which added this as a new feature when automatic memory management was disabled.&quot;</div><div><i>Stupid me !</i></div><div> </div><div><span class="Apple-style-span" style="font-size: 13px; -webkit-border-horizontal-spacing: 6px; -webkit-border-vertical-spacing: 6px; font-family: Arial, Helvetica, sans-serif"><b>note on metalink &quot;SGA Re-Sizes Occurring Despite AMM/ASMM Being Disabled (MEMORY_TARGET/SGA_TARGET=0) [ID 1269139.1]&quot;</b></span></div>    ]]></summary>
    <content type="html"><![CDATA[<div>Wow - I need a mental note for this one ! (hence the blogpost)</div><div><br /></div><div>So you've disable Automatic Memory Management (AMM/ASMM) on your new 11.2 instance - memory_target and sga_target are set to zero ... because ... the dba knows best!</div><div>You've configure large pages - locked the sga in memory - manual configured buffercache etc - you've got the luxury of finally having a machine with gigs and gigs of memory.</div><div><br /></div><div>And then one day you find out that your buffercache is 256Mb in size, the large pool is now 20Gb (coming from 1Gb) and the alert file is screaming ORA-4031, ORA-4031 !!!</div><div><br /></div><div>How did that happen !!!!!! We didn't use automatic memory management ! You scream and yell - who touched the instance parameters..... no fool would set a large pool of 20Gb and a buffer cache of 256Mb manually.</div><div>Looking in the audit logs reveals nobody touched the instance ... it seems AMM/ASMM *is* at play - how can that be if we disabled it ?</div><div><br /></div><div>You open a SR with support and everything becomes clear now :</div><div>- we just ignore your settings and do AMM anyway - if you don't want that set this underscore parameter :</div><div>alter system set &quot;_memory_imm_mode_without_autosga&quot;=FALSE scope=both;</div><div><br /></div><div>Quote - &quot;This is expected behavior in 11.2 for immediate memory allocation requests, which added this as a new feature when automatic memory management was disabled.&quot;</div><div><i>Stupid me !</i></div><div> </div><div><span class="Apple-style-span" style="font-size: 13px; -webkit-border-horizontal-spacing: 6px; -webkit-border-vertical-spacing: 6px; font-family: Arial, Helvetica, sans-serif"><b>note on metalink &quot;SGA Re-Sizes Occurring Despite AMM/ASMM Being Disabled (MEMORY_TARGET/SGA_TARGET=0) [ID 1269139.1]&quot;</b></span></div>    ]]></content>
  </entry>
  <entry>
    <title>Unloading history - old Oracle7 dictionary</title>
    <link rel="alternate" type="text/html" href="http://www.ora600.be/node/10707" />
    <id>http://www.ora600.be/node/10707</id>
    <published>2010-09-02T17:11:18+02:00</published>
    <updated>2010-09-03T14:08:30+02:00</updated>
    <author>
      <name>kurtvm</name>
    </author>
    <category term="dude" />
    <category term="oracle dictionary" />
    <summary type="html"><![CDATA[<div>
When I saw <a href="http://jonathanlewis.wordpress.com/2010/09/01/oracle-versions">Jonathan's post</a> it reminded me of the work I did last weekend.
</div>
<div>
Friday evening I got 2 datafiles - one SYSTEM and one DATA datafile.
</div>
<div>
<br />
</div>
<div>
I only knew the platform but I had send out a request for more information. You can quite easily find out endianness and blocksizes... but the Oracle version is a bit different.
</div>
<div>
With this one, I was quite certain they were Oracle 7 datafiles. For one thing, when DUDE scanned the fileheaders it decoded the filenumbers as being a multiple of 2. SYSTEM turned out to be file#=16. I'll explain later.
</div>
<div>
</div>
<div>
Secondly, setting DUDE's VERSION parameter to '7', allowed me to unload the dictionary without too much trouble.
</div>
<div>
<br />
</div>
<div>
However, when I wanted to unload data from the actual datafile, no data objectid's were found in obj$ or tab$ !!! How could that be !
</div>
<div>
So I started to investigate the dictionary - looking at the SYSTEM tablespace with an hex editor.
</div>
<div>
Blocks were fine, however, there was huge gap in objectid's being used, jumping from 3000 to 41000.
</div>
<div>
Hmm... a serious part of the dictionary was missing - maybe completely overwritten.
</div>
<div>
<br />
</div>
<div>
I then got word back that this was an Oracle 8.0.x database and even more surprising, the database was up and running except for one datafile that had been offlined. (the one they needed data from).
</div>
<div>
So, the dictionary had to be good ! 
</div>
<div>
<br />
</div>
<div>
I was too puzzled at the time - it was only when I took a step back and thought about it for a while everything came together. 
</div>
<div>
This was an Oracle 8.0.x, which was once an Oracle 7.3.4 migrated to 8.0.x using Oracle's 'mig' utility. 'mig' doesn't exist anymore - it's functionality has basically taken over by 'startup migrate' and the upgrade scripts. 
</div>
<div>
Back in the day you had to run the mig utility on your database, which would upgrade your dictionary, using 'migrate.bsq' script. No startup migrate there!
</div>
<div>
</div>
<div>
To migrate the dictionary, new dictionary tables were created. For example, if you had obj$, tab$, col$, then mig utility would create obj_mig$, tab_mig$ and col_mig$ and then it would migrate the data from the old dictionary to the new dictionary and basically switch names. That would mean that the objectid's (and of course data objectid's) of the base dictionary tables are totally different than a normal 8.0 database.
</div>
<div>
In this case, they would be in the 41000 range, because that was the range of objectid's of the most recent created object/segment. 
</div>
<div>
The old dictionary would then be dropped ... but orphaned extents might sit untouched for years in your system tablespace.
</div>
<div>
</div>
<div>
And that's exactly happened when I unloaded the dictionary with VERSION='7'. 
</div>
<div>
DUDE found the left-overs of the old dictionary. However, DUDE should have unloaded the new dictionary !
</div>
<div>
<br />
</div>
<div>
So how does Oracle find the dictionary ?
</div>
<div>
</div>
<div>
Well, in the tablespace header block of the SYSTEM tablespace, there's a pointer pointing to the bootstrap$ table. The bootstrap$ table contains ddl for the base dictionary tables (and indexes) including data objectid's (and table numbers for clustered tables).
</div>
<div>
(you'll also find the ddl for the base dictionary in the sql.bsq script which is used when the database is created)
</div>
<div>
</div>
<div>
Here's an example from bootstrap $: 
</div>
<div>
 17&quot;,&quot;2407&quot;,&quot;CREATE TABLE OBJ$ ( OBJ# NUMBER NOT NULL, DATAOBJ# NUMBER, OWNER# NUMBER NOT NULL, NAME VARCHAR2(30) NOT NULL, NAMESPACE NUMBER NOT NULL, SUBNAME VARCHAR2(30), TYPE# NUMBER NOT NULL, CTIME DATE NOT NULL, MTIME DATE NOT NULL, STIME DATE NOT NULL, STATUS NUMBER NOT NULL, REMOTEOWNER VARCHAR2(30), LINKNAME VARCHAR2(128), FLAGS NUMBER, OID$ RAW(16), SPARE1 NUMBER, SPARE2 NUMBER, SPARE3 NUMBER, SPARE4 VARCHAR2(1000), SPARE5 VARCHAR2(1000), SPARE6 DATE) pctfree 10 pctused 40 initrans 1 maxtrans 255 storage ( initial 10240 next 126976 minextents 1 maxextents 121 pctincrease 50 <b>objno 2407</b> extents ( <b>file 40 block 247</b>))&quot;
</div>
<div>
<br />
</div>
<div>
You'll notice that it contains some key pointers for the described table, like file# (40), offset (247) and dataobjectid (2407). For tables part of a clustered table, it will also contain the table number within the cluster.
</div>
<div>
<br />
</div>
<div>
So once we have the bootstrap$ segment, we'll know the location of dictionary !
</div>
<div>
<br />
</div>
<div>
DUDE actually has the ability to actually 'search' for the bootstrap$ segment based on it's characteristics.
</div>
<div>
It does not however parse the bootstrap ddl for objectid's and table numbers - but once you have the output for bootstrap$, it's quite straightforward to punch in DUDE's bootstrap parameters like :
</div>
<div>
<ul>
	<li>BOOTSTRAP_FILE_OID</li>
	<li>BOOTSTRAP_OBJ_OID</li>
	<li>BOOTSTRAP_COBJ_OID</li>
	<li>BOOTSTRAP_CFILEBLOCK_OID</li>
	<li>BOOTSTRAP_CTS_OID</li>
	<li>BOOTSTRAP_CUSER_OID</li>
	<li>BOOTSTRAP_TAB_TABNO</li>
	<li>BOOTSTRAP_IND_TABNO</li>
	<li>BOOTSTRAP_ICOL_TABNO</li>
	<li>BOOTSTRAP_COL_TABNO</li>
	<li>BOOTSTRAP_LOB_TABNO</li>
	<li>BOOTSTRAP_SEG_TABNO</li>
	<li>BOOTSTRAP_TS_TABNO</li>
	<li>BOOTSTRAP_USER_TABNO </li>
</ul>
</div>
<div>
<br />
</div>
<div>
These parameters are explained in the <a target="_blank" href="http://www.ora600.be/DUDE_PRIMER.pdf">DUDE primer here</a>.
</div>
<div>
<br />
</div>
<div>
Anyway, once I set these parameters, I was home free, unloading a complete Oracle8 dictionary !!!
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
So what about the SYSTEM datafile having a filenumber larger than 1 ?
</div>
<div>
<br />
</div>
<div>
In Oracle 6 there were only 5 to 6 bits used for the file number. So only a maximum of 2^5-1 (31) or 2^6-1 (63) datafiles could be used (database wide).
</div>
<div>
In Oracle 7 this changed to 10bits or 2^10-1 (1023) datafiles (database wide). However, because of backward compatibility with Oracle 6 an encoding scheme was introduced splitting up the 10bits for file number into 6 and 4 bits and wrapping them around. It really depends on the platform. On intel windows and IBM AIX for example, I’ve seen an 8/2 split.
</div>
<div>
</div>
<div>
SVRMGR&gt; select dump(chartorowid('00000000.0000.0001')) from dual ;
</div>
<div>
DUMP(CHARTOROWID('0000000
</div>
<div>
-------------------------
</div>
<div>
Typ=69 Len=6: 1,0,0,0,0,0
</div>
<div>
1 row selected.
</div>
<div>
SVRMGR&gt; select dump(chartorowid('00000000.0000.ffff')) from dual ;
</div>
<div>
DUMP(CHARTOROWID('00000000.00
</div>
<div>
-----------------------------
</div>
<div>
Typ=69 Len=6: 255,192,0,0,0,0
</div>
<div>
1 row selected.
</div>
<div>
</div>
<div>
This means that the first file# is :
</div>
<div>
00000001 00000000 00000000 00000000 -&gt; file# 1
</div>
<div>
</div>
<div>
And the maximum file# is :
</div>
<div>
11111111 11000000 00000000 00000000 -&gt; file# 1023
</div>
<div>
</div>
<div>
So the 10bits encoding scheme is like this :
</div>
<div>
LLLL LLLL HH
</div>
<div>
Where L is the low order bits
</div>
<div>
And H the high order bits
</div>
<div>
</div>
<div>
Now let’s open DUDE on a series of these datafiles :
</div>
<div>
</div>
<div>
DUDE&gt; Initialising ...
</div>
<div>
DUDE&gt; Init : creating filenumber map ...
</div>
<div>
DUDE&gt; Scanning tablespace SYSTEM : BLOCKSIZE = 2048
</div>
<div>
DUDE&gt; File : <b>G:\sys1orcl.ora resolves to number : 4</b>
</div>
<div>
DUDE&gt; File : <b>G:\sys2.ora resolves to number : 40</b>
</div>
<div>
</div>
<div>
You’ll notice that sys1orcl.ora which is basically the first file of the database has file# equal to 4. And we know that sys2.ora had file# equal to 10. How’s that possible ?
</div>
<div>
</div>
<div>
File# 1 = 0000 0001 00 (LLLL LLLL HH) EQUALS 4 in Oracle 8 DBA format
</div>
<div>
File# 10 = 0000 1010 00 (LLLL LLLL HH) EQUALS 40 in Oracle 8 DBA format
</div>
<div>
</div>
<div>
It’s clear that using the Oracle 8 DBA format encoding on the Oracle 7 wrapped DBA format, results in different file numbers. Basically, <b>the file number shifted 2 bits to the left (or x2x2)</b>. This is of course platform specific, but if the first file of SYSTEM has a file number that is a multiple of 2, you probably have a migrated database.
</div>
<div>
</div>
<div>
So what happened when Oracle 8.0 came along and introduced 2^10-1 or 1023 datafiles per tablespace !
</div>
<div>
</div>
<div>
Well – the DBA format stayed the same. However, the file numbers became relative to the tablespace. So 2 datafiles of the same database could have potentially the same file number, but belong to 2 different tablespaces!
</div>
<div>
</div>
<div>
What happened to the Oracle 7 (absolute) file numbers when it was migrated to Oracle8. Surely, the mig utility didn’t update the DBA for all blocks ?
</div>
<div>
</div>
<div>
Let’s check out an Oracle 7 database :
</div>
<div>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">SVRMGR&gt; desc file$</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">Column Name <span style="white-space: pre" class="Apple-tab-span"></span>Null? <span style="white-space: pre" class="Apple-tab-span"></span>Type</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">------------------------------ -------- ----</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">FILE# <span style="white-space: pre" class="Apple-tab-span"></span>NOT NULL NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">STATUS$ <span style="white-space: pre" class="Apple-tab-span"></span>NOT NULL NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">BLOCKS <span style="white-space: pre" class="Apple-tab-span"></span>NOT NULL NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">TS# <span style="white-space: pre" class="Apple-tab-span"></span>NOT NULL NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span"></span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">SVRMGR&gt; select file#, ts# from file$ ;</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">FILE# <span style="white-space: pre" class="Apple-tab-span"></span>TS#</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">---------- ----------</span></span>
</div>
<div>
<span style="font-size: small; font-family: 'courier new', courier" class="Apple-style-span"><span style="background-color: #ffff00" class="Apple-style-span">1 </span><span style="white-space: pre" class="Apple-tab-span"><span style="background-color: #ffff00" class="Apple-style-span"></span></span><span style="background-color: #ffff00" class="Apple-style-span">0</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">2 <span style="white-space: pre" class="Apple-tab-span"></span>1</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">3 <span style="white-space: pre" class="Apple-tab-span"></span>2</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">4 <span style="white-space: pre" class="Apple-tab-span"></span>3</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">5 <span style="white-space: pre" class="Apple-tab-span"></span>8</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">6 <span style="white-space: pre" class="Apple-tab-span"></span>9</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">7 <span style="white-space: pre" class="Apple-tab-span"></span>10</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">8 <span style="white-space: pre" class="Apple-tab-span"></span>7</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">9 <span style="white-space: pre" class="Apple-tab-span"></span>11</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span"><span style="background-color: #ffff00" class="Apple-style-span">10 </span><span style="white-space: pre" class="Apple-tab-span"><span style="background-color: #ffff00" class="Apple-style-span"></span></span><span style="background-color: #ffff00" class="Apple-style-span">0</span></span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">10 rows selected.</span></span>
</div>
<div>
</div>
<div>
Ok – looks logical – we see that tablespace TS#=0 or SYSTEM has 2 datafiles with file#=1 and file#=10.
</div>
<div>
</div>
<div>
Let’s do the same after a migration to 8.0 :
</div>
<div>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">SVRMGR&gt; desc file$</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">Column Name <span style="white-space: pre" class="Apple-tab-span"></span>Null? <span style="white-space: pre" class="Apple-tab-span"></span>Type</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">------------------------------ -------- <span style="white-space: pre" class="Apple-tab-span"></span>----</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span"><b><span style="background-color: #ffff00" class="Apple-style-span">FILE# </span></b><span style="white-space: pre" class="Apple-tab-span"><b><span style="background-color: #ffff00" class="Apple-style-span"></span></b></span><b><span style="background-color: #ffff00" class="Apple-style-span">NOT NULL </span></b><span style="white-space: pre" class="Apple-tab-span"><b><span style="background-color: #ffff00" class="Apple-style-span"></span></b></span><b><span style="background-color: #ffff00" class="Apple-style-span">NUMBER</span></b></span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">STATUS$ <span style="white-space: pre" class="Apple-tab-span"></span>NOT NULL <span style="white-space: pre" class="Apple-tab-span"></span>NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">BLOCKS <span style="white-space: pre" class="Apple-tab-span"></span>NOT NULL <span style="white-space: pre" class="Apple-tab-span"></span>NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">TS# <span style="white-space: pre" class="Apple-tab-span"></span>NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span"><b><span style="background-color: #ffff00" class="Apple-style-span">RELFILE# </span></b><span style="white-space: pre" class="Apple-tab-span"><b><span style="background-color: #ffff00" class="Apple-style-span"></span></b></span><b><span style="background-color: #ffff00" class="Apple-style-span">NUMBER</span></b></span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">MAXEXTEND <span style="white-space: pre" class="Apple-tab-span"></span>NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">INC <span style="white-space: pre" class="Apple-tab-span"></span>NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">CRSCNWRP <span style="white-space: pre" class="Apple-tab-span"></span>NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">CRSCNBAS <span style="white-space: pre" class="Apple-tab-span"></span>NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">OWNERINSTANCE <span style="white-space: pre" class="Apple-tab-span"></span>VARCHAR2(30)</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">SPARE1 <span style="white-space: pre" class="Apple-tab-span"></span>NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">SPARE2 <span style="white-space: pre" class="Apple-tab-span"></span>NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">SPARE3 <span style="white-space: pre" class="Apple-tab-span"></span>VARCHAR2(1000)</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">SPARE4 <span style="white-space: pre" class="Apple-tab-span"></span>DATE</span></span>
</div>
<div>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">SVRMGR&gt; select file#,ts# from file$ ;</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">FILE# <span style="white-space: pre" class="Apple-tab-span"></span>TS#</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">---------- ----------</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span"><span style="background-color: #ffff00" class="Apple-style-span">1 </span><span style="white-space: pre" class="Apple-tab-span"><span style="background-color: #ffff00" class="Apple-style-span"></span></span><span style="background-color: #ffff00" class="Apple-style-span">0</span></span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">2 <span style="white-space: pre" class="Apple-tab-span"></span>1</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">3 <span style="white-space: pre" class="Apple-tab-span"></span>2</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">4 <span style="white-space: pre" class="Apple-tab-span"></span>3</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">5 <span style="white-space: pre" class="Apple-tab-span"></span>8</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">6 <span style="white-space: pre" class="Apple-tab-span"></span>9</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">7 <span style="white-space: pre" class="Apple-tab-span"></span>10</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">8 <span style="white-space: pre" class="Apple-tab-span"></span>7</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">9 <span style="white-space: pre" class="Apple-tab-span"></span>11</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span"><span style="background-color: #ffff00" class="Apple-style-span">10 </span><span style="white-space: pre" class="Apple-tab-span"><span style="background-color: #ffff00" class="Apple-style-span"></span></span><span style="background-color: #ffff00" class="Apple-style-span">0</span></span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">10 rows selected.</span></span>
</div>
<div>
</div>
<div>
So – the file# for the datafiles stayed the same. But we can see an add column in file$ - relfile# :
</div>
<div>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">SVRMGR&gt; select file#,relfile#,ts# from file$ ;</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">FILE# <span style="white-space: pre" class="Apple-tab-span"></span><span style="background-color: #ffff00" class="Apple-style-span"><b>RELFILE#</b></span> <span style="white-space: pre" class="Apple-tab-span"></span>TS#</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">---------- <span style="white-space: pre" class="Apple-tab-span"></span>---------- <span style="white-space: pre" class="Apple-tab-span"></span>----------</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span"><span style="background-color: #ffff00" class="Apple-style-span">1 </span><span style="white-space: pre" class="Apple-tab-span"><span style="background-color: #ffff00" class="Apple-style-span"></span></span><span style="background-color: #ffff00" class="Apple-style-span">4 </span><span style="white-space: pre" class="Apple-tab-span"><span style="background-color: #ffff00" class="Apple-style-span"></span></span><span style="background-color: #ffff00" class="Apple-style-span">0</span></span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">2 <span style="white-space: pre" class="Apple-tab-span"></span>8 <span style="white-space: pre" class="Apple-tab-span"></span>1</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">3 <span style="white-space: pre" class="Apple-tab-span"></span>12 <span style="white-space: pre" class="Apple-tab-span"></span>2</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">4 <span style="white-space: pre" class="Apple-tab-span"></span>16 <span style="white-space: pre" class="Apple-tab-span"></span>3</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">5 <span style="white-space: pre" class="Apple-tab-span"></span>20 <span style="white-space: pre" class="Apple-tab-span"></span>8</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">6 <span style="white-space: pre" class="Apple-tab-span"></span>24 <span style="white-space: pre" class="Apple-tab-span"></span>9</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">7 <span style="white-space: pre" class="Apple-tab-span"></span>28 <span style="white-space: pre" class="Apple-tab-span"></span>10</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">8 <span style="white-space: pre" class="Apple-tab-span"></span>32 <span style="white-space: pre" class="Apple-tab-span"></span>7</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">9 <span style="white-space: pre" class="Apple-tab-span"></span>36 <span style="white-space: pre" class="Apple-tab-span"></span>11</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span"><span style="background-color: #ffff00" class="Apple-style-span">10 </span><span style="white-space: pre" class="Apple-tab-span"><span style="background-color: #ffff00" class="Apple-style-span"></span></span><span style="background-color: #ffff00" class="Apple-style-span">40 </span><span style="white-space: pre" class="Apple-tab-span"><span style="background-color: #ffff00" class="Apple-style-span"></span></span><span style="background-color: #ffff00" class="Apple-style-span">0</span></span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">10 rows selected.</span></span>
</div>
<div>
</div>
<div>
Here we can clearly see the 2bit shift to the left – <b><span style="background-color: #ffff00" class="Apple-style-span">the Oracle 7 absolute filenumber became an Oracle 8 relative filenumber.</span></b>
</div>
<div>
So the mig utility did not have to :
</div>
<div>
<ul>
	<li>update the DBA in a block</li>
	<li>row addresses in chained and migrated rows</li>
</ul>
</div>
<div>
<br />
</div>
<div>
More info on the topic can be found on Metalink - see note 122926.1 ...
</div>
<div>
</div>
<div>
I think I'll have to lay down now <img border="0" src="http://www.ora600.be/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" alt="Wink" title="Wink" /> 
</div>
<div>
<br />
</div>
    ]]></summary>
    <content type="html"><![CDATA[<div>
When I saw <a href="http://jonathanlewis.wordpress.com/2010/09/01/oracle-versions">Jonathan's post</a> it reminded me of the work I did last weekend.
</div>
<div>
Friday evening I got 2 datafiles - one SYSTEM and one DATA datafile.
</div>
<div>
<br />
</div>
<div>
I only knew the platform but I had send out a request for more information. You can quite easily find out endianness and blocksizes... but the Oracle version is a bit different.
</div>
<div>
With this one, I was quite certain they were Oracle 7 datafiles. For one thing, when DUDE scanned the fileheaders it decoded the filenumbers as being a multiple of 2. SYSTEM turned out to be file#=16. I'll explain later.
</div>
<div>
</div>
<div>
Secondly, setting DUDE's VERSION parameter to '7', allowed me to unload the dictionary without too much trouble.
</div>
<div>
<br />
</div>
<div>
However, when I wanted to unload data from the actual datafile, no data objectid's were found in obj$ or tab$ !!! How could that be !
</div>
<div>
So I started to investigate the dictionary - looking at the SYSTEM tablespace with an hex editor.
</div>
<div>
Blocks were fine, however, there was huge gap in objectid's being used, jumping from 3000 to 41000.
</div>
<div>
Hmm... a serious part of the dictionary was missing - maybe completely overwritten.
</div>
<div>
<br />
</div>
<div>
I then got word back that this was an Oracle 8.0.x database and even more surprising, the database was up and running except for one datafile that had been offlined. (the one they needed data from).
</div>
<div>
So, the dictionary had to be good ! 
</div>
<div>
<br />
</div>
<div>
I was too puzzled at the time - it was only when I took a step back and thought about it for a while everything came together. 
</div>
<div>
This was an Oracle 8.0.x, which was once an Oracle 7.3.4 migrated to 8.0.x using Oracle's 'mig' utility. 'mig' doesn't exist anymore - it's functionality has basically taken over by 'startup migrate' and the upgrade scripts. 
</div>
<div>
Back in the day you had to run the mig utility on your database, which would upgrade your dictionary, using 'migrate.bsq' script. No startup migrate there!
</div>
<div>
</div>
<div>
To migrate the dictionary, new dictionary tables were created. For example, if you had obj$, tab$, col$, then mig utility would create obj_mig$, tab_mig$ and col_mig$ and then it would migrate the data from the old dictionary to the new dictionary and basically switch names. That would mean that the objectid's (and of course data objectid's) of the base dictionary tables are totally different than a normal 8.0 database.
</div>
<div>
In this case, they would be in the 41000 range, because that was the range of objectid's of the most recent created object/segment. 
</div>
<div>
The old dictionary would then be dropped ... but orphaned extents might sit untouched for years in your system tablespace.
</div>
<div>
</div>
<div>
And that's exactly happened when I unloaded the dictionary with VERSION='7'. 
</div>
<div>
DUDE found the left-overs of the old dictionary. However, DUDE should have unloaded the new dictionary !
</div>
<div>
<br />
</div>
<div>
So how does Oracle find the dictionary ?
</div>
<div>
</div>
<div>
Well, in the tablespace header block of the SYSTEM tablespace, there's a pointer pointing to the bootstrap$ table. The bootstrap$ table contains ddl for the base dictionary tables (and indexes) including data objectid's (and table numbers for clustered tables).
</div>
<div>
(you'll also find the ddl for the base dictionary in the sql.bsq script which is used when the database is created)
</div>
<div>
</div>
<div>
Here's an example from bootstrap $: 
</div>
<div>
 17&quot;,&quot;2407&quot;,&quot;CREATE TABLE OBJ$ ( OBJ# NUMBER NOT NULL, DATAOBJ# NUMBER, OWNER# NUMBER NOT NULL, NAME VARCHAR2(30) NOT NULL, NAMESPACE NUMBER NOT NULL, SUBNAME VARCHAR2(30), TYPE# NUMBER NOT NULL, CTIME DATE NOT NULL, MTIME DATE NOT NULL, STIME DATE NOT NULL, STATUS NUMBER NOT NULL, REMOTEOWNER VARCHAR2(30), LINKNAME VARCHAR2(128), FLAGS NUMBER, OID$ RAW(16), SPARE1 NUMBER, SPARE2 NUMBER, SPARE3 NUMBER, SPARE4 VARCHAR2(1000), SPARE5 VARCHAR2(1000), SPARE6 DATE) pctfree 10 pctused 40 initrans 1 maxtrans 255 storage ( initial 10240 next 126976 minextents 1 maxextents 121 pctincrease 50 <b>objno 2407</b> extents ( <b>file 40 block 247</b>))&quot;
</div>
<div>
<br />
</div>
<div>
You'll notice that it contains some key pointers for the described table, like file# (40), offset (247) and dataobjectid (2407). For tables part of a clustered table, it will also contain the table number within the cluster.
</div>
<div>
<br />
</div>
<div>
So once we have the bootstrap$ segment, we'll know the location of dictionary !
</div>
<div>
<br />
</div>
<div>
DUDE actually has the ability to actually 'search' for the bootstrap$ segment based on it's characteristics.
</div>
<div>
It does not however parse the bootstrap ddl for objectid's and table numbers - but once you have the output for bootstrap$, it's quite straightforward to punch in DUDE's bootstrap parameters like :
</div>
<div>
<ul>
	<li>BOOTSTRAP_FILE_OID</li>
	<li>BOOTSTRAP_OBJ_OID</li>
	<li>BOOTSTRAP_COBJ_OID</li>
	<li>BOOTSTRAP_CFILEBLOCK_OID</li>
	<li>BOOTSTRAP_CTS_OID</li>
	<li>BOOTSTRAP_CUSER_OID</li>
	<li>BOOTSTRAP_TAB_TABNO</li>
	<li>BOOTSTRAP_IND_TABNO</li>
	<li>BOOTSTRAP_ICOL_TABNO</li>
	<li>BOOTSTRAP_COL_TABNO</li>
	<li>BOOTSTRAP_LOB_TABNO</li>
	<li>BOOTSTRAP_SEG_TABNO</li>
	<li>BOOTSTRAP_TS_TABNO</li>
	<li>BOOTSTRAP_USER_TABNO </li>
</ul>
</div>
<div>
<br />
</div>
<div>
These parameters are explained in the <a target="_blank" href="http://www.ora600.be/DUDE_PRIMER.pdf">DUDE primer here</a>.
</div>
<div>
<br />
</div>
<div>
Anyway, once I set these parameters, I was home free, unloading a complete Oracle8 dictionary !!!
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
So what about the SYSTEM datafile having a filenumber larger than 1 ?
</div>
<div>
<br />
</div>
<div>
In Oracle 6 there were only 5 to 6 bits used for the file number. So only a maximum of 2^5-1 (31) or 2^6-1 (63) datafiles could be used (database wide).
</div>
<div>
In Oracle 7 this changed to 10bits or 2^10-1 (1023) datafiles (database wide). However, because of backward compatibility with Oracle 6 an encoding scheme was introduced splitting up the 10bits for file number into 6 and 4 bits and wrapping them around. It really depends on the platform. On intel windows and IBM AIX for example, I’ve seen an 8/2 split.
</div>
<div>
</div>
<div>
SVRMGR&gt; select dump(chartorowid('00000000.0000.0001')) from dual ;
</div>
<div>
DUMP(CHARTOROWID('0000000
</div>
<div>
-------------------------
</div>
<div>
Typ=69 Len=6: 1,0,0,0,0,0
</div>
<div>
1 row selected.
</div>
<div>
SVRMGR&gt; select dump(chartorowid('00000000.0000.ffff')) from dual ;
</div>
<div>
DUMP(CHARTOROWID('00000000.00
</div>
<div>
-----------------------------
</div>
<div>
Typ=69 Len=6: 255,192,0,0,0,0
</div>
<div>
1 row selected.
</div>
<div>
</div>
<div>
This means that the first file# is :
</div>
<div>
00000001 00000000 00000000 00000000 -&gt; file# 1
</div>
<div>
</div>
<div>
And the maximum file# is :
</div>
<div>
11111111 11000000 00000000 00000000 -&gt; file# 1023
</div>
<div>
</div>
<div>
So the 10bits encoding scheme is like this :
</div>
<div>
LLLL LLLL HH
</div>
<div>
Where L is the low order bits
</div>
<div>
And H the high order bits
</div>
<div>
</div>
<div>
Now let’s open DUDE on a series of these datafiles :
</div>
<div>
</div>
<div>
DUDE&gt; Initialising ...
</div>
<div>
DUDE&gt; Init : creating filenumber map ...
</div>
<div>
DUDE&gt; Scanning tablespace SYSTEM : BLOCKSIZE = 2048
</div>
<div>
DUDE&gt; File : <b>G:\sys1orcl.ora resolves to number : 4</b>
</div>
<div>
DUDE&gt; File : <b>G:\sys2.ora resolves to number : 40</b>
</div>
<div>
</div>
<div>
You’ll notice that sys1orcl.ora which is basically the first file of the database has file# equal to 4. And we know that sys2.ora had file# equal to 10. How’s that possible ?
</div>
<div>
</div>
<div>
File# 1 = 0000 0001 00 (LLLL LLLL HH) EQUALS 4 in Oracle 8 DBA format
</div>
<div>
File# 10 = 0000 1010 00 (LLLL LLLL HH) EQUALS 40 in Oracle 8 DBA format
</div>
<div>
</div>
<div>
It’s clear that using the Oracle 8 DBA format encoding on the Oracle 7 wrapped DBA format, results in different file numbers. Basically, <b>the file number shifted 2 bits to the left (or x2x2)</b>. This is of course platform specific, but if the first file of SYSTEM has a file number that is a multiple of 2, you probably have a migrated database.
</div>
<div>
</div>
<div>
So what happened when Oracle 8.0 came along and introduced 2^10-1 or 1023 datafiles per tablespace !
</div>
<div>
</div>
<div>
Well – the DBA format stayed the same. However, the file numbers became relative to the tablespace. So 2 datafiles of the same database could have potentially the same file number, but belong to 2 different tablespaces!
</div>
<div>
</div>
<div>
What happened to the Oracle 7 (absolute) file numbers when it was migrated to Oracle8. Surely, the mig utility didn’t update the DBA for all blocks ?
</div>
<div>
</div>
<div>
Let’s check out an Oracle 7 database :
</div>
<div>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">SVRMGR&gt; desc file$</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">Column Name <span style="white-space: pre" class="Apple-tab-span"></span>Null? <span style="white-space: pre" class="Apple-tab-span"></span>Type</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">------------------------------ -------- ----</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">FILE# <span style="white-space: pre" class="Apple-tab-span"></span>NOT NULL NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">STATUS$ <span style="white-space: pre" class="Apple-tab-span"></span>NOT NULL NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">BLOCKS <span style="white-space: pre" class="Apple-tab-span"></span>NOT NULL NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">TS# <span style="white-space: pre" class="Apple-tab-span"></span>NOT NULL NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span"></span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">SVRMGR&gt; select file#, ts# from file$ ;</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">FILE# <span style="white-space: pre" class="Apple-tab-span"></span>TS#</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">---------- ----------</span></span>
</div>
<div>
<span style="font-size: small; font-family: 'courier new', courier" class="Apple-style-span"><span style="background-color: #ffff00" class="Apple-style-span">1 </span><span style="white-space: pre" class="Apple-tab-span"><span style="background-color: #ffff00" class="Apple-style-span"></span></span><span style="background-color: #ffff00" class="Apple-style-span">0</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">2 <span style="white-space: pre" class="Apple-tab-span"></span>1</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">3 <span style="white-space: pre" class="Apple-tab-span"></span>2</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">4 <span style="white-space: pre" class="Apple-tab-span"></span>3</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">5 <span style="white-space: pre" class="Apple-tab-span"></span>8</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">6 <span style="white-space: pre" class="Apple-tab-span"></span>9</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">7 <span style="white-space: pre" class="Apple-tab-span"></span>10</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">8 <span style="white-space: pre" class="Apple-tab-span"></span>7</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">9 <span style="white-space: pre" class="Apple-tab-span"></span>11</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span"><span style="background-color: #ffff00" class="Apple-style-span">10 </span><span style="white-space: pre" class="Apple-tab-span"><span style="background-color: #ffff00" class="Apple-style-span"></span></span><span style="background-color: #ffff00" class="Apple-style-span">0</span></span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">10 rows selected.</span></span>
</div>
<div>
</div>
<div>
Ok – looks logical – we see that tablespace TS#=0 or SYSTEM has 2 datafiles with file#=1 and file#=10.
</div>
<div>
</div>
<div>
Let’s do the same after a migration to 8.0 :
</div>
<div>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">SVRMGR&gt; desc file$</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">Column Name <span style="white-space: pre" class="Apple-tab-span"></span>Null? <span style="white-space: pre" class="Apple-tab-span"></span>Type</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">------------------------------ -------- <span style="white-space: pre" class="Apple-tab-span"></span>----</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span"><b><span style="background-color: #ffff00" class="Apple-style-span">FILE# </span></b><span style="white-space: pre" class="Apple-tab-span"><b><span style="background-color: #ffff00" class="Apple-style-span"></span></b></span><b><span style="background-color: #ffff00" class="Apple-style-span">NOT NULL </span></b><span style="white-space: pre" class="Apple-tab-span"><b><span style="background-color: #ffff00" class="Apple-style-span"></span></b></span><b><span style="background-color: #ffff00" class="Apple-style-span">NUMBER</span></b></span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">STATUS$ <span style="white-space: pre" class="Apple-tab-span"></span>NOT NULL <span style="white-space: pre" class="Apple-tab-span"></span>NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">BLOCKS <span style="white-space: pre" class="Apple-tab-span"></span>NOT NULL <span style="white-space: pre" class="Apple-tab-span"></span>NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">TS# <span style="white-space: pre" class="Apple-tab-span"></span>NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span"><b><span style="background-color: #ffff00" class="Apple-style-span">RELFILE# </span></b><span style="white-space: pre" class="Apple-tab-span"><b><span style="background-color: #ffff00" class="Apple-style-span"></span></b></span><b><span style="background-color: #ffff00" class="Apple-style-span">NUMBER</span></b></span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">MAXEXTEND <span style="white-space: pre" class="Apple-tab-span"></span>NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">INC <span style="white-space: pre" class="Apple-tab-span"></span>NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">CRSCNWRP <span style="white-space: pre" class="Apple-tab-span"></span>NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">CRSCNBAS <span style="white-space: pre" class="Apple-tab-span"></span>NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">OWNERINSTANCE <span style="white-space: pre" class="Apple-tab-span"></span>VARCHAR2(30)</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">SPARE1 <span style="white-space: pre" class="Apple-tab-span"></span>NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">SPARE2 <span style="white-space: pre" class="Apple-tab-span"></span>NUMBER</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">SPARE3 <span style="white-space: pre" class="Apple-tab-span"></span>VARCHAR2(1000)</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">SPARE4 <span style="white-space: pre" class="Apple-tab-span"></span>DATE</span></span>
</div>
<div>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">SVRMGR&gt; select file#,ts# from file$ ;</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">FILE# <span style="white-space: pre" class="Apple-tab-span"></span>TS#</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">---------- ----------</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span"><span style="background-color: #ffff00" class="Apple-style-span">1 </span><span style="white-space: pre" class="Apple-tab-span"><span style="background-color: #ffff00" class="Apple-style-span"></span></span><span style="background-color: #ffff00" class="Apple-style-span">0</span></span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">2 <span style="white-space: pre" class="Apple-tab-span"></span>1</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">3 <span style="white-space: pre" class="Apple-tab-span"></span>2</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">4 <span style="white-space: pre" class="Apple-tab-span"></span>3</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">5 <span style="white-space: pre" class="Apple-tab-span"></span>8</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">6 <span style="white-space: pre" class="Apple-tab-span"></span>9</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">7 <span style="white-space: pre" class="Apple-tab-span"></span>10</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">8 <span style="white-space: pre" class="Apple-tab-span"></span>7</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">9 <span style="white-space: pre" class="Apple-tab-span"></span>11</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span"><span style="background-color: #ffff00" class="Apple-style-span">10 </span><span style="white-space: pre" class="Apple-tab-span"><span style="background-color: #ffff00" class="Apple-style-span"></span></span><span style="background-color: #ffff00" class="Apple-style-span">0</span></span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">10 rows selected.</span></span>
</div>
<div>
</div>
<div>
So – the file# for the datafiles stayed the same. But we can see an add column in file$ - relfile# :
</div>
<div>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">SVRMGR&gt; select file#,relfile#,ts# from file$ ;</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">FILE# <span style="white-space: pre" class="Apple-tab-span"></span><span style="background-color: #ffff00" class="Apple-style-span"><b>RELFILE#</b></span> <span style="white-space: pre" class="Apple-tab-span"></span>TS#</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">---------- <span style="white-space: pre" class="Apple-tab-span"></span>---------- <span style="white-space: pre" class="Apple-tab-span"></span>----------</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span"><span style="background-color: #ffff00" class="Apple-style-span">1 </span><span style="white-space: pre" class="Apple-tab-span"><span style="background-color: #ffff00" class="Apple-style-span"></span></span><span style="background-color: #ffff00" class="Apple-style-span">4 </span><span style="white-space: pre" class="Apple-tab-span"><span style="background-color: #ffff00" class="Apple-style-span"></span></span><span style="background-color: #ffff00" class="Apple-style-span">0</span></span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">2 <span style="white-space: pre" class="Apple-tab-span"></span>8 <span style="white-space: pre" class="Apple-tab-span"></span>1</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">3 <span style="white-space: pre" class="Apple-tab-span"></span>12 <span style="white-space: pre" class="Apple-tab-span"></span>2</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">4 <span style="white-space: pre" class="Apple-tab-span"></span>16 <span style="white-space: pre" class="Apple-tab-span"></span>3</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">5 <span style="white-space: pre" class="Apple-tab-span"></span>20 <span style="white-space: pre" class="Apple-tab-span"></span>8</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">6 <span style="white-space: pre" class="Apple-tab-span"></span>24 <span style="white-space: pre" class="Apple-tab-span"></span>9</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">7 <span style="white-space: pre" class="Apple-tab-span"></span>28 <span style="white-space: pre" class="Apple-tab-span"></span>10</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">8 <span style="white-space: pre" class="Apple-tab-span"></span>32 <span style="white-space: pre" class="Apple-tab-span"></span>7</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">9 <span style="white-space: pre" class="Apple-tab-span"></span>36 <span style="white-space: pre" class="Apple-tab-span"></span>11</span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span"><span style="background-color: #ffff00" class="Apple-style-span">10 </span><span style="white-space: pre" class="Apple-tab-span"><span style="background-color: #ffff00" class="Apple-style-span"></span></span><span style="background-color: #ffff00" class="Apple-style-span">40 </span><span style="white-space: pre" class="Apple-tab-span"><span style="background-color: #ffff00" class="Apple-style-span"></span></span><span style="background-color: #ffff00" class="Apple-style-span">0</span></span></span>
</div>
<div>
<span style="font-family: 'courier new', courier" class="Apple-style-span"><span style="font-size: small" class="Apple-style-span">10 rows selected.</span></span>
</div>
<div>
</div>
<div>
Here we can clearly see the 2bit shift to the left – <b><span style="background-color: #ffff00" class="Apple-style-span">the Oracle 7 absolute filenumber became an Oracle 8 relative filenumber.</span></b>
</div>
<div>
So the mig utility did not have to :
</div>
<div>
<ul>
	<li>update the DBA in a block</li>
	<li>row addresses in chained and migrated rows</li>
</ul>
</div>
<div>
<br />
</div>
<div>
More info on the topic can be found on Metalink - see note 122926.1 ...
</div>
<div>
</div>
<div>
I think I'll have to lay down now <img border="0" src="http://www.ora600.be/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" alt="Wink" title="Wink" /> 
</div>
<div>
<br />
</div>
    ]]></content>
  </entry>
  <entry>
    <title>ORA600 - 5years later</title>
    <link rel="alternate" type="text/html" href="http://www.ora600.be/ORA600-5-years-later" />
    <id>http://www.ora600.be/ORA600-5-years-later</id>
    <published>2010-08-26T12:48:26+02:00</published>
    <updated>2010-08-27T10:19:52+02:00</updated>
    <author>
      <name>kurtvm</name>
    </author>
    <category term="dude" />
    <category term="ora600" />
    <summary type="html"><![CDATA[<div>This summer is ORA600's 5th anniversary - and DUDE's 10th !</div><div> </div><div>So I thought it would be appropriate to look back and reflect on all crazy and weird things we've gone through.</div><div> </div><div>As many of you know, DUDE started out as jDUL on sourceforge. I started on it while I was working in South Africa - me and my buddy Kugendran Naidoo came up with all kinds of crazy idea's whilst enjoying a smoke in the smoking room. Wow, remember the days you could still smoke in the office ? </div><div> </div><div>I can't say the'Oracle community' was very appreciative to the idea of a DUL-like tool. Back in the day, the Oracle community, for me, consisted mostly of the cdos newsgroup (<a href="http://groups.google.com/group/comp.databases.oracle.server/topics">comp.database.oracle.server</a>). To be honest, I found cdos quite a hostile place - a lot of flames, rants, newbie bashing etc… all in all  sending out negative vibes. Thinking about it, it's just the opposite of the Oracle-l mailing list (<a href="http://www.freelists.org/archive/oracle-l">http://www.freelists.org/archive/oracle-l</a>). I'm not surprised cdos is now full of spam messages and almost completely abandoned. If it wasn't for cdos … I might have gone through open-sourcing jDUL/DUDE !</div><div> </div><div>Anyway - flash forward to the summer of 2005 - after a meeting with Mogens Norgaard from Miracle AS, ORA600 is born. (see also <a href="http://www.ora600.be/history">here</a>). That particular summer was quite fruitful as I spent most of my time implementing new features. To give you an idea - in 2001 the source code was 131Kb in size and 4393 lines long. By the end of 2005 it was 12390 lines of code and 446Kb in size. The current version is 1049Kb and 27817 lines long. I must admit, a lot of that is code documentation !</div><div> </div><div>Although Miracle AS worked as an incubator, Mogens introduced me to Daniel Fink in 2007 at a Miracle Scotland event in Edinburgh. Daniel was interested in representing DUDE in the US. Mogens didn't mind. Dan is a great guy to work with - very professional! After that I started collaborating with different companies around the globe, like <a href="http://www.pythian.com">Pythian</a>, <a href="http://www.evdbt.com/">Evdbt Inc</a> (Tim Gorman), <a href="http://www.nrgc.co.za">NRG Consulting</a> and <a href="http://www.hbtec.com.br">HBTec</a>. I really think local support is very important for potential customers even if it squeezes my profit margins.</div><div> </div><div>I have to admit - I have encountered some amazing corruption cases over the last 5 years. Some were solved fast and swiftly - others have costs me several years of my life <img src="http://www.ora600.be/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" title="Wink" alt="Wink" border="0" /></div><div>Here are some recovery cases I will never remember :</div><div> </div><div>1.<span style="white-space: pre" class="Apple-tab-span">	</span>The one with the mixed data in a LONG column</div><div> </div><div>This case was *by far* the most stressful recovery I have done. The customer was a newspaper publisher and they needed their database online before Sunday 2PM. Having a deadline is always stressful, but this database contained a table with a LONG column that was on average a gigabyte large. Normally that's not a problem, but at that time I had a bug in my DMP API related to Java's garbage collector, that caused the unload to slow down …. It actually appeared to be hanging as there were no error messages being generated. I didn't know about the bug right away so I investigated the situation up to the point I opened several blocks in a hexeditor, following pointers of chained rows manually (did I mention the deadline?). What I saw was that the column contained readable text and then suddenly what looked like binary data. I immediately thought some blocks were partially corrupted and what I was seeing was garbage. Quite often on windows platforms you'll see file corruption, where files are partially overwritten by junk in multiples of 512bytes, spread all over. It's like someone takes a machinegun and puts some holes in the files. Worst case, the corruption is in the middle of a block so header and tail are fine and the corruption goes almost unnoticed. Until you try to trail the row directory to the row headers and you suddenly hit junk. It gets even worse, if by coincidence the header is identified as a chained row and thus you try to read the next dba…. Which of course will point to some non-existing datafile and offset!!!</div><div>Anyway that's what it look like at first glance … until I actually started to put things together with an hex-editor (try doing that at 3AM at night!). The blocks were fine, the row directory was valid, row headers were ok, chained row headers were pointing to valid row pieces. This led me to the conclusion the data was valid, just extremely weird !</div><div>At that point I focused on my DMP API and found out the garbage collector was doing too much work, cleaning up after processing 1Gb columns. </div><div>Once I fixed that, the unload was blazing fast - and I made the deadline… but boy… what an adrenaline rush !!!</div><div> </div><div> </div><div>2.<span style="white-space: pre" class="Apple-tab-span">	</span>The one with the even larger column</div><div> </div><div>DUDE is written in java - most JVM's are/were 32bit. Although DUDE is multithreaded (it has producer and consumer threads) and some platforms turn threads into procs,  I have to work with a 2Gb memory limitation in mind. At one point I had a case were DNA strands were being stored in CLOBs. These were all around 2Gb large. Needless to say I ran into some memory related issues ;-) At that point I had to react quickly - and these things always happen at night. The solution was to write on-disk data structures and thus avoiding the 2Gb limit. Performance is of course affected by this - but I can safely say that DUDE will unload very large LOB's on a 32bit platform. </div><div> </div><div> </div><div>3.<span style="white-space: pre" class="Apple-tab-span">	</span>The one without a system tablespace and just toooo many tables</div><div> </div><div>This one I will also never forget. Losing your system tablespace, and thus your dictionary is a disaster. But no worries - DUDE can identify tables and datatypes using an heuristic algorithm. However, table names, column names, logical column order … that's all stored in the dictionary. So recovery from such a situation involves intimate knowledge of your data, and a lot of guessing to map the flat files to the correct table. I've done it a number of times with a  hundred or so tables, always with the developer by my side. It's time consuming and very hard. One time we had a 'lost system tablespace' case. The db in itself was about 68Gb but it was a BAAN ERP system. That means thousands (5000+) of tables !</div><div>It took a team of 8 BAAN consultants to rebuild the database in 2 weeks ! I specially changed the code for them so that DUDE would generate BAAN specific flatfiles for easy loading through BAAN's loader tool. This is where the DUDE license really pays off for the customer - one fixed price no matter how long you need it !!!</div><div> </div><div> </div><div>4.<span style="white-space: pre" class="Apple-tab-span">	</span>The 'we don't use backups' case… but we're happy with that</div><div> </div><div>One time I got a call from a company who had a SAN crash. They had a 4TB datawarehouse sitting on it, and apparently were unable to restore the database. Because of the size of the DB I suggested to go with the license as clearly, the unload would take some time. A license is fixed priced for as long the unload takes and 4TB… well it can take a while! The next day I get a call back - 'hey this thing really works - we've got another database on that SAN we would like to see unload' - me:'what's the size?' - answer 'about 4TB'…   That's not all ! A year later - got a call from the same company different branch. 'We have a db crash - we've used your tool before - we would like to use it again. The DB size is 2TB!&quot;. So in 2years, 3 databases and a total of 10TB recovered for the same customer… my favorite customer… ever! They were also the first one who used table compression - so I can safely say my block compression algorithm has been tested on multiple terabytes <img src="http://www.ora600.be/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" title="Wink" alt="Wink" border="0" /></div><div> </div><div> </div><div> As you can see - recovering data can be really stressful, but we take great pride in what we do, and if it means we have to change the code for your specific needs, we'll do it and make it work !</div><div> </div><div>The ORA600 vehicle also made it easier to network and meet new people - which is a bonus as I don't like large crowds. I can definitely say OOW is not for me - but UKOUG is. It's one of the best conferences out there and it allowed me to meet all sorts of interesting new people (you know who you are!). Well, I tasted HOTSOS first which was really great … but I don't like long flights either … and I definitely don't like all male dance parties …. Give me an English pub anytime <img src="http://www.ora600.be/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" title="Wink" alt="Wink" border="0" /></div><div> Here's a picture of an infamous evening - you'll recognize a certain scottsman in the back, a couple of Danes and a couple of Finns... oh and me !</div><div style="text-align: center"> <img src="/system/files/u1/trouw.jpg" height="375" width="500" /></div><div> </div><div> </div><div>Anyway -  because of the anniversary I'll be giving <b>away the very last ORA600 poloshirts</b> !!!</div><div> </div><div>(to be honest, I have been remodeling the house to accommodate a nursery room as I will become father in December … so everything has got to go!!! <img src="http://www.ora600.be/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-laughing.gif" title="Laughing" alt="Laughing" border="0" /> )</div><div> </div><div style="text-align: center"><img src="/system/files/u1/dudeshirt.jpg" width="400" height="300" /> </div><div> </div><div>I have <b><s>5x size medium (M)</s></b><s>, </s><b><s>1x extra large (XL)</s></b><s> and </s><b><s>3x extra extra large (XXL) </s></b>- the first to respond to <a href="mailto:dude@ora600.be">dude@ora600.be </a>will get one !!! (don't forget to mention your size and address!!!)</div><div> </div><div><b>Update - all polo shirts are gone !!! </b></div><div> </div><div>Up to the next five years ! </div><div><br /></div><div><br /></div>    ]]></summary>
    <content type="html"><![CDATA[<div>This summer is ORA600's 5th anniversary - and DUDE's 10th !</div><div> </div><div>So I thought it would be appropriate to look back and reflect on all crazy and weird things we've gone through.</div><div> </div><div>As many of you know, DUDE started out as jDUL on sourceforge. I started on it while I was working in South Africa - me and my buddy Kugendran Naidoo came up with all kinds of crazy idea's whilst enjoying a smoke in the smoking room. Wow, remember the days you could still smoke in the office ? </div><div> </div><div>I can't say the'Oracle community' was very appreciative to the idea of a DUL-like tool. Back in the day, the Oracle community, for me, consisted mostly of the cdos newsgroup (<a href="http://groups.google.com/group/comp.databases.oracle.server/topics">comp.database.oracle.server</a>). To be honest, I found cdos quite a hostile place - a lot of flames, rants, newbie bashing etc… all in all  sending out negative vibes. Thinking about it, it's just the opposite of the Oracle-l mailing list (<a href="http://www.freelists.org/archive/oracle-l">http://www.freelists.org/archive/oracle-l</a>). I'm not surprised cdos is now full of spam messages and almost completely abandoned. If it wasn't for cdos … I might have gone through open-sourcing jDUL/DUDE !</div><div> </div><div>Anyway - flash forward to the summer of 2005 - after a meeting with Mogens Norgaard from Miracle AS, ORA600 is born. (see also <a href="http://www.ora600.be/history">here</a>). That particular summer was quite fruitful as I spent most of my time implementing new features. To give you an idea - in 2001 the source code was 131Kb in size and 4393 lines long. By the end of 2005 it was 12390 lines of code and 446Kb in size. The current version is 1049Kb and 27817 lines long. I must admit, a lot of that is code documentation !</div><div> </div><div>Although Miracle AS worked as an incubator, Mogens introduced me to Daniel Fink in 2007 at a Miracle Scotland event in Edinburgh. Daniel was interested in representing DUDE in the US. Mogens didn't mind. Dan is a great guy to work with - very professional! After that I started collaborating with different companies around the globe, like <a href="http://www.pythian.com">Pythian</a>, <a href="http://www.evdbt.com/">Evdbt Inc</a> (Tim Gorman), <a href="http://www.nrgc.co.za">NRG Consulting</a> and <a href="http://www.hbtec.com.br">HBTec</a>. I really think local support is very important for potential customers even if it squeezes my profit margins.</div><div> </div><div>I have to admit - I have encountered some amazing corruption cases over the last 5 years. Some were solved fast and swiftly - others have costs me several years of my life <img src="http://www.ora600.be/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" title="Wink" alt="Wink" border="0" /></div><div>Here are some recovery cases I will never remember :</div><div> </div><div>1.<span style="white-space: pre" class="Apple-tab-span">	</span>The one with the mixed data in a LONG column</div><div> </div><div>This case was *by far* the most stressful recovery I have done. The customer was a newspaper publisher and they needed their database online before Sunday 2PM. Having a deadline is always stressful, but this database contained a table with a LONG column that was on average a gigabyte large. Normally that's not a problem, but at that time I had a bug in my DMP API related to Java's garbage collector, that caused the unload to slow down …. It actually appeared to be hanging as there were no error messages being generated. I didn't know about the bug right away so I investigated the situation up to the point I opened several blocks in a hexeditor, following pointers of chained rows manually (did I mention the deadline?). What I saw was that the column contained readable text and then suddenly what looked like binary data. I immediately thought some blocks were partially corrupted and what I was seeing was garbage. Quite often on windows platforms you'll see file corruption, where files are partially overwritten by junk in multiples of 512bytes, spread all over. It's like someone takes a machinegun and puts some holes in the files. Worst case, the corruption is in the middle of a block so header and tail are fine and the corruption goes almost unnoticed. Until you try to trail the row directory to the row headers and you suddenly hit junk. It gets even worse, if by coincidence the header is identified as a chained row and thus you try to read the next dba…. Which of course will point to some non-existing datafile and offset!!!</div><div>Anyway that's what it look like at first glance … until I actually started to put things together with an hex-editor (try doing that at 3AM at night!). The blocks were fine, the row directory was valid, row headers were ok, chained row headers were pointing to valid row pieces. This led me to the conclusion the data was valid, just extremely weird !</div><div>At that point I focused on my DMP API and found out the garbage collector was doing too much work, cleaning up after processing 1Gb columns. </div><div>Once I fixed that, the unload was blazing fast - and I made the deadline… but boy… what an adrenaline rush !!!</div><div> </div><div> </div><div>2.<span style="white-space: pre" class="Apple-tab-span">	</span>The one with the even larger column</div><div> </div><div>DUDE is written in java - most JVM's are/were 32bit. Although DUDE is multithreaded (it has producer and consumer threads) and some platforms turn threads into procs,  I have to work with a 2Gb memory limitation in mind. At one point I had a case were DNA strands were being stored in CLOBs. These were all around 2Gb large. Needless to say I ran into some memory related issues ;-) At that point I had to react quickly - and these things always happen at night. The solution was to write on-disk data structures and thus avoiding the 2Gb limit. Performance is of course affected by this - but I can safely say that DUDE will unload very large LOB's on a 32bit platform. </div><div> </div><div> </div><div>3.<span style="white-space: pre" class="Apple-tab-span">	</span>The one without a system tablespace and just toooo many tables</div><div> </div><div>This one I will also never forget. Losing your system tablespace, and thus your dictionary is a disaster. But no worries - DUDE can identify tables and datatypes using an heuristic algorithm. However, table names, column names, logical column order … that's all stored in the dictionary. So recovery from such a situation involves intimate knowledge of your data, and a lot of guessing to map the flat files to the correct table. I've done it a number of times with a  hundred or so tables, always with the developer by my side. It's time consuming and very hard. One time we had a 'lost system tablespace' case. The db in itself was about 68Gb but it was a BAAN ERP system. That means thousands (5000+) of tables !</div><div>It took a team of 8 BAAN consultants to rebuild the database in 2 weeks ! I specially changed the code for them so that DUDE would generate BAAN specific flatfiles for easy loading through BAAN's loader tool. This is where the DUDE license really pays off for the customer - one fixed price no matter how long you need it !!!</div><div> </div><div> </div><div>4.<span style="white-space: pre" class="Apple-tab-span">	</span>The 'we don't use backups' case… but we're happy with that</div><div> </div><div>One time I got a call from a company who had a SAN crash. They had a 4TB datawarehouse sitting on it, and apparently were unable to restore the database. Because of the size of the DB I suggested to go with the license as clearly, the unload would take some time. A license is fixed priced for as long the unload takes and 4TB… well it can take a while! The next day I get a call back - 'hey this thing really works - we've got another database on that SAN we would like to see unload' - me:'what's the size?' - answer 'about 4TB'…   That's not all ! A year later - got a call from the same company different branch. 'We have a db crash - we've used your tool before - we would like to use it again. The DB size is 2TB!&quot;. So in 2years, 3 databases and a total of 10TB recovered for the same customer… my favorite customer… ever! They were also the first one who used table compression - so I can safely say my block compression algorithm has been tested on multiple terabytes <img src="http://www.ora600.be/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" title="Wink" alt="Wink" border="0" /></div><div> </div><div> </div><div> As you can see - recovering data can be really stressful, but we take great pride in what we do, and if it means we have to change the code for your specific needs, we'll do it and make it work !</div><div> </div><div>The ORA600 vehicle also made it easier to network and meet new people - which is a bonus as I don't like large crowds. I can definitely say OOW is not for me - but UKOUG is. It's one of the best conferences out there and it allowed me to meet all sorts of interesting new people (you know who you are!). Well, I tasted HOTSOS first which was really great … but I don't like long flights either … and I definitely don't like all male dance parties …. Give me an English pub anytime <img src="http://www.ora600.be/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" title="Wink" alt="Wink" border="0" /></div><div> Here's a picture of an infamous evening - you'll recognize a certain scottsman in the back, a couple of Danes and a couple of Finns... oh and me !</div><div style="text-align: center"> <img src="/system/files/u1/trouw.jpg" height="375" width="500" /></div><div> </div><div> </div><div>Anyway -  because of the anniversary I'll be giving <b>away the very last ORA600 poloshirts</b> !!!</div><div> </div><div>(to be honest, I have been remodeling the house to accommodate a nursery room as I will become father in December … so everything has got to go!!! <img src="http://www.ora600.be/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-laughing.gif" title="Laughing" alt="Laughing" border="0" /> )</div><div> </div><div style="text-align: center"><img src="/system/files/u1/dudeshirt.jpg" width="400" height="300" /> </div><div> </div><div>I have <b><s>5x size medium (M)</s></b><s>, </s><b><s>1x extra large (XL)</s></b><s> and </s><b><s>3x extra extra large (XXL) </s></b>- the first to respond to <a href="mailto:dude@ora600.be">dude@ora600.be </a>will get one !!! (don't forget to mention your size and address!!!)</div><div> </div><div><b>Update - all polo shirts are gone !!! </b></div><div> </div><div>Up to the next five years ! </div><div><br /></div><div><br /></div>    ]]></content>
  </entry>
  <entry>
    <title>Oaktable Site</title>
    <link rel="alternate" type="text/html" href="http://www.ora600.be/oaktable-website" />
    <id>http://www.ora600.be/oaktable-website</id>
    <published>2010-05-19T10:45:54+02:00</published>
    <updated>2010-05-19T10:46:56+02:00</updated>
    <author>
      <name>kurtvm</name>
    </author>
    <category term="drupal" />
    <category term="oaktable" />
    <summary type="html"><![CDATA[<div>Long overdue … and by now old news !</div><div><br /></div><div>Seems everybody has already mentioned it on their blog - I reckon so can I ;-)</div><div><br /></div><div>It seems the topic of 'a' new website had already been discussed during several Oracle events but there were no immediate plans to actually implement it.</div><div>So when a mail requesting volunteers popped up, Doug Burns made sure to mention my name.</div><div><br /></div><div>A quick ask-around revealed that the #1 must-have-feature was an oakie blog aggregator. </div><div>James Morle also had mentioned to scrap the old site and redo the whole thing in an open-source CMS, preferable Drupal. Which was fine by me as I had already done some work in drupal, including some custom drupal modules (like a drupal module to integrate user management with Oracle SSO/OID).</div><div>Anyway - as the only real requirement was a blog aggregator of Oaktable member's blogs and then some, I just started working on it in a kind of agile way ;-) </div><div><br /></div><div>Here are some of the modules I used :</div><div><ul>			<li>must-have modules : admin_menu, CCK (and several cck fields like email, date, imagefield), panels for the frontpage and you can't do without the views module</li>		<li>Imageapi, imagecache : needed for some on-the-fly rescaling of uploaded images, like for example member's avatars or book covers</li>		<li>Feedapi and feedapi_mapper : I prefer these modules for creating a blog aggregator instead of the standard aggregator module as it allows you to save feed content in a node, and thus making the content searchable and easier for google to digest. Also, you can map tags within feeds to node tags so they show up in your tag-cloud (double-bonus!)</li>		<li>Cumulus and tagadelic : for creating a funky tag-cloud</li>		<li>Twitter and juitter modules : for aggregating twitter feeds and showing twitter trends. I will add the twitter trends for all major events as I did for HOTSOS2010 and MOW2010.</li>		<li>Browscap and mobile_theme : if you use a mobile device, the site will switch to the iwebkit theme… looks ok on an iphone <img src="http://www.ora600.be/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" border="0" alt="Wink" title="Wink" /></li>		<li>Content_slider : which allows you to create a kind of slide show from node content (for example the events and books slides)</li>		<li>Google_analytics, google_cse, pathauto, seo_checklist : make sure the whole thing is SEO </li>		<li>Subscriptions : authenticated users can subscribe to content - they will be notified when content is added or modified</li>		<li>Faq and faq_ask : I've used these to implement the oaktable challenge. It's not ideally as it does not allow me to migrate the old questions but it does the job.</li></ul><div><br /></div>I've also used some modules for oakie's only - like :<br /><ul>			<li>Announcements : add announcements to the site encouraging oakies to post content or start their own blog on the oaktable site… the site does not only aggregate but also allows members to write blogposts that are automatically included in the sites blog RSS feeds</li>		<li>Votingapi and advpoll : providing democracy to the oaktable when choosing when or where to eat during the next Oracle event using polls</li>		<li>Webform and webform_report : allows you to easily create html forms without programming and report on the results - already came in useful for ordering the new oaktable polo shirt <img src="http://www.ora600.be/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cool.gif" border="0" alt="Cool" title="Cool" /></li></ul></div><div><br /></div><div>As you can see - these are all basic modules. There was some custom work though :</div><div><ul>			<li>I have a 'oakie' module : this provides a mapping between the user profile and feedapi, so users can add their blog rss feed through their profile instead of the more complex feedapi form</li>		<li>I had to tweak ask_faq for the oaktable challenge</li>		<li>By far the most difficult task was tweaking the themes 		<ul>						<li>'admire_gray' is the main theme - I had some issues on smaller resolutions so I had to make some modifications in its stylesheet</li>				<li>'iwebkit' - the mobile theme had some real bugs in it as it did not show pagers - had to dive in the theme code here to fix it !</li>		</ul>		</li></ul></div><div><br /></div><div>I migrated some old articles and scripts from the old site, leaving the rest to the original authors (as you can see … that didn't work out so well) - however, Jonathan Lewis, Tanel Poder and Christian Antognini have already added some new articles which gives me hope <img src="http://www.ora600.be/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" border="0" alt="Wink" title="Wink" /></div><div><br /></div><div>Anyways - I hope you like it. </div><div> </div>    ]]></summary>
    <content type="html"><![CDATA[<div>Long overdue … and by now old news !</div><div><br /></div><div>Seems everybody has already mentioned it on their blog - I reckon so can I ;-)</div><div><br /></div><div>It seems the topic of 'a' new website had already been discussed during several Oracle events but there were no immediate plans to actually implement it.</div><div>So when a mail requesting volunteers popped up, Doug Burns made sure to mention my name.</div><div><br /></div><div>A quick ask-around revealed that the #1 must-have-feature was an oakie blog aggregator. </div><div>James Morle also had mentioned to scrap the old site and redo the whole thing in an open-source CMS, preferable Drupal. Which was fine by me as I had already done some work in drupal, including some custom drupal modules (like a drupal module to integrate user management with Oracle SSO/OID).</div><div>Anyway - as the only real requirement was a blog aggregator of Oaktable member's blogs and then some, I just started working on it in a kind of agile way ;-) </div><div><br /></div><div>Here are some of the modules I used :</div><div><ul>			<li>must-have modules : admin_menu, CCK (and several cck fields like email, date, imagefield), panels for the frontpage and you can't do without the views module</li>		<li>Imageapi, imagecache : needed for some on-the-fly rescaling of uploaded images, like for example member's avatars or book covers</li>		<li>Feedapi and feedapi_mapper : I prefer these modules for creating a blog aggregator instead of the standard aggregator module as it allows you to save feed content in a node, and thus making the content searchable and easier for google to digest. Also, you can map tags within feeds to node tags so they show up in your tag-cloud (double-bonus!)</li>		<li>Cumulus and tagadelic : for creating a funky tag-cloud</li>		<li>Twitter and juitter modules : for aggregating twitter feeds and showing twitter trends. I will add the twitter trends for all major events as I did for HOTSOS2010 and MOW2010.</li>		<li>Browscap and mobile_theme : if you use a mobile device, the site will switch to the iwebkit theme… looks ok on an iphone <img src="http://www.ora600.be/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" border="0" alt="Wink" title="Wink" /></li>		<li>Content_slider : which allows you to create a kind of slide show from node content (for example the events and books slides)</li>		<li>Google_analytics, google_cse, pathauto, seo_checklist : make sure the whole thing is SEO </li>		<li>Subscriptions : authenticated users can subscribe to content - they will be notified when content is added or modified</li>		<li>Faq and faq_ask : I've used these to implement the oaktable challenge. It's not ideally as it does not allow me to migrate the old questions but it does the job.</li></ul><div><br /></div>I've also used some modules for oakie's only - like :<br /><ul>			<li>Announcements : add announcements to the site encouraging oakies to post content or start their own blog on the oaktable site… the site does not only aggregate but also allows members to write blogposts that are automatically included in the sites blog RSS feeds</li>		<li>Votingapi and advpoll : providing democracy to the oaktable when choosing when or where to eat during the next Oracle event using polls</li>		<li>Webform and webform_report : allows you to easily create html forms without programming and report on the results - already came in useful for ordering the new oaktable polo shirt <img src="http://www.ora600.be/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cool.gif" border="0" alt="Cool" title="Cool" /></li></ul></div><div><br /></div><div>As you can see - these are all basic modules. There was some custom work though :</div><div><ul>			<li>I have a 'oakie' module : this provides a mapping between the user profile and feedapi, so users can add their blog rss feed through their profile instead of the more complex feedapi form</li>		<li>I had to tweak ask_faq for the oaktable challenge</li>		<li>By far the most difficult task was tweaking the themes 		<ul>						<li>'admire_gray' is the main theme - I had some issues on smaller resolutions so I had to make some modifications in its stylesheet</li>				<li>'iwebkit' - the mobile theme had some real bugs in it as it did not show pagers - had to dive in the theme code here to fix it !</li>		</ul>		</li></ul></div><div><br /></div><div>I migrated some old articles and scripts from the old site, leaving the rest to the original authors (as you can see … that didn't work out so well) - however, Jonathan Lewis, Tanel Poder and Christian Antognini have already added some new articles which gives me hope <img src="http://www.ora600.be/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" border="0" alt="Wink" title="Wink" /></div><div><br /></div><div>Anyways - I hope you like it. </div><div> </div>    ]]></content>
  </entry>
  <entry>
    <title>Expert Oracle Practices</title>
    <link rel="alternate" type="text/html" href="http://www.ora600.be/expert-oracle-practices" />
    <id>http://www.ora600.be/expert-oracle-practices</id>
    <published>2010-01-29T11:08:07+01:00</published>
    <updated>2010-03-08T00:15:38+01:00</updated>
    <author>
      <name>kurtvm</name>
    </author>
    <category term="book" />
    <category term="oaktable" />
    <summary type="html"><![CDATA[<div>I was just woken up by the mailman, ringing my doorbell several times. </div><div></div><div>I jumped out of bed and opened the door half naked and still sleep drunk - I was on call this week and although there weren't many calls I went to bed at 2AM, each day. If there's one thing I hate is going to bed and getting a call an hour later - so I go to bed late at night and hope I don't get a call until 8AM when a colleague takes over.</div><div></div><div>Anyway, I knew it was the postman delivering the new Oaktable book '<a href="http://www.amazon.co.uk/Expert-Oracle-Practices-M-Moller/dp/1430226684/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1264759825&amp;sr=8-1" target="_blank">Expert Oracle Practices</a>'. </div><div>Because I had bought it at Amazon in the US, I knew I had to pay import taxes (10euro) and thus needed personal delivery. Hey, I wanted to have it asap <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" title="Wink" alt="Wink" border="0" /></div><div><br /></div><div>This is one of those books you just need to have !</div><div>I've already mentioned here that I love going to the UKOUG - and one of the main reasons is because I love to hear how other DBA's/developers do their work. How do they backup their databases, how do they tune their databases, what problems are they having.</div><div></div><div>The new Oaktable book is very much like that - how do some of the most respected database consultants handle their environments. It's not a low, lower, loooower, Steve Adams low level book. But at first glance it looks more technical than the first Oaktable book (<a href="http://www.amazon.co.uk/Insights-Jonathan-McDonald-Millsap-Vaidyanatha/dp/1590593871/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1264757070&amp;sr=8-2" target="_blank">Oracle Insights - Tales of the Oaktable</a>)  </div><div>And that was also the aim - competing with the other new Oracle 11g books out there.</div><div></div><div>I'm ashamed to admit that I turned down an offer to write a chapter (even two chapters). I was offered a chapter on backup and recovery and one on NLS issues.</div><div></div><div>The first one is obvious as I have some experiences with recovery <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" title="Wink" alt="Wink" border="0" /> - and I could have written some funny anecdotes and picked out some cases that went bad and why. </div><div>But the aim wasn't to write funny stories but technical content. </div><div></div><div>I have a confession to make - I hate writing technical content/documentation - but I love programming. </div><div>If you want to punish me - get me to write technical docs. One of the reasons I quit my previous job was because at one point, they had me writing more technical docs to be ISO9000/1/2 compliant than actually programming stuff. I don't know why I agreed on 2 chapters but with the words of a famous entrepreneur 'screw it, let's do it', I set myself a goal :</div><div><ul>	<li>try to write 10% of one chapter in one week</li></ul></div><div>Mind you this was the beginning of the summer, the worst possible timing for me, as I had filled up most of the summer weekends with other things to do. </div><div></div><div>For the backup and recovery chapter, I already had some ideas on how to handle the chapter - I wanted to do a bottom up approach. </div><div>Most books do a top down approach - they explain the concept, the wider picture, go to the commands and then some examples, and maybe some internals. </div><div>I seem to always learn things bottom up - start with the internals and then work my way up to the commands. It's like a bottom up and top down parser <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" title="Wink" alt="Wink" border="0" />. If you understand the internals, the mechanics, you know what you're doing and thus, don't need to memorize all the commands ... you just need to understand to know what's possible!</div><div></div><div>Anyway the idea was to first explain block internals, how data is stored and how redo logging works, using a chessboard. </div><div>Let's say 2 guys are playing 10 chess games on 10 boards at the same time in the outdoors. They each move pieces, the movement  of the pieces get logged by a third person on a piece of paper and once in a while a 4th guy writes down the location of every chess piece on each board to another piece of paper. </div><div></div><div>The 2 guys playing the chess games are database processes changing rowpieces (chess pieces) in the datablocks (chess board) - the guy writing down the movement of the pieces (redo vectors) is the logwriter process. They guy writing down the complete chessboards to paper is the dbwr process. If it starts to rain, they just scrap the boards (shutdown abort). When they start playing again, they get the paper containing the complete chessboard layouts and the paper with the chess piece movements and redo the movements (instance recovery). It is basic journaling !</div><div>With this story in mind I could have explained backup and recovery in a very simple way so everybody understands, and then move my way up.</div><div></div><div>Anyways - after a week of writing in the evenings I had one page ! One page and I was so bored !!! I'm definitely not a technical writer … a blog now and then…ok. A presentation once a year … fine. But 2 chapters in a book … I don't think so.</div><div></div><div>So I got back to Jonathan Gennick after a week - I didn't make my goal - I could not see, with the deadlines in place, how I could find time (I have 2 jobs and need to sleep now and then)  to write those two chapters and I thought it would be best to let him know before I signed a contract. And you know what, I have not regret it since !</div><div></div><div>Btw - about the second chapter, NLS issues - I live in Belgium. We have 3 official languages : Dutch, French and German. And we use English to keep everybody happy. So we know allllll about NLS issues <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cool.gif" title="Cool" alt="Cool" border="0" /></div><div></div><div></div><div>Now - go buy this book - it's awesome !</div><div><br /></div><div><i>On a different note …. I do have more time in the winter season and I was able to qualify for the Flemish Poker championship or 'Pokerkampioen Van Vlaanderen'. It's a freeze-out tournament covered by TV. It will be aired on March on 2BE and JimTV. There were 674 entries for the regional finals.  I made it through the semi finals and busted out on place 28. I wrote about it <a href="/pkvv">here</a>. It's all non-technical content ! <span style="font-style: normal" class="Apple-style-span"><img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-laughing.gif" title="Laughing" alt="Laughing" border="0" /></span></i></div><div><br /></div>    ]]></summary>
    <content type="html"><![CDATA[<div>I was just woken up by the mailman, ringing my doorbell several times. </div><div></div><div>I jumped out of bed and opened the door half naked and still sleep drunk - I was on call this week and although there weren't many calls I went to bed at 2AM, each day. If there's one thing I hate is going to bed and getting a call an hour later - so I go to bed late at night and hope I don't get a call until 8AM when a colleague takes over.</div><div></div><div>Anyway, I knew it was the postman delivering the new Oaktable book '<a href="http://www.amazon.co.uk/Expert-Oracle-Practices-M-Moller/dp/1430226684/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1264759825&amp;sr=8-1" target="_blank">Expert Oracle Practices</a>'. </div><div>Because I had bought it at Amazon in the US, I knew I had to pay import taxes (10euro) and thus needed personal delivery. Hey, I wanted to have it asap <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" title="Wink" alt="Wink" border="0" /></div><div><br /></div><div>This is one of those books you just need to have !</div><div>I've already mentioned here that I love going to the UKOUG - and one of the main reasons is because I love to hear how other DBA's/developers do their work. How do they backup their databases, how do they tune their databases, what problems are they having.</div><div></div><div>The new Oaktable book is very much like that - how do some of the most respected database consultants handle their environments. It's not a low, lower, loooower, Steve Adams low level book. But at first glance it looks more technical than the first Oaktable book (<a href="http://www.amazon.co.uk/Insights-Jonathan-McDonald-Millsap-Vaidyanatha/dp/1590593871/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1264757070&amp;sr=8-2" target="_blank">Oracle Insights - Tales of the Oaktable</a>)  </div><div>And that was also the aim - competing with the other new Oracle 11g books out there.</div><div></div><div>I'm ashamed to admit that I turned down an offer to write a chapter (even two chapters). I was offered a chapter on backup and recovery and one on NLS issues.</div><div></div><div>The first one is obvious as I have some experiences with recovery <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" title="Wink" alt="Wink" border="0" /> - and I could have written some funny anecdotes and picked out some cases that went bad and why. </div><div>But the aim wasn't to write funny stories but technical content. </div><div></div><div>I have a confession to make - I hate writing technical content/documentation - but I love programming. </div><div>If you want to punish me - get me to write technical docs. One of the reasons I quit my previous job was because at one point, they had me writing more technical docs to be ISO9000/1/2 compliant than actually programming stuff. I don't know why I agreed on 2 chapters but with the words of a famous entrepreneur 'screw it, let's do it', I set myself a goal :</div><div><ul>	<li>try to write 10% of one chapter in one week</li></ul></div><div>Mind you this was the beginning of the summer, the worst possible timing for me, as I had filled up most of the summer weekends with other things to do. </div><div></div><div>For the backup and recovery chapter, I already had some ideas on how to handle the chapter - I wanted to do a bottom up approach. </div><div>Most books do a top down approach - they explain the concept, the wider picture, go to the commands and then some examples, and maybe some internals. </div><div>I seem to always learn things bottom up - start with the internals and then work my way up to the commands. It's like a bottom up and top down parser <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" title="Wink" alt="Wink" border="0" />. If you understand the internals, the mechanics, you know what you're doing and thus, don't need to memorize all the commands ... you just need to understand to know what's possible!</div><div></div><div>Anyway the idea was to first explain block internals, how data is stored and how redo logging works, using a chessboard. </div><div>Let's say 2 guys are playing 10 chess games on 10 boards at the same time in the outdoors. They each move pieces, the movement  of the pieces get logged by a third person on a piece of paper and once in a while a 4th guy writes down the location of every chess piece on each board to another piece of paper. </div><div></div><div>The 2 guys playing the chess games are database processes changing rowpieces (chess pieces) in the datablocks (chess board) - the guy writing down the movement of the pieces (redo vectors) is the logwriter process. They guy writing down the complete chessboards to paper is the dbwr process. If it starts to rain, they just scrap the boards (shutdown abort). When they start playing again, they get the paper containing the complete chessboard layouts and the paper with the chess piece movements and redo the movements (instance recovery). It is basic journaling !</div><div>With this story in mind I could have explained backup and recovery in a very simple way so everybody understands, and then move my way up.</div><div></div><div>Anyways - after a week of writing in the evenings I had one page ! One page and I was so bored !!! I'm definitely not a technical writer … a blog now and then…ok. A presentation once a year … fine. But 2 chapters in a book … I don't think so.</div><div></div><div>So I got back to Jonathan Gennick after a week - I didn't make my goal - I could not see, with the deadlines in place, how I could find time (I have 2 jobs and need to sleep now and then)  to write those two chapters and I thought it would be best to let him know before I signed a contract. And you know what, I have not regret it since !</div><div></div><div>Btw - about the second chapter, NLS issues - I live in Belgium. We have 3 official languages : Dutch, French and German. And we use English to keep everybody happy. So we know allllll about NLS issues <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cool.gif" title="Cool" alt="Cool" border="0" /></div><div></div><div></div><div>Now - go buy this book - it's awesome !</div><div><br /></div><div><i>On a different note …. I do have more time in the winter season and I was able to qualify for the Flemish Poker championship or 'Pokerkampioen Van Vlaanderen'. It's a freeze-out tournament covered by TV. It will be aired on March on 2BE and JimTV. There were 674 entries for the regional finals.  I made it through the semi finals and busted out on place 28. I wrote about it <a href="/pkvv">here</a>. It's all non-technical content ! <span style="font-style: normal" class="Apple-style-span"><img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-laughing.gif" title="Laughing" alt="Laughing" border="0" /></span></i></div><div><br /></div>    ]]></content>
  </entry>
  <entry>
    <title>UKOUG2009 - I too can blog about it ...</title>
    <link rel="alternate" type="text/html" href="http://www.ora600.be/ukoug-2009" />
    <id>http://www.ora600.be/ukoug-2009</id>
    <published>2009-12-03T15:24:27+01:00</published>
    <updated>2010-03-08T00:16:15+01:00</updated>
    <author>
      <name>kurtvm</name>
    </author>
    <category term="ukoug" />
    <summary type="html"><![CDATA[<p class="MsoNormal" align="left">I don't know how they do it ! </p><p class="MsoNormal" align="left">When I go to a conference, I make an agenda and mostly follow it all the way through - I might make a few changes here or there, but I won’t easily skip a slot… unless an emergency comes up … which happened only twice in these 3 days <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" title="Wink" alt="Wink" border="0" /> </p><p class="MsoNormal" align="left">That brings me to my first observation of UKOUG2009 … wifi sucked !!! </p><p class="MsoNormal" align="left">When I go to a conference I still need to be available – I *need*wifi access to survive. I only was able to get the ICC wifi to work during the parties! </p><p class="MsoNormal" align="left">The mickey mouse portables available at the exibition hall and registration area didn’t do me any good either – I couldn’t ssh out of them ! </p><p class="MsoNormal" align="left">Luckily I found some unprotected wifi signals in the exhibition area – my gratitude goes out to the people who had setup the NETGEAR wifi appliance – you delivered excellent internet services although I reckon this was unintentionally as it was protected the last day of the conference <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-laughing.gif" title="Laughing" alt="Laughing" border="0" /> </p><p class="MsoNormal" align="left">Here ‘s a way to get people to come to your booth – if you have wifi – name the network to your company, and give people the password if they visit you – success guaranteed ! </p><p class="MsoNormal" align="left">Anyway – I got deferred – I was wondering how people do it –blogging and twittering during a conference while there is so much to do, so much to see, so much to process. And I reckon, a lot of people were twitteringand blogging … that probably was the cause for the bad wifi !!! <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cool.gif" title="Cool" alt="Cool" border="0" /> </p><p class="MsoNormal" align="left">So I decided to blog a bit about UKOUG2009 when I got home. </p><p class="MsoNormal" align="left">We arrived on Sunday at Jurys Inn – which is about the best hotel you can get without going to the Hyatt. Every year I seem to bring mor eand more people of the company with me – this year our company had sent 9 people ! The hotel looked a bit quiet so we decided to head to All-bar-one.Which again looked a bit deserted … it seems the credit crunch had taken it’s toll here ! </p><p class="MsoNormal" align="left">So what about the sessions – I have a broad interest – the last couple of years I do more and more application server stuff, networking, identity management and programming than hardcore DBA work. </p><p class="MsoNormal" align="left">I had sessions on my agenda ranging from ‘Getting the best out of hardware loadbalancers’ to ‘Integrating forms with apex’ over ‘Authentication,SSO and authorization for WLS’ and Tanel’s ‘Latches and mutexes’ talk. And they say I am a database geek – I reckon I attend more talks on middleware thandatabases. </p><p class="MsoNormal" align="left">Now for those of you moaning about how bad some presentations were and how you could do so much better – go out there and do it. Write a apresentation and/or whitepaper and get your butt out there. </p><p class="MsoNormal" align="left">One of my colleagues attended a talk on ADF 11g by someonefrom Oracle – afterwards they had a chat and in between my colleague mentions how his team had created a kick ass app in ADF 11g. In which he got the reply ‘well– show it to me’ ! End result – if he writes a paper about it, he may present it at Oracle Openworld 2010! </p><p class="MsoNormal" align="left">So what about the sessions I attended – here are some highlights : </p><p class="MsoNormal" align="left">Alex Keh’s talk on Active Directory and Windows Security integration with Oracle databases – Alex presentation was great – excellent topic, good presentation style, working demos and I learned a couple of new things. </p><p class="MsoNormal" align="left">Joel Goodman from Oracle education had a strange presentation title – something about DB Links PART 2. I couldn’t find part 1 in the agenda. Apparently he had submitted 2 presentations but part 1 didn’t get accepted. Nonetheless – Joel Goodman knows his stuff – he also reminds me of Wolverine – deep voice, American accent … it’s almost as if he tries to hypnotize you while pumping valuable knowledge into your brain. (I wouldn’t mind having him around in a street fight ;-) ) This presentation was all about distributed transactions and how crashing databases, involved in distributed transaction,can lock complete tables until you force commit or force rollback the transactions. I had completely forgotten about that. The last time I had to do something like that was in the Oracle7 era. So 2 thumbs up ! Joel puts hispresentations free for downloading here: <a href="http://dbatrain.wordpress.com/articles-papers-and-presentations/" style="font-weight: bold; color: #333333; text-decoration: none" target="_blank">http://dbatrain.wordpress.com/articles-papers-and-presentations</a>  </p><p class="MsoNormal" align="left">Joel’s partner in crime Harald Van Breederode, and equally excellent presenter talked about 11g SQL Plan Management. This is something I get confronted with quite a lot – plan stability. Don’t you hate it when a new execution plan just hogs down a complete database. In my opinion, Oracle should have introduced SQL Plan Management when they introduced the CBO ! The one can’t live without the other and yet it has taken over a decade to get this feature –my guess is it was just too resource hungry for the hardware available back in the days. I love to quote Hannibal Smith on this : ‘I love it when a plan comes together!’ Harald hasn’t posted his presentation on his <a href="http://prutser.wordpress.com/" target="_blank">blog</a> – but who knows, one day he might!  </p><p class="MsoNormal" align="left">I’m a java guy but that doesn’t mean I can’t appreciate plsql – I like it better then say … perl – so I went to see Steven Feuerstein’s‘High Performance PL/SQL’ – very interesting stuff. He spent quite some time on ways to cache data in the pga/uga using all sorts of tricks, ending up with 11g’s result cache. Not too bad I thought – but Connor McDonald showed a little bit more skepticisms on the result cache. He proofed that if the result cache isbeing populated and concurrent sessions are running the same query which ispopulating the cache, extra locking occurs. As usual, Connor delivered one of the best, well probably most definitely *the* best presentation of UKOUG2009 inhis usual style, firing away *485* slides in 45 minutes ! </p><p class="MsoNormal" align="left">I went to quite a lot of weblogic/ias presentations. It looks like people that are Oracle acquired from the acquisitions haven’t the slightest idea of what Oracle Portal/Forms/Reports are, and *how many* people are still using it. Every presentation was heavily (not heavenly) focused on java functionality, with Forms/reports dangling, almost falling of the slides ! One guy was quite hilarious – it was a talk about SSO and WLS … to be honest I was expecting something about how ‘legacy’ apps like Oracle Forms/reports/portal and Oracle SSO (OC4J_Security) would integrate with the new Weblogic App server. Instead it was a talk about Oracle’s Identity &amp; Access Management suite build on top of WLS. No biggy – quite interesting especially from someone who co-wrote the SAML standards. </p><p class="MsoNormal" align="left">But what I suspected would happen, did happen … someone asked a question about how all this would integrate with Oracle Portal if they migrate from IAS 10.1.2.3 to Weblogic ………………. </p><p class="MsoNormal" align="left">This was going to be good as I was also interested in that. The answer was way off, it was quite clear he had no idea what Oracle Portal was or how it is deeply integrate with PLSQL (and the PLSQL SSO api) and OID. The person who asked the question tried to reframe the question but again … no serious answer –‘no, but in java … blah blah blah’ … you could see the disappointment as the person who asked the question politely nodded along and thanked the presenter for this very straightforward answer. </p><p class="MsoNormal" align="left">This confirms to me that Portal is *dead*. If you run a public website on Portal – get drupal. It’s cheap, it has way better SEO and thrives on a very large community. Oh – and I have created a drupal module that integrates drupal user management with Oracle SSO. Throw away Portal – it’s a real pain to migrate upwards (I’m stuck at Portal 10.1.2.3 as I’m unable to migrate to 10.1.4.2 even after a 2 week SR with Oracle). Throw it out… you’ll feel much better and people will like you for it <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-tongue-out.gif" title="Tongue out" alt="Tongue out" border="0" /> </p><p class="MsoNormal" align="left">One other hilarious moment was Julian Dyke’s presentation on 11gR2 new features. Julian makes excellent presentation/slides/animations. So for that reason alone, if I can, I tend to go to any of his talks. However, at the beginning of his presentation, he mentioned he had forgotten a word in his title : ‘RAC’ – ‘11gR2 *RAC* new features’. This resulted in quite a lot of people leaving the room. I decided to stay purely based on Julian’s reputation.However, I had to leave afterwards when I got an important phone call …(damn wifi) and I was glad I had an excuse to leave the room. I took the 11g RAC course in February of this year. When Julian started to talk about all the new RAC stuff like SCAN, I felt depressed. It was like I could throw away half thet hings I had learned in the course – ‘this is new, that’s new, that’s changed,this is obsolete, this works like that now …’ … too depressing … </p><o:p> </o:p> <p class="MsoNormal">To end this post – here’s a picture of a collegue of mine at the Fire &amp; Ice Party (disclaimer – the girl had already left – she’s not under the table)  </p><p class="MsoNormal"><img src="/system/files/u1/gert.jpg" title="Gert at UKOUG fire &amp; ice party" height="400" alt="Gert at UKOUG fire &amp; ice party" width="300" />  </p><p class="MsoNormal">I need to lay down now after another great UKOUG conference .... till next year !!!!  </p><p class="MsoNormal">&nbsp;</p>    ]]></summary>
    <content type="html"><![CDATA[<p class="MsoNormal" align="left">I don't know how they do it ! </p><p class="MsoNormal" align="left">When I go to a conference, I make an agenda and mostly follow it all the way through - I might make a few changes here or there, but I won’t easily skip a slot… unless an emergency comes up … which happened only twice in these 3 days <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" title="Wink" alt="Wink" border="0" /> </p><p class="MsoNormal" align="left">That brings me to my first observation of UKOUG2009 … wifi sucked !!! </p><p class="MsoNormal" align="left">When I go to a conference I still need to be available – I *need*wifi access to survive. I only was able to get the ICC wifi to work during the parties! </p><p class="MsoNormal" align="left">The mickey mouse portables available at the exibition hall and registration area didn’t do me any good either – I couldn’t ssh out of them ! </p><p class="MsoNormal" align="left">Luckily I found some unprotected wifi signals in the exhibition area – my gratitude goes out to the people who had setup the NETGEAR wifi appliance – you delivered excellent internet services although I reckon this was unintentionally as it was protected the last day of the conference <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-laughing.gif" title="Laughing" alt="Laughing" border="0" /> </p><p class="MsoNormal" align="left">Here ‘s a way to get people to come to your booth – if you have wifi – name the network to your company, and give people the password if they visit you – success guaranteed ! </p><p class="MsoNormal" align="left">Anyway – I got deferred – I was wondering how people do it –blogging and twittering during a conference while there is so much to do, so much to see, so much to process. And I reckon, a lot of people were twitteringand blogging … that probably was the cause for the bad wifi !!! <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cool.gif" title="Cool" alt="Cool" border="0" /> </p><p class="MsoNormal" align="left">So I decided to blog a bit about UKOUG2009 when I got home. </p><p class="MsoNormal" align="left">We arrived on Sunday at Jurys Inn – which is about the best hotel you can get without going to the Hyatt. Every year I seem to bring mor eand more people of the company with me – this year our company had sent 9 people ! The hotel looked a bit quiet so we decided to head to All-bar-one.Which again looked a bit deserted … it seems the credit crunch had taken it’s toll here ! </p><p class="MsoNormal" align="left">So what about the sessions – I have a broad interest – the last couple of years I do more and more application server stuff, networking, identity management and programming than hardcore DBA work. </p><p class="MsoNormal" align="left">I had sessions on my agenda ranging from ‘Getting the best out of hardware loadbalancers’ to ‘Integrating forms with apex’ over ‘Authentication,SSO and authorization for WLS’ and Tanel’s ‘Latches and mutexes’ talk. And they say I am a database geek – I reckon I attend more talks on middleware thandatabases. </p><p class="MsoNormal" align="left">Now for those of you moaning about how bad some presentations were and how you could do so much better – go out there and do it. Write a apresentation and/or whitepaper and get your butt out there. </p><p class="MsoNormal" align="left">One of my colleagues attended a talk on ADF 11g by someonefrom Oracle – afterwards they had a chat and in between my colleague mentions how his team had created a kick ass app in ADF 11g. In which he got the reply ‘well– show it to me’ ! End result – if he writes a paper about it, he may present it at Oracle Openworld 2010! </p><p class="MsoNormal" align="left">So what about the sessions I attended – here are some highlights : </p><p class="MsoNormal" align="left">Alex Keh’s talk on Active Directory and Windows Security integration with Oracle databases – Alex presentation was great – excellent topic, good presentation style, working demos and I learned a couple of new things. </p><p class="MsoNormal" align="left">Joel Goodman from Oracle education had a strange presentation title – something about DB Links PART 2. I couldn’t find part 1 in the agenda. Apparently he had submitted 2 presentations but part 1 didn’t get accepted. Nonetheless – Joel Goodman knows his stuff – he also reminds me of Wolverine – deep voice, American accent … it’s almost as if he tries to hypnotize you while pumping valuable knowledge into your brain. (I wouldn’t mind having him around in a street fight ;-) ) This presentation was all about distributed transactions and how crashing databases, involved in distributed transaction,can lock complete tables until you force commit or force rollback the transactions. I had completely forgotten about that. The last time I had to do something like that was in the Oracle7 era. So 2 thumbs up ! Joel puts hispresentations free for downloading here: <a href="http://dbatrain.wordpress.com/articles-papers-and-presentations/" style="font-weight: bold; color: #333333; text-decoration: none" target="_blank">http://dbatrain.wordpress.com/articles-papers-and-presentations</a>  </p><p class="MsoNormal" align="left">Joel’s partner in crime Harald Van Breederode, and equally excellent presenter talked about 11g SQL Plan Management. This is something I get confronted with quite a lot – plan stability. Don’t you hate it when a new execution plan just hogs down a complete database. In my opinion, Oracle should have introduced SQL Plan Management when they introduced the CBO ! The one can’t live without the other and yet it has taken over a decade to get this feature –my guess is it was just too resource hungry for the hardware available back in the days. I love to quote Hannibal Smith on this : ‘I love it when a plan comes together!’ Harald hasn’t posted his presentation on his <a href="http://prutser.wordpress.com/" target="_blank">blog</a> – but who knows, one day he might!  </p><p class="MsoNormal" align="left">I’m a java guy but that doesn’t mean I can’t appreciate plsql – I like it better then say … perl – so I went to see Steven Feuerstein’s‘High Performance PL/SQL’ – very interesting stuff. He spent quite some time on ways to cache data in the pga/uga using all sorts of tricks, ending up with 11g’s result cache. Not too bad I thought – but Connor McDonald showed a little bit more skepticisms on the result cache. He proofed that if the result cache isbeing populated and concurrent sessions are running the same query which ispopulating the cache, extra locking occurs. As usual, Connor delivered one of the best, well probably most definitely *the* best presentation of UKOUG2009 inhis usual style, firing away *485* slides in 45 minutes ! </p><p class="MsoNormal" align="left">I went to quite a lot of weblogic/ias presentations. It looks like people that are Oracle acquired from the acquisitions haven’t the slightest idea of what Oracle Portal/Forms/Reports are, and *how many* people are still using it. Every presentation was heavily (not heavenly) focused on java functionality, with Forms/reports dangling, almost falling of the slides ! One guy was quite hilarious – it was a talk about SSO and WLS … to be honest I was expecting something about how ‘legacy’ apps like Oracle Forms/reports/portal and Oracle SSO (OC4J_Security) would integrate with the new Weblogic App server. Instead it was a talk about Oracle’s Identity &amp; Access Management suite build on top of WLS. No biggy – quite interesting especially from someone who co-wrote the SAML standards. </p><p class="MsoNormal" align="left">But what I suspected would happen, did happen … someone asked a question about how all this would integrate with Oracle Portal if they migrate from IAS 10.1.2.3 to Weblogic ………………. </p><p class="MsoNormal" align="left">This was going to be good as I was also interested in that. The answer was way off, it was quite clear he had no idea what Oracle Portal was or how it is deeply integrate with PLSQL (and the PLSQL SSO api) and OID. The person who asked the question tried to reframe the question but again … no serious answer –‘no, but in java … blah blah blah’ … you could see the disappointment as the person who asked the question politely nodded along and thanked the presenter for this very straightforward answer. </p><p class="MsoNormal" align="left">This confirms to me that Portal is *dead*. If you run a public website on Portal – get drupal. It’s cheap, it has way better SEO and thrives on a very large community. Oh – and I have created a drupal module that integrates drupal user management with Oracle SSO. Throw away Portal – it’s a real pain to migrate upwards (I’m stuck at Portal 10.1.2.3 as I’m unable to migrate to 10.1.4.2 even after a 2 week SR with Oracle). Throw it out… you’ll feel much better and people will like you for it <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-tongue-out.gif" title="Tongue out" alt="Tongue out" border="0" /> </p><p class="MsoNormal" align="left">One other hilarious moment was Julian Dyke’s presentation on 11gR2 new features. Julian makes excellent presentation/slides/animations. So for that reason alone, if I can, I tend to go to any of his talks. However, at the beginning of his presentation, he mentioned he had forgotten a word in his title : ‘RAC’ – ‘11gR2 *RAC* new features’. This resulted in quite a lot of people leaving the room. I decided to stay purely based on Julian’s reputation.However, I had to leave afterwards when I got an important phone call …(damn wifi) and I was glad I had an excuse to leave the room. I took the 11g RAC course in February of this year. When Julian started to talk about all the new RAC stuff like SCAN, I felt depressed. It was like I could throw away half thet hings I had learned in the course – ‘this is new, that’s new, that’s changed,this is obsolete, this works like that now …’ … too depressing … </p><o:p> </o:p> <p class="MsoNormal">To end this post – here’s a picture of a collegue of mine at the Fire &amp; Ice Party (disclaimer – the girl had already left – she’s not under the table)  </p><p class="MsoNormal"><img src="/system/files/u1/gert.jpg" title="Gert at UKOUG fire &amp; ice party" height="400" alt="Gert at UKOUG fire &amp; ice party" width="300" />  </p><p class="MsoNormal">I need to lay down now after another great UKOUG conference .... till next year !!!!  </p><p class="MsoNormal">&nbsp;</p>    ]]></content>
  </entry>
  <entry>
    <title>Cloud computing - my server is out there man !</title>
    <link rel="alternate" type="text/html" href="http://www.ora600.be/my-server-was-out-there-in-the-cloud" />
    <id>http://www.ora600.be/my-server-was-out-there-in-the-cloud</id>
    <published>2009-11-16T10:16:27+01:00</published>
    <updated>2011-05-27T02:24:10+02:00</updated>
    <author>
      <name>kurtvm</name>
    </author>
    <category term="cloud computing" />
    <category term="elastichosts.com" />
    <summary type="html"><![CDATA[<div>
<i><b>Price is non-negotiable</b></i>
</div>
<div>
 
</div>
<div>
</div>
<div>
</div>
<div>
This website is hosted on one of my servers co-located at a data centre near Brussels. It's a DELL Poweredge 850E with 340W powersupply.
</div>
<div>
I use my own dedicated server because I *sometimes* need large amount of storage. For example, if a customer has a crashed database and wants to upload his datafiles. We're speaking 100Gb or more.  
</div>
<div>
So I need large amounts of storage - not all the time - and bandwidth. The server is hooked up to a 100Mbit internet backbone so I got that one covered too !
</div>
<div>
A couple of years ago, my only option was to buy a physical server, find a hosting company that offers co-location and hire 1U rackspace.
</div>
<div>
</div>
<div>
Cloud computing has changed this game - that and the price of electricity at datacenters.
</div>
<div>
</div>
<div>
Two months ago I was thinking of buying a server to replace the old DELL server - it was 3y old and I wanted bigger disks <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" title="Wink" alt="Wink" border="0" />
</div>
<div>
Coincidentally, when I had configured a new 1U box on DELL's website, I got a call from my hosting company. 
</div>
<div>
After hearing a whole story about how they got new racks (more current, better cooling, bla bla bla) and that I had to migrate my server, they dropped the bombshell on pricing. 
</div>
<div>
Electricity prices had gone up and they had to re-negotiate prices with the datacenter. 
</div>
<div>
</div>
<div>
Much to my surprise, the new price was three times the current price. Now I don't know about you - but if you have to pay 3x the price for getting the same service, something is wrong  <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cool.gif" title="Cool" alt="Cool" border="0" />(did I mention that the year before they also upped their price with 20%) 
</div>
<div>
Suddenly a power supply of 340W became extremely expensive. Did you ever had a look at those 200W servers … I'd rather run a business on a laptop than on one of those mickey-mouse servers… at least my old DELL has hardware raid and a decent cpu...
</div>
<div>
So - either they were lousy negotiators - or they wanted their customers to pay for their new - probably golden - racks. 
</div>
<div>
It was a lousy sales-pitch too - the sales guy offered me to think about it and check out the competition … which were all cheaper than them ;-) 
</div>
<div>
Anyway - prices were non-negotiable - so I first checked out several competitors in the same and other datacenters.
</div>
<div>
</div>
<div>
Now with co-location - all you get is rackspace, current and network. That's it. 
</div>
<div>
One hosting provider's current is not better than another's - so the only criteria are price and maybe the datacenter's reputation. (well ok - there are minor differences regarding network limits, but co-location is basically easy money for providers).
</div>
<div>
So there I was - comparing prices of different providers at different datacenters. And as price and network was my only criteria I chose to move to a small provider at the Scarlet datacenter in Vilvoorde. It's a really small and young provider/company as they only have 2 racks there (and 2 racks at another datacenter). 
</div>
<div>
</div>
<div>
Now, I didn't want any downtime - that meant renting computing power,  temporarely migrating the website and all programs that allow for the generating DUDE licenses (which is a bit more complicated that running some 'make' or 'ant' scripts), switching DNS, while doing the physical transfer of the server.
</div>
<div>
 
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
 
</div>
<div>
<b><i>The Anjo connection</i></b>
</div>
<div>
 
</div>
<div>
</div>
<div>
I remembered one time I was at Anjo Kolk's place. I had bought 2 second hand Sun servers from him. He had bought 40 of them in the US and had shipped them to The Netherlands, so he could spare a server or two <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-tongue-out.gif" title="Tongue out" alt="Tongue out" border="0" />
</div>
<div>
Anyway - I told him I was going to use the servers for a new project of mine, where I needed a linux cluster for running my own DNS servers. At which point he started demonstrating Amazon EC2 and how I could use cloud computing to do what I wanted to do, without the hassles of hiring extra rackspace or getting a NAS for storage. 
</div>
<div>
I must say I was intrigued … but it all looked a bit fragile and over-complicated. 
</div>
<div>
I mean, I just wanted some cpu, some storage and network. 
</div>
<div>
With Amazon I had to choose from an aws image in the EC2 cloud - then, if I wanted persistent storage, I had to rent Amazon S3 storage. Huh persistent storage ? 
</div>
<div>
It looks like Amazon's VM's are snapshots from common images and if you shutdown your VM or your VM crashes, the VM reverts to the original image, losing all your changes… unless you backed it up to your persistent S3 storage … which couldn't be mounted as a file systems but had to accessed through HTTP protocols … huh??? 
</div>
<div>
</div>
<div>
I just want disk space … how hard is that ?
</div>
<div>
</div>
<div>
Anyway - because of migration and uptime issues I was facing, I took a new look at Amazon EC2 and it seems they finally have mountable persistent storage, which they call Amazon EBS (or elastic block device) or what I like to call - a disk. 
</div>
<div>
Still, if your VM crashes, you lose your configuration unless you back it up to your EBS or somewhere else and reconfigure after the crash (someone correct me if I'm wrong).
</div>
<div>
</div>
<div>
That's OK as I only needed a VM for a day or 2, while my own server was physically being moved to the new datacenter. So I signed up for the Amazon EC2 service. And then I waited … and waited…. It took them 2 days to activate my account… too slow.
</div>
<div>
 
</div>
<div>
 
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
<i><b>Amazon and goliath </b></i>
</div>
<div>
 
</div>
<div>
</div>
<div>
While I was waiting for my account activation at Amazon, I decided to look at other <a href="http://www.peer1.com/hosting/cloud-services.php">cloud server hosting</a> … there is only a handful and most of them are based on virtualization software like VMware, Xen and KVM. The downside is that they all offer fixed configurations like :
</div>
<div>
<ul>
				
	<li>Small config  : 1 cpu core, 1Gb mem, 20Gb disk</li>			
	<li>Medium config : 2 cpu cure, 2Gb mem,  40Gb disk</li>			
	<li>Large …. You get the idea</li>
</ul>
</div>
<div>
In my opinion - cloud computing should provide flexible configurations at flexible prices. 
</div>
<div>
This was only cloud computing in the sense that you pay by the hour but it's not as flexible as Amazon that you can say - I want 1 cpu core, 1Gb of memory and 200Gb of disk. 
</div>
<div>
Nooo, if you wanted 200Gb of disk space, you needed to take the *extra large config* with 16 cpu cores, 8Gb memory and that happened to come with 200Gb of disk space and will cost you as much as a half a rack and 4 DELLs if you keep running it for a whole year.
</div>
<div>
</div>
<div>
But wait - I've found the one exception, that absolutely lets you choose all 3 (cpu/mem/storage) independently - and they are called <a href="/Elastichosts.com" target="_blank">Elastichosts.com</a>, a UK based cloud provider. 
</div>
<div>
And what's more - they let you try it out for free for 5 days ! 
</div>
<div>
And … they give you a fixed IP address unlike Amazon's elastic IP address which will make you jump to 20 burning loops before you can receive/send mail to/from your server that is not <a href="http://solutions.amazonwebservices.com/connect/thread.jspa?threadID=37650&amp;tstart=0&amp;start=15" target="_blank">marked as spam</a>. 
</div>
<div>
</div>
<div>
<a href="http://www.elastichosts.com" target="_blank">Elastichosts</a> runs on Linux KVM and they have made sure that all interfaces are very simple - a disk is a disk - an static ip really is a static ip. 
</div>
<div>
</div>
<div>
No fuzzy acronyms. 
</div>
<div>
</div>
<div>
In fact, I was reminded of Larry Ellison's opinion of cloud computing … it's just a simple server that is 'out there' <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cool.gif" title="Cool" alt="Cool" border="0" />  - it needs cpu, memory, network and electricity - and for me affordable flexible pricing - that's it !!!
</div>
<div>
Maybe I'm an idiot but Amazon just took it a step too far and made it too complex !
</div>
<div>
In case you've misted Larry's interview on cloud computing :
</div>
<div>
</div>
<div>
<object height="344" width="425">
				
	<param name="movie" value="http://www.youtube.com/v/0FacYAI6DY0&amp;hl=en_US&amp;fs=1&amp;">
	</param>
						
	<param name="allowFullScreen" value="true">
	</param>
						
	<param name="allowscriptaccess" value="always">
	</param>
					<embed src="http://www.youtube.com/v/0FacYAI6DY0&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"></embed>
</object>
</div>
<div>
<object height="344" width="425">
				
	<param name="movie" value="http://www.youtube.com/v/UOEFXaWHppE&amp;hl=en_US&amp;fs=1&amp;">
	</param>
						
	<param name="allowFullScreen" value="true">
	</param>
						
	<param name="allowscriptaccess" value="always">
	</param>
					<embed src="http://www.youtube.com/v/UOEFXaWHppE&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"></embed>
</object>
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
</div>
<div>
 
</div>
<div>
<b><i>Epilogue</i></b>
</div>
<div>
</div>
<div>
<ul>
				
	<li>Anjo has been running an Amazon AWS for over a year without crashing.</li>
</ul>
<ul>
				
	<li>I migrated the ORA600 server without downtime to the Scarlet datacenter which is located in the same building as the Belgian Oracle office (you've got to love the irony <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-laughing.gif" title="Laughing" alt="Laughing" border="0" /> )</li>
</ul>
<div>
</div>
<div>
<blockquote style="margin: 0px 0px 0px 40px; border-style: none; padding: 0px" class="webkit-indent-blockquote">
			<img src="/system/files/u1/scarlet.jpg" title="scarlet dc" alt="scarlet dc" height="98" width="98" /> 
</blockquote>
</div>
<ul>
				
	<li>A friend of mine who was also co-locating a server at my original provider was offered negotiable prices a couple of weeks later (maybe tripling their prices wasn't the best of ideas). He too migrated to another datacenter.</li>
</ul>
<ul>
				
	<li>If a hosting company ever pulls a trick on me again, I'm throwing away my hardware and move to elastichosts.com for good. </li>
</ul>
<ul>
				
	<li>Have a look at <a href="http://www.elastichosts.com" target="_blank">elastichosts.com</a> - it rocks !!!</li>
</ul>
</div>
<div>
<br />
</div>
    ]]></summary>
    <content type="html"><![CDATA[<div>
<i><b>Price is non-negotiable</b></i>
</div>
<div>
 
</div>
<div>
</div>
<div>
</div>
<div>
This website is hosted on one of my servers co-located at a data centre near Brussels. It's a DELL Poweredge 850E with 340W powersupply.
</div>
<div>
I use my own dedicated server because I *sometimes* need large amount of storage. For example, if a customer has a crashed database and wants to upload his datafiles. We're speaking 100Gb or more.  
</div>
<div>
So I need large amounts of storage - not all the time - and bandwidth. The server is hooked up to a 100Mbit internet backbone so I got that one covered too !
</div>
<div>
A couple of years ago, my only option was to buy a physical server, find a hosting company that offers co-location and hire 1U rackspace.
</div>
<div>
</div>
<div>
Cloud computing has changed this game - that and the price of electricity at datacenters.
</div>
<div>
</div>
<div>
Two months ago I was thinking of buying a server to replace the old DELL server - it was 3y old and I wanted bigger disks <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif" title="Wink" alt="Wink" border="0" />
</div>
<div>
Coincidentally, when I had configured a new 1U box on DELL's website, I got a call from my hosting company. 
</div>
<div>
After hearing a whole story about how they got new racks (more current, better cooling, bla bla bla) and that I had to migrate my server, they dropped the bombshell on pricing. 
</div>
<div>
Electricity prices had gone up and they had to re-negotiate prices with the datacenter. 
</div>
<div>
</div>
<div>
Much to my surprise, the new price was three times the current price. Now I don't know about you - but if you have to pay 3x the price for getting the same service, something is wrong  <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cool.gif" title="Cool" alt="Cool" border="0" />(did I mention that the year before they also upped their price with 20%) 
</div>
<div>
Suddenly a power supply of 340W became extremely expensive. Did you ever had a look at those 200W servers … I'd rather run a business on a laptop than on one of those mickey-mouse servers… at least my old DELL has hardware raid and a decent cpu...
</div>
<div>
So - either they were lousy negotiators - or they wanted their customers to pay for their new - probably golden - racks. 
</div>
<div>
It was a lousy sales-pitch too - the sales guy offered me to think about it and check out the competition … which were all cheaper than them ;-) 
</div>
<div>
Anyway - prices were non-negotiable - so I first checked out several competitors in the same and other datacenters.
</div>
<div>
</div>
<div>
Now with co-location - all you get is rackspace, current and network. That's it. 
</div>
<div>
One hosting provider's current is not better than another's - so the only criteria are price and maybe the datacenter's reputation. (well ok - there are minor differences regarding network limits, but co-location is basically easy money for providers).
</div>
<div>
So there I was - comparing prices of different providers at different datacenters. And as price and network was my only criteria I chose to move to a small provider at the Scarlet datacenter in Vilvoorde. It's a really small and young provider/company as they only have 2 racks there (and 2 racks at another datacenter). 
</div>
<div>
</div>
<div>
Now, I didn't want any downtime - that meant renting computing power,  temporarely migrating the website and all programs that allow for the generating DUDE licenses (which is a bit more complicated that running some 'make' or 'ant' scripts), switching DNS, while doing the physical transfer of the server.
</div>
<div>
 
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
 
</div>
<div>
<b><i>The Anjo connection</i></b>
</div>
<div>
 
</div>
<div>
</div>
<div>
I remembered one time I was at Anjo Kolk's place. I had bought 2 second hand Sun servers from him. He had bought 40 of them in the US and had shipped them to The Netherlands, so he could spare a server or two <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-tongue-out.gif" title="Tongue out" alt="Tongue out" border="0" />
</div>
<div>
Anyway - I told him I was going to use the servers for a new project of mine, where I needed a linux cluster for running my own DNS servers. At which point he started demonstrating Amazon EC2 and how I could use cloud computing to do what I wanted to do, without the hassles of hiring extra rackspace or getting a NAS for storage. 
</div>
<div>
I must say I was intrigued … but it all looked a bit fragile and over-complicated. 
</div>
<div>
I mean, I just wanted some cpu, some storage and network. 
</div>
<div>
With Amazon I had to choose from an aws image in the EC2 cloud - then, if I wanted persistent storage, I had to rent Amazon S3 storage. Huh persistent storage ? 
</div>
<div>
It looks like Amazon's VM's are snapshots from common images and if you shutdown your VM or your VM crashes, the VM reverts to the original image, losing all your changes… unless you backed it up to your persistent S3 storage … which couldn't be mounted as a file systems but had to accessed through HTTP protocols … huh??? 
</div>
<div>
</div>
<div>
I just want disk space … how hard is that ?
</div>
<div>
</div>
<div>
Anyway - because of migration and uptime issues I was facing, I took a new look at Amazon EC2 and it seems they finally have mountable persistent storage, which they call Amazon EBS (or elastic block device) or what I like to call - a disk. 
</div>
<div>
Still, if your VM crashes, you lose your configuration unless you back it up to your EBS or somewhere else and reconfigure after the crash (someone correct me if I'm wrong).
</div>
<div>
</div>
<div>
That's OK as I only needed a VM for a day or 2, while my own server was physically being moved to the new datacenter. So I signed up for the Amazon EC2 service. And then I waited … and waited…. It took them 2 days to activate my account… too slow.
</div>
<div>
 
</div>
<div>
 
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
<i><b>Amazon and goliath </b></i>
</div>
<div>
 
</div>
<div>
</div>
<div>
While I was waiting for my account activation at Amazon, I decided to look at other <a href="http://www.peer1.com/hosting/cloud-services.php">cloud server hosting</a> … there is only a handful and most of them are based on virtualization software like VMware, Xen and KVM. The downside is that they all offer fixed configurations like :
</div>
<div>
<ul>
				
	<li>Small config  : 1 cpu core, 1Gb mem, 20Gb disk</li>			
	<li>Medium config : 2 cpu cure, 2Gb mem,  40Gb disk</li>			
	<li>Large …. You get the idea</li>
</ul>
</div>
<div>
In my opinion - cloud computing should provide flexible configurations at flexible prices. 
</div>
<div>
This was only cloud computing in the sense that you pay by the hour but it's not as flexible as Amazon that you can say - I want 1 cpu core, 1Gb of memory and 200Gb of disk. 
</div>
<div>
Nooo, if you wanted 200Gb of disk space, you needed to take the *extra large config* with 16 cpu cores, 8Gb memory and that happened to come with 200Gb of disk space and will cost you as much as a half a rack and 4 DELLs if you keep running it for a whole year.
</div>
<div>
</div>
<div>
But wait - I've found the one exception, that absolutely lets you choose all 3 (cpu/mem/storage) independently - and they are called <a href="/Elastichosts.com" target="_blank">Elastichosts.com</a>, a UK based cloud provider. 
</div>
<div>
And what's more - they let you try it out for free for 5 days ! 
</div>
<div>
And … they give you a fixed IP address unlike Amazon's elastic IP address which will make you jump to 20 burning loops before you can receive/send mail to/from your server that is not <a href="http://solutions.amazonwebservices.com/connect/thread.jspa?threadID=37650&amp;tstart=0&amp;start=15" target="_blank">marked as spam</a>. 
</div>
<div>
</div>
<div>
<a href="http://www.elastichosts.com" target="_blank">Elastichosts</a> runs on Linux KVM and they have made sure that all interfaces are very simple - a disk is a disk - an static ip really is a static ip. 
</div>
<div>
</div>
<div>
No fuzzy acronyms. 
</div>
<div>
</div>
<div>
In fact, I was reminded of Larry Ellison's opinion of cloud computing … it's just a simple server that is 'out there' <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cool.gif" title="Cool" alt="Cool" border="0" />  - it needs cpu, memory, network and electricity - and for me affordable flexible pricing - that's it !!!
</div>
<div>
Maybe I'm an idiot but Amazon just took it a step too far and made it too complex !
</div>
<div>
In case you've misted Larry's interview on cloud computing :
</div>
<div>
</div>
<div>
<object height="344" width="425">
				
	<param name="movie" value="http://www.youtube.com/v/0FacYAI6DY0&amp;hl=en_US&amp;fs=1&amp;">
	</param>
						
	<param name="allowFullScreen" value="true">
	</param>
						
	<param name="allowscriptaccess" value="always">
	</param>
					<embed src="http://www.youtube.com/v/0FacYAI6DY0&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"></embed>
</object>
</div>
<div>
<object height="344" width="425">
				
	<param name="movie" value="http://www.youtube.com/v/UOEFXaWHppE&amp;hl=en_US&amp;fs=1&amp;">
	</param>
						
	<param name="allowFullScreen" value="true">
	</param>
						
	<param name="allowscriptaccess" value="always">
	</param>
					<embed src="http://www.youtube.com/v/UOEFXaWHppE&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"></embed>
</object>
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
</div>
<div>
 
</div>
<div>
<b><i>Epilogue</i></b>
</div>
<div>
</div>
<div>
<ul>
				
	<li>Anjo has been running an Amazon AWS for over a year without crashing.</li>
</ul>
<ul>
				
	<li>I migrated the ORA600 server without downtime to the Scarlet datacenter which is located in the same building as the Belgian Oracle office (you've got to love the irony <img src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-laughing.gif" title="Laughing" alt="Laughing" border="0" /> )</li>
</ul>
<div>
</div>
<div>
<blockquote style="margin: 0px 0px 0px 40px; border-style: none; padding: 0px" class="webkit-indent-blockquote">
			<img src="/system/files/u1/scarlet.jpg" title="scarlet dc" alt="scarlet dc" height="98" width="98" /> 
</blockquote>
</div>
<ul>
				
	<li>A friend of mine who was also co-locating a server at my original provider was offered negotiable prices a couple of weeks later (maybe tripling their prices wasn't the best of ideas). He too migrated to another datacenter.</li>
</ul>
<ul>
				
	<li>If a hosting company ever pulls a trick on me again, I'm throwing away my hardware and move to elastichosts.com for good. </li>
</ul>
<ul>
				
	<li>Have a look at <a href="http://www.elastichosts.com" target="_blank">elastichosts.com</a> - it rocks !!!</li>
</ul>
</div>
<div>
<br />
</div>
    ]]></content>
  </entry>
  <entry>
    <title>ORA600 Aggregator mobile theme</title>
    <link rel="alternate" type="text/html" href="http://www.ora600.be/node/5348" />
    <id>http://www.ora600.be/node/5348</id>
    <published>2009-10-09T09:47:20+02:00</published>
    <updated>2009-10-09T09:48:57+02:00</updated>
    <author>
      <name>kurtvm</name>
    </author>
    <summary type="html"><![CDATA[<p>
I caved in ... I bought an iPhone. 
</p>
<p>
I still think the price is a total rip-off here in Belgium - and there's a 6 week waiting list. 
</p>
<p>
All because in <a target="_blank" href="http://www.theregister.co.uk/2008/07/09/belgium_will_sell_iphone_simlock_free/">Belgium force bundling sales are not allowed</a>. This makes the iPhone simlock free but it comes at a price. 
</p>
<p>
Anyway - when I looked at the news <a href="/aggregator">aggregator</a>, I thought I could do better and so the aggregator now detects mobile browsers and switches to a mobile theme. The implementation uses an mobile theme, a browser detection (browscap), a themeswitcher and the <a target="_blank" href="http://iwebkit.net/">iWebKit</a>. The implementation was done in 15min all because of the <a href="http://www.drupal.org">drupal</a> framework <img border="0" src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cool.gif" alt="Cool" title="Cool" />. I wonder how long this would take in Apex - or god forbid Portal ! 
</p>
<p>
When I started this site, and needed to pick a framework, I was favoring Apex because I knew it already. And I have some experience with Oracle Portal. However, the problem we were having at a customer site with Portal (or apex) and search engine optimisation (SEO), drove me into drupal which does a great job in SEO. It did involve learning php (but I already knew perl really well) and ofcourse the drupal hook api (which is really another way of thinking and programming). But the payoff comes with all free modules that you can find on the internet and build new functionality in a matter of minutes !!! 
</p>
<p>
&nbsp;
</p>
<p>
&nbsp;
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
I caved in ... I bought an iPhone. 
</p>
<p>
I still think the price is a total rip-off here in Belgium - and there's a 6 week waiting list. 
</p>
<p>
All because in <a target="_blank" href="http://www.theregister.co.uk/2008/07/09/belgium_will_sell_iphone_simlock_free/">Belgium force bundling sales are not allowed</a>. This makes the iPhone simlock free but it comes at a price. 
</p>
<p>
Anyway - when I looked at the news <a href="/aggregator">aggregator</a>, I thought I could do better and so the aggregator now detects mobile browsers and switches to a mobile theme. The implementation uses an mobile theme, a browser detection (browscap), a themeswitcher and the <a target="_blank" href="http://iwebkit.net/">iWebKit</a>. The implementation was done in 15min all because of the <a href="http://www.drupal.org">drupal</a> framework <img border="0" src="/sites/all/modules/tinymce/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cool.gif" alt="Cool" title="Cool" />. I wonder how long this would take in Apex - or god forbid Portal ! 
</p>
<p>
When I started this site, and needed to pick a framework, I was favoring Apex because I knew it already. And I have some experience with Oracle Portal. However, the problem we were having at a customer site with Portal (or apex) and search engine optimisation (SEO), drove me into drupal which does a great job in SEO. It did involve learning php (but I already knew perl really well) and ofcourse the drupal hook api (which is really another way of thinking and programming). But the payoff comes with all free modules that you can find on the internet and build new functionality in a matter of minutes !!! 
</p>
<p>
&nbsp;
</p>
<p>
&nbsp;
</p>
    ]]></content>
  </entry>
</feed>
