<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-13265058</id><updated>2012-05-21T16:10:53.799+10:00</updated><category term="interval" /><category term="non-oracle" /><category term="teradata" /><category term="apex" /><category term="beer" /><category term="proxy" /><category term="postgres" /><category term="meetup" /><category term="SQL" /><category term="autonomous transaction" /><category term="debugging" /><category term="characters" /><category term="books" /><category term="concat" /><category term="Amazon" /><category term="passwords" /><category term="UI" /><category term="sql developer" /><category term="analytics" /><category term="gdal" /><category term="Spatial" /><category term="oracle-xe" /><category term="oralce" /><category term="insert" /><category term="XE" /><category term="presentation" /><category term="OpenStreetMap" /><category term="exceptions" /><category term="troubleshooting" /><category term="Personal Edition" /><category term="job" /><category term="excel" /><category term="exception handling" /><category term="direct-path" /><category term="11gR2" /><category term="ORM" /><category term="Log Buffer" /><category term="11g" /><category term="virtual" /><category term="developer" /><category term="subtype" /><category term="football" /><category term="raid" /><category term="odtug" /><category term="htmldb" /><category term="rant" /><category term="laptop" /><category term="backup" /><category term="humor" /><category term="plsql" /><category term="append" /><category term="technology summit" /><category term="plsql challenge" /><category term="emacs" /><category term="shapefile" /><category term="ogr2ogr" /><category term="servererror" /><category term="sydney" /><category term="to" /><category term="soccer" /><category term="mysql" /><category term="google maps" /><category term="oradbpedia" /><category term="security" /><category term="politics" /><category term="broadband" /><category term="dba" /><category term="optimizer" /><category term="humour" /><category term="XML" /><category term="timesten" /><category term="CSV" /><category term="proxy authentication" /><category term="cloud" /><category term="constructors" /><category term="sylk" /><category term="sql server" /><category term="multimedia" /><category term="oracle" /><category term="rownum" /><category term="AWS" /><category term="databases" /><category term="copyright" /><category term="named notation" /><category term="OTN" /><category term="data structures" /><category term="failsafe" /><category term="testing" /><category term="blogging" /><category term="OSM" /><category term="google" /><category term="SaxLoader" /><title type="text">Sydney Oracle Lab</title><subtitle type="html">I am a proud Oracle developer and this is my blog. &lt;br&gt;
My website is  
&lt;a href="http://www.sydoracle.com/"&gt; here&lt;/a&gt; 
&lt;br&gt;

