<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-34560741</atom:id><lastBuildDate>Fri, 27 Jan 2012 21:49:22 +0000</lastBuildDate><category>Tuning</category><category>Off Topic</category><category>Dynamic Sampling</category><category>Oracle VirtualBox</category><category>SQL</category><category>Database Concepts</category><category>Characterset</category><category>Article</category><category>Performance Tuning</category><category>PL/SQL</category><category>Oracle 10g</category><category>ORA-07445</category><category>OCM</category><category>Syntax Highlighter</category><category>Encryption</category><category>Oracle 11g R2</category><category>Job</category><category>Cardinality</category><category>Grid Infrastructure</category><category>RAC</category><category>Rain</category><category>Data Guard</category><category>Oracle University</category><category>Block Corruption</category><category>Conference</category><category>Library Cache Pin</category><category>11g New Features</category><category>Virtual Conference</category><category>ACE</category><category>Error Message</category><category>AWR</category><category>Operating System</category><category>SQL Functions</category><category>Tsunami</category><category>NoCOUG</category><category>ORA-00600</category><category>Oracle 11g</category><category>RMAN</category><category>Master Note</category><category>Initialization Parameters</category><category>Webcast</category><category>Redo Log Files</category><category>Oracle Streams</category><category>Control File</category><category>AIOUG</category><category>Upgrade</category><category>OTN</category><category>Database</category><category>Patchset</category><category>OOW-2010</category><category>Database Upgrade</category><title>The Momen Blog</title><description>Views expressed here are solely that of my own. Please make sure that you test the code/queries that appear on my blog before applying them to the production environment.</description><link>http://momendba.blogspot.com/</link><managingEditor>noreply@blogger.com (Asif Momen)</managingEditor><generator>Blogger</generator><openSearch:totalResults>102</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/TheMomenBlog" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="themomenblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-7420305238203554173</guid><pubDate>Wed, 09 Nov 2011 23:37:00 +0000</pubDate><atom:updated>2011-11-10T02:57:26.725+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AIOUG</category><title>Sangam 2011: Less than a month now</title><description>Sangam11, AIOUG's annual conference is starting in the first week of December-2011. To be precise it's on 9th and 10th of December. 
&lt;p&gt;&lt;/p&gt;
The IT capital of India will be hosting 3rd annual meetup of AIOUG. World renowned experts like &lt;a href="http://mvallath.wordpress.com"&gt;Murali Vallath&lt;/a&gt;, &lt;a href="http://arup.blogspot.com"&gt;Arup Nanda&lt;/a&gt;, &lt;a href="http://hemantoracledba.blogspot.com"&gt;Hemant Chitale&lt;/a&gt; are leading the show. 
&lt;p&gt;&lt;/p&gt;
If you are in India then grab this opportunity to learn and network. For agenda and registrations click &lt;a href="http://www.aioug.org/sangam11.php"&gt;here&lt;/a&gt;.
&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-7420305238203554173?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2011/11/sangam-2011-less-than-month-now.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-5037283981568893756</guid><pubDate>Sat, 29 Oct 2011 16:36:00 +0000</pubDate><atom:updated>2011-10-29T19:45:02.658+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">NoCOUG</category><title>Results of the Second International NoCOUG SQL Challenge are Out</title><description>The Second International NoCOUG SQL Challenge was published on 2/13/11 in the February 2011 issue of the &lt;a href="http://www.nocoug.org/Journal/NoCOUG_Journal_201102.pdf"&gt;NoCOUG Journal&lt;/a&gt;. The challenge was to find the secret message hidden in a seemingly random collection of words. 
&lt;p&gt;&lt;/p&gt;
Andre Araujo, Rob van Wijk, and Ilya Chuhnakov are the winners of this competition. Pythian was the sponsor of the competition and each winner will receive an Amazon Kindle.
 
&lt;p&gt;&lt;/p&gt;
The full announcement can be read in the 100th issue of the &lt;a href="http://www.nocoug.org/Journal/NoCOUG_Journal_201102.pdf"&gt;NoCOUG Journal&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-5037283981568893756?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2011/10/results-of-second-international-nocoug.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-5335491824476418423</guid><pubDate>Sun, 14 Aug 2011 07:58:00 +0000</pubDate><atom:updated>2011-08-16T00:45:49.038+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Library Cache Pin</category><category domain="http://www.blogger.com/atom/ns#">Performance Tuning</category><title>Resolving “library cache pin” Waits</title><description>&lt;p&gt;&lt;/p&gt;
The old traditional export (exp) utility is hanging indefinitely at “exporting system procedural objects and actions” stage of the export. 
&lt;p&gt;&lt;/p&gt;

&lt;pre name="code" class="sql"&gt; 
[oracle@node1 ~]$ /orabackup/exp/prtdb/exp_prtdb.sh

Export: Release 11.2.0.1.0 - Production on Sun Aug 14 21:39:03 2011

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.


Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit                                          Production
With the Partitioning, Real Application Clusters, Automatic Storage Management,                                          OLAP,
Data Mining and Real Application Tes
Export done in WE8ISO8859P1 character set and AL16UTF16 NCHAR character set
server uses WE8MSWIN1252 character set (possible charset conversion)

About to export the entire database ...
. exporting tablespace definitions
. exporting profiles
. exporting user definitions
. exporting roles
. exporting resource costs
. exporting rollback segment definitions
. exporting database links
. exporting sequence numbers
. exporting directory aliases
. exporting context namespaces
. exporting foreign function library names
. exporting PUBLIC type synonyms
. exporting private type synonyms
. exporting object type definitions
. exporting system procedural objects and actions
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;
Following are the details from V$SESSION view of this session:
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SID:				190
SERIAL#:			379
USERNAME:			EXPIMP
STATUS:				ACTIVE
PROGRAM:			exp@node1 (TNS V1-V3)
LAST_CALL_ET:			1363
BLOCKING SESSION STATUS:	NOT IN WAIT
EVENT#:				280
EVENT:				library cache pin
WAIT CLASS:			Concurrency
STATE:				WAITED SHORT TIME
BLOCKING SESSION:						
  &lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
As you can see the session is waiting on “library cache pin” wait event. This means there is at least one other session holding a lock on some stored procedure which “exp” is trying to pin. The “BLOCKSING SESSION” column does not report which session is holding a lock (or for that matter blocking). 
&lt;p&gt;&lt;/p&gt;

I used “oradebug” utility to analyze the situation. Following is an excerpt from the log file generated by “oradebug”:
&lt;p&gt;&lt;/p&gt;

&lt;pre name="code" class="sql"&gt;
    Oracle session identified by:
    {
                instance: 1 (prtdb.prtdb1)
                   os id: 24885
              process id: 49, oracle@node1
              session id: 13
        session serial #: 839
    }
    is waiting for 'Streams AQ: waiting for messages in the queue' with wait info:

&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;
Below is the information about session “13” from V$SESSION view:
&lt;p&gt;&lt;/p&gt;

&lt;pre name="code" class="sql"&gt;
SID:				13
SERIAL#:			841
USERNAME:			DBSNMP
STATUS:				ACTIVE
PROGRAM:			emagent@node1 (TNS V1-V3)
LAST_CALL_ET:			5
BLOCKING SESSION STATUS:	UNKNOWN
EVENT#:				364
EVENT:			Streams AQ: waiting for messages in the queue
WAIT CLASS:		Idle
STATE:			WAITING
BLOCKING SESSION:						
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;
The culprit session belongs to “DBSNMP” user and it is waiting on an “Idle” wait event. 
&lt;p&gt;&lt;/p&gt;

It was easy to kill this session as it did not belong to any application. After killing the session (13), export happily started working and things were all normal.
&lt;p&gt;&lt;/p&gt;

&lt;pre name="code" class="sql"&gt;
. exporting pre-schema procedural objects and actions
. exporting cluster definitions
. about to export SYSTEM's tables via Conventional Path ...
. . exporting table                    DEF$_AQCALL
:
:
:
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;
References: 
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
&lt;a href="https://support.oracle.com/CSP/main/article?cmd=show&amp;type=NOT&amp;id=215858.1"&gt;Note:215858.1&lt;/a&gt; - Interpreting HANGANALYZE trace files to diagnose hanging and performance problems

&lt;p&gt;&lt;/p&gt;
&lt;a href="https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocDsrc=KB&amp;viewingMode=1143&amp;from=BOOKMARK&amp;bmDocID=175006.1&amp;bmDocType=BULLETIN&amp;bmDocTitle=Steps%20%20to%20generate%20HANGANALYZE%20trace%20files))"&gt;Note: 175006.1&lt;/a&gt; Steps to generate HANGANALYZE trace files
&lt;p&gt;&lt;/p&gt;

&lt;a href="https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocDsrc=KB&amp;viewingMode=1143&amp;from=BOOKMARK&amp;bmDocID=402983.1&amp;bmDocType=FAQ&amp;bmDocTitle=Master%20Note:%20How%20to%20diagnose%20Database%20Performance%20-%20FAQ))"&gt;Note: 402983.1&lt;/a&gt; Master Note: How to diagnose Database Performance
&lt;p&gt;&lt;/p&gt;

&lt;a href="http://arup.blogspot.com/2008/08/diagnosing-library-cache-latch.html"&gt; Diagnosing Library Cache Latch Contention: A Real Case Study
&lt;/a&gt; By Arup Nanda
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-5335491824476418423?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2011/08/resolving-library-cache-pin-wait-event.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-1938010339729874121</guid><pubDate>Fri, 12 Aug 2011 08:54:00 +0000</pubDate><atom:updated>2011-08-12T11:55:23.086+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Oracle 11g R2</category><category domain="http://www.blogger.com/atom/ns#">RAC</category><title>Confused SRVCTL in Oracle 11g R2</title><description>&lt;p&gt;&lt;/p&gt;
OS: RHEL 5.5 64-bit
&lt;p&gt;&lt;/p&gt;
DB: Oracle Database 11gR2
&lt;p&gt;&lt;/p&gt;
Grid: Oracle Clusterware 11gR2
&lt;p&gt;&lt;/p&gt;
A database “adverten” is running on a Linux (64-bit) box. This database happens to be a two-node Oracle RAC database. The instance names of this database are “adverten1” and ““adverten2” respectively on the two nodes. 
&lt;p&gt;&lt;/p&gt;
I ran the RACcheck tool but unfortunately it does not list this database. However other databases running on this server are listed. 
&lt;p&gt;&lt;/p&gt;
Below is the excerpt from “raccheck” tool: 
&lt;p&gt;&lt;/p&gt;
List of running databases registered in OCR&lt;p&gt;&lt;/p&gt;
1. clonedb&lt;p&gt;&lt;/p&gt;
2. frisdb&lt;p&gt;&lt;/p&gt;
3. All&lt;p&gt;&lt;/p&gt;
4. None&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
Believe me; the instance is there and running. 
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt; 
[oracle@node1 raccheck]$ ps -ef|grep pmon
grid      8585     1  0 Aug06 ?        00:00:17 asm_pmon_+ASM1
oracle   12351  8299  0 22:16 pts/7    00:00:00 grep pmon
oracle   21959     1  0 Aug09 ?        00:00:31 ora_pmon_clonedb1
oracle   24222     1  0 Aug09 ?        00:00:19 ora_pmon_adverten1
oracle   29006     1  0 Aug07 ?        00:00:32 ora_pmon_frisdb1
[oracle@node1 raccheck]$
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
It’s time to debug “raccheck” tool. 
&lt;p&gt;&lt;/p&gt;
“is_rdbms_installed_crs ()” procedure of the “raccheck” script is of our interest for now and below are the statements from where it is actually fetching database names.

