<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>David Marcos&#039; Blog</title>
	<atom:link href="http://davidalejomarcos.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://davidalejomarcos.wordpress.com</link>
	<description>Just another Oracle weblog</description>
	<lastBuildDate>Sun, 29 Jan 2012 11:19:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='davidalejomarcos.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/9d5ef6b1e407ae0bcf4b7530576fc480?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>David Marcos&#039; Blog</title>
		<link>http://davidalejomarcos.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://davidalejomarcos.wordpress.com/osd.xml" title="David Marcos&#039; Blog" />
	<atom:link rel='hub' href='http://davidalejomarcos.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Extending Oracle Enterprise Manager (EM) monitoring.</title>
		<link>http://davidalejomarcos.wordpress.com/2012/01/29/extending-oracle-enterprise-manager-em-monitoring/</link>
		<comments>http://davidalejomarcos.wordpress.com/2012/01/29/extending-oracle-enterprise-manager-em-monitoring/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 11:15:54 +0000</pubDate>
		<dc:creator>David Alejo Marcos</dc:creator>
				<category><![CDATA[Grid Control]]></category>
		<category><![CDATA[Oracle 11.2]]></category>
		<category><![CDATA[SQL - PL/SQL]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://davidalejomarcos.wordpress.com/?p=750</guid>
		<description><![CDATA[I always found Oracle Enterprise Manager (EM) to be an interesting tool for different reasons. The only thing I missed was an easy way to create my own alerts. It is very simple to create a KSH, Perl, etc script to do some customised monitoring and notify you by email, Nagios, NetCool, etc. By integrating [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=750&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I always found Oracle Enterprise Manager (EM) to be an interesting tool for different reasons. The only thing I missed was an easy way to create my own alerts.</p>
<p>It is very simple to create a KSH, Perl, etc script to do some customised monitoring and notify you by email, Nagios, NetCool, etc.</p>
<p>By integrating your scripts with OEM, you will have an easy way to enhance your monitoring and still have notification by email, SNMP traps, etc. as you would currently have if your company is using OEM for monitoring your systems.</p>
<p><strong>The problem:</strong><br />
Develop an easy way to integrate your monitoring scripts with OEM.</p>
<p><strong>The solution:</strong><br />
I decided to use an Oracle type and an Oracle function to accomplish this goal. Using the steps described below, we can monitor pretty much whatever aspect of the database providing you can put the logic into a function.</p>
<p>As example, I had added the steps to create two new User-Defined SQL Metrics, as Oracle calls them:<br />
1.- Long Running Sessions (LRS).<br />
2.- Tablespace Monitoring.</p>
<p>The reason to have my own TBS monitoring is to enhance the existing as it has &#8220;hard-coded&#8221; thresholds. I might have tablespaces in your database which are 6TBS in size and other with only 2Gb, so raising an alert at 95% for both of them is, in my opinion, not adequate. </p>
<p>You can find more about the query I developed <a href="http://davidalejomarcos.wordpress.com/2010/12/13/monitoring-tablespaces-with-dynamic-thresholds/?preview=true&amp;preview_id=435&amp;preview_nonce=1bad5b8e9f">here</a>.</p>
<p>The steps to create a script to monitor long running sessions (LRS) are:</p>
<p>1.- create types</p>
<p><pre class="brush: sql; wrap-lines: false;">
CREATE OR REPLACE TYPE lrs_obj as OBJECT
(
user_name VARCHAR2(256),
error_message varchar(2000));
/

CREATE OR REPLACE TYPE lrs_array AS TABLE OF lrs_obj;
/
</pre></p>
<p>2.- create function.</p>
<p><pre class="brush: sql; wrap-lines: false;">
CREATE OR REPLACE FUNCTION lrs RETURN lrs_array IS
long_running_data lrs_array := lrs_array();
ln_seconds_active number := 300;
BEGIN
SELECT lrs_obj(username||' Sec: '||sec_running, ', Inst_id: '||inst_id||', SID: '||sid||', Serial: '|| serial||', Logon: '||session_logon_time||', sql_id: '||sql_id)
BULK COLLECT
INTO long_running_data
FROM
(SELECT
/*+ FIRST_ROWS USE_NL(S,SQ,P) */
s.inst_id inst_id,
s.sid sid,
s.serial# serial,
s.last_call_et sec_running,
NVL(s.username, '(oracle)') AS username,
to_char(s.logon_time, 'DD-MM-YYYY HH24:MI:SS') session_logon_time,
s.machine,
NVL(s.osuser, 'n/a') AS osuser,
NVL(s.program, 'n/a') AS program,
s.event,
s.seconds_in_wait,
s.sql_id sql_id,
sq.sql_text
from gv$session s, gv$sqlarea sq
where s.sql_id = sq.sql_id
and s.inst_id = sq.inst_id
and s.status = 'ACTIVE'
and s.last_call_et &gt; ln_seconds_active
and s.paddr not in ( select paddr from gv$bgprocess where paddr != '00' )
and s.type != 'BACKGROUND'
and s.username not in ( 'SYSTEM', 'SYS' )
AND s.event != 'SQL*Net break/reset to client'
) CUSTOMER_QUERY;
RETURN long_running_data;
END lrs;
/
</pre></p>
<p>3.- Grant privileges to the users will be executing monitoring scripts:</p>
<p><pre class="brush: sql; wrap-lines: false;">
grant execute on lrs_obj to public;
grant execute on lrs_array to public;
grant execute on lrs to public;
</pre></p>
<p>4.- create synonyms</p>
<p><pre class="brush: sql; wrap-lines: false;">
Create public synonym lrs_obj for lrs_obj;
Create public synonym lrs_array for lrs_array;
Create public synonym lrs for lrs;
</pre></p>
<p>5.- Query to monitor</p>
<p><pre class="brush: sql; wrap-lines: false;">
SELECT user_name, error_message FROM TABLE(CAST(lrs as lrs_array));
</pre></p>
<p>Once we are satisfied with the thresholds (300 seconds on the script), we are ready to add it to EM.</p>
<p>1.- Navigate to User-Defined SQL Metrics (you need to navigate to your database and you will find the link at bottom).<br />
2.- Create new User-Defined SQL Metric and fill the gaps (I have attached some values for reference). The most important thing right now is to make sure metric_Type = String, Sql Query Output = two columns, comparison Operator = CONTAINS and warning has a value returned by the query (i did decide to go for Inst_id).</p>
<p><a href="http://davidalejomarcos.files.wordpress.com/2012/01/custom_alert_monitor_lrs_1.jpg"><img class="aligncentre wp-image-752" title="Top Part User-Defined SQL Metric" src="http://davidalejomarcos.files.wordpress.com/2012/01/custom_alert_monitor_lrs_1.jpg?w=328&#038;h=193" alt="" width="328" height="193" /></a></p>
<p><a href="http://davidalejomarcos.files.wordpress.com/2012/01/custom_alert_monitor_lrs_2.jpg"><img class="aligcentre wp-image-753" title="Bottom Part User-Defined SQL Metric." src="http://davidalejomarcos.files.wordpress.com/2012/01/custom_alert_monitor_lrs_2.jpg?w=329&#038;h=188" alt="" width="329" height="188" /></a></p>
<p>The only thing left now is to add this monitoring to your templates and to your rules so notifications are being sent.</p>
<p>Once all has been configure, you should start seeing alerts like this:</p>
<p><pre class="brush: sql; wrap-lines: false;">
Target Name=lab01 
Target type=Cluster Database 
Host=mylab 
Occurred At=Jan 22, 2012 14:35:47 PM GMT 
Message=LRS alert: key = DAVIDLAB Sec: 530, value = , Inst_id: 1, SID: 153, Serial: 1597, Logon: 22-01-2012 12:21:46, sql_id: 3m72fjep12w8r 
Metric=StrValue 
Metric value=, Inst_id: 1, SID: 153, Serial: 1597, Logon: 22-01-2012 12:21:46, sql_id: 3m72fjep12w8r 
Metric ID=lrs
Key=DAVIDLAB Sec: 530
Severity=Warning 
Acknowledged=No 
Notification Rule Name=david alerts 
Notification Rule Owner=DAVIDLAB 
</pre></p>
<p>For Tablespace monitoring the steps will be the same as described above:</p>
<p>1.- create types<br />
<pre class="brush: sql; wrap-lines: false;">
CREATE OR REPLACE TYPE tbs_obj as OBJECT
(
tablespace_name VARCHAR2(256),
error_message varchar(2000));
/

CREATE OR REPLACE TYPE tbs_array AS TABLE OF tbs_obj;
/
</pre></p>
<p>2.- create function.<br />
<pre class="brush: sql; wrap-lines: false;">
CREATE OR REPLACE FUNCTION calc_tbs_free_mb RETURN tbs_array IS
tablespace_data tbs_array := tbs_array();
BEGIN
SELECT tbs_obj(tablespace_name, alert||', Used_MB: '||space_used_mb||', PCT_Free: '||pct_free||', FreeMB: '|| free_space_mb) BULK COLLECT
INTO tablespace_data
FROM
(SELECT (CASE
WHEN free_space_mb &lt;= DECODE (allocation_type, 'UNIFORM', min_extlen, maxextent) * free_extents THEN 'CRITICAL'
WHEN free_space_mb &lt;= DECODE (allocation_type, 'UNIFORM', min_extlen, maxextent) * free_extents + 20 THEN 'WARNING'
ELSE 'N/A'
END)
alert,
tablespace_name,
space_used_mb,
ROUND (free_space/power(1024,3), 2) free_gb,
free_space_mb,
pct_free,
ROUND (extend_bytes/power(1024,3), 2) extend_gb,
free_extents,
max_size_gb,
maxextent
FROM (SELECT c.tablespace_name,
NVL (ROUND ( (a.extend_bytes + b.free_space) / (bytes + a.extend_bytes) * 100,2), 0) pct_free,
NVL ( ROUND ( (a.extend_bytes + b.free_space) / 1024 / 1024, 2), 0) free_space_mb,
(CASE
WHEN NVL ( ROUND ( (maxbytes) / power(1024,3), 2), 0) &lt;= 30 THEN 60
WHEN NVL ( ROUND ( (maxbytes) / power(1024,3), 2), 0) &lt;= 100 THEN 120
WHEN NVL ( ROUND ( (maxbytes) / power(1024,3), 2), 0) &lt;= 300 THEN 200
WHEN NVL ( ROUND ( (maxbytes) / power(1024,3), 2), 0) &lt;= 800 THEN 300
ELSE 340
END) free_extents,
a.extend_bytes, b.free_space,
ROUND (maxbytes /power(1024,3), 2) max_size_gb,
nvl (round(a.bytes - b.free_space ,2) /1024/1024, 0) space_used_mb, 
c.allocation_type,
GREATEST (c.min_extlen / 1024 / 1024, 64) min_extlen,
64 maxextent
FROM ( SELECT tablespace_name,
SUM(DECODE (SIGN (maxbytes - BYTES), -1, 0, maxbytes - BYTES)) AS extend_bytes,
SUM (BYTES) AS BYTES,
SUM (maxbytes) maxbytes
FROM DBA_DATA_FILES
GROUP BY tablespace_name) A,
( SELECT tablespace_name,
SUM (BYTES) AS free_space,
MAX (BYTES) largest
FROM DBA_FREE_SPACE
GROUP BY tablespace_name) b,
dba_tablespaces c
WHERE c.contents not in ('UNDO','TEMPORARY') and
b.tablespace_name(+) = c.tablespace_name
AND a.tablespace_name = c.tablespace_name
) 
) CUSTOMER_QUERY;
RETURN tablespace_data;
END calc_tbs_free_mb;
/
</pre></p>
<p>3.- Grant privileges to the users will be executing monitoring scripts:<br />
<pre class="brush: sql; wrap-lines: false;">
grant execute on tbs_obj to public;
grant execute on tbs_array to public;
grant execute on calc_tbs_free_mb to public;
</pre></p>
<p>4.- create synonyms<br />
<pre class="brush: sql; wrap-lines: false;">
Create public synonym tbs_obj for tbs_obj;
Create public synonym tbs_array for tbs_array;
Create public synonym calc_tbs_free_mb for calc_tbs_free_mb;
</pre></p>
<p>5.- Query to monitor<br />
<pre class="brush: sql; wrap-lines: false;">
SELECT * FROM TABLE(CAST(calc_tbs_free_mb as tbs_array));
</pre></p>
<p>Please, remember to use comparison operator = CONTAINS, warning = WARNING and critical=CRITICAL</p>
<p>As always, comments are welcome.</p>
<p>David Alejo-Marcos.</p>
<p>David Marcos Consulting Ltd.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/davidalejomarcos.wordpress.com/750/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/davidalejomarcos.wordpress.com/750/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/davidalejomarcos.wordpress.com/750/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/davidalejomarcos.wordpress.com/750/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/davidalejomarcos.wordpress.com/750/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/davidalejomarcos.wordpress.com/750/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/davidalejomarcos.wordpress.com/750/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/davidalejomarcos.wordpress.com/750/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/davidalejomarcos.wordpress.com/750/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/davidalejomarcos.wordpress.com/750/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/davidalejomarcos.wordpress.com/750/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/davidalejomarcos.wordpress.com/750/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/davidalejomarcos.wordpress.com/750/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/davidalejomarcos.wordpress.com/750/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=750&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://davidalejomarcos.wordpress.com/2012/01/29/extending-oracle-enterprise-manager-em-monitoring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6de05e5409b9ff5265b9efbe283cdfcf?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">davidalejomarcos</media:title>
		</media:content>

		<media:content url="http://davidalejomarcos.files.wordpress.com/2012/01/custom_alert_monitor_lrs_1.jpg?w=300" medium="image">
			<media:title type="html">Top Part User-Defined SQL Metric</media:title>
		</media:content>

		<media:content url="http://davidalejomarcos.files.wordpress.com/2012/01/custom_alert_monitor_lrs_2.jpg?w=300" medium="image">
			<media:title type="html">Bottom Part User-Defined SQL Metric.</media:title>
		</media:content>
	</item>
		<item>
		<title>Executing sql on all Exadata nodes.</title>
		<link>http://davidalejomarcos.wordpress.com/2011/09/22/executing-sql-on-all-exadata-nodes/</link>
		<comments>http://davidalejomarcos.wordpress.com/2011/09/22/executing-sql-on-all-exadata-nodes/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 20:00:01 +0000</pubDate>
		<dc:creator>David Alejo Marcos</dc:creator>
				<category><![CDATA[Exadata]]></category>
		<category><![CDATA[SQL - PL/SQL]]></category>

		<guid isPermaLink="false">http://davidalejomarcos.wordpress.com/?p=719</guid>
		<description><![CDATA[From time to time, I have to run scripts or single commands on all nodes for Exadata. This can take some time. The problem: We have a request from our developers to flush the shared pool on all nodes on our UAT Exadata. This is due to a bug we are still experiencing. The solution: [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=719&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>From time to time, I have to run scripts or single commands on all nodes for Exadata. This can take some time.</p>
<p><strong>The problem:</strong></p>
<p>We have a request from our developers to flush the shared pool on all nodes on our UAT Exadata. This is due to a bug we are still experiencing.</p>
<p><strong>The solution:</strong></p>
<p>This is a typical request for my team, were we have to run something on all our nodes. Flushing shared pool can be one of them.</p>
<p>Connecting and executing the same command 8 times, if you have a full rack, can be time-consuming and it is, probably, not the most exciting task to do.</p>
<p>For this reason I came up with the following script. It is something to help me with, so please, test it before using on production.</p>
<p><pre class="brush: sql; wrap-lines: false;">
#!/bin/ksh

###############################
##
## Script to execute sql commands on all Exadata nodes
##
## Owner: David Alejo-Marcos
##
## usage: Exadata_sql_exec.ksh
## i.e.: Exadata_sql_exec.ksh MYTESTDB flush_shared_pool.sql
##
## Example of test.sql:
##
## oracle@hostname1 (MYTESTDB1)$ cat test.sql
## select sysdate from dual;
## select 'this is my test' from dual;
##
## alter system switch logfile;
##
###############################

NO_OF_ARGS=$#

typeset -u DB_SRC=$1
typeset -l DB_SCRIPT1=$2
typeset -l DB_SCRIPT=$2_tmp

if [[ &quot;$NO_OF_ARGS&quot; = &quot;2&quot; ]]; then
echo &quot;Parameters passed: OK&quot;
else
echo &quot;usage: Exadata_sql_exec.ksh&quot;
echo &quot;i.e.: Exadata_sql_exec.ksh MYTESTDB flush_shared_pool.sql&quot;
exit 1
fi
echo &quot;sqlplus -s '/as sysdba'&quot; &gt;/tmp/${DB_SCRIPT}
echo &quot;set linesize 500&quot; &gt;&gt;/tmp/${DB_SCRIPT}
echo &quot;set serveroutput on&quot; &gt;&gt;/tmp/${DB_SCRIPT}
echo &quot;select host_name, instance_name from v\\\$instance;&quot; &gt;&gt;/tmp/${DB_SCRIPT}
echo &quot;@/tmp/${DB_SCRIPT1}&quot; &gt;&gt;/tmp/${DB_SCRIPT}
echo &quot;exit;&quot; &gt;&gt;/tmp/${DB_SCRIPT}
echo &quot;EOF&quot; &gt;&gt;/tmp/${DB_SCRIPT}

# Copy both scripts to all Exadata DB Servers.
dcli -l oracle -g ~/dbs_group -f /tmp/${DB_SCRIPT} -d /tmp
dcli -l oracle -g ~/dbs_group -f ${DB_SCRIPT1} -d /tmp

# Execute command on all Exadata DB
dcli -l oracle -g ~/dbs_group &quot; (chmod 700 /tmp/${DB_SCRIPT} ; /tmp/${DB_SCRIPT} ${DB_SRC} ; rm /tmp/${DB_SCRIPT} ; rm /tmp/${DB_SCRIPT1})&quot;
</pre></p>
<p>The sql file to be executed can be anything you would normally run from sqlplus.</p>
<p>Please, bear in mind this script will be executed as many times as nodes you have on your Exadata, so if you create a table of you perform inserts, it will be done 8 times&#8230;</p>
<p>Below is an output from a very simple test:</p>
<p>test.sql:</p>
<p><pre class="brush: sql; wrap-lines: false;">
oracle@hostname1 (MYTESTDB1)$ cat test.sql
select sysdate from dual;
select 'this is my test' &quot;ramdom_text&quot; from dual;
alter system switch logfile;
</pre></p>
<p>Output:</p>
<p><pre class="brush: sql; wrap-lines: false;">
oracle@hostname1 (MYTESTDB1)$ ./Exadata_sql_exec.ksh MYTESTDB test.sql
Parameters passed: OK
hostname1:
hostname1: Connect to instance MYTESTDB1 on hostname1
hostname1: ORACLE_HOME is set to /apps/oracle/server/product/11.2/dbhome_1
hostname1:
hostname1:
hostname1: HOST_NAME INSTANCE_NAME
hostname1: --------- ----------------
hostname1: hostname1 MYTESTDB1
hostname1:
hostname1:
hostname1: SYSDATE
hostname1: ---------
hostname1: 22-SEP-11
hostname1:
hostname1:
hostname1: ramdom_text
hostname1: ---------------
hostname1: this is my test
hostname1:
hostname1:
hostname1: System altered.
hostname1:
hostname2:
hostname2: Connect to instance MYTESTDB2 on hostname2
hostname2: ORACLE_HOME is set to /apps/oracle/server/product/11.2/dbhome_1
hostname2:
hostname2:
hostname2: HOST_NAME INSTANCE_NAME
hostname2: --------- ----------------
hostname2: hostname2 MYTESTDB2
hostname2:
hostname2:
hostname2: SYSDATE
hostname2: ---------
hostname2: 22-SEP-11
hostname2:
hostname2:
hostname2: ramdom_text
hostname2: ---------------
hostname2: this is my test
hostname2:
hostname2:
hostname2: System altered.
hostname2:
hostname3:
hostname3: Connect to instance MYTESTDB3 on hostname3
hostname3: ORACLE_HOME is set to /apps/oracle/server/product/11.2/dbhome_1
hostname3:
hostname3:
hostname3: HOST_NAME INSTANCE_NAME
hostname3: --------- ----------------
hostname3: hostname3 MYTESTDB3
hostname3:
hostname3:
hostname3: SYSDATE
hostname3: ---------
hostname3: 22-SEP-11
hostname3:
hostname3:
hostname3: ramdom_text
hostname3: ---------------
hostname3: this is my test
hostname3:
hostname3:
hostname3: System altered.
hostname3:
hostname4:
hostname4: Connect to instance MYTESTDB4 on hostname4
hostname4: ORACLE_HOME is set to /apps/oracle/server/product/11.2/dbhome_1
hostname4:
hostname4:
hostname4: HOST_NAME INSTANCE_NAME
hostname4: --------- ----------------
hostname4: hostname4 MYTESTDB4
hostname4:
hostname4:
hostname4: SYSDATE
hostname4: ---------
hostname4: 22-SEP-11
hostname4:
hostname4:
hostname4: ramdom_text
hostname4: ---------------
hostname4: this is my test
hostname4:
hostname4:
hostname4: System altered.
hostname4:
hostname5:
hostname5: Connect to instance MYTESTDB5 on hostname5
hostname5: ORACLE_HOME is set to /apps/oracle/server/product/11.2/dbhome_1
hostname5:
hostname5:
hostname5: HOST_NAME INSTANCE_NAME
hostname5: --------- ----------------
hostname5: hostname5 MYTESTDB5
hostname5:
hostname5:
hostname5: SYSDATE
hostname5: ---------
hostname5: 22-SEP-11
hostname5:
hostname5:
hostname5: ramdom_text
hostname5: ---------------
hostname5: this is my test
hostname5:
hostname5:
hostname5: System altered.
hostname5:
hostname6:
hostname6: Connect to instance MYTESTDB6 on hostname6
hostname6: ORACLE_HOME is set to /apps/oracle/server/product/11.2/dbhome_1
hostname6:
hostname6:
hostname6: HOST_NAME INSTANCE_NAME
hostname6: --------- ----------------
hostname6: hostname6 MYTESTDB6
hostname6:
hostname6:
hostname6: SYSDATE
hostname6: ---------
hostname6: 22-SEP-11
hostname6:
hostname6:
hostname6: ramdom_text
hostname6: ---------------
hostname6: this is my test
hostname6:
hostname6:
hostname6: System altered.
hostname6:
hostname7:
hostname7: Connect to instance MYTESTDB7 on hostname7
hostname7: ORACLE_HOME is set to /apps/oracle/server/product/11.2/dbhome_1
hostname7:
hostname7:
hostname7: HOST_NAME INSTANCE_NAME
hostname7: --------- ----------------
hostname7: hostname7 MYTESTDB7
hostname7:
hostname7:
hostname7: SYSDATE
hostname7: ---------
hostname7: 22-SEP-11
hostname7:
hostname7:
hostname7: ramdom_text
hostname7: ---------------
hostname7: this is my test
hostname7:
hostname7:
hostname7: System altered.
hostname7:
hostname8:
hostname8: Connect to instance MYTESTDB8 on hostname8
hostname8: ORACLE_HOME is set to /apps/oracle/server/product/11.2/dbhome_1
hostname8:
hostname8:
hostname8: HOST_NAME INSTANCE_NAME
hostname8: --------- ----------------
hostname8: hostname8 MYTESTDB8
hostname8:
hostname8:
hostname8: SYSDATE
hostname8: ---------
hostname8: 22-SEP-11
hostname8:
hostname8:
hostname8: ramdom_text
hostname8: ---------------
hostname8: this is my test
hostname8:
hostname8:
hostname8: System altered.
hostname8:
</pre></p>
<p>I have been told many times to do not use quotes on the following command:</p>
<p><pre class="brush: sql; wrap-lines: false;">
sqlplus '/as sysdba'
</pre></p>
<p>but:</p>
<p>1.- I am too used to it<br />
2.- you only save 2 keystrokes at the end of the day <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>As always, comments are welcome.</p>
<p>David Alejo-Marcos.</p>
<p>David Marcos Consulting Ltd.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/davidalejomarcos.wordpress.com/719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/davidalejomarcos.wordpress.com/719/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/davidalejomarcos.wordpress.com/719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/davidalejomarcos.wordpress.com/719/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/davidalejomarcos.wordpress.com/719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/davidalejomarcos.wordpress.com/719/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/davidalejomarcos.wordpress.com/719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/davidalejomarcos.wordpress.com/719/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/davidalejomarcos.wordpress.com/719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/davidalejomarcos.wordpress.com/719/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/davidalejomarcos.wordpress.com/719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/davidalejomarcos.wordpress.com/719/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/davidalejomarcos.wordpress.com/719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/davidalejomarcos.wordpress.com/719/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=719&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://davidalejomarcos.wordpress.com/2011/09/22/executing-sql-on-all-exadata-nodes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6de05e5409b9ff5265b9efbe283cdfcf?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">davidalejomarcos</media:title>
		</media:content>
	</item>
		<item>
		<title>How to list files on a directory from Oracle Database.</title>
		<link>http://davidalejomarcos.wordpress.com/2011/09/13/how-to-list-files-on-a-directory-from-oracle-database/</link>
		<comments>http://davidalejomarcos.wordpress.com/2011/09/13/how-to-list-files-on-a-directory-from-oracle-database/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 19:00:44 +0000</pubDate>
		<dc:creator>David Alejo Marcos</dc:creator>
				<category><![CDATA[Exadata]]></category>
		<category><![CDATA[Oracle 11.2]]></category>
		<category><![CDATA[RAC]]></category>
		<category><![CDATA[SQL - PL/SQL]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://davidalejomarcos.wordpress.com/?p=700</guid>
		<description><![CDATA[Couple of days ago I had an interesting request, &#8220;How can I see the contents of nfs_dir&#8221;? The problem: We were using DBFS to store our exports. This was the perfect solution as the business could &#8220;see&#8221; the files on the destination folder, but it did not meet our requirements performance wise on our Exadata. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=700&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Couple of days ago I had an interesting request, &#8220;How can I see the contents of nfs_dir&#8221;?</p>
<p><strong>The problem:</strong></p>
<p>We were using DBFS to store our exports. This was the perfect solution as the business could &#8220;see&#8221; the files on the destination folder, but it did not meet our requirements performance wise on our Exadata.</p>
<p>We have decided to mount NFS and performance did improve, but we had a different problem. NFS is mounted on the database server and business do not have access for security reasons and segregation of duties.</p>
<p>Since then, the export jobs run, but business could not &#8220;see&#8221; what files were created, so the question was asked.</p>
<p><strong>The solution:</strong></p>
<p>After some research I came across with the following package:</p>
<p>SYS.DBMS_BACKUP_RESTORE.searchFiles</p>
<p>I did have to play a little bit, and I finished with the following script:<br />
1.- Create an Oracle type</p>
<p><pre class="brush: sql; wrap-lines: false;">
create type file_array as table of varchar2(100)
/
</pre></p>
<p>2.- Create the function as SYS:</p>
<p><pre class="brush: sql; wrap-lines: false;">
CREATE OR REPLACE FUNCTION LIST_FILES (lp_string IN VARCHAR2 default null)
RETURN file_array pipelined AS

lv_pattern VARCHAR2(1024);
lv_ns VARCHAR2(1024);

BEGIN

SELECT directory_path
INTO lv_pattern
FROM dba_directories
WHERE directory_name = 'NFS_DIR';

SYS.DBMS_BACKUP_RESTORE.SEARCHFILES(lv_pattern, lv_ns);

FOR file_list IN (SELECT FNAME_KRBMSFT AS file_name
FROM X$KRBMSFT
WHERE FNAME_KRBMSFT LIKE '%'|| NVL(lp_string, FNAME_KRBMSFT)||'%' ) LOOP
PIPE ROW(file_list.file_name);
END LOOP;

END;
/
</pre></p>
<p>3.- Grant necessary permissions:</p>
<p><pre class="brush: sql; wrap-lines: false;">
grant execute on LIST_FILES to public;
create public synonym list_files for sys.LIST_FILES;
</pre></p>
<p>4.- Test without WHERE clause:</p>
<p><pre class="brush: sql; wrap-lines: false;">
TESTDB&gt; select * from table(list_files);
COLUMN_VALUE
----------------------------------------------------------------------------------------------------
/nfs/oracle/TESTDB/pump_dir/expdp_TESTDB.log
/nfs/oracle/TESTDB/pump_dir/expdp_TESTDB_piece1.dmp
/nfs/oracle/TESTDB/pump_dir/expdp_TESTDB_piece2.dmp
/nfs/oracle/TESTDB/pump_dir/expdp_TESTDB_piece3.dmp
/nfs/oracle/TESTDB/pump_dir/expdp_TESTDB_piece4.dmp
/nfs/oracle/TESTDB/pump_dir/imdp_piece_TESTDB_09092011.log
/nfs/oracle/TESTDB/pump_dir/expdp_TESTDB_piece1.dmp_old
/nfs/oracle/TESTDB/pump_dir/imdp_piece_TESTDB_12092011.log

8 rows selected.

Elapsed: 00:00:00.10
</pre></p>
<p>5.- Test with WHERE clause:</p>
<p><pre class="brush: sql; wrap-lines: false;">
TESTDB&gt; select * from table(list_files) where column_value like '%dmp%';
COLUMN_VALUE
----------------------------------------------------------------------------------------------------
/nfs/oracle/TESTDB/pump_dir/expdp_TESTDB_piece1.dmp
/nfs/oracle/TESTDB/pump_dir/expdp_TESTDB_piece2.dmp
/nfs/oracle/TESTDB/pump_dir/expdp_TESTDB_piece3.dmp
/nfs/oracle/TESTDB/pump_dir/expdp_TESTDB_piece4.dmp
/nfs/oracle/TESTDB/pump_dir/expdp_TESTDB_piece1.dmp_old

Elapsed: 00:00:00.12
</pre></p>
<p>As always, comments are welcome.</p>
<p>David Alejo-Marcos.</p>
<p>David Marcos Consulting Ltd.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/davidalejomarcos.wordpress.com/700/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/davidalejomarcos.wordpress.com/700/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/davidalejomarcos.wordpress.com/700/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/davidalejomarcos.wordpress.com/700/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/davidalejomarcos.wordpress.com/700/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/davidalejomarcos.wordpress.com/700/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/davidalejomarcos.wordpress.com/700/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/davidalejomarcos.wordpress.com/700/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/davidalejomarcos.wordpress.com/700/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/davidalejomarcos.wordpress.com/700/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/davidalejomarcos.wordpress.com/700/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/davidalejomarcos.wordpress.com/700/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/davidalejomarcos.wordpress.com/700/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/davidalejomarcos.wordpress.com/700/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=700&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://davidalejomarcos.wordpress.com/2011/09/13/how-to-list-files-on-a-directory-from-oracle-database/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6de05e5409b9ff5265b9efbe283cdfcf?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">davidalejomarcos</media:title>
		</media:content>
	</item>
		<item>
		<title>ORA-16072: a minimum of one standby database destination is required</title>
		<link>http://davidalejomarcos.wordpress.com/2011/08/27/ora-16072-a-minimum-of-one-standby-database-destination-is-required/</link>
		<comments>http://davidalejomarcos.wordpress.com/2011/08/27/ora-16072-a-minimum-of-one-standby-database-destination-is-required/#comments</comments>
		<pubDate>Sat, 27 Aug 2011 07:30:08 +0000</pubDate>
		<dc:creator>David Alejo Marcos</dc:creator>
				<category><![CDATA[ASM]]></category>
		<category><![CDATA[Exadata]]></category>
		<category><![CDATA[Oracle 11.2]]></category>
		<category><![CDATA[RAC]]></category>
		<category><![CDATA[RMAN]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[Dataguard]]></category>
		<category><![CDATA[Standby]]></category>

		<guid isPermaLink="false">http://davidalejomarcos.wordpress.com/?p=689</guid>
		<description><![CDATA[This is a quick post regarding the error on the subject. This is the second time it happens to me, so I thought I will write a bit about it. The problem: I am refreshing one of my UAT environments (happens to be a Full Rack Exadata) using Oracle RMAN duplicate command. Then the following [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=689&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This is a quick post regarding the error on the subject. This is the second time it happens to me, so I thought I will write a bit about it.</p>
<p><strong>The problem:</strong></p>
<p>I am refreshing one of my UAT environments (happens to be a Full Rack Exadata) using Oracle RMAN duplicate command. Then the following happens (on both occasions).</p>
<p>1.- Duplicate command fails (lack of space for restoring archivelogs, or any other error). This is can be fixed quite easy.</p>
<p>2.- following error while trying to open the database after restore and recover has finished:</p>
<p><pre class="brush: sql; wrap-lines: false;">
SQL&gt; alter database open;
alter database open
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 13710
Session ID: 1250 Serial number: 5
SQL&gt; exit
</pre></p>
<p>On the alert.log file we can read the following:</p>
<p><pre class="brush: sql; wrap-lines: false;">
Wed Aug 24 13:32:48 2011
alter database open
Wed Aug 24 13:32:49 2011
LGWR: STARTING ARCH PROCESSES
Wed Aug 24 13:32:49 2011
ARC0 started with pid=49, OS id=13950
ARC0: Archival started
LGWR: STARTING ARCH PROCESSES COMPLETE
ARC0: STARTING ARCH PROCESSES
&lt;strong&gt;LGWR: Primary database is in MAXIMUM AVAILABILITY mode&lt;/strong&gt;
&lt;strong&gt;LGWR: Destination LOG_ARCHIVE_DEST_1 is not serviced by LGWR&lt;/strong&gt;
&lt;strong&gt;LGWR: Minimum of 1 LGWR standby database required&lt;/strong&gt;
Errors in file /apps/oracle/server/diag/rdbms/xxxx04/xxxx041/trace/xxxx041_lgwr_13465.trc:
&lt;strong&gt;ORA-16072: a minimum of one standby database destination is required&lt;/strong&gt;
Errors in file /apps/oracle/server/diag/rdbms/xxxx04/xxxx041/trace/xxxx041_lgwr_13465.trc:
ORA-16072: a minimum of one standby database destination is required
LGWR (ospid: 13465): terminating the instance due to error 16072
Wed Aug 24 13:32:50 2011
ARC1 started with pid=48, OS id=13952
Wed Aug 24 13:32:50 2011
System state dump is made for local instance
System State dumped to trace file /apps/oracle/server/diag/rdbms/xxxx04/xxxx041/trace/xxxx041_diag_13137.trc
Trace dumping is performing id=[cdmp_20110824133250]
Instance terminated by LGWR, pid = 13465
</pre></p>
<p><strong>The Solution:</strong></p>
<p>Quite simple:</p>
<p>1.- Start up database in mount mode:</p>
<p><pre class="brush: sql; wrap-lines: false;">
SQL&gt; startup mount

ORACLE instance started.

Total System Global Area 1.7103E+10 bytes
Fixed Size                  2230472 bytes
Variable Size            4731176760 bytes
Database Buffers         1.2180E+10 bytes
Redo Buffers              189497344 bytes
Database mounted.

SQL&gt; select open_mode, DATABASE_ROLE, guard_status, SWITCHOVER_STATUS from v$database;

OPEN_MODE            DATABASE_ROLE    GUARD_S SWITCHOVER_STATUS
-------------------- ---------------- ------- --------------------
MOUNTED              PRIMARY          NONE    NOT ALLOWED
</pre></p>
<p>2.- Execute the following command:</p>
<p><pre class="brush: sql; wrap-lines: false;">
SQL&gt; alter database set standby database to maximize performance;

Database altered.

SQL&gt; select open_mode, DATABASE_ROLE, guard_status, SWITCHOVER_STATUS from v$database;

OPEN_MODE            DATABASE_ROLE    GUARD_S SWITCHOVER_STATUS
-------------------- ---------------- ------- --------------------
MOUNTED              PRIMARY          NONE    NOT ALLOWED
</pre></p>
<p>3.- Stop database:</p>
<p><pre class="brush: sql; wrap-lines: false;">
SQL shutdown immediate
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
</pre></p>
<p>4.- Start up database mount mode:</p>
<p><pre class="brush: sql; wrap-lines: false;">
SQL&gt; startup mount
ORACLE instance started.

Total System Global Area 1.7103E+10 bytes
Fixed Size                  2230472 bytes
Variable Size            4731176760 bytes
Database Buffers         1.2180E+10 bytes
Redo Buffers              189497344 bytes
Database mounted.
</pre></p>
<p>5.- Open database:</p>
<p><pre class="brush: sql; wrap-lines: false;">
SQL&gt; alter database open;

Database altered.

SQL&gt; select open_mode from v$database;

OPEN_MODE
--------------------
READ WRITE

SQL&gt; select instance_name from v$instance;

INSTANCE_NAME
----------------
xxxx041

SQL&gt;
</pre></p>
<p>As always, comments are welcome.</p>
<p>David Alejo-Marcos.</p>
<p>David Marcos Consulting Ltd.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/davidalejomarcos.wordpress.com/689/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/davidalejomarcos.wordpress.com/689/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/davidalejomarcos.wordpress.com/689/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/davidalejomarcos.wordpress.com/689/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/davidalejomarcos.wordpress.com/689/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/davidalejomarcos.wordpress.com/689/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/davidalejomarcos.wordpress.com/689/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/davidalejomarcos.wordpress.com/689/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/davidalejomarcos.wordpress.com/689/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/davidalejomarcos.wordpress.com/689/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/davidalejomarcos.wordpress.com/689/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/davidalejomarcos.wordpress.com/689/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/davidalejomarcos.wordpress.com/689/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/davidalejomarcos.wordpress.com/689/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=689&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://davidalejomarcos.wordpress.com/2011/08/27/ora-16072-a-minimum-of-one-standby-database-destination-is-required/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6de05e5409b9ff5265b9efbe283cdfcf?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">davidalejomarcos</media:title>
		</media:content>
	</item>
		<item>
		<title>How to transfer files from ASM to another ASM or filesystem or DBFS&#8230;</title>
		<link>http://davidalejomarcos.wordpress.com/2011/07/23/how-to-transfer-files-from-asm-to-another-asm-or-filesystem-or-dbfs/</link>
		<comments>http://davidalejomarcos.wordpress.com/2011/07/23/how-to-transfer-files-from-asm-to-another-asm-or-filesystem-or-dbfs/#comments</comments>
		<pubDate>Sat, 23 Jul 2011 11:52:34 +0000</pubDate>
		<dc:creator>David Alejo Marcos</dc:creator>
				<category><![CDATA[ASM]]></category>
		<category><![CDATA[Exadata]]></category>
		<category><![CDATA[Oracle 11.2]]></category>

		<guid isPermaLink="false">http://davidalejomarcos.wordpress.com/?p=656</guid>
		<description><![CDATA[I had a requirement of transferring files from our PROD ASM to our UAT ASM as DBFS is proving to be slow. The problem: We are currently refreshing UAT schemas using Oracle Datapump to DBFS and then transferring those files to UAT using SCP. DBFS does not provided us with the performance we need as [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=656&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I had a requirement of transferring files from our PROD ASM to our UAT ASM as DBFS is proving to be slow.</p>
<p><strong>The problem:</strong></p>
<p>We are currently refreshing UAT schemas using Oracle Datapump to DBFS and then transferring those files to UAT using SCP.</p>
<p>DBFS does not provided us with the performance we need as datapump files are quite big. Same export onto ASM or NFS proves to be much, much faster.</p>
<p>We are currently testing exports to ASM, but, how to move dmp files from PROD ASM to UAT ASM?</p>
<p><strong>The solution:</strong></p>
<p>The answer for us is using DBMS_FILE_TRANSFER. It is very simple to set up (steps below) and it has proved to be fast.</p>
<p>DBMS_FILE_TRANSFER will copy files from one ORACLE DIRECTORY to another ORACLE DIRECTORY. The directory can point to a folder on ASM, DBFS, Filesystem, etc, so the transfer is &#8220;heterogeneous&#8221;.</p>
<p>I decided to go for GET_FILE, so most of the work will be done on UAT, the other option is PUT_FILE.</p>
<p>The syntax is as follows:</p>
<p><pre class="brush: sql; wrap-lines: false;">
DBMS_FILE_TRANSFER.GET_FILE (
source_directory_object      IN  VARCHAR2,
source_file_name             IN  VARCHAR2,
source_database              IN  VARCHAR2,
destination_directory_object IN  VARCHAR2,
destination_file_name        IN  VARCHAR2);
</pre></p>
<p>Where:</p>
<p><strong>source_directory_object</strong>: The directory object from which the file is copied at the source site. This directory object must exist at the source site.</p>
<p><strong>source_file_name</strong>: The name of the file that is copied in the remote file system. This file must exist in the remote file system in the directory associated with the source directory object.</p>
<p><strong>source_database</strong>: The name of a database link to the remote database where the file is located.</p>
<p><strong>destination_directory_object</strong>: The directory object into which the file is placed at the destination site. This directory object must exist in the local file system.</p>
<p><strong>destination_file_name:</strong> The name of the file copied to the local file system. A file with the same name must not exist in the destination directory in the local file system.</p>
<p>These are the steps for my test:</p>
<p>1.- Create directory on destination:</p>
<p><pre class="brush: sql; wrap-lines: false;">
oracle@sssss (+ASM1)$ asmcmd
ASMCMD&gt; mkdir +DATA/DPUMP
ASMCMD&gt; mkdir +DATA/DPUMP/sid
ASMCMD&gt; exit
</pre></p>
<p>2.- Create directory on database</p>
<p><pre class="brush: sql; wrap-lines: false;">
SQL&gt; create directory SID_ASM_DPUMP_DIR as '+DATA/DPUMP/sid';

Directory created.

SQL&gt; grant read, write, execute on directory SID_ASM_DPUMP_DIR to public;

Grant succeeded.
</pre></p>
<p>3.- Transfer file</p>
<p><pre class="brush: sql; wrap-lines: false;">
SQL&gt; set timing on time on
17:22:13 SQL&gt; BEGIN
17:22:17   2  dbms_file_transfer.get_file ('SID_ASM_DPUMP_DIR',
17:22:17   3                               'expdp.dmp',
17:22:17   4                               'TESTSRC',
17:22:17   5                               'SID_ASM_DPUMP_DIR',
17:22:17   6                               'expdp.dmp');
17:22:17   7  END;
17:22:17   8
17:22:17   9  /
PL/SQL procedure successfully completed.
Elapsed: 00:01:07.57
17:23:31 SQL&gt;
</pre></p>
<p>4.- Check files is on destination:</p>
<p><pre class="brush: sql; wrap-lines: false;">
ASMCMD [+DATA/DPUMP/sid] &gt; ls -ls
Type     Redund  Striped  Time             Sys  Name
N    expdp.dmp =&gt; +DATA/sid/DUMPSET/FILE_TRANSFER_0_0.797.756840143
</pre></p>
<p>OK, so ls -ls does not work show us the size of the file on the destination directory. The reason is because it is an alias, you need to perform ls -s on the directory where the file is stored.</p>
<p><pre class="brush: sql; wrap-lines: false;">
ASMCMD [+DATA/DPUMP/sid] &gt; ls -ls +DATA/sid/DUMPSET/
Type     Redund  Striped  Time             Sys  Block_Size   Blocks       Bytes        Space  Name
DUMPSET  MIRROR  COARSE   JUL 18 17:00:00  Y          4096  1784576  7309623296  14633926656  FILE_TRANSFER_0_0.797.756840143
</pre></p>
<p>So, we have managed to transfer 6.8GB of data between two remote servers in 1 minute 8 seconds&#8230; not bad.</p>
<p>As always, comments are welcome.</p>
<p>David Alejo-Marcos.</p>
<p>David Marcos Consulting Ltd.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/davidalejomarcos.wordpress.com/656/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/davidalejomarcos.wordpress.com/656/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/davidalejomarcos.wordpress.com/656/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/davidalejomarcos.wordpress.com/656/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/davidalejomarcos.wordpress.com/656/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/davidalejomarcos.wordpress.com/656/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/davidalejomarcos.wordpress.com/656/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/davidalejomarcos.wordpress.com/656/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/davidalejomarcos.wordpress.com/656/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/davidalejomarcos.wordpress.com/656/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/davidalejomarcos.wordpress.com/656/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/davidalejomarcos.wordpress.com/656/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/davidalejomarcos.wordpress.com/656/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/davidalejomarcos.wordpress.com/656/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=656&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://davidalejomarcos.wordpress.com/2011/07/23/how-to-transfer-files-from-asm-to-another-asm-or-filesystem-or-dbfs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6de05e5409b9ff5265b9efbe283cdfcf?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">davidalejomarcos</media:title>
		</media:content>
	</item>
		<item>
		<title>Archive area +RECO has -7440384 free KB remaining (Usable_file_MB is negative)</title>
		<link>http://davidalejomarcos.wordpress.com/2011/07/17/archive-area-reco-has-7440384-free-kb-remaining-usable_file_mb-is-negative/</link>
		<comments>http://davidalejomarcos.wordpress.com/2011/07/17/archive-area-reco-has-7440384-free-kb-remaining-usable_file_mb-is-negative/#comments</comments>
		<pubDate>Sun, 17 Jul 2011 16:58:27 +0000</pubDate>
		<dc:creator>David Alejo Marcos</dc:creator>
				<category><![CDATA[ASM]]></category>
		<category><![CDATA[Exadata]]></category>
		<category><![CDATA[Oracle 11.2]]></category>
		<category><![CDATA[RMAN]]></category>

		<guid isPermaLink="false">http://davidalejomarcos.wordpress.com/?p=647</guid>
		<description><![CDATA[I must say, this has been a busy weekend. We have been promoting a release to production and a guaranteed restore point was created on Friday as rollback strategy. On Sunday I was called as we started to receive alerts. The problem: Our monitoring system started to send emails and SNMP Traps with the following [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=647&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I must say, this has been a busy weekend.</p>
<p>We have been promoting a release to production and a guaranteed restore point was created on Friday as rollback strategy. On Sunday I was called as we started to receive alerts.</p>
<p><strong>The problem:</strong></p>
<p>Our monitoring system started to send emails and SNMP Traps with the following alerts:</p>
<p><pre class="brush: sql; wrap-lines: false;">
OEM alert for Automatic Storage Management +ASM4_ssssss4: Disk group RECO has used 100% of safely usable free space. (Current Disk Group Used % of Safely Usable value: 100)
OEM alert for Automatic Storage Management +ASM2_ssssss2: Disk group RECO has used 100% of safely usable free space. (Current Disk Group Used % of Safely Usable value: 100)
OEM alert for Automatic Storage Management +ASM3_ssssss3: Disk group RECO has used 100% of safely usable free space. (Current Disk Group Used % of Safely Usable value: 100)
OEM alert for Automatic Storage Management +ASM7_ssssss7: Disk group RECO has used 100% of safely usable free space. (Current Disk Group Used % of Safely Usable value: 100)
OEM alert for Automatic Storage Management +ASM8_ssssss8: Disk group RECO has used 100% of safely usable free space. (Current Disk Group Used % of Safely Usable value: 100)
OEM alert for Automatic Storage Management +ASM6_ssssss6: Disk group RECO has used 100% of safely usable free space. (Current Disk Group Used % of Safely Usable value: 100)
OEM alert for Automatic Storage Management +ASM1_ssssss1: Disk group RECO has used 100% of safely usable free space. (Current Disk Group Used % of Safely Usable value: 100)
OEM alert for Automatic Storage Management +ASM5_ssssss5: Disk group RECO has used 100% of safely usable free space. (Current Disk Group Used % of Safely Usable value: 100)
OEM alert for Database Instance : Archive area +RECO has -7440384 free KB remaining. #Current Free Archive Area #KB# value: -7440384#
OEM alert for Database Instance : Archive area +RECO has -21725184 free KB remaining. (Current Free Archive Area (KB) value: -21725184)
</pre></p>
<p>Not very nice in any situation, but not when you are in the middle of a critical, high visible release.</p>
<p>I did have a look and this is what I found.</p>
<p><strong>The solution:</strong></p>
<p>The first thing I did was to check the Flash Recovery Area, as it is configured to write to our +RECO diskgroup:</p>
<p><pre class="brush: sql; wrap-lines: false;">
NAME                    USED_MB   LIMIT_MB   PCT_USED
-------------------- ---------- ---------- ----------
+RECO                   1630569    2048000      79.62
Elapsed: 00:00:00.12
FILE_TYPE            PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------------- ------------------ ------------------------- ---------------
CONTROL FILE                          0                         0               1
REDO LOG                              0                         0               0
ARCHIVED LOG                          0                         0               0
BACKUP PIECE                      75.66                     75.66              86
IMAGE COPY                            0                         0               0
FLASHBACK LOG                      3.96                         0             707
FOREIGN ARCHIVED LOG                  0                         0               0
7 rows selected.
Elapsed: 00:00:01.62
</pre></p>
<p>Numbers did look ok, some backup files could be reclaimed (Oracle should do it automatically). Lets have a look the ASM:</p>
<p><pre class="brush: sql; wrap-lines: false;">
oracle@ssss (+ASM1)$ asmcmd lsdg
State    Type    Rebal  Sector  Block       AU  Total_MB   Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name
MOUNTED  NORMAL  N         512   4096  4194304  55050240  26568696          5004567        10782064              0             N  DATA/
MOUNTED  NORMAL  N         512   4096  4194304  35900928   3192844          3263720          -35438              0             N  RECO/
MOUNTED  NORMAL  N         512   4096  4194304   4175360   4061640           379578         1841031              0             N  SYSTEMDG/
Elapsed: 00:00:01.62
</pre></p>
<p>Bingo, this is where our problem is. USABLE_FILE_MB (+RECO diskgroup) indicates the amount of free space that can be utilized, including the mirroring space, and being able to restore redundancy after a disk failure. A negative number on this column, could be critical in case of disk failure for the system as we might not have enough space perform a restore of all files to the surviving of disk.</p>
<p>Our backups goes to ASM and we copy them to tape afterwards. Our retention policy on disk is between 2 or 3 days, depending of the systems.</p>
<p>When I did check the contents of the backupset on ASM I found some old backups:</p>
<p><pre class="brush: sql; wrap-lines: false;">
Type  Redund  Striped  Time             Sys  Name
Y    2011_07_17/
Y    2011_07_16/
Y    2011_07_15/
Y    2011_07_14/
Y    2011_07_13/
Y    2011_07_12/
Elapsed: 00:00:01.62
</pre></p>
<p>To delete those old backups I executed the following script from RMAN:</p>
<p><pre class="brush: sql; wrap-lines: false;">
RMAN&gt; delete backup tag EOD_DLY_110712 device type disk;
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1430 instance=&lt;instance&gt; device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=2138 instance=&lt;instance&gt; device type=DISK
allocated channel: ORA_DISK_3
channel ORA_DISK_3: SID=8 instance=&lt;instance&gt; device type=DISK
allocated channel: ORA_DISK_4
channel ORA_DISK_4: SID=150 instance=&lt;instance&gt; device type=DISK
List of Backup Pieces
BP Key  BS Key  Pc# Cp# Status      Device Type Piece Name
------- ------- --- --- ----------- ----------- ----------
8292    4020    1   1   AVAILABLE   DISK        +RECO//backupset/2011_07_12/sssss_eod_dly_110712_0.nnnn.nnnnn
8293    4021    1   1   AVAILABLE   DISK        +RECO//backupset/2011_07_12/sssss_eod_dly_110712_0.nnnn.nnnnn
Do you really want to delete the above objects (enter YES or NO)? yes
deleted backup piece
backup piece handle=+RECO//backupset/2011_07_12/sssss_eod_dly_110712_0.nnnn.nnnnnn RECID=8292 STAMP=nnnn
deleted backup piece
backup piece handle=+RECO//backupset/2011_07_12/sssss_eod_dly_110712_0.nnnn.nnnnnn RECID=8293 STAMP=nnnn
Deleted 2 objects
Elapsed: 00:00:01.62
</pre></p>
<p>After deleting a two more old backups, the number looked much better:</p>
<p><pre class="brush: sql; wrap-lines: false;">
State    Type    Rebal  Sector  Block       AU  Total_MB   Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name
MOUNTED  NORMAL  N         512   4096  4194304  55050240  26568696          5004567        10782064              0             N  DATA/
MOUNTED  NORMAL  N         512   4096  4194304  35900928   3548260          3263720          142270              0             N  RECO/
MOUNTED  NORMAL  N         512   4096  4194304   4175360   4061640           379578         1841031              0             N  SYSTEMDG/
</pre></p>
<p>Note.- There is another temporary fix. I could changed db_recovery_file_dest to point to +DATA instead of +RECO, but as we have a guaranteed restore point, I thought releasing space from old backups was easier.</p>
<p>As always, comments are welcome.</p>
<p>David Alejo-Marcos.</p>
<p>David Marcos Consulting Ltd.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/davidalejomarcos.wordpress.com/647/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/davidalejomarcos.wordpress.com/647/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/davidalejomarcos.wordpress.com/647/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/davidalejomarcos.wordpress.com/647/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/davidalejomarcos.wordpress.com/647/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/davidalejomarcos.wordpress.com/647/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/davidalejomarcos.wordpress.com/647/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/davidalejomarcos.wordpress.com/647/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/davidalejomarcos.wordpress.com/647/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/davidalejomarcos.wordpress.com/647/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/davidalejomarcos.wordpress.com/647/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/davidalejomarcos.wordpress.com/647/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/davidalejomarcos.wordpress.com/647/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/davidalejomarcos.wordpress.com/647/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=647&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://davidalejomarcos.wordpress.com/2011/07/17/archive-area-reco-has-7440384-free-kb-remaining-usable_file_mb-is-negative/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6de05e5409b9ff5265b9efbe283cdfcf?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">davidalejomarcos</media:title>
		</media:content>
	</item>
		<item>
		<title>Exadata Administration &#8211; CellCLI</title>
		<link>http://davidalejomarcos.wordpress.com/2011/07/16/exadata-administration-cellcli/</link>
		<comments>http://davidalejomarcos.wordpress.com/2011/07/16/exadata-administration-cellcli/#comments</comments>
		<pubDate>Sat, 16 Jul 2011 17:08:40 +0000</pubDate>
		<dc:creator>David Alejo Marcos</dc:creator>
				<category><![CDATA[Exadata]]></category>
		<category><![CDATA[Oracle 11.2]]></category>

		<guid isPermaLink="false">http://davidalejomarcos.wordpress.com/?p=635</guid>
		<description><![CDATA[One of the big differences between Exadata and Non-Exadata systems is the necessity to administer the Exadata Storage Server. The first time you have to configure the Server side, it has to be done through KVM (Keyboard, Video, Mouse), meaning you will need to be physically near your server. Once the initial configuration steps have [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=635&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One of the big differences between Exadata and Non-Exadata systems is the necessity to administer the Exadata Storage Server.</p>
<p>The first time you have to configure the Server side, it has to be done through KVM (Keyboard, Video, Mouse), meaning you will need to be physically near your server. Once the initial configuration steps have been performed, we shall be able to administer the Exadata Storage Servers over the network (i.e. SSH protocol or redirect the KVM console to your desktop using the Sun Integrated Lights Out Management &#8211; ILOM &#8211; remote client).</p>
<p>Once you are in the server, some tools will be available to us, including Cell Command Line Interface (CellCLI).</p>
<p>CellCLI is only available on the Storage Server. If we need to execute it from outside the storage server (or on more than one storage server), we will need to use the Distributed Command Line Interface (dcli).</p>
<p>CellCLI will allow us to perform administration task like startup, shut down, monitoring activities as well as maintenance.</p>
<p>The syntax to follow is:</p>
<p>[admin command / object command] [options];</p>
<p>Being:</p>
<p>1.- Admin Commands: Administration actions like START, QUIT, HELP, SPOOL.</p>
<p>2.- Object Command: Administration action to be performed on the cell objects like ALTER, CREATE, LIST.</p>
<p>3.- Options: Will allow us to specify additional parameters to the command.</p>
<p><pre class="brush: sql; wrap-lines: false;">
[celladmin@ssssss ~]$ cellcli

CellCLI: Release 11.2.2.2.0 - Production on Sat Jul 16 17:28:08 BST 2011

Copyright (c) 2007, 2009, Oracle. All rights reserved.
Cell Efficiency Ratio: 17

CellCLI&gt; list cell
ssss_admin online

CellCLI&gt; exit
quitting
</pre></p>
<p>If you prefer to execute the command from command-line, we will have to use -e:</p>
<p><pre class="brush: sql; wrap-lines: false;">
[celladmin@ssssss ~]$ cellcli -e list cell
ssss_admin online
[celladmin@ssssss ~]$
</pre></p>
<p>Or</p>
<p><pre class="brush: sql; wrap-lines: false;">
[celladmin@sssss ~]$ cellcli -e help

 HELP [topic]
 Available Topics:
 ALTER
 ALTER ALERTHISTORY
 ALTER CELL
 ALTER CELLDISK
 ALTER GRIDDISK
 ALTER IORMPLAN
 ALTER LUN
 ALTER PHYSICALDISK
 ALTER QUARANTINE
 ALTER THRESHOLD
 ASSIGN KEY
 CALIBRATE
 CREATE
 CREATE CELL
 CREATE CELLDISK
 CREATE FLASHCACHE
 CREATE GRIDDISK
 CREATE KEY
 CREATE QUARANTINE
 CREATE THRESHOLD
 DESCRIBE
 DROP
 DROP ALERTHISTORY
 DROP CELL
 DROP CELLDISK
 DROP FLASHCACHE
 DROP GRIDDISK
 DROP QUARANTINE
 DROP THRESHOLD
 EXPORT CELLDISK
 IMPORT CELLDISK
 LIST
 LIST ACTIVEREQUEST
 LIST ALERTDEFINITION
 LIST ALERTHISTORY
 LIST CELL
 LIST CELLDISK
 LIST FLASHCACHE
 LIST FLASHCACHECONTENT
 LIST GRIDDISK
 LIST IORMPLAN
 LIST KEY
 LIST LUN
 LIST METRICCURRENT
 LIST METRICDEFINITION
 LIST METRICHISTORY
 LIST PHYSICALDISK
 LIST QUARANTINE
 LIST THRESHOLD
 SET
 SPOOL
 START
[celladmin@ssssss ~]$
</pre></p>
<p>so, what about security?, CellCLI does rely on OS authentication.</p>
<p>There are three predefined users on the Exadata Storage Server:<br />
1.- cellmonitor: This user can perform monitoring tasks.<br />
2.- cellamin: This user can perform most of the administration task such CREATE, ALTER, MODIFY cell objects (cannot perform CALIBRATE).<br />
3.- root: This user has super-user privileges.</p>
<p>I plan my next post to be about dcli and how to minimise work by executing the same CellCLI command on more than one Exadata Storage Server without having to log in on all of them.</p>
<p>As always, comments are welcome.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/davidalejomarcos.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/davidalejomarcos.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/davidalejomarcos.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/davidalejomarcos.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/davidalejomarcos.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/davidalejomarcos.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/davidalejomarcos.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/davidalejomarcos.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/davidalejomarcos.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/davidalejomarcos.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/davidalejomarcos.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/davidalejomarcos.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/davidalejomarcos.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/davidalejomarcos.wordpress.com/635/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=635&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://davidalejomarcos.wordpress.com/2011/07/16/exadata-administration-cellcli/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6de05e5409b9ff5265b9efbe283cdfcf?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">davidalejomarcos</media:title>
		</media:content>
	</item>
		<item>
		<title>Smart scan on Exadata and direct path reads.</title>
		<link>http://davidalejomarcos.wordpress.com/2011/07/10/smart-scan-on-exadata-and-direct-path-reads/</link>
		<comments>http://davidalejomarcos.wordpress.com/2011/07/10/smart-scan-on-exadata-and-direct-path-reads/#comments</comments>
		<pubDate>Sun, 10 Jul 2011 15:56:41 +0000</pubDate>
		<dc:creator>David Alejo Marcos</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://davidalejomarcos.wordpress.com/?p=620</guid>
		<description><![CDATA[Couple of days ago I was called to investigate a performance problem on one of our developement databases. People complained of slowness without much indication of what was slow. Production, DR and UAT are running on a full rack Exadata machine while development runs on a single server. The problem: Database is slow. This is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=620&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Couple of days ago I was called to investigate a performance problem on one of our developement databases. People complained of slowness without much indication of what was slow.</p>
<p>Production, DR and UAT are running on a full rack Exadata machine while development runs on a single server.</p>
<p><strong>The problem:</strong></p>
<p>Database is slow. This is what I was given to start with. After monitoring the system I did notice several sessions where performing direct path reads, db file scattered read and some other events.</p>
<p>I am aware of some people having experienced problems with Oracle doing direct path reads instead of db scattered reads so I thought we might be having the same problem.</p>
<p><strong>The solution:</strong></p>
<p>To cut a long story short, direct path reads was not our problem, at least not this time. I managed to find a long running session consuming many of the database resources. The session was running for 7 days, details below:</p>
<p><pre class="brush: sql; wrap-lines: false;">
SQL Text
------------------------------
UPDATE ....
Global Information
------------------------------
 Status                                 :  EXECUTING
 Duration                               :  613427s
Global Stats
======================================================================================
| Elapsed |   Cpu   |    IO    | Concurrency | Buffer | Read | Read  | Write | Write |
| Time(s) | Time(s) | Waits(s) |  Waits(s)   |  Gets  | Reqs | Bytes | Reqs  | Bytes |
======================================================================================
|  617320 |   64631 |   552688 |        0.82 |   619M |  52M |   6TB |   47M |   2TB |
======================================================================================
SQL Plan Monitoring Details (Plan Hash Value=2108859552)
============================================================================================================================================================================================
| Id    |            Operation             |   Name    |  Rows   | Cost  |   Time    | Start  | Execs |   Rows   | Read  | Read  | Write | Write | Mem | Temp | Activity | Activity Detail |
|       |                                  |           | (Estim) |       | Active(s) | Active |       | (Actual) | Reqs  | Bytes | Reqs  | Bytes |     |      |   (%)    |   (# samples)   |
============================================================================================================================================================================================
|     0 | UPDATE STATEMENT                 |           |         |       |           |        |     1 |          |       |       |       |       |     |      |          |                 |
|     1 |   UPDATE                         | TABLE1    |         |       |           |        |     1 |          |       |       |       |       |     |      |          |                 |
|     2 |    FILTER                        |           |         |       |    613362 |    +63 |     1 |        0 |       |       |       |       |     |      |          |                 |
|     3 |     NESTED LOOPS                 |           |         |       |    613362 |    +63 |     1 |     6905 |       |       |       |       |     |      |          |                 |
|     4 |      NESTED LOOPS                |           |       9 | 27146 |    613362 |    +63 |     1 |     108K |       |       |       |       |     |      |          |                 |
|     5 |       SORT UNIQUE                |           |     839 | 24624 |    613405 |    +20 |     1 |     6905 |    38 |   7MB |  1243 | 257MB | 10M | 333M |          |                 |
|     6 |        TABLE ACCESS FULL         | TABLE1    |     839 | 24624 |        44 |    +20 |     1 |       5M |  1029 | 499MB |       |       |     |      |          |                 |
|  -&gt; 7 |       INDEX RANGE SCAN           | INDEX01   |       6 |     2 |    613364 |    +63 |  6905 |     108K |   792 |   6MB |       |       |     |      |          |                 |
|  -&gt; 8 |      TABLE ACCESS BY INDEX ROWID | TABLE1    |       1 |     6 |    613364 |    +63 |  108K |     6905 | 48839 | 382MB |       |       |     |      |          |                 |
|     9 |     FILTER                       |           |         |       |    613334 |    +91 |  6905 |     6904 |       |       |       |       |     |      |          |                 |
|    10 |      HASH GROUP BY               |           |     798 | 24625 |    252603 |    +65 |  6905 |       4G |   24M |   1TB |   47M | 488GB | 14M |   8M |          |                 |
| -&gt; 11 |       TABLE ACCESS FULL          | TABLE1    |     839 | 24624 |    613364 |    +63 |  6905 |       4G |   29M | 416GB |       |       |     |      |          |                 |
============================================================================================================================================================================================</pre></p>
<p>impressive, right?</p>
<p>The query was terminated and it is being reviewed on development but, why didn&#8217;t we have problems on prod?</p>
<p>It is my believe the reason is called smart scan on the Exadata storage <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
<p>Lets have a look how the query looks on Prod:</p>
<p>1.- is it enabled?</p>
<p><pre class="brush: sql; wrap-lines: false;">
PROD&gt; show parameter cell_offload_processing
NAME                     TYPE     VALUE
-----------------------  -------- ------------------------------
cell_offload_processing  boolean  TRUE
</pre></p>
<p>2.- Check the explain plan:</p>
<p><pre class="brush: sql; wrap-lines: false;">
SQL&gt;  SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR(sql_id =&gt;'4xxxxxxxj',format =&gt;'ALLSTATS LAST'));
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
| Id  | Operation                      | Name      | E-Rows |  OMem |  1Mem | Used-Mem |
----------------------------------------------------------------------------------------
|   0 | UPDATE STATEMENT               |           |        |       |       |          |
|   1 |  UPDATE                        | TABLE1    |        |       |       |          |
|*  2 |   HASH JOIN ANTI               |           |      9 |  3957K|  1689K| 4524K (0)|
|   3 |    NESTED LOOPS                |           |        |       |       |          |
|   4 |     NESTED LOOPS               |           |      9 |       |       |          |
|   5 |      SORT UNIQUE               |           |    839 |  2037K|   607K| 1810K (0)|
|*  6 |       TABLE ACCESS STORAGE FULL| TABLE1    |    839 |       |       |          |
|*  7 |      INDEX RANGE SCAN          | INDEX01   |      6 |       |       |          |
|*  8 |     TABLE ACCESS BY INDEX ROWID| TABLE1    |      1 |       |       |          |
|   9 |    VIEW                        | VW_NSO_1  |    839 |       |       |          |
|  10 |     SORT GROUP BY              |           |    839 |  2250K|   629K| 1999K (0)|
|* 11 |      TABLE ACCESS STORAGE FULL | TABLE1    |    839 |       |       |          |
----------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access(&quot;COL_ID&quot;=TO_NUMBER(&quot;COL_ID&quot;))
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
   6 - storage((&quot;COL01&quot;=:B2 AND NVL(&quot;COL02&quot;,'N')='N' AND &quot;COL04&quot;=:B3
              AND &quot;COL03&quot;=TO_NUMBER(:B1)))
       filter((&quot;COL01&quot;=:B2 AND NVL(&quot;COL02&quot;,'N')='N' AND &quot;COL04&quot;=:B3
              AND &quot;COL03&quot;=TO_NUMBER(:B1)))
   7 - access(&quot;COL05&quot;=&quot;COL05&quot; AND &quot;COL06&quot;=&quot;COL06&quot; AND
              &quot;COL07&quot;=&quot;COL07&quot;)
   8 - filter((NVL(&quot;COL02&quot;,'N')='N' AND &quot;COL08&quot;=&quot;COL08&quot;))
  11 - storage((&quot;COL01&quot;=:B2 AND NVL(&quot;COL02&quot;,'N')='N' AND &quot;COL04&quot;=:B3
              AND &quot;COL03&quot;=TO_NUMBER(:B1)))
       filter((&quot;COL01&quot;=:B2 AND NVL(&quot;COL02&quot;,'N')='N' AND &quot;COL04&quot;=:B3
              AND &quot;COL03&quot;=TO_NUMBER(:B1)))
</pre></p>
<p>On the plan_table_output, we see <strong>storage</strong>, indicating smart scan was being used, being the runtime 73 seconds:</p>
<p><pre class="brush: sql; wrap-lines: false;">
PROD&gt; select sql_id, executions, elapsed_time/1000000 from gv$sql
  2  where sql_id = '4xxxxxxxj';
SQL_ID        EXECUTIONS ELAPSED_TIME/1000000
------------- ---------- --------------------
'4xxxxxxxj'          1            73.166979
</pre></p>
<p>I must say, I am quite impressed with Exadata but, would it make it more difficult to spot bad queries?</p>
<p>As always, comments are welcome.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/davidalejomarcos.wordpress.com/620/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/davidalejomarcos.wordpress.com/620/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/davidalejomarcos.wordpress.com/620/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/davidalejomarcos.wordpress.com/620/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/davidalejomarcos.wordpress.com/620/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/davidalejomarcos.wordpress.com/620/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/davidalejomarcos.wordpress.com/620/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/davidalejomarcos.wordpress.com/620/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/davidalejomarcos.wordpress.com/620/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/davidalejomarcos.wordpress.com/620/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/davidalejomarcos.wordpress.com/620/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/davidalejomarcos.wordpress.com/620/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/davidalejomarcos.wordpress.com/620/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/davidalejomarcos.wordpress.com/620/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=620&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://davidalejomarcos.wordpress.com/2011/07/10/smart-scan-on-exadata-and-direct-path-reads/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6de05e5409b9ff5265b9efbe283cdfcf?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">davidalejomarcos</media:title>
		</media:content>
	</item>
		<item>
		<title>Check status voting disk.</title>
		<link>http://davidalejomarcos.wordpress.com/2011/07/06/check-status-voting-disk/</link>
		<comments>http://davidalejomarcos.wordpress.com/2011/07/06/check-status-voting-disk/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 12:46:14 +0000</pubDate>
		<dc:creator>David Alejo Marcos</dc:creator>
				<category><![CDATA[Exadata]]></category>
		<category><![CDATA[Oracle 11.2]]></category>
		<category><![CDATA[RAC]]></category>

		<guid isPermaLink="false">http://davidalejomarcos.wordpress.com/?p=612</guid>
		<description><![CDATA[This is a quick blog as to how to check the status of Voting Disks. The problem: You receive a call/email from you 1st line support with something similar to: The solution: Easy to check using crsctl: As always, comments are welcome.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=612&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This is a quick blog as to how to check the status of Voting Disks.</p>
<p><strong>The problem:</strong></p>
<p>You receive a call/email from you 1st line support with something similar to:</p>
<p><pre class="brush: sql; wrap-lines: false;">
----
[cssd(9956)]CRS-1604:CSSD voting file is offline: o/xxx.xxx.xx.xx/SYSTEMDG_CD_05_SSSSSin; details at (:CSSNM00058:) in /apps/oracle/grid_11.2/log/sssss/cssd/ocssd.log.
----
</pre></p>
<p><strong>The solution:</strong></p>
<p>Easy to check using crsctl:</p>
<p><pre class="brush: sql; wrap-lines: false;">
oracle$ crsctl query css votedisk

## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE a0a559213xxxxxxffa67c2df0fdc12 (o/xxx.xxx.xx.xx/SYSTEMDG_CD_05_SSSSSin) [SYSTEMDG]
2. ONLINE 121231203xxxxxxfc4523c5c34d900 (o/xxx.xxx.xx.xx/SYSTEMDG_CD_05_SSSSSin) [SYSTEMDG]
3. ONLINE a6b3c0281xxxxxxf3f6f9f1fd230ea (o/xxx.xxx.xx.xx/SYSTEMDG_CD_05_SSSSSin) [SYSTEMDG]

Located 3 voting disk(s).
</pre></p>
<p>As always, comments are welcome.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/davidalejomarcos.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/davidalejomarcos.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/davidalejomarcos.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/davidalejomarcos.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/davidalejomarcos.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/davidalejomarcos.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/davidalejomarcos.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/davidalejomarcos.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/davidalejomarcos.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/davidalejomarcos.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/davidalejomarcos.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/davidalejomarcos.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/davidalejomarcos.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/davidalejomarcos.wordpress.com/612/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=612&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://davidalejomarcos.wordpress.com/2011/07/06/check-status-voting-disk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6de05e5409b9ff5265b9efbe283cdfcf?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">davidalejomarcos</media:title>
		</media:content>
	</item>
		<item>
		<title>Getting into Exadata.</title>
		<link>http://davidalejomarcos.wordpress.com/2011/06/25/getting-into-exadata/</link>
		<comments>http://davidalejomarcos.wordpress.com/2011/06/25/getting-into-exadata/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 19:23:51 +0000</pubDate>
		<dc:creator>David Alejo Marcos</dc:creator>
				<category><![CDATA[Exadata]]></category>

		<guid isPermaLink="false">http://davidalejomarcos.wordpress.com/?p=577</guid>
		<description><![CDATA[It has been some time since I wrote on my blog, mostly due to work commitments. There has also been some important changes in my life among them, starting my own company; David Marcos Consulting Ltd. I have also being lucky to start working with Oracle Exadata. I will start posting very soon regarding my [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=577&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It has been some time since I wrote on my blog, mostly due to work commitments.</p>
<p>There has also been some important changes in my life among them, starting my own company; David Marcos Consulting Ltd.</p>
<p>I have also being lucky to start working with Oracle Exadata.</p>
<p>I will start posting very soon regarding my impression, findings, etc on Oracle Exadata but, I must admit, I am very excited to be able to work  on Oracle latest product.</p>
<p>As always, comments are welcome.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/davidalejomarcos.wordpress.com/577/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/davidalejomarcos.wordpress.com/577/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/davidalejomarcos.wordpress.com/577/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/davidalejomarcos.wordpress.com/577/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/davidalejomarcos.wordpress.com/577/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/davidalejomarcos.wordpress.com/577/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/davidalejomarcos.wordpress.com/577/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/davidalejomarcos.wordpress.com/577/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/davidalejomarcos.wordpress.com/577/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/davidalejomarcos.wordpress.com/577/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/davidalejomarcos.wordpress.com/577/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/davidalejomarcos.wordpress.com/577/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/davidalejomarcos.wordpress.com/577/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/davidalejomarcos.wordpress.com/577/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=davidalejomarcos.wordpress.com&amp;blog=10185493&amp;post=577&amp;subd=davidalejomarcos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://davidalejomarcos.wordpress.com/2011/06/25/getting-into-exadata/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6de05e5409b9ff5265b9efbe283cdfcf?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">davidalejomarcos</media:title>
		</media:content>
	</item>
	</channel>
</rss>