This blog is OPINION, SUGGESTION and DEBATE. 
Please correct anything I write that is misleading.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default?start-index=26&amp;max-results=25" /><author><name>Gary Myers</name><uri>https://profiles.google.com/116132019768637593422</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-AcOvwFaIPPo/AAAAAAAAAAI/AAAAAAAABOE/36JTjDn-Oh8/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>223</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/atom+xml" href="http://feeds.feedburner.com/SydneyOracleLab" /><feedburner:info uri="sydneyoraclelab" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/3.0/" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FSydneyOracleLab" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FSydneyOracleLab" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/SydneyOracleLab" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FSydneyOracleLab" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FSydneyOracleLab" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FSydneyOracleLab" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2FSydneyOracleLab" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2FSydneyOracleLab" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2FSydneyOracleLab" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FSydneyOracleLab" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FSydneyOracleLab" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FSydneyOracleLab" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FSydneyOracleLab" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2FSydneyOracleLab" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2FSydneyOracleLab" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><entry><id>tag:blogger.com,1999:blog-13265058.post-8462934453005675278</id><published>2012-04-29T10:29:00.000+10:00</published><updated>2012-04-29T10:29:31.249+10:00</updated><title type="text">Ever increasing priorities</title><content type="html">&lt;span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Inspired by a recent Martin Widlake &lt;a href="http://mwidlake.wordpress.com/2012/04/20/friday-philosophy-identifying-and-nullifying-fake-urgency/"&gt;post&lt;/a&gt;, I also have something to say about urgency.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;In most problem/incident management systems there is some 'priority' level. And all the ones I've met, count it the wrong way, by starting with "1" as the highest priority.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;The reason this is wrong is that, as anyone who has worked on the receiving end of such a system, there is always something that will trump the current highest priority.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;"1" should refer to the lowest priority item. A&amp;nbsp;typo&amp;nbsp;in the help text (or the use of the phrase '&lt;a href="http://mwidlake.wordpress.com/2012/04/22/rant-unique-means-unique-argh/"&gt;most unique&lt;/a&gt;'). The items that will never actually get fixed, but you record in the system just to let everyone know you are aware of the issue.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Then you work your way up to level 2 where the work might one day get done by some new guy as part of a learning exercise, but where it isn't something that is affecting the business in any material way. Actually a lot of issues at this level are trivial to fix, so if someone needs to 'get the numbers down' this is the place to target.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Level 3 should be the 'regular' work. In theory. In practice, you'll find most stuff at this level is actually level 2 items that have been pushed up because someone wants to see some progress. But also the hard stuff tends to sit here a long time as people argue over solutions.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;My level 4 would correspond to what most systems class as urgent. The business expects all issues at this level to be actively being worked on by someone. If you have 20 issues at this level and 5 team members, this won't actually be the case though.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;This is where corporate politics gets involved, and who has the biggest influence. And this is why I recommend counting from the bottom up. Because as people start pushing their issues up, there is unlimited room for the priority levels to be increased. Levels 5 and 6 will quickly come into play. After a few months, someone will find a need for level 7. When people find out there is a level 7, the issues at levels 5 and 6 will be pushed up the rankings.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Don't settle for single digits though. You'll hit 9 within a year and then you'll need a high priority issue to make enough room for a level 10.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-8462934453005675278?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=vz8tSmc9ews:Ih1nzuK6h5Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=vz8tSmc9ews:Ih1nzuK6h5Y:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=vz8tSmc9ews:Ih1nzuK6h5Y:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=vz8tSmc9ews:Ih1nzuK6h5Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/vz8tSmc9ews" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/8462934453005675278/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=8462934453005675278" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/8462934453005675278" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/8462934453005675278" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2012/04/ever-increasing-priorities.html" title="Ever increasing priorities" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-4536789951171040335</id><published>2012-02-26T11:41:00.001+11:00</published><updated>2012-02-26T11:46:09.541+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">What are these dollar signs doing in my code ?</title><content type="html">I've had the good fortune, in my current role, to be doing a fair amount of PL/SQL development in 11gR2. Boy, it feels good to be actually using up-to-date versions. &lt;i&gt;Being picky, we are on Apex 4.0, rather than 4.1 but that's not a biggie.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;One item I've found myself using more and more are the $$PLSQL_UNIT and $$PLSQL_LINE &lt;a href="http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/fundamentals.htm#CHDIDJFE"&gt;inquiry directives&lt;/a&gt;. I think they are great for logging.&lt;br /&gt;&lt;br /&gt;Here's a handy example&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;create or replace procedure fizz_buzz as&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; for i in 1..15 loop&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; if i/2 = trunc(i/2) then&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if i/3 = trunc(i/3) then&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dbms_output.put_line($$plsql_unit||'('||$$plsql_line||') - Fizz Buzz');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dbms_output.put_line($$plsql_unit||'('||$$plsql_line||') - Fizz');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; end if;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; elsif i/3 = trunc(i/3) then&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; dbms_output.put_line($$plsql_unit||'('||$$plsql_line||') - Buzz');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; dbms_output.put_line($$plsql_unit||'('||$$plsql_line||') - '||i);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; end if;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; end loop;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;end fizz_buzz;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When executed, you get a "poor man's trace" of the path the process takes through the logic.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;SQL&amp;gt; exec fizz_buzz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;FIZZ_BUZZ(13) - 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;FIZZ_BUZZ(8) - Fizz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;FIZZ_BUZZ(11) - Buzz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;FIZZ_BUZZ(8) - Fizz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;FIZZ_BUZZ(13) - 5&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;FIZZ_BUZZ(6) - Fizz Buzz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;FIZZ_BUZZ(13) - 7&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;FIZZ_BUZZ(8) - Fizz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;FIZZ_BUZZ(11) - Buzz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;FIZZ_BUZZ(8) - Fizz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;FIZZ_BUZZ(13) - 11&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;FIZZ_BUZZ(6) - Fizz Buzz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;FIZZ_BUZZ(13) - 13&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;FIZZ_BUZZ(8) - Fizz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;FIZZ_BUZZ(11) - Buzz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;By automatically substituting in the actual program name (eg the package name) and the line, you don't have to worry that refactoring the code is going to mess up any debug or logging logic. &lt;i&gt;Refactoring is a fancy name for taking chunks of code and moving them into specialised procedures and functions so you can reuse them. Most developers do refactoring but may not know the name of it, or even that it has a name. Mostly you only need to know the buzzwords at interviews.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;So that is what those $$ directives are doing in my code.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-4536789951171040335?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=cN0fi1_-31U:YYYoWjOmoGE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=cN0fi1_-31U:YYYoWjOmoGE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=cN0fi1_-31U:YYYoWjOmoGE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=cN0fi1_-31U:YYYoWjOmoGE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/cN0fi1_-31U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/4536789951171040335/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=4536789951171040335" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/4536789951171040335" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/4536789951171040335" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2012/02/what-are-these-dollar-signs-doing-in-my.html" title="What are these dollar signs doing in my code ?" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-2883449157149311423</id><published>2012-02-10T23:30:00.000+11:00</published><updated>2012-02-10T23:30:02.323+11:00</updated><title type="text">Why I don't (always) care if you follow me....</title><content type="html">This one is inspired by Jeff Smith's (yes, That Jeff Smith) post "&lt;a href="http://www.thatjeffsmith.com/archive/2012/02/why-i-dont-follow-you/"&gt;Why I don't follow you&lt;/a&gt;" post.&lt;br /&gt;&lt;br /&gt;I don't care if you follow me.&lt;br /&gt;&lt;br /&gt;Okay, that's not completely true. I hope you didn't stop reading then. What I really meant was that I don't expect all the people that I follow to follow me back.&lt;br /&gt;&lt;br /&gt;Here's why.&lt;br /&gt;&lt;br /&gt;I read a lot of blogs and articles to learn stuff I don't know about. I'll subscribe to RSS feeds and add people to my Google Plus circles if they write or link to 'quality' material. By quality, I mean stuff that I find interesting or useful.&lt;br /&gt;&lt;br /&gt;I write stuff here (occasionally, and will do an Oracle based one in the next day or too) and link to articles through Google plus. These are things that I think / hope other people may find interesting or useful.&lt;br /&gt;&lt;br /&gt;So I follow some people and some people follow me. Inevitably there will be some overlap when people are interested in the same topics. But there are some people who know far more about a topic than I do and won't learn anything new from my posts. Or they post on a topic which I 'consume but don't publish'.&lt;br /&gt;&lt;br /&gt;So I'm not offended if you don't follow me. Please don't be offended if I don't follow you.&lt;br /&gt;&lt;br /&gt;PS.&lt;br /&gt;Ongoing frustrations with Twitter mean that I've mostly replaced it by Google Plus.&lt;br /&gt;Contrary to what I've said here, if you circle me there and have something like 'DBA' in your profile, I will circle you back because I have a special circle for DBAs. As did Dante, I believe.&lt;br /&gt;&lt;br /&gt;I'm very flattered to be followed on Twitter, but I grew fed up of trying to twist sentences into something that is accurate and useful but still brief.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-2883449157149311423?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=yX88AVjzgLM:blonDSbDLqE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=yX88AVjzgLM:blonDSbDLqE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=yX88AVjzgLM:blonDSbDLqE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=yX88AVjzgLM:blonDSbDLqE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/yX88AVjzgLM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/2883449157149311423/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=2883449157149311423" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/2883449157149311423" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/2883449157149311423" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2012/02/why-i-dont-always-care-if-you-follow-me.html" title="Why I don't (always) care if you follow me...." /><author><name>Gary Myers</name><uri>https://profiles.google.com/116132019768637593422</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-AcOvwFaIPPo/AAAAAAAAAAI/AAAAAAAABOE/36JTjDn-Oh8/s512-c/photo.jpg" /></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-2229769488326211644</id><published>2012-01-08T16:55:00.000+11:00</published><updated>2012-01-08T16:56:23.332+11:00</updated><title type="text">Crazy Crossovers</title><content type="html">&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span style="background-color: white; line-height: 18px;"&gt;Some months back, when it was in a 99c special offer, I added "&lt;a href="http://www.amazon.com/Pride-Prejudice-Zombies-Classic-Ultraviolent/dp/1594743347"&gt;Pride and Prejudice and Zombies&lt;/a&gt;" to my book collection. If you haven't heard of it,&amp;nbsp;Seth Grahame-Smith took most of Jane Austen's work (by now in the public domain) and added a zombie subplot.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br style="background-color: white; line-height: 18px;" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span style="background-color: white; line-height: 18px;"&gt;Then about a month back, one of Google Plus's more popular contributors,&lt;/span&gt;&lt;span style="background-color: white; line-height: 18px;"&gt;&lt;a href="https://plus.google.com/u/0/109139639454066616071/about"&gt;Tessie L'Amour&lt;/a&gt;,&amp;nbsp;offered up the option of personalizing her (NSFW) books so that the purchaser could pick the names of the protagonists. That idea isn't new as I recall my parent getting me a personalised book when I was young. It involved a wizard who enjoyed peanut butter and had a magic sunflower. See, these things can stick with you !&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br style="background-color: white; line-height: 18px;" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;Wanting to experiment with some &lt;a href="http://googleappsdeveloper.blogspot.com/2011/10/4-ways-to-do-mail-merge-using-google.html"&gt;Google Apps Mail Merging&lt;/a&gt;, I borrowed both concepts. Following the guide, what came out was a &lt;a href="http://www.sydoracle.com/sherlock-gets-personal"&gt;web-form&lt;/a&gt;&amp;nbsp;where you can enter the desired first and last names, plus an email address, and you get a personalised PDF of the first of the Sherlock Holmes short stories, "A Scandal in Bohemia". &lt;i&gt;A google search quickly found &lt;a href="http://www.firebox.com/product/2693/Personalised-Classic-Novels?aff=512&amp;amp;awc=550_1326001855_2e099b61a226fe387b8fac7bce9f7239"&gt;similar personalisation of other classic works&lt;/a&gt;.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;This is the story where Sherlock meets the only woman he truly respects. The personalisation relates to the name of the woman (Irene Adler in the original), rather than Sherlock or Watson. I'd prefer an actual ebook format, but that looks a lot trickier. I've settled for sizing the PDF as A5 which makes it readable on my Kindle.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;I haven't (yet) included the original Sidney Paget pictures, though I suspect they will also be in the public domain by now. That may happen in future, but work beckons for tomorrow.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial, sans-serif; font-size: x-small;"&gt;&lt;span style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-2229769488326211644?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=gRAfMcL5su4:LXu_ts766ms:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=gRAfMcL5su4:LXu_ts766ms:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=gRAfMcL5su4:LXu_ts766ms:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=gRAfMcL5su4:LXu_ts766ms:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/gRAfMcL5su4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/2229769488326211644/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=2229769488326211644" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/2229769488326211644" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/2229769488326211644" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2012/01/crazy-crossovers.html" title="Crazy Crossovers" /><author><name>Gary Myers</name><uri>https://profiles.google.com/116132019768637593422</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-AcOvwFaIPPo/AAAAAAAAAAI/AAAAAAAABOE/36JTjDn-Oh8/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-4185462055515547832</id><published>2012-01-04T20:29:00.000+11:00</published><updated>2012-01-04T20:29:17.655+11:00</updated><title type="text">Playing with Google Plus</title><content type="html">&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;It's a Christmas break for me and I've been reviewing my social networking&amp;nbsp;commitments.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;I started by thinning RSS Feeds and Twitter load.&amp;nbsp;My main problem with Twitter was a lot of my subscriptions were US based and the timezone meant a poor fit for me. The feed often overflowed overnight, and relatively little would come up during the day.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;I'm shifting more to Google Plus. My initial experience echoes the "Quiet here, isn't it" which I saw mentioned a lot in the media. Luckily after persisting for a few days, I found some shared circles to import, and later someone else shared a circle with me of 500 Aussies.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;This is the first failing of Google Plus - unless you are following someone when they share a circle, you will miss it. That makes it hard to find a decent starting point.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;I have found Google Plus much more like Twitter than Facebook. If Facebook friends are people I'd invite over for dinner, Twitter and Google Plus contacts are a wider group of people I'd chat with in a&amp;nbsp;restaurant&amp;nbsp;or a pub.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Circles are a useful way to group people to read, similar to Twitter lists. For example, I have circles of writers, of Australians, of techies etc. They &lt;i&gt;can&lt;/i&gt; be useful in distributing some material to a limited audience, but I'd recommend posting most things to Public. There are items I'll only post to my Australian or Techie circles if I think it would 'pollute' my public flow with information that most people would find irrelevant.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;If there are some people I want to hear everything from, I put them in a specific circle and I can read everything in that circle. 'Noisy' individuals will go into a circle where I don't mind missing posts.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br class="Apple-interchange-newline" /&gt;&lt;/span&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Google Plus has a couple advantages over Twitter.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Firstly, comments are attached to a post which allows for a conversation to develop. I don't find Twitter conversations as usable (but maybe that's my client). In Twitter, I get a few disjointed messages if I don't follow everyone who is chatting, but I can see everyone who comments on a Plus post.&amp;nbsp;&lt;i&gt;Another failing of Google Plus is that when you re-share another person's post, it is hard for the recipient to get back to the original. As such, they'll tend to comment on the shared post not the original.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;By the way, when you comment on a post, you can't see who the post was shared with. That means you don't know who can see your comment. When in doubt, assume it is visible to everyone, including your boss, wife and mother.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Secondly, there's no 140 character limit. The posts can be fuller and include images and video. With Twitter, sometimes I get redirected through half a dozen URL shorteners to see a cartoon I read through someone else the day before.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;My gut feel is that Twitter has more to worry about from Google Plus than Facebook.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Migration from Twitter has few barriers. It wouldn't be hard for a client to integrate tweets into a Google Plus stream. It will be easy to pull out a list of who an individual follows for that integration. It will also be pretty easy to find accounts on Google Plus corresponding to those twitter accounts.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Tweets are ephemeral so no-one expects to maintain history.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Twitter doesn't have features likes games that contribute to the stickiness of Facebook.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;The content will be that bit richer on Google Plus than the forced brevity of Twitter.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Pay a few of the high-profile Tweeters to shift over, and you'll get some major traction. The biggest barrier is probably the 18 age limit on Google Plus, so Twitter might still maintain a place as a 'kiddie channel'.&lt;/span&gt;&lt;div&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Personally, I expect to abandon Twitter in the next 12 months.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;The Minus about Plus&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;There's still a lot that is broken in Google Plus.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;I had a couple of fireworks photos on my phone from New Year's Eve and Android's "Instant Upload" took at least a day and a half.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Sometimes retrieving posts suffers from irritating lags. My guess would be that, even for Google, they still need to work on scaling.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Saying the API is half done would be generous. It doesn't allow posting so that means there are no practical third-party clients, and there's no way of automating posts (eg from an RSS feed). They shouldn't fix that until after they can guarantee the scaling.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;I'm still managing a &lt;a href="https://plus.google.com/u/0/116132019768637593422/about"&gt;primary&lt;/a&gt;&amp;nbsp;and '&lt;a href="https://plus.google.com/u/0/102181347552792364408/about"&gt;Google Apps&lt;/a&gt;' account because the merging is yet to materialize. I've also got a separate page for &lt;a href="https://plus.google.com/u/0/b/117671444215575295808/"&gt;SydOracle&lt;/a&gt; which I will have to think about.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Managing circle membership is cumbersome. It would be nice to have the ability to make some circles as public/shared and for them to show up on a profile.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;To a degree, it is still 'empty'. If your interest if photography or Android, you will be spoilt for choice. Other interests or hobbies may be less well represented.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Suggestions&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;If you are going to join Google Plus (or get deeper into it) I recommend the following :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Share or post a bunch of stuff over a week or so, and make it all Public. That way anyone looking at your posts will get some idea of who you are, what you are interested in etc. Sharing stuff through Google Reader works well for me. Sharing from the browser on my Android phone is less pretty.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Then build up a LONG profile. You can search profiles for key words (or twitter handles etc) so make sure that anyone looking for you can find you.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;When you put someone in your circles, they may put you in theirs. If they push some material only to particular circles, you want them to easily work out which of those might be appropriate for you.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Do some searches on things that interest you. If you find posts that interest you, add the author into an appropriate READ circle. See who they follow, and you may find some more people to add.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Read up on &lt;a href="http://sociologyplus.com/2011/09/24/section-6-finding-people/"&gt;this&lt;/a&gt; for finding people.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;If someone you have circled seems well-integrated, and your profile has been sufficiently engaging that they have added you, then you can send them the equivalent of a direct-message. Ask them if they have a circle of similar people they can share with you.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br class="Apple-interchange-newline" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-4185462055515547832?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=OqviqDFXhDM:RzxwomNJwb8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=OqviqDFXhDM:RzxwomNJwb8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=OqviqDFXhDM:RzxwomNJwb8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=OqviqDFXhDM:RzxwomNJwb8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/OqviqDFXhDM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/4185462055515547832/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=4185462055515547832" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/4185462055515547832" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/4185462055515547832" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2012/01/playing-with-google-plus.html" title="Playing with Google Plus" /><author><name>Gary Myers</name><uri>https://profiles.google.com/116132019768637593422</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-AcOvwFaIPPo/AAAAAAAAAAI/AAAAAAAABOE/36JTjDn-Oh8/s512-c/photo.jpg" /></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-1262180843261882218</id><published>2011-12-29T20:14:00.003+11:00</published><updated>2011-12-29T20:16:23.481+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">Newsflash - the replacement for the Oracle Support HTML interface will be....HTML</title><content type="html">Like many other Oracle peeps, I got an email telling me that the current Flash and HTML interfaces for My Oracle Support were to be replaced by a new snazzy ADF based UI.&lt;br /&gt;&lt;br /&gt;What has irked me is the way that some people have implied that the new interface won't be HTML.One example is the &lt;a href="http://oracleinfogram.blogspot.com/2011/12/oracle-priority-service-infogram-for-28.html"&gt;Oracle Infogram ("There's a new version of MOS in the works, not Flash and not HTML")&lt;/a&gt;, though I've seen similar (especially on Twitter which is admittedly constrained by the 140-character limit).&lt;br /&gt;&lt;br /&gt;Let's clarify this. Browsers mostly render HTML (though they deal with straight text, images, maybe video and some other stuff). Through plugins, they can do Flash or Java.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;But the new Oracle UI will be HTML&lt;/b&gt;. HTML spewed by a bunch of App Servers running Java and ADF, true, but still HTML. Going further, if you actually do a 'View Source' in the current HTML support application, right at the top it has&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;i&gt;meta name="generator" content="Oracle ADF Faces"&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I don't know how much, if any, of the ADF layer of the current HTML application is being re-used for the new UI. They may well have done a complete throw-away and rewrite. But it isn't a novel technology stack being used here.&lt;br /&gt;&lt;br /&gt;Maybe this is nit-picky. I just had a horrible feeling that there might be some people out there in Oracle land (and, if I'm being blunt, I don't mean developers) who don't realise that Oracle Forms stuff is an exception and that the main web development paradigm consists of mid-tier code generating HTML (probably with lots of javascript too, but that's a separate issue).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-1262180843261882218?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=t9TN_NRIxgw:dINNyCSHLLA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=t9TN_NRIxgw:dINNyCSHLLA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=t9TN_NRIxgw:dINNyCSHLLA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=t9TN_NRIxgw:dINNyCSHLLA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/t9TN_NRIxgw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/1262180843261882218/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=1262180843261882218" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/1262180843261882218" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/1262180843261882218" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/12/newsflash-replacement-for-oracle.html" title="Newsflash - the replacement for the Oracle Support HTML interface will be....HTML" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-2463138303163616990</id><published>2011-11-26T10:38:00.001+11:00</published><updated>2011-11-26T10:54:38.549+11:00</updated><title type="text">DBMS_METADATA and hashed passwords</title><content type="html">In the wonderfully named "&lt;a href="http://oraganism.wordpress.com/"&gt;ORAganism&lt;/a&gt;" blog (don't try oragasm - it is used for something QUITE different)&amp;nbsp;Neil Johnson remarks on the &lt;a href="http://oraganism.wordpress.com/2011/11/23/dbms_metadata-get_ddl-and-select_catalog_role/"&gt;privilege requirements for DBMS_METADATA&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I like DBMS_METADATA. In the old days, you had scripts that tried to re-engineer CREATE scripts from DBA_TABLES and so on. They were complicated and worked in &lt;i&gt;most&lt;/i&gt;&amp;nbsp;situations. DBMS_METADATA is much more powerful.&lt;br /&gt;&lt;br /&gt;One feature worth noting about DBMS_METADATA is that it can also extract details about users which can be handy in the post 11g world of Oracle.&lt;br /&gt;&lt;br /&gt;In 11g the PASSWORD column in the DBA_USERS returns null, rather than hashed version of the user's password as it did in 10g and earlier. That made it a lot harder to extract those password hashes from the database. There is some underlying SYS object that shows the hashes, but SYS objects are really tricky to access.&lt;br /&gt;&lt;br /&gt;DBMS_METADATA gives a backdoor to that information. Not to everyone, but it should be usable by 'regular' DBAs without jumping through hoops.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;select dbms_metadata.get_ddl('USER','GARY') a from dual;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;CREATE USER "GARY" IDENTIFIED BY VALUES 'S:8A9EA7B75F8899D7163336AD9D29F9019C0361518594E6984E1EF1C4EDB8;34BCEDBA9E0AB83F'&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp;DEFAULT TABLESPACE "APEX_4875120311438442"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp;TEMPORARY TABLESPACE "TEMP"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Before you try to crack my password, don't bother. In my little home environment, it is the same as the username.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-2463138303163616990?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=YcV3_N7JgoI:q-i3_tAogNQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=YcV3_N7JgoI:q-i3_tAogNQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=YcV3_N7JgoI:q-i3_tAogNQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=YcV3_N7JgoI:q-i3_tAogNQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/YcV3_N7JgoI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/2463138303163616990/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=2463138303163616990" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/2463138303163616990" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/2463138303163616990" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/11/dbmsmetadata-and-hashed-passwords.html" title="DBMS_METADATA and hashed passwords" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-5206498418893995444</id><published>2011-11-18T19:00:00.000+11:00</published><updated>2011-11-18T19:00:09.193+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">Wish List IV - Read only and mean it</title><content type="html">Did you know that the SELECT privilege actually allows you to do a SELECT ... FOR UPDATE ? Yes, that means a user with just that privilege could lock an entire table.&lt;br /&gt;&lt;br /&gt;I want a SELECT_NOLOCK privilege. The user can still do a SELECT, but they cannot have a lock on the table. Okay, while an SQL is executing, I guess that get the shared table lock. But that's it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-5206498418893995444?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=3h5h_2XRhjo:kXxVvcpHQeI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=3h5h_2XRhjo:kXxVvcpHQeI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=3h5h_2XRhjo:kXxVvcpHQeI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=3h5h_2XRhjo:kXxVvcpHQeI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/3h5h_2XRhjo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/5206498418893995444/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=5206498418893995444" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/5206498418893995444" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/5206498418893995444" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/11/wish-list-iv-read-only-and-mean-it.html" title="Wish List IV - Read only and mean it" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-4027160406071674605</id><published>2011-11-17T19:00:00.000+11:00</published><updated>2011-11-17T19:00:09.067+11:00</updated><title type="text">Wish List IV - The Whole Truth</title><content type="html">This is another little annoyance that, I hope, would be a simple change.&lt;br /&gt;&lt;br /&gt;I want a column in USER_TAB_COLUMNS that tells me whether the object is a table or a view. Surely linking off to USER_TABLES to exclude views is an unnecessary burden.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-4027160406071674605?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=w0kRfVWswfg:Q_RkGaVWl94:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=w0kRfVWswfg:Q_RkGaVWl94:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=w0kRfVWswfg:Q_RkGaVWl94:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=w0kRfVWswfg:Q_RkGaVWl94:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/w0kRfVWswfg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/4027160406071674605/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=4027160406071674605" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/4027160406071674605" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/4027160406071674605" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/11/wish-list-iv-whole-truth.html" title="Wish List IV - The Whole Truth" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-3242162832752340792</id><published>2011-11-16T19:00:00.000+11:00</published><updated>2011-11-16T19:00:09.282+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">Wish List III - The Sequence Cometh</title><content type="html">This is another of those 'chores' for which every DBA and his dog has a script.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Copy a new version of a table from Test to Dev and then you have to recreate or adjust the associated sequence. My proposed syntax would be&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ALTER SEQUENCE blah_seq SYNCHRONIZE WITH blah_table (blah_column);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That would lock the table, get the highest value of 'blah_column' and reset the 'last_number' of the sequence to that value. Even better, retain the fact that the sequence has been synchronized with that table/column so there is some metadata about the relationship.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-3242162832752340792?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=_1MGgXIciFg:D4Qj3vUO2ho:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=_1MGgXIciFg:D4Qj3vUO2ho:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=_1MGgXIciFg:D4Qj3vUO2ho:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=_1MGgXIciFg:D4Qj3vUO2ho:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/_1MGgXIciFg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/3242162832752340792/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=3242162832752340792" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/3242162832752340792" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/3242162832752340792" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/11/wish-list-iii-sequence-cometh.html" title="Wish List III - The Sequence Cometh" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-2598191231533120377</id><published>2011-11-15T19:00:00.000+11:00</published><updated>2011-11-15T19:00:00.786+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">Wish List II - Ultimate Destruction</title><content type="html">I'm continuing on my theme of a wish list for 12c (or beyond), and this time I'm taking aim at destroying stuff.&lt;br /&gt;&lt;br /&gt;Juggling development and test areas, every so often it is tempting to wipe the slate clean and start with a fresh schema. The simple way to do that is with a DROP USER blah CASCADE&lt;br /&gt;&lt;br /&gt;It would be nice to have something one step below the 'nuclear' option. I'm thinking&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;DROP ALL TABLES UNDER SCHEMA blah&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;plus similar options for dropping sequences, views, procedures, triggers and so on. The user/schema continues to exist, with all their privileges and defaults. But you get to clear out the objects the schema owns.&lt;br /&gt;&lt;br /&gt;Yes, you can script this. The trick is to disable all the referential integrity constraints first, so that you can drop the tables without worrying about the dependencies.&lt;br /&gt;&lt;br /&gt;Cross-schema constraints could still be a problem, as could firing DDL triggers. I'm open to alternative mechanisms. Perhaps DBMS_METADATA could generate a script for dropping objects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-2598191231533120377?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=nuvvSLHqjmw:ARDBQu5_ZeM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=nuvvSLHqjmw:ARDBQu5_ZeM:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=nuvvSLHqjmw:ARDBQu5_ZeM:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=nuvvSLHqjmw:ARDBQu5_ZeM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/nuvvSLHqjmw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/2598191231533120377/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=2598191231533120377" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/2598191231533120377" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/2598191231533120377" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/11/wish-list-ii-ultimate-destruction.html" title="Wish List II - Ultimate Destruction" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-5295835351217118870</id><published>2011-11-14T11:53:00.000+11:00</published><updated>2011-11-14T11:53:00.892+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">12c Wishlist - Part 1</title><content type="html">Last week Nuno posted his '&lt;a href="http://dbasrus.blogspot.com/2011/11/wish-list-for-12c.html"&gt;wish list&lt;/a&gt;' for 12c. Here's the "Number 1" on my list:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Oracle Personal Edition for Linux.&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.lyrics007.com/Don%20McLean%20Lyrics/American%20Pie%20Lyrics.html"&gt;A long, long time ago...I can still remember&lt;/a&gt;&lt;br /&gt;when Windows was &lt;u&gt;the&lt;/u&gt; OS that ran on the PC on your desk. It made sense that someone running their 'personal' database would just install it natively on that desktop machine, and that meant a Windows install.&lt;br /&gt;&lt;br /&gt;Too often that would just be an install on top of a Standard Operating Environment pre-configured with Office, a virus checker and the other bloat that hangs around. Yuck.&lt;br /&gt;&lt;br /&gt;What I'd like to recommend is that you start with an OS that is&amp;nbsp;stable and decidedly unglamorous, such as&amp;nbsp;RedHat or Oracle Linux. That could run on a commodity x86 under your desk. It could run in a VirtualBox virtual machine on your SOE machine, or in a VMWare or Oracle VM environment managed by real server admins. It could migrate happily between any of them.&lt;br /&gt;&lt;br /&gt;But when I go to the &lt;a href="http://download.oracle.com/docs/cd/E11882_01/license.112/e10594/editions.htm#CJADFHGH"&gt;documentation&lt;/a&gt; I see "&lt;span class="Apple-style-span" style="background-color: white; font-family: Tahoma, sans-serif; font-size: x-small;"&gt;Personal Edition is available on Windows platforms only"&lt;/span&gt;&lt;br /&gt;Oracle are saying go and buy software off Microsoft before you talk to us about running our database ?&lt;br /&gt;&lt;br /&gt;I want Oracle Personal Edition on Linux. Why not a bundle price for the database and Oracle Linux ? You could even sell it as a pre-configured VirtualBox appliance - just add disk. You could 'give away' a one-year Personal Edition licence (cost around $100) with every OCP certification. But push Linux as the preferred platform.&lt;br /&gt;&lt;br /&gt;I'm not sure of the production use cases for Personal Edition. I heard, many years ago, that it had market share in Life Sciences, but it may have since been eclipsed by more specialised solutions, open source RDBMS or NoSQL data stores. Maybe it won't even be offered in 12c, squashed out between Express Edition and MySQL.&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;I've got a few more items on my wish list which I'll post over the coming days. I figured I'd do them as individual posts. In theory that means Plus +1 and retweets might give a guage as to the support for each idea.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-5295835351217118870?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=pjHuu9yQxpg:4qzGIyRJY9o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=pjHuu9yQxpg:4qzGIyRJY9o:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=pjHuu9yQxpg:4qzGIyRJY9o:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=pjHuu9yQxpg:4qzGIyRJY9o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/pjHuu9yQxpg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/5295835351217118870/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=5295835351217118870" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/5295835351217118870" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/5295835351217118870" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/11/12c-wishlist-part-1.html" title="12c Wishlist - Part 1" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-135714619958036869</id><published>2011-11-12T19:43:00.001+11:00</published><updated>2011-11-12T20:42:01.276+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">What's the difference</title><content type="html">I enjoy working with Apex. However one challenge is that it doesn't sit too well with conventional source control systems. Plus the fact that not all organisations use source control systems, especially for the small departmental applications which are a particular sweet spot for Apex.&lt;br /&gt;&lt;br /&gt;One item in my little library of scripts is based on the ApexExport utility. This is part of the main Apex install which you'll probably find on the server. If you don't have access to the server (and some DBAs are understandably cautious about that)&amp;nbsp;&lt;a href="http://krisrice.blogspot.com/2010/10/apex-exportsplitter.html"&gt;ApexExport is also available as part of the Apex Listener&lt;/a&gt;. That's a much more compact download, and I've based my script on that.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.oracle.com/technetwork/developer-tools/apex-listener/downloads/index.html"&gt;Apex Listener&lt;/a&gt;&amp;nbsp;download is a zip file. When you unzip it you get a WAR file. If you unzip the WAR file, you find the "apex.jar" file, which is what you need. If you like playing Russian dolls, you can even unzip the JAR file into the class files, but I don't see the point.&lt;br /&gt;&lt;br /&gt;My &lt;a href="http://www.sydoracle.com/Codespace/diff_apex.zip?attredirects=0&amp;amp;d=1"&gt;Apex diff script&lt;/a&gt; simply extracts the same application (based on the id) from two Apex workspaces and does a compare of the results. This is handy to see if the version in a development workspace is the same as that in Testing/Production (eg has another developer done some work on it).&amp;nbsp;An alternative use case is to ensure that no-one has been sneaking unapproved amendments into Prod.&lt;br /&gt;&lt;br /&gt;My script is a zip because downloading BAT files is often blocked. It is trivially small, so the code is shown below too.&lt;br /&gt;&lt;br /&gt;I've been lazy and hard-coded the username password here. Feel free to replace them with more parameters. Similarly with directory names, and you can replace the MS-DOS "fc" call with one to your favorite diff utility. I've used &lt;a href="http://www.prestosoft.com/edp_examdiff.asp"&gt;ExamDiff&lt;/a&gt; for a long time and my preferred editor, &lt;a href="http://www.pspad.com/"&gt;PsPad&lt;/a&gt;&amp;nbsp;has one built in as well.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;REM Usage "diff JDBC_conn1 JDBC_conn2 nnnn"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;REM Note: Use JDBC connection format 127.0.0.1:1521:xe&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;del f%3_1.sql&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;del f%3_2.sql&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;cd G:\oracleXE_11\apex_listener\WEB-INF\lib&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;set CLASSPATH=%CLASSPATH%;.\;.\ojdbc6.jar;.\apex.jar&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;java oracle.dbtools.apex.utilities.APEXExport -db %1 -user gary -password gary -application %3&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;rename f%3.sql f%3_1.sql&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;java oracle.dbtools.apex.utilities.APEXExport -db %2 -user gary -password gary -application %3&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;rename f%3.sql f%3_2.sql&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;fc /c /l /n /w f%3_1.sql f%3_2.sql&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-135714619958036869?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=NvoUjMdKgw4:6vtTQpK_6gY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=NvoUjMdKgw4:6vtTQpK_6gY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=NvoUjMdKgw4:6vtTQpK_6gY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=NvoUjMdKgw4:6vtTQpK_6gY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/NvoUjMdKgw4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/135714619958036869/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=135714619958036869" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/135714619958036869" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/135714619958036869" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/11/whats-difference.html" title="What's the difference" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-6984509211899977356</id><published>2011-11-05T09:03:00.000+11:00</published><updated>2011-11-05T09:03:03.949+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">How to prevent your SQL Developer sessions from being killed</title><content type="html">&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;A while back I worked on a site where the network would terminate connections that were idle too long (around 20-30 minutes). It is pretty frustrating when you've been working on something for a while then you go grab a coffee or have a meeting and come back to find the connection had been killed.&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;It was even more frustrating when the session was still alive in the database and had to be killed there, so that it could rollback the work so that it could be repeated all over again.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;What I'd like is a SQL Developer feature that would periodically send a lightweight request over to the database so the connection is kept alive. Alas, the powers that be seem &lt;a href="http://www.thatjeffsmith.com/archive/2011/10/day-1-give-me-a-keep-alive-button/"&gt;averse to providing&lt;/a&gt; such a function.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;I also accept that there are &lt;a href="http://en.wikipedia.org/wiki/Confirmation_bias"&gt;barriers&lt;/a&gt;&amp;nbsp;in trying to get people to&amp;nbsp;&lt;a href="http://youarenotsosmart.com/2011/06/10/the-backfire-effect/"&gt;change&lt;/a&gt; their &lt;a href="http://www.cracked.com/article_19468_5-logical-fallacies-that-make-you-wrong-more-than-you-think.html"&gt;opinions&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;The good news is that SQL Developer has the concept of &lt;a href="http://krisrice.blogspot.com/2006/11/getting-started-with-extension.html"&gt;extensions&lt;/a&gt;.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;If something you want is too specialised to be included by Oracle themselves, or they haven't got around to it or simply don't want to do it, then an extension can help.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;In this case, a bloke called MinChen Chai has published an &lt;a href="https://sites.google.com/site/keepaliveext/"&gt;extension to add KeepAlive&lt;/a&gt; functionality to SQL Developer.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Just download it and add the .jar to the directory &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sqldeveloper\sqldeveloper\extensions&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt; and the Right-click menu on a connection will include a Keep-Alive item.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;If you want to be on the cautious side, you can use unzip or similar to extract the class files from the JAR file. Then you can use the &lt;a href="http://java.decompiler.free.fr/"&gt;Java Decompiler&lt;/a&gt;&amp;nbsp;(or similar) and view the source from the class files. The SQL used is in the Pinger.class and is a pretty inoffensive SELECT SYSDATE FROM DUAL.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Warning : I haven't tested to see if it works if you spawn out an unshared worksheet.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;If your environment is locked down to prevent extensions being added, then all I can suggest is a User-Defined Report with a refresh set to the maximum delay. Unfortunately this &lt;a href="https://forums.oracle.com/forums/thread.jspa?threadID=1084796"&gt;grabs focus in Windows&lt;/a&gt;&amp;nbsp;and the maximum delay is just two minutes which is much too frequent in my opinion, but it is hard coded. As an aside, the 'reports' component also sits in the&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;extensions directory&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;(oracle.sqldeveloper.report.jar).&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;&lt;u&gt;Should we be doing this ?&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;I accept there are situations where it is appropriate for a DBA to terminate sessions. And this won't stop an explicit ALTER SYSTEM KILL SESSION. &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;However I think terminating sessions automatically based on 'being idle' is something that is abnormal, and is inappropriate for most environments. &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Before terminating a session, several factors should be considered. These include&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Is the session actually doing something important - like the monthly pay cheques&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Is the session blocking other sessions (and which session is more vital to the business)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Is there a need to preserve session state (PL/SQL global variables, temporary tables etc)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Is there an active transaction&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Can the transaction be (safely) committed&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;How much rollback would need to be applied if it is killed&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Is the session consuming lots of memory&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Can the user/client cope gracefully with a failure&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;If your DBA doesn't consider such factors and is happy to terminate sessions without worrying about the effect, then you have a problem. You'll just have to g&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;rin and bear it and hope that that there's some form of karma.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;It may help to read a DBA's blog post about a &lt;a href="http://openquery.com/blog/what-hosting-provider-did-today"&gt;hosting provider admin deleting some of his log files&lt;/a&gt;&amp;nbsp;.&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;I love the comments that "anything with 'log' in the name is by convention disposable but useful for diagnosis" and "Log files do build up and unless there is meaningful data in them you can remove them."&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-6984509211899977356?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=V-MR-hfUe6Y:gAYjsGuvf0Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=V-MR-hfUe6Y:gAYjsGuvf0Y:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=V-MR-hfUe6Y:gAYjsGuvf0Y:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=V-MR-hfUe6Y:gAYjsGuvf0Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/V-MR-hfUe6Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/6984509211899977356/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=6984509211899977356" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/6984509211899977356" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/6984509211899977356" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/11/how-to-prevent-your-sql-developer.html" title="How to prevent your SQL Developer sessions from being killed" /><author><name>Gary Myers</name><uri>https://profiles.google.com/116132019768637593422</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-AcOvwFaIPPo/AAAAAAAAAAI/AAAAAAAABOE/36JTjDn-Oh8/s512-c/photo.jpg" /></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-7689453935826296514</id><published>2011-10-31T23:42:00.002+11:00</published><updated>2011-11-01T08:28:37.390+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">A short story about death</title><content type="html">&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;Let me tell you about an application I worked with some time ago.&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;It is an 'intranet' application. The application is just used within an organisation, though the database it runs against is also used by public web applications too.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;Unusually for a web application, it doesn't use a connection pool. Users log in and a dedicated connection is spawned. And if they do certain operations, those also get a dedicated connection.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;None of those connections is allowed to be idle for more than 25 minutes. Every five minutes, a house keeping job comes along and kills off any connections that are idle for more than 20 minutes.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;On the face of it, that is a resource saving measure. Otherwise all those idle connections would pile up and kill the server. But actually it isn't. If you look at the 'life' of a session, it spends a few minutes being active, then sits around for 20 minutes doing nothing before being killed. In fact most of the sessions on the database are idle, waiting for their death sentence to be actioned.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;If it wasn't for that house-keeping job, someone would have come along and actually fixed the source of the problem. That is, after the operation is complete, the session would be disconnected by the application. Or the logout button on the application would actually do something - like log out of the application.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;It is like keeping the shower running after you get out, then coming back ten minutes later to turn it off so as to not waste water.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;The best time to end a session is immediately after it stops doing useful work. If you choose to implement a '&lt;a href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_6010.htm"&gt;kill if idle&lt;/a&gt;' option, you are saying it is okay for resources to be wasted for the period up until you decide it has been 'too idle'. Sometimes it is - it may be too difficult or expensive to fix the source of the problem.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;But don't pretend this is the most efficient mechanism to manage resources.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif;"&gt;Bought to you by my "&lt;a href="http://www.thatjeffsmith.com/archive/2011/10/day-1-give-me-a-keep-alive-button/#comment-12863"&gt;Campaign for the Humane Treatment of Database Sessions&lt;/a&gt;'&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-7689453935826296514?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=LvHQowPmCYw:1DXKOaCWoow:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=LvHQowPmCYw:1DXKOaCWoow:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=LvHQowPmCYw:1DXKOaCWoow:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=LvHQowPmCYw:1DXKOaCWoow:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/LvHQowPmCYw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/7689453935826296514/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=7689453935826296514" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/7689453935826296514" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/7689453935826296514" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/10/short-story-about-death.html" title="A short story about death" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-1491118287579217189</id><published>2011-10-11T07:00:00.000+11:00</published><updated>2011-10-11T07:00:02.802+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">An underhand compilation</title><content type="html">&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Oracle cheats. Or, more generously, it sometimes plays by different rules. Normally a DDL will do an implicit commit of any outstanding transaction. Actually it does a couple of implicit commits, one before it tries the DDL and a second if it succeeds.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Furthermore, an 'ALTER PACKAGE .. COMPILE' is a DDL statement. And it does an implicit commit.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;However, if the compilation occurs implicitly, because you are trying to execute a package that it is invalid, then your outstanding transaction ISN'T committed. That is what you want as your application can't cope with having partial transactions committed just because it needs to compile a package.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;The question really is, if the commit isn't actually necessary, is it being performed by the ALTER PACKAGE simply to be consistent ?&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Demo script follows:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;XE&amp;gt; DROP TABLE plch_data PURGE;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;XE&amp;gt; CREATE TABLE plch_data&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 2 &amp;nbsp; &amp;nbsp;(id NUMBER, col_a NUMBER, col_b NUMBER);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;XE&amp;gt; CREATE OR REPLACE PACKAGE plch_pkg&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 2 &amp;nbsp;IS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 3 &amp;nbsp; &amp;nbsp; FUNCTION ret_count RETURN NUMBER;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 4 &amp;nbsp;END plch_pkg;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 5 &amp;nbsp;/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;XE&amp;gt; CREATE OR REPLACE PACKAGE BODY plch_pkg&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 2 &amp;nbsp;IS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 3 &amp;nbsp; FUNCTION ret_count RETURN NUMBER IS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 4 &amp;nbsp; &amp;nbsp; v_num NUMBER;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 5 &amp;nbsp; BEGIN&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 6 &amp;nbsp; &amp;nbsp; SELECT COUNT(id) INTO v_num&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 7 &amp;nbsp; &amp;nbsp; FROM plch_data;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 8 &amp;nbsp; &amp;nbsp; --&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 9 &amp;nbsp; &amp;nbsp; RETURN v_num;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp;10 &amp;nbsp; END ret_count;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp;11 &amp;nbsp;END plch_pkg;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp;12 &amp;nbsp;/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;XE&amp;gt; SELECT object_name, object_type, status&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 2 &amp;nbsp;FROM user_objects&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 3 &amp;nbsp;WHERE object_name = 'PLCH_PKG';&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;OBJECT_NAM OBJECT_TYPE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; STATUS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;---------- ------------------- -------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;PLCH_PKG &amp;nbsp; PACKAGE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; VALID&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;PLCH_PKG &amp;nbsp; PACKAGE BODY &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;VALID&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;XE&amp;gt; ALTER TABLE plch_data DROP COLUMN id;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;XE&amp;gt; ALTER TABLE plch_data RENAME COLUMN col_a TO id;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;XE&amp;gt; SELECT object_name, object_type, status&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 2 &amp;nbsp;FROM user_objects&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 3 &amp;nbsp;WHERE object_name = 'PLCH_PKG';&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;OBJECT_NAM OBJECT_TYPE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; STATUS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;---------- ------------------- -------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;PLCH_PKG &amp;nbsp; PACKAGE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; VALID&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;PLCH_PKG &amp;nbsp; PACKAGE BODY &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;INVALID&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;XE&amp;gt; INSERT INTO plch_data (id) VALUES (10);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;XE&amp;gt; EXEC dbms_output.PUT_LINE( plch_pkg.ret_count);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;XE&amp;gt; ROLLBACK;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;XE&amp;gt; EXEC dbms_output.PUT_LINE( plch_pkg.ret_count);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;XE&amp;gt; REM =================================================================&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;XE&amp;gt; ALTER TABLE plch_data DROP COLUMN id;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;XE&amp;gt; ALTER TABLE plch_data RENAME COLUMN col_b TO id;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;XE&amp;gt; SELECT object_name, object_type, status&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 2 &amp;nbsp;FROM user_objects&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 3 &amp;nbsp;WHERE object_name = 'PLCH_PKG';&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;OBJECT_NAM OBJECT_TYPE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; STATUS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;---------- ------------------- -------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;PLCH_PKG &amp;nbsp; PACKAGE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; VALID&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;PLCH_PKG &amp;nbsp; PACKAGE BODY &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;INVALID&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;XE&amp;gt; INSERT INTO plch_data (id) VALUES (10);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;XE&amp;gt; ALTER PACKAGE PLCH_PKG COMPILE BODY;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;XE&amp;gt; SELECT object_name, object_type, status&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 2 &amp;nbsp;FROM user_objects&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 3 &amp;nbsp;WHERE object_name = 'PLCH_PKG';&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;OBJECT_NAM OBJECT_TYPE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; STATUS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;---------- ------------------- -------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;PLCH_PKG &amp;nbsp; PACKAGE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; VALID&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;PLCH_PKG &amp;nbsp; PACKAGE BODY &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;VALID&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;XE&amp;gt; EXEC dbms_output.PUT_LINE( plch_pkg.ret_count);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;XE&amp;gt; ROLLBACK;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;XE&amp;gt; EXEC dbms_output.PUT_LINE( plch_pkg.ret_count);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-1491118287579217189?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=fk9DFhdS-7A:y5F_PM6iDtM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=fk9DFhdS-7A:y5F_PM6iDtM:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=fk9DFhdS-7A:y5F_PM6iDtM:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=fk9DFhdS-7A:y5F_PM6iDtM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/fk9DFhdS-7A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/1491118287579217189/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=1491118287579217189" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/1491118287579217189" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/1491118287579217189" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/10/underhand-compilation.html" title="An underhand compilation" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-2088354658139645067</id><published>2011-10-08T07:00:00.000+11:00</published><updated>2011-10-08T07:00:00.313+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">It's Enterprise and won't be cheap....</title><content type="html">&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Most of OOW seemed to be about Boxes, the bigger the better.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;I'm not a DBA. The people at Pythian are, and they've said nice things about the Appliance. I think it suits their business model, which is external DBA support. If a company already has good DBAs and listens to them, it shouldn't fare too badly on getting the correct hardware setup. If it doesn't have good DBAs (or it doesn't listen to them), then it probably won't hear about the appliance, and they'll end up with some commodity kit (maybe running MySQL or even SQL Server).&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;The Exalytics machines is way out of my field. It is probably good. It is probably expensive. It is probably something I won't get my hands on.&amp;nbsp;The same goes for the rest of this Big Data stuff. Clusters of scores of machines are expensive.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;We do have a nice NoSQL solution. I'll probably download that to play with, but it is something that is really for Java developers (or some of these newer languages that get fashionable every couple of years). I think I'll have to re-title myself as a 'Relational Database Developer'.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;So the 'cloud' bit was the part that appealed most. Not the Fusion Apps stuff. Its nice that it is finally out there, but that isn't my field either.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;a href="https://twitter.com/#!/guyharrison"&gt;Guy Harrison's tweets&lt;/a&gt; have included some nuggets "&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: rgba(47, 194, 239, 0.0976563); color: #444444; font-family: Arial, 'Helvetica Neue', sans-serif; font-size: 15px; line-height: 19px;"&gt;DB cloud service will not support direct SQL from outside oracle public cloud - stateless REST calls only."&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;and&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: rgba(47, 194, 239, 0.0976563); color: #444444; font-family: Arial, 'Helvetica Neue', sans-serif; font-size: 15px; line-height: 19px;"&gt;&amp;nbsp;"&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: rgba(47, 194, 239, 0.0976563); color: #444444; font-family: Arial, 'Helvetica Neue', sans-serif; font-size: 15px; line-height: 19px;"&gt;DB cloud service gives you a schema in a shared DB, not a whole instance like Amazon RDS. More like SQL azure than RDS"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Pricing won't be cheap. This is Enterprise Edition folks. It's not for startups trying to run a business on pizza, coke and little white pills. It is for people with big pockets.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;a href="http://roelhartman.blogspot.com/2011/10/oow2011-announcing-sql-developer-31-new.html"&gt;Roel Hartman&lt;/a&gt;&amp;nbsp;indicates that&amp;nbsp;SQL Developer 3.1 will have some special sauce that will allow you to connect to these cloudy databases. I think the twitter-stream has a screen shot, but I've lost it. [Twitter was in turbo mode the past few days - unfortunate for us down under where a lot of the action happens while we are in bed.]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Other IDEs may need to do some catching up to work with those databases. I'd also suspect that it might prove a barrier to any applications not running on Oracle's cloud too. While Java (and other JVM languages ?) might be doable, I wonder whether Forms will make the cut.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Application Express seems to be making its presence felt. Though after Larry aired his views on Salesforce, I wonder whether the "apex" name will become a battleground as a "cloud language". &lt;i&gt;Hey folks, the appex.com domain name appears vacant at the moment&lt;/i&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Oh yes, the Social Network thing. My last company used Yammer, which was pretty similar to what Salesforce offers with Chatter, and the company I'm working at now has something similar. Yes they have a Facebook 'feel', but the focus is 'employer' related. People will have both and won't have a problem keeping them separate, mostly because your employer 'owns' one and all your friends who work elsewhere won't be there.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-2088354658139645067?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=rObwqPsDTcs:6EXXB2K_TK8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=rObwqPsDTcs:6EXXB2K_TK8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=rObwqPsDTcs:6EXXB2K_TK8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=rObwqPsDTcs:6EXXB2K_TK8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/rObwqPsDTcs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/2088354658139645067/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=2088354658139645067" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/2088354658139645067" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/2088354658139645067" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/10/its-enterprise-and-wont-be-cheap.html" title="It's Enterprise and won't be cheap...." /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-2465382983622799499</id><published>2011-10-07T20:44:00.002+11:00</published><updated>2011-10-07T21:09:17.584+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">One head, plus one body (slightly damaged)</title><content type="html">&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;We all know that two heads are better than one. Apparently a head without a body can be more useful than one with a broken body.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;This train of thought was prompted by an &lt;a href="http://plsqlchallenge.com/pls/apex/f?p=10000:651:1342880733484828::NO:651:P651_COMP_EVENT_ID,P651_QUIZ_ID:7205,7985&amp;amp;cs=195AC1D42A55610F69D8A5FB02A1360A6"&gt;interesting question&lt;/a&gt; on the &lt;a href="http://www.plsqlchallenge.com/"&gt;PL/SQL Challenge&lt;/a&gt; earlier this week (October 6, 2011 - to be precise). The question posed the puzzle about what happens when you reference a constant defined in the specification of a PL/SQL package if there was an invalid body.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;My initial thought was that it is quite valid to have a package specification without a body, and you can safely references types and constants in that specification. I incorrectly assumed that an invalid body wouldn't be a problem.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;One reason why it fails is that a body can contain an initialisation section. That is you can have:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;CREATE OR REPLACE PACKAGE plch_pkg&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;IS&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp;g_stuff &amp;nbsp; VARCHAR2 (10) := 'Stuff';&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp;PROCEDURE show_dummy;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;END plch_pkg;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;/&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;CREATE OR REPLACE PACKAGE BODY plch_pkg&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;IS&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp;PROCEDURE show_dummy&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp;IS&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp;BEGIN&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; DBMS_OUTPUT.put_line ('Dummy');&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp;END;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;b&gt;BEGIN&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;b&gt;&amp;nbsp; dbms_output.put_line('Start it up');&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;END plch_pkg;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;/&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;exec dbms_output.put_line(plch_pkg.g_stuff);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;This would output both "Start it up" and "Stuff". But of course it can only do that if the body is valid and can be executed by Oracle, which is why Oracle has to try to recompile an invalid package body and must throw an error if it fails.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-2465382983622799499?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=NYaQGt53kpo:aA6yEcUax40:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=NYaQGt53kpo:aA6yEcUax40:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=NYaQGt53kpo:aA6yEcUax40:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=NYaQGt53kpo:aA6yEcUax40:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/NYaQGt53kpo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/2465382983622799499/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=2465382983622799499" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/2465382983622799499" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/2465382983622799499" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/10/one-head-plus-one-body-slightly-damaged.html" title="One head, plus one body (slightly damaged)" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-6422699689992480037</id><published>2011-09-18T08:30:00.001+10:00</published><updated>2011-10-07T21:09:45.926+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">Laying down the law over warnings</title><content type="html">&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.oracle-base.com/"&gt;Tim&lt;/a&gt;&amp;nbsp;commented on yesterday's post by saying "I&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&amp;nbsp;would not be overly disturbed if Oracle made this clause [DEFINER/INVOKER RIGHTS] mandatory in future."&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;With such a broad range of software that runs against Oracle, some of it from third party vendors, I don't see Oracle making changes that would break existing applications.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;But they could and have allowed for you to make it mandatory yourself. Perhaps they even make it so in their internal development.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;Start with a simple procedure:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;create or replace procedure do_it is&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;begin&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&amp;nbsp; &amp;nbsp;dbms_output.put_line('Humbug');&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;end do_it;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;If we compile it with all the warnings enabled, we get the "Missing AUTHID clause" warning.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="color: #444444;"&gt;XE&amp;gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;alter session set plsql_warnings='ENABLE:ALL';&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="color: #444444;"&gt;XE&amp;gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;alter procedure do_it compile;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #444444; font-size: small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #444444; font-size: small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SP2-0805: Procedure altered with compilation warnings&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #444444; font-size: small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="color: #444444;"&gt;XE&amp;gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;select text, attribute from user_errors where name = 'DO_IT';&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #444444; font-size: small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #444444;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;TEXT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ATTRIBUTE&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #444444;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;-------------------------------------------------------------------------------- ---------&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&lt;span class="Apple-style-span" style="color: #444444;"&gt;PLW-05018: unit DO_IT omitted optional AUTHID clause; default value DEFINER used &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;u&gt;WARNING&lt;/u&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="color: #444444;"&gt;XE&amp;gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;exec do_it&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="color: #444444; font-size: small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Humbug&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: small; line-height: 18px;"&gt;But we can use the PLSQL_WARNINGS setting to make enforcement more "&lt;a href="http://en.wikipedia.org/wiki/Judge_Dredd"&gt;Judge Dredd&lt;/a&gt;".&lt;/div&gt;&lt;div style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: small; line-height: 18px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="color: #444444;"&gt;XE&amp;gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;alter procedure do_it compile plsql_warnings='ENABLE:ALL','ERROR:05018';&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: 'Courier New', Courier, monospace; font-size: x-small; line-height: 18px;"&gt;Warning: Procedure altered with compilation errors.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="color: #444444;"&gt;XE&amp;gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;select text, attribute from user_errors where name = 'DO_IT';&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: 'Courier New', Courier, monospace; font-size: xx-small; line-height: 18px;"&gt;TEXT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ATTRIBUTE&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;-------------------------------------------------------------------------------- ---------&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="color: #444444;"&gt;PLS-05018: unit DO_IT omitted optional AUTHID clause; default value DEFINER used &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;u&gt;ERROR&lt;/u&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;XE&amp;gt; exec do_it&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;BEGIN do_it; END;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: 'Courier New', Courier, monospace; font-size: x-small; line-height: 18px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; *&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;ERROR at line 1:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;ORA-06550: line 1, column 7:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;PLS-00905: object GARY.DO_IT is invalid&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;ORA-06550: line 1, column 7:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;PL/SQL: Statement ignored&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;Rather than just enabling the warning, we can treat it as an error, effectively making the clause mandatory in our environment. Obviously it doesn't make sense for this particular warning to be set at the program unit level. It might make sense for other warnings to be set as errors at the schema or database level, and then individual overrides can be set for exceptional program units.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-6422699689992480037?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=U_HUZ3qGdDY:sv-2IzjxBJI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=U_HUZ3qGdDY:sv-2IzjxBJI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=U_HUZ3qGdDY:sv-2IzjxBJI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=U_HUZ3qGdDY:sv-2IzjxBJI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/U_HUZ3qGdDY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/6422699689992480037/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=6422699689992480037" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/6422699689992480037" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/6422699689992480037" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/09/laying-down-law-over-warnings.html" title="Laying down the law over warnings" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-3374707734037145843</id><published>2011-09-17T19:23:00.000+10:00</published><updated>2011-10-07T21:10:05.933+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">WARNING, WARNING, DANGER, DANGER !</title><content type="html">&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Yes, the catch-cry from the "Lost in Space" Robot. But I'm more interested in PL/SQL Warnings.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;My new contract is working with an Oracle 11gR2 database. [Aside: It's great using up-to-date versions and with the new 11.2.0.2 version of XE, it's almost like Christmas.]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;With new versions come new features and several new PL/SQL compiler warnings have been added to 11gR2. One of those is "&lt;span class="Apple-style-span" style="background-color: #f2f2f5;"&gt;&lt;span style="zoom: 1;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;PLW-05018: unit &amp;lt;program unit&amp;gt; omitted optional AUTHID clause; default value DEFINER used&lt;/b&gt;&lt;/span&gt;"&lt;/span&gt;&lt;span style="zoom: 1;"&gt;. This message&amp;nbsp;&lt;/span&gt;&lt;/span&gt;was described by Steven Feuerstein as "&lt;span class="Apple-style-span" style="background-color: #f2f2f5;"&gt;one of those "nuisance" warnings that will pop up on almost every one of our compiles, because so few developers use AUTHID (for invoker rights) and legacy code certainly does not include this clause"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;This description was in the answer to one of the &lt;a href="http://plsql-challenge.blogspot.com/2011/07/objections-to-plsql-warnings-quiz-in-q2.html"&gt;Championship playoff questions&lt;/a&gt; which asked players to look at some code and give the number of warnings that it would generate. Most players underestimated the answer, partly because the number of warnings is going up with each version.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;For most developers this warning is pretty much superfluous. It is pretty rare to be developing DEFINER rights code for applications. However utilities and some of the built-in schemas (eg MDSYS etc) might have elevated privileges and exposing that power through a procedure is something that needs careful consideration.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;It is possible to enable and disable specific warnings.&amp;nbsp;Personally I use the fine-grained option available on the command line through ALTER SESSION.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ALTER SESSION SET PLSQL_WARNINGS= &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; 'ENABLE:ALL','DISABLE:07203'&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;,&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;'DISABLE:05018',&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;'DISABLE:06009'&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;The DBAs can set these using ALTER SYSTEM, or might set up LOGON triggers on specific schemas to set appropriate values. You may also want a different level of warnings in your development databases that your testing and production databases.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;It may also be possible to set your preferred options in your IDE. However looking at "SQL Developer", the options in the GUI to enable/disable these warnings are pretty coarse-grained, so I wouldn't recommend this solution.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-tHC0HUKGGGY/TnRJl2gkPQI/AAAAAAAAABg/dHeGe7iJHVk/s1600/plsql_warning.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="286" src="http://4.bp.blogspot.com/-tHC0HUKGGGY/TnRJl2gkPQI/AAAAAAAAABg/dHeGe7iJHVk/s400/plsql_warning.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;SQL Developer options for setting PL/SQL Warnings&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Another location for defining the PLSQL_WARNINGS level is on the object itself.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;XE&amp;gt; create or replace procedure do_it (i_text IN OUT VARCHAR) is&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 2 &amp;nbsp;begin&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 3 &amp;nbsp; &amp;nbsp;dbms_output.put_line(i_text);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 4 &amp;nbsp;end do_it;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp; 5 &amp;nbsp;/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;XE&amp;gt; alter session set plsql_warnings='ENABLE:ALL';&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Session altered.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;XE&amp;gt; alter procedure do_it compile;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;SP2-0805: Procedure altered with compilation warnings&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;XE&amp;gt; select text from user_errors where name = 'DO_IT';&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;TEXT&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;-------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;PLW-07203: parameter 'I_TEXT' may benefit from use of the NOCOPY compiler hint&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;PLW-05018: unit DO_IT omitted optional AUTHID clause; default value DEFINER used&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;This simple procedure gives two errors when all warnings are enabled. If I then recompile it with those warnings disabled, it comes out clean.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;XE&amp;gt; &lt;span class="Apple-style-span" style="color: blue;"&gt;alter procedure do_it compile plsql_warnings='ENABLE:ALL','DISABLE:07203','DISABLE:05018';&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Procedure altered.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;XE&amp;gt; &lt;span class="Apple-style-span" style="color: blue;"&gt;select text from user_errors where name = 'DO_IT';&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;no rows selected&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;If I do a straight compile on that procedure afterwards, it will use the current session settings (which will be inherited from the system settings if not set specifically).&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;XE&amp;gt; &lt;span class="Apple-style-span" style="color: blue;"&gt;alter procedure do_it compile;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;SP2-0805: Procedure altered with compilation warnings&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;XE&amp;gt; &lt;span class="Apple-style-span" style="color: blue;"&gt;select text from user_errors where name = 'DO_IT';&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;TEXT&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;--------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;PLW-07203: parameter 'I_TEXT' may benefit from use of the NOCOPY compiler hint&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;PLW-05018: unit DO_IT omitted optional AUTHID clause; default value DEFINER used&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;However you can specify 'REUSE SETTINGS' so that the explicitly define settings are retained.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;XE&amp;gt; &lt;span class="Apple-style-span" style="color: blue;"&gt;alter procedure do_it compile plsql_warnings='ENABLE:ALL','DISABLE:07203','DISABLE:05018';&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Procedure altered.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;XE&amp;gt; &lt;span class="Apple-style-span" style="color: blue;"&gt;alter procedure do_it compile reuse settings;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Procedure altered.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;XE&amp;gt; &lt;span class="Apple-style-span" style="color: blue;"&gt;select text from user_errors where name = 'DO_IT';&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red; font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;no rows selected&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;My recommendations would be for the development environment to have at least some warnings enabled, either at the system level or for specific schemas. Then, if individual modules need differing settings, these can be specified and retained (assuming your IDE is up to the job).&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;For testing environments, having warnings enabled might be a useful step as this may be the first 'independent' compilation of the code. A second set of eyes reviewing the warnings could be a basic 'code review'.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;I don't see a benefit in warnings in production environments. But I don't see a real downside either.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-3374707734037145843?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=9o1FMh0CeGY:ihdWW6Jty9U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=9o1FMh0CeGY:ihdWW6Jty9U:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=9o1FMh0CeGY:ihdWW6Jty9U:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=9o1FMh0CeGY:ihdWW6Jty9U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/9o1FMh0CeGY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/3374707734037145843/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=3374707734037145843" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/3374707734037145843" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/3374707734037145843" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/09/warning-warning-danger-danger.html" title="WARNING, WARNING, DANGER, DANGER !" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-tHC0HUKGGGY/TnRJl2gkPQI/AAAAAAAAABg/dHeGe7iJHVk/s72-c/plsql_warning.png" height="72" width="72" /><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-3209942497048158547</id><published>2011-09-02T11:55:00.003+10:00</published><updated>2011-09-02T11:55:58.902+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle-xe" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">Oracle 11gR2 Express Edition is FREE</title><content type="html">&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;I've just wiped my Oracle XE 10g Edition on my home PC and replaced it with a fresh clean &lt;a href="http://www.oracle.com/technetwork/database/express-edition/overview/index.html"&gt;11g Express Edition&lt;/a&gt;.&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;For those who haven't met XE before, it is the free edition of Oracle.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;It allows for up to 11Gb of data (up from 4Gb in the old XE) and will use 1 CPU and 1 GB of RAM. The server can have more power, but it won't get used by the database.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;You can use it for free (developing, testing, running production applications and even give training using it).&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;You don't get some of the snazzy Enterprise Edition features. No FLASHBACK DATABASE or FLASHBACK TABLE. No PL/SQL Function Result Cache. No Diagnostic or Tuning packs. Or table compression.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;The big 'Standard Edition' feature I can see that is missing is Java in the database.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;It comes with Apex 4.0 pre-installed.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-3209942497048158547?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=T34I8Hmh5_w:cRr0iuZHPbY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=T34I8Hmh5_w:cRr0iuZHPbY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=T34I8Hmh5_w:cRr0iuZHPbY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=T34I8Hmh5_w:cRr0iuZHPbY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/T34I8Hmh5_w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/3209942497048158547/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=3209942497048158547" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/3209942497048158547" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/3209942497048158547" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/09/oracle-11gr2-express-edition-is-free.html" title="Oracle 11gR2 Express Edition is FREE" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-6203795929317995520</id><published>2011-08-31T10:09:00.003+10:00</published><updated>2011-08-31T10:39:03.239+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><title type="text">Swapping the white shirt for a towel ?</title><content type="html">&lt;span class="Apple-style-span" &gt;For almost three years I have been a consultant. Dark suit, white shirt, tie. The official uniform of the 'You can trust us' brigade. [Aside, I was reading &lt;a href="http://freakonomicsbook.com/"&gt;Superfreakonomics&lt;/a&gt; recently and learned that &lt;a href="http://www.telegraph.co.uk/news/uknews/1511031/The-deadly-germs-nestling-in-your-tie.html"&gt;ties are often germ ridden&lt;/a&gt; so the soon we all stop wearing them, the better!]&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;Next week I start a new job. Back to contract work, with a role doing Application Express development. Yeah ! I do like Apex. I'd previously &lt;a href="http://blog.sydoracle.com/2011/01/of-architects-astronauts-and-engineers.html"&gt;remarked&lt;/a&gt; about the feeling of accomplishment I get when building code. It is nice to see something you've built being used. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;I'm contracting through an agency (&lt;a href="http://www.bsipeople.com/"&gt;BSIPeople&lt;/a&gt;) who supplied me with a snazzy Sports Bag on sign up. The bag contained the ubiquitous pen, a hat, a drink bottle and a towel. My wife's reaction to the towel was an immediate reference to the &lt;a href="http://en.wikipedia.org/wiki/Phrases_from_The_Hitchhiker's_Guide_to_the_Galaxy#Knowing_where_one.27s_towel_is"&gt;Hitchhikers Guide to the Galaxy&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; line-height: 19px; background-color: rgb(255, 255, 255); "&gt;any man who can hitch the length and breadth of the galaxy, rough it, slum it, struggle against terrible odds, win through, and still knows where his towel is, is clearly a man to be reckoned with"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px; background-color: rgb(255, 255, 255); "&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px; background-color: rgb(255, 255, 255); "&gt;&lt;span class="Apple-style-span" &gt;There's something appropriate about going back to contracting armed with a towel. I'm looking forward to it.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-6203795929317995520?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=kVLh98TGn48:5hCMISdcNwE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=kVLh98TGn48:5hCMISdcNwE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=kVLh98TGn48:5hCMISdcNwE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=kVLh98TGn48:5hCMISdcNwE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/kVLh98TGn48" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/6203795929317995520/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=6203795929317995520" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/6203795929317995520" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/6203795929317995520" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/08/swapping-white-shirt-for-towel.html" title="Swapping the white shirt for a towel ?" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-2133719552174770854</id><published>2011-08-28T08:05:00.004+10:00</published><updated>2011-08-28T08:19:20.728+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><title type="text">Canadian dogs on drugs</title><content type="html">&lt;div&gt;&lt;span class="Apple-style-span" &gt;This is what happens when you get your data model wrong.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;I subscribe to RISKS digests, and the latest issue has an interesting &lt;a href="http://catless.ncl.ac.uk/Risks/26.54.html#subj3"&gt;post&lt;/a&gt; on a poor Canadian bloke who got confused with his dog.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;The dog was on some prescription medicine. Dogs can't go into the local pharmacy and buy this stuff themselves, so the owner performed this duty. The drug purchase/pickup got entered into the nationwide recording system against the purchaser's name.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;The problem comes when this guy goes into hospital and that purchase shows up on his records. There's no indication that the drugs are actually intended for a different recipient (Cooper the dog) so the doctors didn't know this. Fortunately the owner was conscious and lucid and able to tell the doctor that he wasn't on those drugs and the mixup got sorted.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;It is perfectly reasonable to have a pharmacy record that doctors in hospitals can easily refer to so that they can find out what medications a patient is on. My dad takes various pills for things, and i'd be pretty sure he won't remember the individual names. Plus they deal with accidents and cases where the patient may be unconscious  or unable to talk.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;I suspect they've also started to use the same pharmacy records to pick up people who buy too much of particular drugs. Here in Oz they've gone as far as to stop selling various cold remedies whose ingredients were used in making illegal drugs. So drug purchases for pets get thrown into the same bit bucket.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;The problem is that corruption of the data model, of the meaning of the data, has impacted the primary purpose of the system. Keep your data clean folks&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-2133719552174770854?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=nci9_Ebbgdg:5khb7gtrKZ0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=nci9_Ebbgdg:5khb7gtrKZ0:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=nci9_Ebbgdg:5khb7gtrKZ0:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=nci9_Ebbgdg:5khb7gtrKZ0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/nci9_Ebbgdg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/2133719552174770854/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=2133719552174770854" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/2133719552174770854" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/2133719552174770854" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/08/canadian-dogs-on-drugs.html" title="Canadian dogs on drugs" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-7636750154116986218</id><published>2011-08-21T14:29:00.003+10:00</published><updated>2011-08-21T15:26:18.973+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">Redo log buffer or redo log file ?</title><content type="html">&lt;span class="Apple-style-span" &gt;There's a very interesting post on Jonathan Lewis' blog under the unassuming title of &lt;a href="http://jonathanlewis.wordpress.com/2011/08/19/redo-2/"&gt;REDO&lt;/a&gt;.&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;Oracle treats a transaction as committed when the change and the commit has been written to the redo log BUFFER and doesn't require it to be written to the redo log FILE. &lt;/span&gt; &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;This can cause issues if the instance fails before that log data is flushed to the the file. If the disk write fails BECAUSE the instance fails, it is very unlikely that anything would have had a chance to look at the data in that tiny gap (but even rare risks WILL happen somewhere, sometime). If the disk write fails but the instance continues for a time (which is simulated in Jonathan's post) then the risk gets higher.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;I think RAC throws a few more variables in there. Conceivably, a transaction in one instance may have committed data (not written to redo log file) shunted to another instance where it can be amended again and written to that instance's redo log file. If that first instance fails without a persistent copy of that initial transaction, then it can never be re-applied in its entirety.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;But then I'm a developer and maybe I'm missing something in the the way instance recoveries are managed in RAC.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;So is Oracle 'broken' ? &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;One problem is the notion of 'durability' is vague. A committed action should last beyond 'system failure', but in a 'cheap' system the CPU and disks can be in the same rack (or the same server) and a failure, such as a fire, could destroy both. Does that mean a transaction shouldn't be viewed as 'committed' until the log file is archived and shipped elsewhere ? Conversely, an expensive 'Data Guard' architecture with a maximum &lt;a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28294/protection.htm"&gt;protection mode/level&lt;/a&gt; might not be impacted by the failure of a redo log write on a single node.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;I suspect this one will run on for a while, and it is worth keeping an eye on Jonathan's post as the experts weigh in.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-7636750154116986218?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=PQOPLmUeYMQ:AktkgwS4lZs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=PQOPLmUeYMQ:AktkgwS4lZs:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=PQOPLmUeYMQ:AktkgwS4lZs:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=PQOPLmUeYMQ:AktkgwS4lZs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/PQOPLmUeYMQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/7636750154116986218/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=7636750154116986218" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/7636750154116986218" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/7636750154116986218" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/08/redo-log-buffer-or-redo-log-file.html" title="Redo log buffer or redo log file ?" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13265058.post-5528512293836864155</id><published>2011-08-19T14:00:00.003+10:00</published><updated>2011-08-19T14:00:04.153+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="oradbpedia" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title type="text">The casino approach to security</title><content type="html">&lt;span class="Apple-style-span" &gt;We can learn a lot from casinos. At least that's &lt;a href="http://tacticalwebappsec.blogspot.com/2009/07/lessons-learned-from-casino.html"&gt;one view on application security&lt;/a&gt;. The rules have changed from being a case of what is allowed versus what isn't allowed, to something a bit fuzzier.&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;As an example, on my way to the Sydney Oracle Meetup 'Expert' event I had a phone call from my bank. Apparently my credit card had just been rejected in a Australia Post office as a suspect transaction. Since I'd been on the train it wasn't me. The card was in my wallet too, so it hadn't been nicked. The card had been skimmed somewhere.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;The suspect transaction wasn't above my credit limit. It's not like I've never used it in an Australia Post either (though never for the amount involved). It may have been an odd location, but I hadn't had any rejections on a recent holiday. In short, it probably wasn't any single factor that tripped the security wire, rather a whole set of criteria that marked it as suspect. &lt;i&gt;Okay, maybe it came down to a suspicious employee of Australia Post, but this is a database blog not an episode of Law and Order.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span"&gt;There's a careful balancing act the bank has to perform (and it did it very well in this case). It has to, in the words of the article, "&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-size: 13px; font-weight: bold; line-height: 18px; background-color: rgb(255, 255, 255); "&gt;let the people play". &lt;/span&gt;&lt;span class="Apple-style-span"&gt; It can't stop every credit card transaction, but has to look for rogue behavior. Its not something I've directly worked in, but I've done fuzzy algorithms for data matching. You add some points for one fact, a few more for another and at the end you get a resulting numeric value for 'how likely'. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span"&gt;That requires lots of logging of activity, and there's an increasing requirement to analyse these logs, sometimes in real time (or near real time) for those behavioral factors. Hadoop seems to get some mentions for this form of analysis, though I'm sure there are other solutions in the NoSQL wo&lt;/span&gt;&lt;span class="Apple-style-span"&gt;rld. I'm sure &lt;a href="http://voltdb.com/company/blog/why-voltdb-so-fast"&gt;VoltDB&lt;/a&gt; would offer themselves up here too. My gut feel for this style of application would be some form of distributed data store. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;There are rumors of an &lt;a href="http://www.dbms2.com/2011/06/24/forthcoming-oracle-appliances/"&gt;Oracle Hadoop Appliance&lt;/a&gt; which may or not be confirmed in a few weeks at OOW. That said, there have long been rumors of an &lt;a href="http://www.oracle-base.com/blog/2009/09/16/oracle-games-console/"&gt;Oracle Games Console&lt;/a&gt;, and I'm thinking of applying for a trademark for ExaPhone before Larry gets in there. Oracle do have a pedigree of dealing with vast amounts of data (anyone mention CERN ?) so it will be interesting to see how they play out in this area.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13265058-5528512293836864155?l=blog.sydoracle.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=h6djEJ2HWlk:-W-Yv-Ikr0k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=h6djEJ2HWlk:-W-Yv-Ikr0k:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?i=h6djEJ2HWlk:-W-Yv-Ikr0k:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SydneyOracleLab?a=h6djEJ2HWlk:-W-Yv-Ikr0k:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SydneyOracleLab?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SydneyOracleLab/~4/h6djEJ2HWlk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.sydoracle.com/feeds/5528512293836864155/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=13265058&amp;postID=5528512293836864155" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/5528512293836864155" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/13265058/posts/default/5528512293836864155" /><link rel="alternate" type="text/html" href="http://blog.sydoracle.com/2011/08/casino-approach-to-security.html" title="The casino approach to security" /><author><name>Gary Myers</name><uri>https://profiles.google.com/102181347552792364408</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-JOFVsyx3ZJg/AAAAAAAAAAI/AAAAAAAAADo/SWki7DHv2o4/s512-c/photo.jpg" /></author><thr:total>2</thr:total></entry></feed>