&lt;p&gt;&lt;/p&gt;
It grabs the list of databases using the following:
&lt;p&gt;&lt;/p&gt;

&lt;pre name="code" class="sql"&gt;
       $CRS/bin/srvctl config database &gt; $db_list_fil
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;
And checks for database status using the following: 
&lt;p&gt;&lt;/p&gt;

&lt;pre name="code" class="sql"&gt; 
crs_db_status=$($CRS/bin/srvctl status database -d $db_list|grep -i $loc	alnode|grep -ic "is running")
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;
Okay, running the first command manually lists my database:
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt; 
[grid@node1 ~]$ $CRS_HOME/bin/srvctl config database
advertence
clonedb
frisdb
[grid@node1 ~]$
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;
If you notice, the database name listed above is “advertence” (10 letter word). The database name from V$DATABASE view is “adjudica” (8 letter word), also instances use “adverten”.

&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt; 
SQL&gt; select name from v$database;

NAME
---------
ADJUDICA

SQL&gt;
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;
However, the second command could not locate the database instances:
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
[grid@node1 ~]$ $CRS_HOME/bin/srvctl status database -d advertence
Instance adverten1 is not running on node node1
Instance adverten2 is not running on node node2
[grid@node1 ~]$
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
Of course “adverten” is not registered resource. So the following will fail:
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt; 
[grid@abis19 ~]$ $CRS_HOME/bin/srvctl status database -d adverten
PRCD-1120 : The resource for database adverten could not be found.
PRCR-1001 : Resource ora. adverten.db does not exist
[grid@abis19 ~]$
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
This is the reason “raccheck” is not able to list this database. 
&lt;p&gt;&lt;/p&gt;
What might have happened is the question that needs to be answered. 
&lt;p&gt;&lt;/p&gt;
At the time of database creation, “advertence” was keyed in as the database name. But Oracle created a database by trimming it to 8 characters and reserving 1 character for instance number. But for some reason “advertence” database resource was registered. 
&lt;p&gt;&lt;/p&gt;
Apparently, the “ora. advertence.db” resource registered with the cluster is in “OFFLINE” state. 
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt; 
[grid@node1 ~]$ crs_stat  ora. advertence.db
NAME=ora. advertence.db
TYPE=ora.database.type
TARGET=OFFLINE
STATE=OFFLINE

[grid@node1 ~]$
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;
It’s all messy here, but things are working. 
&lt;p&gt;&lt;/p&gt;
I will have to create a Service Request with Oracle Support to resolve this issue for this client of mine.
&lt;p&gt;&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-1938010339729874121?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2011/08/confused-srvctl-in-oracle-11g-r2.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-9115048225890401393</guid><pubDate>Sun, 17 Jul 2011 06:42:00 +0000</pubDate><atom:updated>2011-07-17T09:49:54.789+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Virtual Conference</category><category domain="http://www.blogger.com/atom/ns#">Conference</category><title>VirtaThon: My Sessions Schedule</title><description>BrainSurface's VirtaThon conference has already started. Today is the second day of the virtual conference. These are a lot of interesting sessions from Oracle Expert's around the world. 
&lt;p&gt;&lt;/p&gt;
I am speaking today and following are the details of my session:
&lt;p&gt;&lt;/p&gt;

RMAN: Recovery Procedures&lt;p&gt;&lt;/p&gt;
Time slot: 17 July 14:30 - 15:25 EDT&lt;p&gt;&lt;/p&gt;
Virtual Room: # 200&lt;p&gt;&lt;/p&gt;


A detailed session schedule could be found &lt;a href='http://www.brainsurface.com/virtathon/sessions-schedule'&gt;here&lt;/a&gt;.
&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-9115048225890401393?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2011/07/virtathon-my-sessions-schedule.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-1439797237288229004</guid><pubDate>Thu, 14 Jul 2011 20:00:00 +0000</pubDate><atom:updated>2011-07-15T13:20:13.862+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Virtual Conference</category><category domain="http://www.blogger.com/atom/ns#">Conference</category><title>Attend4FREE: 6 Days of Expert+ Speakers &amp; Sessions FOR Oracle, MySql and Java technologies</title><description>&lt;span style="font-style:italic;"&gt;Attend4Free! 100% Virtual - No Travel Required!&lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;

&lt;p&gt;&lt;/p&gt;
&lt;span style="font-weight:bold;"&gt;What is VirtaThon?&lt;/span&gt;
&lt;p&gt;&lt;/p&gt;
Attend, participate &amp; learn cutting edge knowledge from recognized domain experts from all over the world: All within the realm of your broadband connection at the largest Independent "Virtual Conference" for the Oracle, Java &amp; MySQL Communities. Aimed at a global audience, VirtaThon was conceived to revolutionize Online Conferencing, focusing on the core goal of facilitating the inexpensive dissemination of expert knowledge to the masses.
&lt;p&gt;&lt;/p&gt;
Almost everyone of us would like to attend world-class physical conference events but, given these globally tough economic times that we live in, can we afford the costs of attendance, travel, time-off, lodging and such? How about attending a LIVE virtual conference from wherever you choose to be in the world?
&lt;p&gt;&lt;/p&gt;
The biggest prohibiting reasons in attending physical Professional Conferences translate into various inhibiting factors such as travel, time-off, lodging, not to mention the attendance fees that can easily run into the thousands of dollars. VirtaThon bridges this gap and makes it incredibly easy to attend a 6-day Conference event from the comfort of your PC. All you need is a broadband Internet connect and voilÃ , you are right there: Attending 6 days of cutting-edge expert-level sessions and interacting/benefiting from world renowned experts in the Oracle, Java &amp; MySQL domains.  
&lt;p&gt;&lt;/p&gt;


&lt;span style="font-weight:bold;"&gt;Keynotes:&lt;/span&gt;
&lt;p&gt;&lt;/p&gt;

With keynotes from Steven Feuerstein, Arup Nanda, Dr. Bert Scalzo, Eddie Awad, Tim Gorman, Jeremy Schneider, David Koelle, Guy Harrison, Tariq Farooq and a 4-hour Gold Star Deep-Dive session from Mike Ault, this a DO-NOT-MISS virtual learning event of a lifetime.

&lt;p&gt;&lt;/p&gt;
&lt;span style="font-weight:bold;"&gt;Session Schedule&lt;/span&gt;
&lt;p&gt;&lt;/p&gt;
For a detailed session schedule click &lt;a href='http://www.brainsurface.com/virtathon/sessions-schedule'&gt;here&lt;/a&gt;.

&lt;p&gt;&lt;/p&gt;
&lt;span style="font-weight:bold;"&gt;How to register for free?&lt;/span&gt;
&lt;p&gt;&lt;/p&gt;

Click &lt;a href='http://www.brainsurface.com/virtathon/sign-up'&gt;here&lt;/a&gt; to register.

&lt;p&gt;&lt;/p&gt;
Hope to see you all there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-1439797237288229004?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2011/07/attend4free-6-days-of-expert-speakers.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-1320796549269314754</guid><pubDate>Sat, 02 Jul 2011 14:42:00 +0000</pubDate><atom:updated>2011-07-02T17:43:37.438+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Master Note</category><category domain="http://www.blogger.com/atom/ns#">Database</category><title>Master Notes from Oracle Support</title><description>&lt;p&gt;&lt;/p&gt;
My flight is delayed by 25 minutes, so thought of sharing this post with you all. Below is the list of master notes from Oracle Support. These are the topics that are on my to-do list. I am sure you too would like to read them. Search for “master note” on Oracle Support for a complete list. 
&lt;p&gt;&lt;/p&gt;
11g New Features - Database Core &lt;a href="https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(from=BOOKMARK&amp;bmDocType=BULLETIN&amp;bmDocTitle=11g%20New%20Features%20-%20Database%20Core&amp;viewingMode=1143&amp;bmDocID=1226873.1&amp;bmDocDsrc=KB)) "&gt; [ID 1226873.1]&lt;/a&gt;

&lt;p&gt;&lt;/p&gt;
Master Note for Diagnosing ORA-4031 &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocTitle=Master%20Note%20for%20Diagnosing%20ORA-4031&amp;viewingMode=1143&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocType=ANNOUNCEMENT&amp;bmDocID=1088239.1))”&gt; [ID 1088239.1]&lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for ORA-1555 Errors &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocTitle=Master%20Note%20for%20ORA-1555%20Errors&amp;viewingMode=1143&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocType=ANNOUNCEMENT&amp;bmDocID=1307334.1))”&gt; [ID 1307334.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for Oracle Backup and Recovery &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocTitle=Master%20Note%20For%20Oracle%20Backup%20And%20Recovery&amp;viewingMode=1143&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocType=BULLETIN&amp;bmDocID=1199803.1))”&gt; [ID 1199803.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for Automatic Storage Management (ASM) &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocTitle=Master%20Note%20for%20Automatic%20Storage%20Management%20(ASM)&amp;viewingMode=1143&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocType=ANNOUNCEMENT&amp;bmDocID=1187723.1))”&gt; [ID 1187723.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note of Linux OS Requirements for Database Server &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=REFERENCE&amp;bmDocTitle=Master%20Note%20of%20Linux%20OS%20Requirements%20for%20Database%20Server&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=851598.1&amp;viewingMode=1143))”&gt; [ID 851598.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for Data Guard &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=BULLETIN&amp;bmDocTitle=Master%20Note%20for%20Data%20Guard&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=1101938.1&amp;viewingMode=1143))”&gt; [ID 1101938.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for Oracle Database Client Installation &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=BULLETIN&amp;bmDocTitle=Master%20Note%20For%20Oracle%20Database%20Client%20Installation&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=1157463.1&amp;viewingMode=1143))”&gt; [ID 1157463.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for the Oracle OLAP Option &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=REFERENCE&amp;bmDocTitle=Master%20Note%20for%20the%20Oracle%20OLAP%20Option&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=1107593.1&amp;viewingMode=1143))”&gt; [ID 1107593.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for Streams Performance Recommendations &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=BULLETIN&amp;bmDocTitle=Master%20Note%20for%20Streams%20Performance%20Recommendations&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=335516.1&amp;viewingMode=1143))”&gt; [ID 335516.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for Handling Oracle Database Corruption Issues &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=ANNOUNCEMENT&amp;bmDocTitle=Master%20Note%20for%20Handling%20Oracle%20Database%20Corruption%20Issues&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=1088018.1&amp;viewingMode=1143))”&gt; [ID 1088018.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for Transparent Data Encryption (TDE)&lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=BULLETIN&amp;bmDocTitle=Master%20Note%20For%20Transparent%20Data%20Encryption%20(%20TDE%20)&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=1228046.1&amp;viewingMode=1143))”&gt; [ID 1228046.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note: SQL Query Performance Overview &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=FAQ&amp;bmDocTitle=*%20Master%20Note:%20SQL%20Query%20Performance%20Overview&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=199083.1&amp;viewingMode=1143))”&gt; [ID 199083.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note: How to diagnose Database Performance - FAQ &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=FAQ&amp;bmDocTitle=Master%20Note:%20How%20to%20diagnose%20Database%20Performance%20-%20FAQ&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=402983.1&amp;viewingMode=1143))”&gt; [ID 402983.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for Query Rewrite &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=BULLETIN&amp;bmDocTitle=Master%20Note%20for%20Query%20Rewrite&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=1215173.1&amp;viewingMode=1143))”&gt; [ID 1215173.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for Oracle Flashback Technologies &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=ANNOUNCEMENT&amp;bmDocTitle=Master%20Note%20For%20Oracle%20Flashback%20Technologies&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=1138253.1&amp;viewingMode=1143))”&gt; [ID 1138253.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for Oracle Disk Manager  &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=ANNOUNCEMENT&amp;bmDocTitle=Master%20Note%20for%20Oracle%20Disk%20Manager&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=1226653.1&amp;viewingMode=1143))”&gt; [ID 1226653.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for Real Application Clusters (RAC) Oracle Clusterware and Oracle Grid Infrastructure &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=ANNOUNCEMENT&amp;bmDocTitle=Master%20Note%20for%20Real%20Application%20Clusters%20(RAC)%20Oracle%20Clusterware%20and%20Oracle%20Grid%20Infrastructure&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=1096952.1&amp;viewingMode=1143))”&gt; [ID 1096952.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note - RDBMS Large Objects (LOBs) &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=DIAGNOSTIC%20TOOLS&amp;bmDocTitle=Master%20Note%20-%20RDBMS%20Large%20Objects%20(LOBs)&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=1268771.1&amp;viewingMode=1143))”&gt; [ID 1268771.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for Oracle Database Server Installation &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=BULLETIN&amp;bmDocTitle=Master%20Note%20For%20Oracle%20Database%20Server%20Installation&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=1156586.1&amp;viewingMode=1143))”&gt; [ID 1156586.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for Oracle Database Downgrade &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=BULLETIN&amp;bmDocTitle=Master%20Note%20For%20Oracle%20Database%20Downgrade&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=1151427.1&amp;viewingMode=1143))”&gt; [ID 1151427.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for Oracle Recovery Manager (RMAN) &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=ANNOUNCEMENT&amp;bmDocTitle=Master%20Note%20For%20Oracle%20Recovery%20Manager%20(RMAN)&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=1116484.1&amp;viewingMode=1143))”&gt; [ID 1116484.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for OLTP Compression &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=BULLETIN&amp;bmDocTitle=Master%20Note%20for%20OLTP%20Compression&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=1223705.1&amp;viewingMode=1143))”&gt; [ID 1223705.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for Oracle Database Upgrades and Migrations &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=BULLETIN&amp;bmDocTitle=Master%20Note%20For%20Oracle%20Database%20Upgrades%20and%20Migrations&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=1152016.1&amp;viewingMode=1143))”&gt; [ID 1152016.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for Partitioning &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=BULLETIN&amp;bmDocTitle=Master%20Note%20for%20Partitioning&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=1312352.1&amp;viewingMode=1143))”&gt; [ID 1312352.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for 11g Diagnosability - ADR and Packaging &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=ANNOUNCEMENT&amp;bmDocTitle=Master%20Note%20for%2011g%20Diagnosability%20-%20ADR%20and%20Packaging&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=1283137.1&amp;viewingMode=1143))”&gt; [ID 1283137.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
Master Note for Oracle Database Machine and Exadata Storage Server &lt;a href=”https://support.oracle.com/CSP/ui/flash.html#tab=KBHome(page=KBHome&amp;id=()),(page=KBNavigator&amp;id=(bmDocType=ANNOUNCEMENT&amp;bmDocTitle=Master%20Note%20for%20Oracle%20Database%20Machine%20and%20Exadata%20Storage%20Server&amp;from=BOOKMARK&amp;bmDocDsrc=KB&amp;bmDocID=1187674.1&amp;viewingMode=1143))”&gt; [ID 1187674.1] &lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
Happy reading!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-1320796549269314754?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2011/07/master-notes-from-oracle-support.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-3810957462021730137</guid><pubDate>Tue, 21 Jun 2011 12:52:00 +0000</pubDate><atom:updated>2011-06-21T16:03:24.873+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">RMAN</category><category domain="http://www.blogger.com/atom/ns#">Block Corruption</category><title>Addressing Block corruption that is not part of any segment</title><description>Yesterday’s RMAN backup failed with ORA-19566 error reporting block corruption, here’s the error as reported by RMAN:
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
channel ORA_DISK_1: starting piece 1 at 20-JUN-11
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: =========================================================== 
RMAN-03009: failure of backup command on c1 channel at 20/06/2011 11:55:11
ORA-19566: exceeded limit of 0 corrupt blocks for file xxxxxxxxxx
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
The next logical step is to run DB Verify (dbv) utility to find out what blocks are corrupt. Dbv confirmed block corruption as shown below:
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
Corrupt block relative dba: 0x0346c3cf (file 113, block 229845)
Bad check value found during backing up datafile
Data in bad block -
type: 6 format: 2 rdba: 0x0346c3cf

:
:

DBVERIFY - Verification complete

Total Pages Marked Corrupt   : 1
Total Pages Influx           : 0
:
:
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;

Below are the OS and database details:
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
-bash-3.2$ cat /etc/*-release
Red Hat Enterprise Linux Server release 5.5 (Tikanga)
-bash-3.2$
-bash-3.2$ uname -r
2.6.18-194.el5
-bash-3.2$

SQL&gt; select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE    11.2.0.2.0      Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production

SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
Note that Block 229845 is corrupt in datafile 113. The next step in the process is to identify the object by querying DBA_EXTENTS view
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt; select segment_name, segment_type, owner
  2  from dba_extents
  3  where file_id = 113
  4  and 229845 between block_id and block_id + blocks -1;

no rows selected

SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;

Apparently, this block is not associated with any of the segments in the database. The next question to ask is where this corrupt block lies in the data file. Is it in between the allocated blocks after the HWM?

&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt; select max(block_id) from dba_extents where file_id = 113;

MAX(BLOCK_ID)
-------------
       182520

SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
So, the corrupt block is beyond the maximum allocated block. Think of the data file as shown below (blue=used data, white=empty blocks, red=corrupt block).

&lt;p&gt;&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-n3S__10Kv5M/TgCUis5V8wI/AAAAAAAAAO8/1IgpthzTjA4/s1600/Block_Corruption.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 122px;" src="http://2.bp.blogspot.com/-n3S__10Kv5M/TgCUis5V8wI/AAAAAAAAAO8/1IgpthzTjA4/s320/Block_Corruption.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5620655658846515970" /&gt;&lt;/a&gt;
&lt;p&gt;&lt;/p&gt;

The easiest solution is to shrink the datafile below the corrupt block, this way we drop the corrupt block off the datafile.



&lt;p&gt;&lt;/p&gt;
Identify the datafile size:
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt; select bytes/1024/1024 size_mb  from dba_data_files where file_id = 113;

   SIZE_MB
----------
      2048
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
Identify the location of the maximum block in the datafile by multiplying it with the blocksize (8K):
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt;  select max(BLOCK_ID) * 8/1024 size_mb from dba_extents where file_id = 113;

   SIZE_MB
----------
 1425.9375

SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
Also, find out the location of the corrupt block in the datafile:
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt; select 229845 * 8/1024 size_mb from dual;

   SIZE_MB
----------
1795.66406

SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
Resize the datafile beyond the maximum allocated data block and below the corrupt block:
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt; alter database datafile 113 resize 1450m;

Database altered.

SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
After resizing the datafile run DBV utility to check for corrupt blocks:

&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
DBVERIFY - Verification complete

Total Pages Examined         : 188160
Total Pages Processed (Data) : 62277
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 71630
Total Pages Failing   (Index): 0
Total Pages Processed (Lob)  : 9337
Total Pages Failing   (Lob)  : 0
Total Pages Processed (Other): 21867
Total Pages Processed (Seg)  : 0
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 23049
Total Pages Marked Corrupt   : 0
Total Pages Influx           : 0
Total Pages Encrypted        : 0
Highest block SCN            : 0 (0.0) 
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
There are no corrupt blocks in the datafile. Happy ending.  
&lt;p&gt;&lt;/p&gt;
But it wouldn’t have been this easy if the corrupt block were somewhere in between the allocated blocks. This solution will not be helpful in that case. Refer to following note from Oracle Support to address this issue:
&lt;p&gt;&lt;/p&gt;
How to Format Corrupted Block Not Part of Any Segment [ID 336133.1]


&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-3810957462021730137?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2011/06/block-corruption-that-is-not-part-of.html</link><author>noreply@blogger.com (Asif Momen)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-n3S__10Kv5M/TgCUis5V8wI/AAAAAAAAAO8/1IgpthzTjA4/s72-c/Block_Corruption.JPG" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-3845325431239046185</guid><pubDate>Tue, 31 May 2011 22:43:00 +0000</pubDate><atom:updated>2011-06-01T01:47:33.389+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Grid Infrastructure</category><category domain="http://www.blogger.com/atom/ns#">RAC</category><title>Grid Infrastructure Startup Issues</title><description>We have a two node RAC (Oracle 11gR2) configuration running on Linux environment. This is a test environment where lot of testing happens. The second node of the two node RAC configuration was down and it refused to start. The OHASD was up but CRS, CSS, and EVMD were offline. 
&lt;p&gt;&lt;/p&gt;
I started troubleshooting the issue in the following order: &lt;p&gt;&lt;/p&gt;
1) Reading the ohasd.log and found nothing worth interesting. &lt;p&gt;&lt;/p&gt;
2) No file permission issues on the disks were reported. &lt;p&gt;&lt;/p&gt;
3) Voting Disks are located in ASM and were also accessible to the second node. &lt;p&gt;&lt;/p&gt;
4) Moving ahead, following error was reported in the ocssd.log&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
2011-04-06 21:13:57.781: [    CSSD][1111677248]clssnmvDHBValidateNCopy: node 1, tptrac1, has a disk HB, but no network HB, DHB has rcfg 183608157, wrtcnt, 41779628, LATS 3108751988, lastSeqNo 41779625, uniqueness 1294698909, timestamp 1302104569/3108688378
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
The error message clearly says there is no network heart beat between the two nodes. Indeed, it failed when I tried to ping using the private IP address. On node1, “eth1” was messed up as shown below:
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt; 
[root@tptrac1 ~]# ifconfig eth1
eth1      Link encap:Ethernet  HWaddr F4:CE:46:84:F7:CA
          inet6 addr: fe80::f6ce:46ff:fe84:f7ca/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3244634 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6800251 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2828581056 (2.6 GiB)  TX bytes:1669807875 (1.5 GiB)
          Interrupt:162 Memory:f6000000-f6012800

[root@tptrac1 ~]#
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
I reassigned the private IP address as shown below:
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
ifconfig eth1 10.28.177.1 netmask 255.255.255.128 up
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
I was able to ping after setting the private IP address on Node1. It was now time to stop and start the cluster.
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
-bash-3.2$ ./crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
-bash-3.2$
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;
Well, the cluster happily came up without reporting any errors. 
&lt;p&gt;&lt;/p&gt;
I would have saved all the troubleshooting time if I had checked node reachability in the first place. Anyways, it was a good troubleshooting exercise and I also got something to share on my blog.
&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-3845325431239046185?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2011/06/grid-infrastructure-startup-issues.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-5602324047503437614</guid><pubDate>Wed, 06 Apr 2011 10:31:00 +0000</pubDate><atom:updated>2011-04-06T13:44:37.194+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Oracle VirtualBox</category><title>Errors when installing “Guest Additions” using Oracle VM Virtual Box &amp; Oracle Enterprise Linux</title><description>After upgrading Oracle VM VirtualBox from 3.x to 4.0.4, I created a new virtual machine and installed Oracle Enterprise Linux 5.2 (64-bit). While installing “Guest Additions” on the guest OS, I received the following error message:
&lt;p&gt;&lt;/p&gt;
***************************************************
&lt;p&gt;&lt;/p&gt;
Building the VirtualBox Guest Additions kernel modules&lt;p&gt;&lt;/p&gt;
The headers for the current running kernel were not found. If the following module compilation fails then this could be the reason. &lt;p&gt;&lt;/p&gt;
The missing package can be probably installed with&lt;p&gt;&lt;/p&gt;
yum install kernel-devel-2.6.18-92.el5      [FAILED] &lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
***************************************************
&lt;p&gt;&lt;/p&gt;
The error description message in the “/var/log/vboxadd-install.log” log file was pretty clear. One of the RPM’s was missing.
&lt;p&gt;&lt;/p&gt;
Below is my first (failed) attempt of “Guest Additions” installation:
&lt;p&gt;&lt;/p&gt;

&lt;pre name="code" class="sql"&gt;
 [root@rac1 u01]# ./VBoxLinuxAdditions.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 4.0.4 Guest Additions for Linux.........
VirtualBox Guest Additions installer
Removing installed version 4.0.4 of VirtualBox Guest Additions...
Removing existing VirtualBox DKMS kernel modules           [  OK  ]
Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules
The headers for the current running kernel were not found. If the following module compilation fails then this could be the reason.
The missing package can be probably installed with
yum install kernel-devel-2.6.18-92.el5
                                                           [FAILED]
Your system does not seem to be set up to build kernel modules.
Look at /var/log/vboxadd-install.log to find out what went wrong.
Once you have corrected it, you can run

  /etc/init.d/vboxadd setup

to build them.

Doing non-kernel setup of the Guest Additions              [  OK  ]
Installing the Window System drivers
Installing X.Org 7.1 modules                               [  OK  ]
Setting up the Window System to use the Guest Additions    [  OK  ]
You may need to restart the hal service and the Window System (or just restart
the guest system) to enable the Guest Additions.

Installing graphics libraries and desktop services componen[  OK  ]
[root@rac1 u01]# 
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

To get the thing working, we need to install the following RPM’s: &lt;p&gt;&lt;/p&gt;

• kernel-devel-2.6.18-92.el5.x86_64.rpm &lt;p&gt;&lt;/p&gt;
• kernel-headers-2.6.18-92.el5.x86_64.rpm&lt;p&gt;&lt;/p&gt;
• glibc-headers-2.5-24.x86_64.rpm &lt;p&gt;&lt;/p&gt;
• glibc-devel-2.5-24.x86_64.rpm &lt;p&gt;&lt;/p&gt;
• libgomp-4.1.2-42.el5.x86_64.rpm &lt;p&gt;&lt;/p&gt;
• gcc-4.1.2-42.el5.x86_64.rpm &lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
I had to install 6 packages as they are interdependent.
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
 [root@rac1 Server]# rpm -Uvh kernel-devel-2.6.18-92.el5.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:kernel-devel           ########################################### [100%]
[root@rac1 Server]# 
[root@rac1 Server]# 
[root@rac1 Server]# rpm -Uvh kernel-headers-2.6.18-92.el5.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:kernel-headers         ########################################### [100%]
[root@rac1 Server]# 
[root@rac1 Server]# 
[root@rac1 Server]# rpm -Uvh glibc-headers-2.5-24.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:glibc-headers          ########################################### [100%]
[root@rac1 Server]# 
[root@rac1 Server]# 
 [root@rac1 Server]# rpm -Uvh glibc-devel-2.5-24.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:glibc-devel            ########################################### [100%]
[root@rac1 Server]# 
[root@rac1 Server]# 
[root@rac1 Server]# rpm -Uvh libgomp-4.1.2-42.el5.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:libgomp                ########################################### [100%]
[root@rac1 Server]# 
[root@rac1 Server]# 
[root@rac1 Server]# rpm -Uvh gcc-4.1.2-42.el5.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:gcc                    ########################################### [100%]
[root@rac1 Server]# 
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
After installing the above packages, my “Guest Additions” installation was successful. 
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
[root@rac1 u01]# ./VBoxLinuxAdditions.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 4.0.4 Guest Additions for Linux.........
VirtualBox Guest Additions installer
Removing installed version 4.0.4 of VirtualBox Guest Additions...
Removing existing VirtualBox DKMS kernel modules           [  OK  ]
Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules
Your guest system does not seem to have sufficient OpenGL support to enable
accelerated 3D effects (this requires Linux 2.6.27 or later in the guest
system).  This Guest Additions feature will be disabled.


Building the main Guest Additions module                   [  OK  ]
Building the shared folder support module                  [  OK  ]
Doing non-kernel setup of the Guest Additions              [  OK  ]
Starting the VirtualBox Guest Additions                    [  OK  ]
Installing the Window System drivers
Installing X.Org 7.1 modules                               [  OK  ]
Setting up the Window System to use the Guest Additions    [  OK  ]
You may need to restart the hal service and the Window System (or just restart
the guest system) to enable the Guest Additions.

Installing graphics libraries and desktop services componen[  OK  ]
[root@rac1 u01]# 
[root@rac1 u01]# 
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
I can now move the mouse freely between the host &amp; guest OS’s, copy &amp; paste, …
&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-5602324047503437614?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2011/04/errors-when-installing-guest-additions.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-5871236884475552890</guid><pubDate>Sun, 27 Mar 2011 11:24:00 +0000</pubDate><atom:updated>2011-03-27T14:32:08.091+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Oracle VirtualBox</category><category domain="http://www.blogger.com/atom/ns#">Upgrade</category><title>Oracle VM VirtualBox Upgrade - Version 4.0.4</title><description>I have been running on Oracle VM VirtualBox 3.x for quite sometime. I use to ignore the upgrade dialog box and kept saying to myself that I will upgrade next time. Finally, I made my mind to upgrade to the latest and the greatest version “4.0.4”. The upgrade was pretty straight forward. 
&lt;p&gt;&lt;/p&gt;
When I tried to start one of the Virtual Machines, I was greeted with the following error:

&lt;p&gt;&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-k4NdzyO9q6M/TY8fOV-CatI/AAAAAAAAAN8/9XplHuaSiXc/s1600/Oracle_VM_Error.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 212px;" src="http://1.bp.blogspot.com/-k4NdzyO9q6M/TY8fOV-CatI/AAAAAAAAAN8/9XplHuaSiXc/s320/Oracle_VM_Error.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5588719993866054354" /&gt;&lt;/a&gt;

&lt;p&gt;&lt;/p&gt;

I blamed myself for upgrading the stuff but the error message was quite straight forward. I was asked to install “Oracle VM VirtualBox Extension Pack”. You can download it from &lt;a href=”http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html#extpack”&gt;here&lt;/a&gt;.
&lt;p&gt;&lt;/p&gt;
When you try to install a Warning pops up as shown below. Click on the “Install” button and you are done.
&lt;p&gt;&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-TKSNPa_riyk/TY8fOpwzzxI/AAAAAAAAAOE/C8lvqogWHEU/s1600/Oracle_VM_Warning.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 212px;" src="http://3.bp.blogspot.com/-TKSNPa_riyk/TY8fOpwzzxI/AAAAAAAAAOE/C8lvqogWHEU/s320/Oracle_VM_Warning.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5588719999179280146" /&gt;&lt;/a&gt;

&lt;p&gt;&lt;/p&gt;
The next message that pops up is the success of extension pack installation. 

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-za6vNUJmXlE/TY8fO3AdsfI/AAAAAAAAAOM/9lM0hBZiMWg/s1600/Oracle_VM_Success.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 281px; height: 137px;" src="http://2.bp.blogspot.com/-za6vNUJmXlE/TY8fO3AdsfI/AAAAAAAAAOM/9lM0hBZiMWg/s320/Oracle_VM_Success.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5588720002734600690" /&gt;&lt;/a&gt;

&lt;p&gt;&lt;/p&gt;
I can now start all my VM’s. ;)

&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-5871236884475552890?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2011/03/oracle-vm-virtualbox-upgrade-version.html</link><author>noreply@blogger.com (Asif Momen)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-k4NdzyO9q6M/TY8fOV-CatI/AAAAAAAAAN8/9XplHuaSiXc/s72-c/Oracle_VM_Error.JPG" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-3669352011433418427</guid><pubDate>Wed, 16 Mar 2011 08:51:00 +0000</pubDate><atom:updated>2011-03-16T19:07:40.648+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQL Functions</category><category domain="http://www.blogger.com/atom/ns#">Oracle 11g R2</category><title>Transpose Rows to Columns</title><description>In the old Oracle 8i days, transposing rows to columns was not straight forward. As Oracle Developer (working on Oracle Developer 2000), I remember writing a query using MAX and DECODE functions to transpose rows into columns for my previous employer. My efforts were applauded as this query replaced the old database stored procedure (function). Thanks to Tom Kyte for his wonderful asktom.oracle.com site. 
&lt;p&gt;&lt;/p&gt;
Here’s a sample function which was then in use:
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt; create or replace function test_func(p_deptno in emp.deptno%type)
  2    return varchar2 is
  3    cursor emp_cur is
  4       select deptno, ename
  5         from emp
  6        where deptno = nvl(p_deptno, deptno)
  7        order by ename;
  8    l_ename varchar2(500);
  9  begin
 10    for emp_rec in emp_cur loop
 11      l_ename := l_ename ||','|| emp_rec.ename;
 12    end loop;
 13    return(substr(l_ename, 2));
 14  end;
 15  /

Function created.

SQL&gt;
SQL&gt; column new_col format a50
SQL&gt;
SQL&gt;
SQL&gt; select test_func(10) new_col from dual;

NEW_COL
--------------------------------------------------
CLARK,KING,MILLER

SQL&gt; select test_func(20) new_col from dual;

NEW_COL
--------------------------------------------------
ADAMS,FORD,JONES,SCOTT,SMITH

SQL&gt; select test_func(30) new_col from dual;

NEW_COL
--------------------------------------------------
ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD

SQL&gt;
SQL&gt; select deptno, test_func(deptno) new_col
  2    from (select distinct deptno from emp)
  3    order by deptno;

    DEPTNO NEW_COL
---------- -----------------------------------------
        10 CLARK,KING,MILLER
        20 ADAMS,FORD,JONES,SCOTT,SMITH
        30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD

SQL&gt;
SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
I stumbled upon Analytic Functions that were introduced with Oracle 8i and came up with the following query:
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt; select deptno, rtrim(new_col, ',') new_col
  2    from (select deptno,
  3                 max(decode ( rn , 1, ename || ',')) ||
  4                 max(decode ( rn , 2, ename || ',')) ||
  5                 max(decode ( rn , 3, ename || ',')) ||
  6                 max(decode ( rn , 4, ename || ',')) ||
  7                 max(decode ( rn , 5, ename || ',')) ||
  8                 max(decode ( rn , 6, ename )) new_col
  9            from (select ename, deptno,
 10                         row_number() over ( partition by deptno
 11                                             order by rownum) rn
 12                    from emp)
 13            group by deptno)
 14  order by deptno;

    DEPTNO NEW_COL
---------- --------------------------------------------------
        10 CLARK,KING,MILLER
        20 SMITH,JONES,SCOTT,ADAMS,FORD
        30 ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES

SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
The major drawback of the above query is the limitation of number of values it can display for the ENAME column. If a new employee joins department number “30” then this query has to be modified.
This query was well suited for the environment where it was written as the number of values was known and were limited.
&lt;p&gt;&lt;/p&gt;

Then came Oracle 9i introducing &lt;a href=”http://download.oracle.com/docs/cd/B10501_01/server.920/a96540/functions121a.htm#SQLRF06116“&gt;SYS_CONNECT_BY_PATH&lt;/a&gt; function. The above limitations are overcome using this new function. It is capable of transposing “n” number of rows into columns. The same query can now be rewritten as: 
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt;
SQL&gt; select deptno,
  2         max(substr(sys_connect_by_path (ename, ','),2)) new_col
  3   from (select deptno, ename,
  4                row_number() over (partition by deptno
  5                                    order by ename) rno
  6          from emp)
  7  start with rno = 1
  8  connect by rno = prior rno + 1
  9      and prior deptno = deptno
 10  group by deptno
 11  order by deptno;

    DEPTNO NEW_COL
---------- --------------------------------------------------
        10 CLARK,KING,MILLER
        20 ADAMS,FORD,JONES,SCOTT,SMITH
        30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD

SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
Well, so far so good. But Oracle 11g introduced &lt;a href=”http://download.oracle.com/docs/cd/E14072_01/server.112/e10592/functions087.htm“&gt;LISTAGG&lt;/a&gt; function. This function makes life very easy. The query looks very simple, no hierarchies, no connect by ….
&lt;p&gt;&lt;/p&gt;
Here’s the new query: 
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt; 
SQL&gt; select deptno,
  2         listagg(ename, ',') within group 
  3            (order by ename) new_col
  4    from emp
  5  group by deptno
  6  order by deptno;

    DEPTNO NEW_COL
---------- --------------------------------------------------
        10 CLARK,KING,MILLER
        20 ADAMS,FORD,JONES,SCOTT,SMITH
        30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD

SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;

Isn’t it simple? Over the years Oracle has introduced tons of new features (like the one discussed here) that make life simple and at the same time making the code more performant.  
&lt;p&gt;&lt;/p&gt;

The question is "are we really using these features efficiently?"

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-3669352011433418427?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2011/03/transpose-rows-to-columns.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-2333992060341725446</guid><pubDate>Fri, 11 Mar 2011 22:01:00 +0000</pubDate><atom:updated>2011-03-12T01:11:06.373+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tsunami</category><title>Tsunami in Japan</title><description>A massive tsunami triggered by one of the largest earthquakes smashed into Japan, killing hundreds of people. It swept away boats, cars and homes. 
&lt;p&gt;&lt;/p&gt;

My heartfelt condolences to the people who have suffered or lost their near and dear ones in the disaster.
&lt;p&gt;&lt;/p&gt;
Extend your help to the Tsunami victims &lt;a href="http://www.stltoday.com/news/national/article_58b569e6-4c28-11e0-a279-0017a4a78c22.html"&gt;here&lt;/a&gt;. 
&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-2333992060341725446?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2011/03/tsunami-in-japan.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-3042062500531349360</guid><pubDate>Tue, 08 Mar 2011 10:18:00 +0000</pubDate><atom:updated>2011-03-08T13:23:00.249+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Redo Log Files</category><category domain="http://www.blogger.com/atom/ns#">Database</category><category domain="http://www.blogger.com/atom/ns#">Performance Tuning</category><title>Massive Deletes Vs Truncating Partitions</title><description>&lt;p&gt;&lt;/p&gt;
This is not a revolutionary post, everything I discuss here has been discussed numerous times. Massive deletes are nothing new in a DBA’s life. They were there, they are there and they will continue to be there. From time to time DBA’s fall prey to the bad application design. My &lt;a href="http://momendba.blogspot.com/2011/02/redo-log-switches-at-their-peak.html"&gt;last post&lt;/a&gt; was about heavy redo log switches and this post is a continuation. 

&lt;p&gt;&lt;/p&gt;
The application was performing massive DELETE operations resulting in excessive redo being generated. This in turn was responsible for too many redo log switches and severely affecting database performance. It was possible that the same DELETE statement on a non-partitioned table could be translated into a “ALTER TABLE … TRUNCATE PARTITION” statement by partitioning the same table. 
&lt;p&gt;&lt;/p&gt;
In this post, I will demonstrate how one can achieve extreme performance by employing right techniques for the right job. 
&lt;p&gt;&lt;/p&gt;
For this demo, I will create a test table “T” (without any indexes) with a single column. Populate the table with 2 Million records and then DELETE 1 Million records. Before and after the delete we will make a note of the redo generated. 
&lt;p&gt;&lt;/p&gt;
Here we go:
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt; drop table t purge;

Table dropped.

SQL&gt;
SQL&gt; create table t (id number) tablespace test_ts;

Table created.

SQL&gt;
SQL&gt; insert into t select level from dual connect by level &lt;=2000000;

2000000 rows created.

SQL&gt;
SQL&gt; commit;

Commit complete.

SQL&gt;
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;
Before we delete, let’s make a note of redo generated by our session:
&lt;p&gt;&lt;/p&gt;

&lt;pre name="code" class="sql"&gt;
SQL&gt; column name format a20
SQL&gt; select sn.name, round(ms.value/1024/1024, 2) redo_in_mb
  2    from v$statname sn,
  3         v$mystat ms
  4   where sn.statistic# = ms.statistic#
  5     and sn.name = 'redo size';

NAME                 REDO_IN_MB
-------------------- ----------
redo size                30.93

SQL&gt;

&lt;p&gt;&lt;/p&gt;
&lt;/pre&gt;

Now perform the massive DELETE operation:
&lt;p&gt;&lt;/p&gt;

&lt;pre name="code" class="sql"&gt;
SQL&gt;
SQL&gt; set timing on
SQL&gt; delete from t where id &lt;= 1000000;

1000000 rows deleted.

Elapsed: 00:02:12.87
SQL&gt; set timing off
SQL&gt;
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;
Make a note of redo generated by the DELETE statement:
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;

SQL&gt; select sn.name, round(ms.value/1024/1024, 2) redo_in_mb
  2    from v$statname sn,
  3         v$mystat ms
  4   where sn.statistic# = ms.statistic#
  5     and sn.name = 'redo size';

NAME                 REDO_IN_MB
-------------------- ----------
redo size                257.41

SQL&gt;
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;
So, the DELETE statement generated 226.48 MB (257.41 – 30.93) of redo and it took over 2 minutes to clock time.
&lt;p&gt;&lt;/p&gt;

Now, let us improvise the purge strategy but partitioning the table. I range partition the table into six partitions as shown:
&lt;p&gt;&lt;/p&gt;

&lt;pre name="code" class="sql"&gt;
SQL&gt; drop table t purge;

Table dropped.

SQL&gt; create table t (id number)  tablespace test_ts
  2  partition by range (id) (
  3  partition p1 values less than (500000),
  4  partition p2 values less than (1000000),
  5  partition p3 values less than (1500000),
  6  partition p4 values less than (2000000),
  7  partition p5 values less than (2500000),
  8  partition p6 values less than (MAXVALUE)
  9  );

Table created.

SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
Now run the same INSERT statement against the partitioned table:
&lt;p&gt;&lt;/p&gt;

&lt;pre name="code" class="sql"&gt;
SQL&gt; insert into t select level from dual connect by level &lt;=2000000;

2000000 rows created.

SQL&gt;
SQL&gt; commit;

Commit complete.

SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
Make a note of redo before and after executing the purge command:
&lt;p&gt;&lt;/p&gt;

&lt;pre name="code" class="sql"&gt;
SQL&gt;
SQL&gt; select sn.name, round(ms.value/1024/1024, 2) redo_in_mb
  2    from v$statname sn,
  3         v$mystat ms
  4   where sn.statistic# = ms.statistic#
  5     and sn.name = 'redo size';

NAME                 REDO_IN_MB
-------------------- ----------
redo size                288.53

SQL&gt;
SQL&gt; set timing on
SQL&gt; alter table t truncate partition p1;

Table truncated.

Elapsed: 00:00:00.62
SQL&gt; alter table t truncate partition p2;

Table truncated.

Elapsed: 00:00:00.29
SQL&gt; set timing off
SQL&gt;
SQL&gt; select sn.name, round(ms.value/1024/1024, 2) redo_in_mb
  2    from v$statname sn,
  3         v$mystat ms
  4   where sn.statistic# = ms.statistic#
  5     and sn.name = 'redo size';

NAME                 REDO_IN_MB
-------------------- ----------
redo size                288.64

SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
Purging of two partitions consumed less than a second and generated only 0.11 MB of redo. 
&lt;p&gt;&lt;/p&gt;
In some situations it may be possible that the redo logs were sized inadequately but in this case it was the application’s bad design responsible for massive redo log generation. 
&lt;p&gt;&lt;/p&gt;
What happens when you have additional columns and indexes associated with the table? You could take that as a further exercise.
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-3042062500531349360?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2011/03/massive-deletes-vs-truncating.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-666996102512458843</guid><pubDate>Sun, 20 Feb 2011 17:39:00 +0000</pubDate><atom:updated>2011-03-15T13:07:18.470+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Redo Log Files</category><title>Redo Log Switches at their Peak</title><description>One of our customers was having extreme performance issues with their Oracle database. During my investigations I found they had 215 redo log switches per hour. This means a 3.65 log switches per minute or a redo log switch every 16.7 seconds. 
&lt;p&gt;&lt;/p&gt;
Although this was not the only reason of performance issues but this was certainly one of the causes. The redo log files were sized pretty small and the poor database was spending most of its time switch the redo log files.  
&lt;p&gt;&lt;/p&gt;

Here’s a screenshot for you guys:
&lt;p&gt;&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-T8sn5y2pB64/TWFVKytehEI/AAAAAAAAAN0/l4tOfe_DWEY/s1600/switches_per_day.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 200px;" src="http://1.bp.blogspot.com/-T8sn5y2pB64/TWFVKytehEI/AAAAAAAAAN0/l4tOfe_DWEY/s320/switches_per_day.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5575831457560953922" /&gt;&lt;/a&gt;


Below is the query I use to find redo log switches. This query lists redo log switches per hour for the last seven days.
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
column day format a10
column Switches_per_day format 9999
column 00 format 999
column 01 format 999
column 02 format 999
column 03 format 999
column 04 format 999
column 05 format 999
column 06 format 999
column 07 format 999
column 08 format 999
column 09 format 999
column 10 format 999
column 11 format 999
column 12 format 999
column 13 format 999
column 14 format 999
column 15 format 999
column 16 format 999
column 17 format 999
column 18 format 999
column 19 format 999
column 20 format 999
column 21 format 999
column 22 format 999
column 23 format 999

select to_char(first_time,'DD-MON') day,
sum(decode(to_char(first_time,'hh24'),'00',1,0)) "00",
sum(decode(to_char(first_time,'hh24'),'01',1,0)) "01",
sum(decode(to_char(first_time,'hh24'),'02',1,0)) "02",
sum(decode(to_char(first_time,'hh24'),'03',1,0)) "03",
sum(decode(to_char(first_time,'hh24'),'04',1,0)) "04",
sum(decode(to_char(first_time,'hh24'),'05',1,0)) "05",
sum(decode(to_char(first_time,'hh24'),'06',1,0)) "06",
sum(decode(to_char(first_time,'hh24'),'07',1,0)) "07",
sum(decode(to_char(first_time,'hh24'),'08',1,0)) "08",
sum(decode(to_char(first_time,'hh24'),'09',1,0)) "09",
sum(decode(to_char(first_time,'hh24'),'10',1,0)) "10",
sum(decode(to_char(first_time,'hh24'),'11',1,0)) "11",
sum(decode(to_char(first_time,'hh24'),'12',1,0)) "12",
sum(decode(to_char(first_time,'hh24'),'13',1,0)) "13",
sum(decode(to_char(first_time,'hh24'),'14',1,0)) "14",
sum(decode(to_char(first_time,'hh24'),'15',1,0)) "15",
sum(decode(to_char(first_time,'hh24'),'16',1,0)) "16",
sum(decode(to_char(first_time,'hh24'),'17',1,0)) "17",
sum(decode(to_char(first_time,'hh24'),'18',1,0)) "18",
sum(decode(to_char(first_time,'hh24'),'19',1,0)) "19",
sum(decode(to_char(first_time,'hh24'),'20',1,0)) "20",
sum(decode(to_char(first_time,'hh24'),'21',1,0)) "21",
sum(decode(to_char(first_time,'hh24'),'22',1,0)) "22",
sum(decode(to_char(first_time,'hh24'),'23',1,0)) "23",
count(to_char(first_time,'MM-DD')) Switches_per_day
from v$log_history
where trunc(first_time) between trunc(sysdate) - 6 and trunc(sysdate)
group by to_char(first_time,'DD-MON') 
order by to_char(first_time,'DD-MON') ;
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;
&lt;span style="font-weight:bold;"&gt;Updated:&lt;/span&gt;

The redo log files were sized at 25 MB. To relieve the database from this pain, I increased the size of the redo log files to 1 GB each.

&lt;p&gt;&lt;/p&gt;
&lt;span style="font-weight:bold;"&gt;Updated-2:&lt;/span&gt;

&lt;a href="http://momendba.blogspot.com/2011/03/massive-deletes-vs-truncating.html"&gt;Here&lt;/a&gt; is the post related to this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-666996102512458843?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2011/02/redo-log-switches-at-their-peak.html</link><author>noreply@blogger.com (Asif Momen)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-T8sn5y2pB64/TWFVKytehEI/AAAAAAAAAN0/l4tOfe_DWEY/s72-c/switches_per_day.JPG" height="72" width="72" /><thr:total>6</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-7500836759573855984</guid><pubDate>Wed, 09 Feb 2011 18:59:00 +0000</pubDate><atom:updated>2011-02-09T22:19:00.734+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Database Concepts</category><category domain="http://www.blogger.com/atom/ns#">Database</category><title>Shared SQL and Cursors</title><description>Recently I had a discussion on “Shared SQLs and Cursors” with one of my colleagues and during the discussion it came out that “shared SQL” and “cursors” are misunderstood. I thought of blogging on this topic to help those who still misunderstand these topics. 
&lt;p&gt;&lt;/p&gt;
As per his understanding “Shared SQL” and “Cursors” are the same and shared among all user sessions. But in fact:
&lt;p&gt;&lt;/p&gt;
Shared SQL is the SQL residing in the shared pool. This SQL statement can be shared among all the database sessions. The shared SQL is at the database level, all sessions can see and use them.
&lt;p&gt;&lt;/p&gt;
A Cursor points to some shared SQL residing in the shared pool. You may have more than one cursor pointing to the same shared SQL. A cursor is at the session level. So, many database sessions may point to the same shared SQL. 
&lt;p&gt;&lt;/p&gt;
The below diagram should help understand this concept:
&lt;p&gt;&lt;/p&gt;
&lt;a href="http://3.bp.blogspot.com/_gZsupYKwzXg/TVLoWKa6SRI/AAAAAAAAANs/ZFIXXKTgRNk/s1600/SGA.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 198px;" src="http://3.bp.blogspot.com/_gZsupYKwzXg/TVLoWKa6SRI/AAAAAAAAANs/ZFIXXKTgRNk/s320/SGA.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5571771156462717202" /&gt;&lt;/a&gt;

&lt;p&gt;&lt;/p&gt;
Below is a demonstration of the same. I have four database connections, one as “SYS” user and other three connected as user “TEST”. I make a note of SIDs of each database connection as user “TEST”. My session ids are listed below:
&lt;p&gt;&lt;/p&gt;



“TEST” User      ---------&gt;  SID&lt;p&gt;&lt;/p&gt;
TEST Session – 1 ---------&gt;  30&lt;p&gt;&lt;/p&gt;
TEST Session – 2 ---------&gt;  27&lt;p&gt;&lt;/p&gt;
TEST Session – 3 ---------&gt;  26&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

I shall be using table “T1” for this test which is residing in “TEST” schema.
&lt;p&gt;&lt;/p&gt;

&lt;pre name="code" class="sql"&gt;
SQL&gt; desc t1
 Name             Null?    Type
 ---------------- -------- -------------
 ID               NOT NULL NUMBER
 NAME             NOT NULL VARCHAR2(30)

SQL&gt;
&lt;/pre&gt;

Below is the query that will help us with our experiment. Make sure that you use the same query in all the sessions. For simplicity you could save this query in a file.

&lt;pre name="code" class="sql"&gt;
select /*momen*/ * from t1 where id = 1;
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;strong&gt;Session – SYS:&lt;/strong&gt;
&lt;p&gt;&lt;/p&gt;

As user SYS, flush the shared pool and query V$SQL and V$OPEN_CURSOR views for our query:
&lt;p&gt;&lt;/p&gt;

&lt;pre name="code" class="sql"&gt;
SQL&gt; alter system flush shared_pool;

System altered.

SQL&gt; select parse_calls, executions, invalidations, loads, sql_id, substr(sql_text, 1, 20) from v$sql where sql_text like '%momen%';

PARSE_CALLS EXECUTIONS INVALIDATIONS      LOADS SQL_ID        SUBSTR(SQL_TEXT,1,20
----------- ---------- ------------- ---------- ------------- --------------------
          1          1             0          1 fnndahay4xbgv select parse_calls,

SQL&gt;
SQL&gt; select sid, sql_id, sql_text from v$open_cursor where user_name='TEST' and sql_text like '%momen%';

no rows selected

SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;

Rightly, this query is not found in the shared pool.
&lt;p&gt;&lt;/p&gt;
&lt;strong&gt;TEST Session – 1:&lt;/strong&gt;
&lt;p&gt;&lt;/p&gt;
Execute the query in session – 1 
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt; select /*momen*/ * from t1 where id = 1;

        ID NAME
---------- ------------------------------
         1 ICOL$a

SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;

&lt;strong&gt;Session – SYS:&lt;/strong&gt;
&lt;p&gt;&lt;/p&gt;
As the user SYS again query the V$SQL and V$OPEN_CURSOR view for our query.
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt; select parse_calls, executions, invalidations, loads, sql_id, substr(sql_text, 1, 20) from v$sql where sql_text like '%momen%';

PARSE_CALLS EXECUTIONS INVALIDATIONS      LOADS SQL_ID        SUBSTR(SQL_TEXT,1,20
----------- ---------- ------------- ---------- ------------- --------------------
          1          1             0          1 fvnwsdghq898n select /*momen*/ * f
          2          2             0          1 fnndahay4xbgv select parse_calls,
          1          1             0          1 6wcgj9dxb3yvx select sid, sql_id,

SQL&gt;
SQL&gt; select sid, sql_id, sql_text from v$open_cursor where user_name='TEST' and sql_text like '%momen%';

       SID SQL_ID        SQL_TEXT
---------- ------------- ------------------------------------------------------------
        30 fvnwsdghq898n select /*momen*/ * from t1 where id = 1

SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;

Our query now appears in both V$SQL &amp; V$OPEN_CURSOR views. There’s one cursor now pointing to the shared SQL residing in the shared pool.
&lt;p&gt;&lt;/p&gt;
&lt;strong&gt;TEST Session – 2:&lt;/strong&gt;
&lt;p&gt;&lt;/p&gt;
Now run the same query in another session.
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt; select /*momen*/ * from t1 where id = 1;

        ID NAME
---------- ------------------------------
         1 ICOL$a

SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;

&lt;strong&gt;Session – SYS:&lt;/strong&gt;
&lt;p&gt;&lt;/p&gt;
Go back to the SQL*Plus session connection as user SYS and execute the same set of queries against V$SQL &amp; V$OPEN_CURSOR.
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
 SQL&gt; select parse_calls, executions, invalidations, loads, sql_id, substr(sql_text, 1, 20) from v$sql where sql_text like '%momen%';

PARSE_CALLS EXECUTIONS INVALIDATIONS      LOADS SQL_ID        SUBSTR(SQL_TEXT,1,20
----------- ---------- ------------- ---------- ------------- --------------------
          2          2             0          1 fvnwsdghq898n select /*momen*/ * f
          3          3             0          1 fnndahay4xbgv select parse_calls,
          2          2             0          1 6wcgj9dxb3yvx select sid, sql_id,

SQL&gt;
SQL&gt; select sid, sql_id, sql_text from v$open_cursor where user_name='TEST' and sql_text like '%momen%';

       SID SQL_ID        SQL_TEXT
---------- ------------- ------------------------------------------------------------
        30 fvnwsdghq898n select /*momen*/ * from t1 where id = 1
        27 fvnwsdghq898n select /*momen*/ * from t1 where id = 1

SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;

As seen above, we now have two cursors pointing to the same shared SQL.
&lt;p&gt;&lt;/p&gt;
&lt;strong&gt;TEST Session – 3:&lt;/strong&gt;
&lt;p&gt;&lt;/p&gt;
You may stop here or proceed to see how one more cursor is created to point to the same shared SQL in the shared pool.
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt; select /*momen*/ * from t1 where id = 1;

        ID NAME
---------- ------------------------------
         1 ICOL$a

SQL&gt;
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;
&lt;strong&gt;Session – SYS:&lt;/strong&gt;
&lt;p&gt;&lt;/p&gt;

&lt;pre name="code" class="sql"&gt;
SQL&gt; select parse_calls, executions, invalidations, loads, sql_id, substr(sql_text, 1, 20) from v$sql where sql_text like '%momen%';

PARSE_CALLS EXECUTIONS INVALIDATIONS      LOADS SQL_ID        SUBSTR(SQL_TEXT,1,20
----------- ---------- ------------- ---------- ------------- --------------------
          3          3             0          1 fvnwsdghq898n select /*momen*/ * f
          4          4             0          1 fnndahay4xbgv select parse_calls,
          3          3             0          1 6wcgj9dxb3yvx select sid, sql_id,

SQL&gt;
SQL&gt; select sid, sql_id, sql_text from v$open_cursor where user_name='TEST' and sql_text like '%momen%';

       SID SQL_ID        SQL_TEXT
---------- ------------- ------------------------------------------------------------
        30 fvnwsdghq898n select /*momen*/ * from t1 where id = 1
        27 fvnwsdghq898n select /*momen*/ * from t1 where id = 1
        26 fvnwsdghq898n select /*momen*/ * from t1 where id = 1

SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
We now have three cursors pointing to the same shared SQL. 
&lt;p&gt;&lt;/p&gt;
So, a cursor and shared SQL are two different things. The same shared SQL can have more than one cursor pointing to it.
&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-7500836759573855984?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2011/02/shared-sql-and-cursors.html</link><author>noreply@blogger.com (Asif Momen)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_gZsupYKwzXg/TVLoWKa6SRI/AAAAAAAAANs/ZFIXXKTgRNk/s72-c/SGA.JPG" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-658156500130969686</guid><pubDate>Mon, 31 Jan 2011 20:06:00 +0000</pubDate><atom:updated>2011-01-31T23:28:40.892+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Database</category><title>Import Table Statistics to Another Table</title><description>It’s been a   long time since I posted on my blog. This post is in response to the question that I received through email:
&lt;p&gt;&lt;/p&gt;
&lt;&lt;
&lt;p&gt;&lt;/p&gt;
Just like to know if I can use dbms_stats.import_table_stats to import table statistics to another table? &lt;p&gt;&lt;/p&gt;
I am wondering if I can import table statistics from T1 to T2 using dbms_stats package?.
&lt;p&gt;&lt;/p&gt;
&gt;&gt;
&lt;p&gt;&lt;/p&gt;
The simple answer to the above question is “NO”. You cannot copy statistics to a different table even if they are identical. However, there are two ways of achieving this: &lt;p&gt;&lt;/p&gt;

1) Temporarily rename the destination table (T_IDENTICAL) as original table (T) and import statistics or &lt;/p&gt;&lt;/p&gt;
2) Break into the statistics table.
&lt;p&gt;&lt;/p&gt;
Option -1 is pretty straight forward so we will not discuss that. Let’s see how to break into statistics table.  
&lt;p&gt;&lt;/p&gt;
Let us create the two tables: source table “T” and the destination table “T_IDENTICAL”. I am creating both these tables in the same schema, so as to avoid exporting and importing of statistics table.
&lt;p&gt;&lt;/p&gt;

&lt;pre name="code" class="sql"&gt;
SQL&gt;
SQL&gt; drop table t purge;

Table dropped.

SQL&gt; drop table t_identical purge;

Table dropped.

SQL&gt;
SQL&gt; create table t as select rownum id, object_name name from all_objects where rownum &lt; 1001;

Table created.

SQL&gt;
SQL&gt; create table t_identical as select * from t where 1=2;

Table created.

SQL&gt;
SQL&gt;
&lt;/pre&gt;

Collect statistics for the source table (T)
&lt;pre name="code" class="sql"&gt;
SQL&gt;
SQL&gt; exec dbms_stats.gather_table_stats(user, 't');
PL/SQL procedure successfully completed.
SQL&gt;
SQL&gt; select table_name, num_rows from user_tables where table_name in ('T', 'T_IDENTICAL');
TABLE_NAME                       NUM_ROWS
------------------------------ ----------
T                                    1000
T_IDENTICAL
SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
Create a statistics table (“MY_STATS_TAB”) and export statistics of the source table “T”.
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt;
SQL&gt; exec dbms_stats.create_stat_table('TEST','MY_STATS_TAB');
PL/SQL procedure successfully completed.
SQL&gt; exec dbms_stats.export_table_stats('TEST','T',NULL,'MY_STATS_TAB');
PL/SQL procedure successfully completed.
SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
Now let us try to import statistics to the destination table (T_IDENTICAL):
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt; exec dbms_stats.import_table_stats('TEST','T_IDENTICAL', null, 'MY_STATS_TAB');
PL/SQL procedure successfully completed.
SQL&gt;
SQL&gt;
SQL&gt; select table_name, num_rows from user_tables where table_name in ('T', 'T_IDENTICAL');
TABLE_NAME                       NUM_ROWS
------------------------------ ----------
T                                    1000
T_IDENTICAL
SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
No affect.  
&lt;p&gt;&lt;/p&gt;
Oracle simply ignored my request without reporting any errors. 
&lt;p&gt;&lt;/p&gt;
As we have source table statistics in a safe place, let us delete statistics from the source table and import them back from the container table. (This step ensures stats import is working as expected)
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt; exec dbms_stats.delete_table_stats(user, 'T');

PL/SQL procedure successfully completed.

SQL&gt; select table_name, num_rows from user_tables where table_name in ('T', 'T_IDENTICAL');

TABLE_NAME                       NUM_ROWS
------------------------------ ----------
T
T_IDENTICAL

SQL&gt;

SQL&gt;
SQL&gt; exec dbms_stats.import_table_stats('TRADE','T', null, 'MY_STATS_TAB');

PL/SQL procedure successfully completed.

SQL&gt; select table_name, num_rows from user_tables where table_name in ('T', 'T_IDENTICAL');

TABLE_NAME                       NUM_ROWS
------------------------------ ----------
T                                    1000
T_IDENTICAL

SQL&gt;
SQL&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
As you can see, import works only when the source and destination tables are same. 
&lt;p&gt;&lt;/p&gt;

Let us see what’s there in the MY_STATS_TABLE:
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt;
SQL&gt; select count(*) from my_stats_tab;

  COUNT(*)
----------
         3

SQL&gt;
SQL&gt;
SQL&gt; select c1, c5 from my_stats_tab;

C1                             C5
------------------------------ ------------------
T                              TRADE
T                              TRADE
T                              TRADE

SQL&gt;
SQL&gt;
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;
Columns “C5” and “C1” of the statistics table represent schema owner and table name respectively. Let us update the table name from “T” to “T_IDENTICAL”.
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt; update my_stats_tab set c1 = 'T_IDENTICAL';

3 rows updated.

SQL&gt; commit;

Commit complete.

SQL&gt;
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;
Now import the table statistics for “T_IDENTICAL” table
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;
SQL&gt; select table_name, num_rows from user_tables where table_name in ('T', 'T_IDENTICAL');

TABLE_NAME                       NUM_ROWS
------------------------------ ----------
T                                    1000
T_IDENTICAL

SQL&gt;
SQL&gt; exec dbms_stats.import_table_stats('TRADE','T_IDENTICAL', null, 'MY_STATS_TAB');

PL/SQL procedure successfully completed.

SQL&gt; select table_name, num_rows from user_tables where table_name in ('T', 'T_IDENTICAL');

TABLE_NAME                       NUM_ROWS
------------------------------ ----------
T                                    1000
T_IDENTICAL                          1000

SQL&gt;
SQL&gt;
&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;
There you go. We were able to successfully move statistics to another table by hacking into the statistics table. 
&lt;p&gt;&lt;/p&gt;
Hope you enjoyed this post.
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-658156500130969686?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2011/01/import-table-statistics-to-another.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-6377608965834344495</guid><pubDate>Thu, 02 Dec 2010 09:52:00 +0000</pubDate><atom:updated>2010-12-02T13:36:16.468+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AWR</category><category domain="http://www.blogger.com/atom/ns#">Performance Tuning</category><title>I bet you haven't seen 62 hours of AWR Report</title><description>One of my customers is having extreme performance issues during batch load. The batch is consuing around 6 hours to complete which is supposed to complete in less than 90 minutes. 
&lt;p&gt;&lt;/p&gt;
The guys shared their AWR report with us and here is the snapshot information for you guys:
&lt;p&gt;&lt;/p&gt;
&lt;pre name="code" class="sql"&gt;

              Snap Id      Snap Time      Sessions Curs/Sess
            --------- ------------------- -------- ---------
Begin Snap:      4621 27-Nov-10 00:00:09        30       1.3
  End Snap:      4683 29-Nov-10 14:00:51        30       2.0
   Elapsed:            3,720.70 (mins)
   DB Time:            3,021.65 (mins)
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;

This report is for whopping 62 hours. This long report results in a meaningless data as everything is averaged out and one doesn't see the real issues.
&lt;p&gt;&lt;/p&gt;
With this information at hand I can say:
&lt;p&gt;&lt;/p&gt;
1) Mostly likely they haven't changed the default AWR snapshot duration (i.e. 1 hour)&lt;p&gt;&lt;/p&gt;
2) I would then request the guys to generate hourly AWR reports during the time they were experiencing extreme performance issues. &lt;p&gt;&lt;/p&gt;
3) Lastly, suggest them to change the snapshot duration from (default) 1 hour to 15 mintues.
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-6377608965834344495?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2010/12/i-bet-you-havent-seen-62-hours-of-awr.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-2422875362503619149</guid><pubDate>Fri, 26 Nov 2010 22:02:00 +0000</pubDate><atom:updated>2010-11-27T01:16:34.434+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Oracle 11g R2</category><title>Oracle Database 11g R2: Interactive Quick Reference</title><description>Oracle has released "Interactive Quick Reference" for DBA's and Developer's to better understand Oracle Database architecture. It includes &lt;p&gt;&lt;/p&gt;
1) List of DBA Views,&lt;p&gt;&lt;/p&gt;
2) Database Architecture Diagram, and &lt;p&gt;&lt;/p&gt;
3) List of all Database Background Processes by category.
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
Click &lt;a href="http://landingpad.oracle.com/webapps/dialogue/ns/dlgwelcome.jsp?p_ext=Y&amp;p_dlg_id=9575302&amp;src=7027600&amp;Act=54"&gt;here&lt;/a&gt; to read more about it and click &lt;a href="http://landingpad.oracle.com/webapps/dialogue/dlgpage.jsp?p_dlg_id=9575302&amp;src=7027600&amp;act=54&amp;id1=9575303&amp;id2=9575305&amp;pe=null&amp;pr=365.0&amp;pt=N&amp;pd=Y&amp;xs=7027600&amp;xa=54&amp;pu=Null&amp;po=WWOU10044054MP&amp;ps=N&amp;p_ext=Y&amp;p_tm=Null&amp;r1=-1&amp;r2=-1&amp;r0=-1"&gt;here&lt;/a&gt; to download it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-2422875362503619149?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2010/11/oracle-database-11g-r2-interactive.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-8163349356916662128</guid><pubDate>Wed, 13 Oct 2010 09:57:00 +0000</pubDate><atom:updated>2011-01-31T23:30:11.465+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Database</category><category domain="http://www.blogger.com/atom/ns#">Tuning</category><title>"enq: XR - database force logging" Wait Event</title><description>&lt;p&gt;&lt;/p&gt;
“enq: XR - database force logging” wait event is observed when you try to place the database in FORCE LOGGING mode while one of the database sessions is executing a NOLOGGING operation. This can be easily demonstrated.  
&lt;p&gt;&lt;/p&gt;
Connect to database (say session 1) and perform a NOLOGGING operation:
&lt;p&gt;&lt;/p&gt;
&lt;pre name=”code” class=”sql”&gt;
SQL&gt; conn test/test
Connected.
SQL&gt;
SQL&gt; 
SQL&gt; create table t1 (id number, name varchar2(200)) NOLOGGING;
Table created.
SQL&gt;
SQL&gt; insert /*+ append */into t1 select level, rpad('*', 200, '*') from dual connect by level &lt;= 5000000;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
Place the database in the FORCE LOGGING mode by executing the following SQL from a different session (say session 2):
&lt;p&gt;&lt;/p&gt;
&lt;pre name=”code” class=”sql”&gt;
SQL&gt; conn /as sysdba
Connected.
SQL&gt;
SQL&gt; 
SQL&gt; alter database force logging;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
You will observe that Session-2 does not complete immediately but rather waits. Let us see what session-2 is waiting on by connecting to the database (say session – 3):
&lt;pre name=”code” class=”sql”&gt;
SQL&gt;
SQL&gt; @wait

SID_SER_USER            EVENT                              STATUS   STATE
----------------------- ---------------------------------- -------- -------------------
159 -     3 - SYS       enq: XR - database force logging   ACTIVE   WAITING
146 -    82 - TEST      control file sequential read       ACTIVE   WAITED SHORT TIME

SQL&gt; 
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
Session – 2 is actually waiting on “enq: XR - database force logging” wait event for Session – 1 to complete the NOLOGGING operation. As soon as Session – 1 completes the transaction, Session – 2 completes. 
&lt;p&gt;&lt;/p&gt;
Here is the “wait.sql” used above to identify the wait events:
&lt;p&gt;&lt;/p&gt;
&lt;pre name=”code” class=”sql”&gt;
set line 10000
set pagesize 500

column Sid_Ser_User format a23
column event format a34

select
sid || ' - ' || lpad(serial#, 5, ' ') || ' - ' || username Sid_Ser_User,
event,
status,
state
from gv$session
where 1=1
and wait_class# &lt;&gt; '6'
and sid &lt;&gt; sys_context('USERENV', 'SID')
order by username;
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-8163349356916662128?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2010/10/enq-xr-database-force-logging-wait.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-2271305002636298210</guid><pubDate>Mon, 11 Oct 2010 08:22:00 +0000</pubDate><atom:updated>2010-10-11T12:00:35.263+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Webcast</category><category domain="http://www.blogger.com/atom/ns#">AIOUG</category><title>AIOUG Webcast: RMAN Backup and Recovery</title><description>I will be talking on &lt;a href="http://www.aioug.org/aioug_webcast.php"&gt;RMAN Recovery Procedures&lt;/a&gt; on 13 Oct, 2010 during my &lt;a href="http://www.aioug.org/"&gt;AIOUG &lt;/a&gt; Webcast. The webcast is scheduled at 05:00 PM IST. 
&lt;p&gt;&lt;/p&gt;
One of the most important responsibilities of a DBA is to ensure that a database can be quickly and completely recovered from any type of failure. The aim of this session is to provide a platform to help DBAs to be able to restore databse under different failure scenarios.  
&lt;p&gt;&lt;/p&gt;
In this session, I will discuss various database failure scenario's followed by a detailed recovery solution providing screenshots. 
&lt;p&gt;&lt;/p&gt;
This presentation should be of a great value to the Novoice &amp; Intermediate DBAs and a good refresher for an Advanced DBA.
&lt;p&gt;&lt;/p&gt;
See you at the webcast.
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-2271305002636298210?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2010/10/aioug-webcast-rman-backup-and-recovery.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-4339598198307402429</guid><pubDate>Fri, 08 Oct 2010 09:43:00 +0000</pubDate><atom:updated>2010-10-08T13:02:35.110+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Patchset</category><category domain="http://www.blogger.com/atom/ns#">Oracle 11g</category><title>Oracle 11g Release 2 Patchset - 1 Available for Download</title><description>As you all know Oracle 11g Release 2 Patchset - 1 (11.2.02) is available for download for most of the platforms. The Patchset release has been blogged by many Oracle Enthusiasts and I am the last one to post it on my blog. 
&lt;p&gt;&lt;/p&gt;
I should admit that I did not read body of any of the blog posts. I thought, the patch is out and everyone's blogging. Now, when I trackback and read &lt;a href="http://kevinclosson.wordpress.com/2010/09/10/oracle-database-11g-release-2-patchset-1-11-2-0-2-is-now-available-but-this-is-not-just-an-announcement-blog-entry/"&gt;Kevin Closson's Oracle Blog&lt;/a&gt; and &lt;a href="http://surachartopun.com/2010/09/oracle-database-11gr2-11202-is.html"&gt;Surachart Opun's Blog&lt;/a&gt;, I find an interested piece of information and here it is:
&lt;p&gt;&lt;/p&gt; 
&lt;em&gt;"In past releases, Oracle Database patch sets consisted of a set of files that replaced files in an existing Oracle home. Beginning with Oracle Database 11g Release 2, patch sets are full installations that replace existing installations."&lt;/em&gt;
&lt;p&gt;&lt;/p&gt;

If I had paid attention to this I wouldn't have gone through the pain of downloading Oracle 11gR2 base release and Oracle 11gR2 Patch-1. 
&lt;p&gt;&lt;/p&gt;

Happy patching!!!
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-4339598198307402429?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2010/10/oracle-11g-release-2-patchset-1.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-8556962836962159335</guid><pubDate>Tue, 28 Sep 2010 03:25:00 +0000</pubDate><atom:updated>2010-09-28T10:46:15.431+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">OOW-2010</category><title>RMAN: Backup &amp; Recovery - The Most Essential but the Most Stubbed -- (OOW - 2010 Presentation)</title><description>I gave this presentation on Wednesday morning, September 22, 2010 in San Francisco at Oracle OpenWorld 2010. I followed a Problem-Solution approach for this session. I described the problem scenario and then discussed the recovery solution(s). 
&lt;p&gt;&lt;/p&gt;

I have been receiving emails from the attendees to upload the presentation. Finally, I managed to upload the presentation and you may download it from &lt;a href="https://docs.google.com/fileview?id=0B4VcIIqDBo9SMjIwMjcwNWItZDY4Mi00NDcxLWI4NDAtODk3OGY0YWRmNDg0&amp;hl=en&amp;authkey=CO3PyaQP"&gt;here&lt;/a&gt;. If you face any issues downloading then please drop me an email (asif.momen@gmail.com).
&lt;p&gt;&lt;/p&gt;

The room was full of attendees and I am glad about the positive feedback I received from them. Below are the pics I took soon after the presenation.
&lt;p&gt;&lt;/p&gt;

&lt;a href="http://1.bp.blogspot.com/_gZsupYKwzXg/TKFjnAApXGI/AAAAAAAAAIg/V87nUscpHvc/s1600/DSC04862.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_gZsupYKwzXg/TKFjnAApXGI/AAAAAAAAAIg/V87nUscpHvc/s320/DSC04862.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5521804139801697378" /&gt;&lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
&lt;a href="http://3.bp.blogspot.com/_gZsupYKwzXg/TKFjmiNlD5I/AAAAAAAAAIY/fVlToKSFYLE/s1600/DSC04861.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_gZsupYKwzXg/TKFjmiNlD5I/AAAAAAAAAIY/fVlToKSFYLE/s320/DSC04861.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5521804131802877842" /&gt;&lt;/a&gt;
&lt;p&gt;&lt;/p&gt;


&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-8556962836962159335?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2010/09/rman-backup-recovery-most-essential-but.html</link><author>noreply@blogger.com (Asif Momen)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_gZsupYKwzXg/TKFjnAApXGI/AAAAAAAAAIg/V87nUscpHvc/s72-c/DSC04862.JPG" height="72" width="72" /><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-6535784061479583366</guid><pubDate>Mon, 27 Sep 2010 13:27:00 +0000</pubDate><atom:updated>2010-09-27T16:41:45.469+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">OOW-2010</category><title>Oracle OpenWorld-2010: Session Downloads</title><description>I received an email from Oracle Content Team saying the OOW-2010 sessions are now available for download from &lt;a href="http://openworld.vportal.net/"&gt;OpenWorld and JavaOne and Oracle Develop On Demand&lt;/a&gt;. 
&lt;p&gt;&lt;/p&gt;
Login to the portal using your username/password and enjoy wealth of information. 
&lt;p&gt;&lt;/p&gt;
Sessions are available in Flash Audio, MP3 Audio, PPT, and PDF format. I noticed few sessions tagged as "Coming Soon". Do check back your favorite session again. 
&lt;p&gt;&lt;/p&gt;
I have received many email requests from the attendees of my session asking for a place to download my OOW presentation. You may download it from the above link. Below is an example screenshot:

&lt;a href="http://4.bp.blogspot.com/_gZsupYKwzXg/TKCepBPBlqI/AAAAAAAAAIQ/hAhk1l5z3HU/s1600/OOW-On+Demand.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 146px;" src="http://4.bp.blogspot.com/_gZsupYKwzXg/TKCepBPBlqI/AAAAAAAAAIQ/hAhk1l5z3HU/s320/OOW-On+Demand.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5521587570699507362" /&gt;&lt;/a&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-6535784061479583366?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2010/09/oracle-openworld-2010-session-downloads.html</link><author>noreply@blogger.com (Asif Momen)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_gZsupYKwzXg/TKCepBPBlqI/AAAAAAAAAIQ/hAhk1l5z3HU/s72-c/OOW-On+Demand.JPG" height="72" width="72" /><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34560741.post-4791064850929993680</guid><pubDate>Tue, 21 Sep 2010 07:58:00 +0000</pubDate><atom:updated>2010-09-21T11:28:43.425+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">OOW-2010</category><title>Oracle Open World 2010 - Day 2</title><description>Day-2 of OOW was as exciting as Day-1. I wanted to start my day with Steven's session "PL/SQL Developer, Quiz Thyself!" but couldn't make it. However, I attended the following sessions:
&lt;p&gt;&lt;/p&gt;
1) Enterprise Cloud Computing: What, Why, and How     &lt;p&gt;&lt;/p&gt;
2) Oracle RAC 10g R2 to Oracle RAC 11g R2 Upgrade: Keeping It Simple  &lt;p&gt;&lt;/p&gt;
3) A Detailed Analysis of Indexing New Features in Oracle Database 11g R1 and R2 by &lt;a href="http://richardfoote.wordpress.com/"&gt;Richard Foote&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
4) Oracle Real Application Clusters (Oracle RAC): Best Practices at AT&amp;T     &lt;p&gt;&lt;/p&gt;
5) Oracle Database 11g Internals: Five Key High-Availability Innovations&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
The best session was that of Richard Foote.
&lt;p&gt;&lt;/p&gt;
Also, I won an "apron" at the exhibition hall. Yes you got it right, an apron. There was a game organized by &lt;a href="http://www.confio.com/"&gt;Confio&lt;/a&gt; team. I won by throwing 2 out of 4 sand bags into the hole.
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34560741-4791064850929993680?l=momendba.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://momendba.blogspot.com/2010/09/oracle-open-world-2010-day-2.html</link><author>noreply@blogger.com (Asif Momen)</author><thr:total>0</thr:total></item></channel></rss>

