<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/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'><id>tag:blogger.com,1999:blog-24686153</id><updated>2012-01-19T10:02:35.054-08:00</updated><title type='text'>Anton Nielsen</title><subtitle type='html'>This blog is mostly random experiences with Oracle technologies.  Of those, it is mostly specific solutions to isolated problems.  If you would like assistance with anything related to Oracle technologies click on the My Work link to the right.  I work for &lt;a href="http://concept2completion.net"&gt;C2 Consulting&lt;/a&gt; which has some of the best Oracle technologists around.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>71</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-24686153.post-4200441889542354311</id><published>2011-10-03T14:48:00.000-07:00</published><updated>2011-10-03T14:48:50.293-07:00</updated><title type='text'>SOAPEX at OOW 2011</title><content type='html'>Recently, I've been doing a lot with Oracle Application Express (APEX) and web services.&amp;nbsp; At Oracle OpenWorld I came across a presentation on just this topic.&amp;nbsp; Douwe Pieter van den Bos, an Oracle Ace, presented on using APEX with the Oracle SOA Suite.&amp;nbsp; I have used SOA Suite in the past, and quite like it, but recently the web services I've been using are SOAP based services that I have very little influence on.&amp;nbsp; They are not built with or deployed on the Oracle SOA Suite.&lt;br /&gt;&lt;br /&gt;The SOAPEX presentation gave a nice overview of how to set up APEX to use web services and made the smart recommendation to build your web service references in a single application (SOAPEX) and then use the inherit/subscription model of APEX to keep things up to date.&lt;br /&gt;&lt;br /&gt;My specific challenges have been a little more difficult, specifically in the need to consume very large and complicated web services--so complex (or possibly overly complicated) that APEX is unable to parse the wsdl.&amp;nbsp; More on this later...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-4200441889542354311?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/4200441889542354311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=4200441889542354311&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/4200441889542354311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/4200441889542354311'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2011/10/soapex-at-oow-2011.html' title='SOAPEX at OOW 2011'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-6745863315335532820</id><published>2011-10-03T14:40:00.000-07:00</published><updated>2011-10-03T14:40:14.459-07:00</updated><title type='text'>Oracle 12c Database</title><content type='html'>It's definitely about the cloud at Oracle OpenWorld 2011.&amp;nbsp; In many ways Oracle has always promoted it's database in the private cloud--long before the term cloud (private or public) became popular.&amp;nbsp; At previous OpenWorlds, Larry Ellison poked fun at the cloud, noting that the notion isn't new.&amp;nbsp; Well, even Oracle must bend to the popularity of the term cloud.&amp;nbsp; I haven't yet heard an official name for the next database release, but I'm betting on Oracle 12c.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-6745863315335532820?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/6745863315335532820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=6745863315335532820&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/6745863315335532820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/6745863315335532820'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2011/10/oracle-12c-database.html' title='Oracle 12c Database'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-1612670935976059417</id><published>2011-03-30T18:46:00.000-07:00</published><updated>2011-03-30T18:46:05.356-07:00</updated><title type='text'>It's Been a Long Time</title><content type='html'>My last blog post was a &lt;a href="http://c2anton.blogspot.com/2010/03/haiku-two.html"&gt;tribute to Scott Spadafore&lt;/a&gt;.&amp;nbsp; A year and a half before, I also offered tribute to another close friend and APEX guru, &lt;a href="http://c2anton.blogspot.com/2008/11/haiku.html"&gt;Carl Backstrom&lt;/a&gt;.&amp;nbsp; I have had a hard time getting past the loss of these two friends.&amp;nbsp; Such a hard time that this is my first post in over a year--my first since Scott's haiku.&amp;nbsp; I have started to write many posts, but none seemed worthy of moving Scott's haiku down the page.&amp;nbsp; Scott was a pillar of the Oracle community--not just Application Express, though he certainly dominated that arena.&lt;br /&gt;&lt;br /&gt;The passing of these two friends was a loss to many others as well.&amp;nbsp; Several months ago John Scott had a &lt;a href="http://jes.blogs.shellprompt.net/2011/03/30/expert-oracle-application-express/"&gt;grand idea&lt;/a&gt;.&amp;nbsp; He gathered together over a dozen people who had benefited from the work of Carl and Scott, who had enjoyed success because of their efforts, and had become friends with Carl, Scott and each other through the APEX community.&amp;nbsp; John suggested that we jointly write a book, in Carl and Scott's memory, and donate the author royalties to the funds established for Carl's and Scott's children.&amp;nbsp; I was honored to be included in this group.&lt;br /&gt;&lt;br /&gt;John's &lt;a href="http://jes.blogs.shellprompt.net/2011/03/30/expert-oracle-application-express/"&gt;blog&lt;/a&gt; provides the full list of authors and more info about the book, &lt;a href="http://www.amazon.com/Expert-Oracle-Application-Express-Dietmar/dp/1430235128/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1301533694&amp;amp;sr=8-1"&gt;Expert Oracle Application Express&lt;/a&gt;.&amp;nbsp; I offer my thanks to John for coordinating this project, and to all of the contributors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-1612670935976059417?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/1612670935976059417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=1612670935976059417&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/1612670935976059417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/1612670935976059417'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2011/03/its-been-long-time.html' title='It&apos;s Been a Long Time'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-7554490353520647292</id><published>2010-03-22T08:53:00.000-07:00</published><updated>2010-03-22T08:53:54.652-07:00</updated><title type='text'>Haiku Two</title><content type='html'>In November 2008 I offered a &lt;a href="http://c2anton.blogspot.com/2008/11/haiku.html"&gt;haiku in Carl Backstrom's memory&lt;/a&gt;.&amp;nbsp; That post referenced texting a haiku.&amp;nbsp; That text originated with Scott Spadafore.&amp;nbsp; It is with great sadness that I offer haiku two in &lt;a href="http://joelkallman.blogspot.com/2010/03/scott-spadafore.html"&gt;Scott's memory&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;spring leaps forth&lt;br /&gt;though warmth, shining sun&lt;br /&gt;brilliance lost&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-7554490353520647292?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/7554490353520647292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=7554490353520647292&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7554490353520647292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7554490353520647292'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2010/03/haiku-two.html' title='Haiku Two'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-4522181416295664316</id><published>2010-03-09T07:54:00.000-08:00</published><updated>2010-03-09T10:24:25.533-08:00</updated><title type='text'>Thank You Granny!</title><content type='html'>My wife recently took a look at this blog and told me that it would be better with pictures.&amp;nbsp; She also suggested that not every post had to start with: If you are installing/configuring/coding with the Oracle product abc and you get error ORA-nnnnn . . . With that in mind, I share the following.&lt;br /&gt;&lt;br /&gt;I used to commute to work by bike most days, but I was &lt;a href="http://www.crapmanagement.com/2009/09/remotes-and-recovery.html"&gt;out of commission&lt;/a&gt; for about a year.&amp;nbsp; Today was a beautiful morning, just right to get back on the bike for a ride to work.&amp;nbsp; After a year off it was a bit of a shakey start.&amp;nbsp; Just figuring out where my gear was.&amp;nbsp; Pairing down my now typical road warrior gear to the bare essentials (for example, a 4 port switch instead of the 10 port).&amp;nbsp; Stuffing everything into a new bag.&amp;nbsp; Hoping my lunch would not spill out into traffic.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_zDUUOBtIrlU/S5ZtXOSnOmI/AAAAAAAAAD8/nDGxIfY7LDg/s1600-h/tb2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_zDUUOBtIrlU/S5ZtXOSnOmI/AAAAAAAAAD8/nDGxIfY7LDg/s320/tb2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;It used to take me 26 minutes door to door.&amp;nbsp; This morning was a little slower.&amp;nbsp; Which brings me to the title of this post.&amp;nbsp; Below is a shot of my Campy Chorus Racing Triple.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_zDUUOBtIrlU/S5ZtxcJy04I/AAAAAAAAAEE/ykhvNRqJPXE/s1600-h/granny.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_zDUUOBtIrlU/S5ZtxcJy04I/AAAAAAAAAEE/ykhvNRqJPXE/s320/granny.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;A Campy Racing Triple is for people who want to think they are still fast, but realize their lifestyle will include occasionally towing a trailer with the road bike, possibly a child seat.&amp;nbsp; That small ring is known as the Granny Gear.&amp;nbsp; It's for those times, for people like me.&amp;nbsp; It's not for a commute to work, mind you.&amp;nbsp; It's for carrying heavy loads, for extreme circumstances.&amp;nbsp; Note that the photo does not show me using the granny.&amp;nbsp; That is, there is no actual evidence that I actually resorted to it today.&amp;nbsp; The shot below is merely circumstantial.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_zDUUOBtIrlU/S5Zr4894yII/AAAAAAAAAD0/NPv4qBP4npc/s1600-h/slow4151.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_zDUUOBtIrlU/S5Zr4894yII/AAAAAAAAAD0/NPv4qBP4npc/s320/slow4151.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;That says 41minutes, 51 seconds.&amp;nbsp; Granted, that included finding my lock in my stuffed bag and locking up, but with all the excuses I can muster, it is still sloooow.&amp;nbsp; I think of it this way, though . . . By car it takes 28 minutes.&amp;nbsp; That means I spent about 14 minutes this morning just doing something I enjoy.&amp;nbsp; Everyone should get 14 minutes a day to do something they enjoy.&amp;nbsp; And, I get another 14 minutes this evening on my way home.&amp;nbsp; I wish you the same.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-4522181416295664316?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/4522181416295664316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=4522181416295664316&amp;isPopup=true' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/4522181416295664316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/4522181416295664316'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2010/03/thank-you-granny.html' title='Thank You Granny!'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zDUUOBtIrlU/S5ZtXOSnOmI/AAAAAAAAAD8/nDGxIfY7LDg/s72-c/tb2.jpg' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-8938190934439269952</id><published>2010-02-25T11:49:00.000-08:00</published><updated>2010-02-25T19:26:36.394-08:00</updated><title type='text'>APEX Refresh Classic Report Region AJAX style</title><content type='html'>We often have the need to refresh a classic report region, AJAX style. It is straightforward to get a refresh link on the page. I used to just build a link using $a_report (the APEX built-in for doing partial page refresh on classic reports). But I have found it is better to create a javascript function in the region header or footer. This has the advantage that you can call it from a button on the page, or from any location on the page, not just from within the header or footer itself. If you put the following &lt;br /&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;function c2RefreshTasks(){&amp;nbsp; &lt;br /&gt;&amp;nbsp; pId = '#REGION_ID#';&amp;nbsp;&amp;nbsp; // report region id&lt;br /&gt;&amp;nbsp; $a_report(pId.substring(1),'1','15');&amp;nbsp; // APEX built-in&lt;br /&gt;&amp;nbsp; } &lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;This allows me to put a link anywhere on the page&lt;br /&gt;&lt;br /&gt;&amp;lt;a href="javascript:c2RefreshTasks();"&amp;gt;refresh tasks&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;br /&gt;I can also create a standard button anywhere on the page that calls this javascript.&lt;br /&gt;&lt;br /&gt;I recently also had the need to pop a new window (child), add a task in that child window, close the child and then refresh the task region in parent window. It turned out to be easy...&lt;br /&gt;&lt;br /&gt;Just create the APEX child window that does the insert/update.&amp;amp;nbsp; Have it branch to a page (e.g. P99). On P99, put the following in the HTML header&lt;br /&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&amp;nbsp;// important to have the try because the parent window might have changed... &lt;br /&gt;{ try { &lt;br /&gt;&amp;nbsp; window.opener.c2RefreshTasks();&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; catch(err) {&lt;br /&gt;&amp;nbsp; window.close();&amp;nbsp; &lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&amp;nbsp; window.close(); &lt;br /&gt;&amp;lt;/script&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-8938190934439269952?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/8938190934439269952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=8938190934439269952&amp;isPopup=true' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/8938190934439269952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/8938190934439269952'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2010/02/apex-refresh-classic-report-region-ajax.html' title='APEX Refresh Classic Report Region AJAX style'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-2165131099189890246</id><published>2009-12-19T10:23:00.000-08:00</published><updated>2009-12-19T12:34:46.316-08:00</updated><title type='text'>Oracle Application Express 4.0 (APEX 4.0) Early Adopter</title><content type='html'>Just about everyone has already blogged about it, but APEX 4.0 EA is available now.&lt;br /&gt;&lt;a href="http://tryapexnow.com/"&gt;http://tryapexnow.com/&lt;/a&gt;&lt;br /&gt;What else is there to say that has not already been said?&amp;nbsp; Not much probably, but I'll point out one new feature: APEX 4.0 is not available in Internet Explorer.&amp;nbsp; I have it on good authority that this feature will only be in the beta and will not make it into the production release--we can hope, though.&amp;nbsp; (Thanks to Neelesh Shah for pointing out this new feature.)&lt;br /&gt;&lt;br /&gt;Also, check out the new SQL Developer features:&lt;br /&gt;&lt;a href="http://krisrice.blogspot.com/2009/12/application-express-and-anonymous.html"&gt;http://krisrice.blogspot.com/2009/12/application-express-and-anonymous.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And, of course, Patrick's sample plugin:&lt;br /&gt;&lt;a href="http://www.inside-oracle-apex.com/test-drive-oracle-apex-4-0-early-adopter/"&gt;http://www.inside-oracle-apex.com/test-drive-oracle-apex-4-0-early-adopter/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-2165131099189890246?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/2165131099189890246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=2165131099189890246&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/2165131099189890246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/2165131099189890246'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2009/12/oracle-application-express-40-apex-40.html' title='Oracle Application Express 4.0 (APEX 4.0) Early Adopter'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-125571162341904673</id><published>2009-12-03T11:27:00.000-08:00</published><updated>2009-12-03T11:27:07.324-08:00</updated><title type='text'>ODTUG Kaleidoscope 2010: APEX Plugin Showcase</title><content type='html'>One of the best new features of APEX 4.0 is the extensible plugin architecture.&amp;nbsp; You will be able to create your own item and region types as well as custom dynamic actions (javascript enabled actions on the browser).&amp;nbsp; You'll be able to add these plugins right in to the builder so they are available to all of your developers.&amp;nbsp; You will be able to share (or even sell) these with the APEX community.&amp;nbsp; This is big.&lt;br /&gt;&lt;br /&gt;To get you started the fine folks at ODTUG are going to build five fantastic plugins and give them away to anyone who attends Kaleidoscope 2010.&amp;nbsp; You can &lt;a href="http://www.odtugkaleidoscope.com/technicalsessions.html"&gt;check out the details here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The trick to writing a great plugin is to have a great idea.&amp;nbsp; I'll have some input into the five plugins.&amp;nbsp; If there is an APEX item type, region type or dynamic action that you think should be there but isn't, please leave me a comment and let me know.&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-125571162341904673?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/125571162341904673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=125571162341904673&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/125571162341904673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/125571162341904673'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2009/12/odtug-kaleidoscope-2010-apex-plugin.html' title='ODTUG Kaleidoscope 2010: APEX Plugin Showcase'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-6925091752541085130</id><published>2009-11-30T19:36:00.000-08:00</published><updated>2009-11-30T19:37:31.790-08:00</updated><title type='text'>Interesting APEX with dblink issue</title><content type='html'>We recently ran in to a problem when connecting across a database link to a Postgres database.&amp;nbsp; The query looked like this&lt;br /&gt;&lt;blockquote&gt;select "column1", "column2"&lt;br /&gt;&amp;nbsp; from "my_schema"."my_long_named_view"@my_db_link&lt;br /&gt;&lt;/blockquote&gt;It works fine from sql*plus and sql Developer, but when running the same query in Application Express (in an app or in the SQL Workshop) we got this error:&lt;br /&gt;&lt;blockquote&gt;ORA-28500: connection from ORACLE to a non-Oracle system returned this message: [Generic Connectivity Using ODBC]DRV_QspecDescribe: DB_ODBC_RECORD (189): ; [OpenLink][ODBC][PostgreSQL Server] current transaction is aborted, commands ignored until end of transaction block (SQL State: S1000; SQL Code: 1) ORA-02063: preceding 2 lines from MY_DB_LINK&lt;br /&gt;&lt;/blockquote&gt;Dave Rydzewski came up with the solution.&amp;nbsp; Shorten the name of the view in Postgres and change the query to look like this (note two fewer double quotes "):&lt;br /&gt;&lt;blockquote&gt;select "column1", "column2"&lt;br /&gt;&amp;nbsp; from "my_schema.short_v"@my_db_link&lt;br /&gt;&lt;/blockquote&gt;I'm still not sure what APEX does to make it blow up.&amp;nbsp; I wonder how many people use APEX with a db link to Postgres.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-6925091752541085130?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/6925091752541085130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=6925091752541085130&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/6925091752541085130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/6925091752541085130'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2009/11/interesting-apex-with-dblink-issue.html' title='Interesting APEX with dblink issue'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-3496987640038901207</id><published>2009-11-24T20:07:00.000-08:00</published><updated>2009-11-25T14:04:41.067-08:00</updated><title type='text'>VMware pc2mac</title><content type='html'>I thought tonight was going to be the night.&amp;nbsp; I purchased a macbook pro about 6 weeks ago.&amp;nbsp; I've slowly been getting familiar with the mac, and realizing that I'll probably still need a PC image at least occasionally.&amp;nbsp; Last night I installed VMware Fusion for the mac (nice that it's called Fusion, that way it almost has something to do with this Oracle blog).&amp;nbsp; Tonight I was to create the image from my work laptop and test it out on the macbook.&amp;nbsp; Alas, try as I might, I still don't have an image.&amp;nbsp; This is my story.&lt;br /&gt;&lt;br /&gt;I read the VMware readme (yep, I do that kind of thing).&amp;nbsp; I learned about pc2mac, the utility that lets you stream the image right off your running pc and onto an image on your mac.&amp;nbsp; I read the guides.&amp;nbsp; I installed the pc2mac utility on my PC, restarted my PC and the VMware Fusion PC Migration Agent screen opened right up.&amp;nbsp; I ran VMware on the mac and followed the instructions, typed in the four-digit passcode, the administrator password, clicked continue, and got an error:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Converter failed to connect to remote machine.&lt;br /&gt;An error occured while transferring data&lt;br /&gt;&lt;/blockquote&gt;I tried a few times, but did not get any further.&amp;nbsp; I decided to come back later, but first, I returned to the PC to close out the migration agent.&amp;nbsp; Noticing the checkbox "Run the VMware Fusion PC Migration Agent Every time I start my PC", I realized that I probably don't want this to every time.&amp;nbsp; I unchecked the box.&lt;br /&gt;&lt;br /&gt;Returning later to try again, I could not find a way to start up that migration assistant.&amp;nbsp; I googled.&amp;nbsp; I rebooted, re-installed pc2mac, rebooted, uninstalled, rebooted, reinstalled, rebooted.&amp;nbsp; Mind you, this was the PC I was rebooting--not a quick affair, much like this blog post.&amp;nbsp; I'll cut to the chase, even an uninstall and reinstall would not bring up that screen again.&amp;nbsp; I finally found the trick though.&amp;nbsp; Edit the registry:&lt;br /&gt;&lt;br /&gt;HKEY_CURRENT_USER &amp;gt; Software &amp;gt; VMware, Inc. &amp;gt; PC Migration Agent&lt;br /&gt;Edit RunAtStartup and change from 0 to 1.&lt;br /&gt;&lt;br /&gt;Of course, the change from 0 to 1 was just a guess, but it worked.&lt;br /&gt;&lt;br /&gt;Now, at 11:06pm, I'm back to having a pc2mac utility that will run the first screen, but it still does not work.&amp;nbsp; Now that's progress.&amp;nbsp; Oh, and my wife just said, "How do I find your blog?"&amp;nbsp; Good night everybody.&lt;br /&gt;&lt;br /&gt;[Update: 25 Nov 2009, 4:53pm]&amp;nbsp; I also had an issue logging an issue with VMware.&amp;nbsp; The first problem was that I could not register the product.&amp;nbsp; The VMware registration website kept giving an error that it was not a valid code despite the fact that it was in the email and the product installation accepted it.&amp;nbsp; I was able to log a customer service issue about not being able to register, but I was not able to log a technical issue without first registering.&lt;br /&gt;&lt;br /&gt;I called and spoke with an extremely helpful support rep.&amp;nbsp; She told me they were having issues with some registration numbers and offered to create the technical ticket for me.&amp;nbsp; She was so helpful that I went back to the VMware site to drop a note to anyone that would accept it.&amp;nbsp; This is the note I typed:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;I recently purchased VMware Fusion.&amp;nbsp; I generally know my way around technology, but just registering my VMware software on the website was impossible (truly, as there is currently a bug in your system).&amp;nbsp; After quite a bit of frustration, though, I finally called and spoke with a support representative.&amp;nbsp; I'm sorry that did not get her full name, but she created a new SR for me, 1459858086, and it has been assigned to SGARDNER.&lt;br /&gt;&lt;br /&gt;This support rep was very helpful, polite and overall reflected very well on VMware.&amp;nbsp; Though my issue has not been resolved, I had a very positive experience speaking with this rep.&amp;nbsp; If you have the ability to commend her I hope you will.&lt;br /&gt;&lt;/blockquote&gt;That's not bad, right?&amp;nbsp; Unfortunately, though, it never went anywhere.&amp;nbsp; The only page I could find a place type the note was here: https://www.vmware.com/contact/contact_sales.html&lt;br /&gt;The page never allowed me to pick a Country or State.&amp;nbsp; It just kept showing "loading..." without ever showing a country.&amp;nbsp; Of course, those fields are mandatory.&lt;br /&gt;&lt;br /&gt;Sorry friendly support rep, I'm afraid that note won't make it anywhere.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-3496987640038901207?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/3496987640038901207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=3496987640038901207&amp;isPopup=true' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3496987640038901207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3496987640038901207'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2009/11/vmware-pc2mac.html' title='VMware pc2mac'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-7209725954951462242</id><published>2009-11-04T20:26:00.001-08:00</published><updated>2009-11-04T20:30:29.427-08:00</updated><title type='text'>Looking for APEX Developers</title><content type='html'>I have a client in the northeast of the US.  If you are really good with the Oracle DB, pl/sql and APEX, and live or want to move to the US Northeast, send me your info and I'll pass it along.  Please send an email with your resume to me (anton) at work (concept2completion.net).&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;&lt;br /&gt;Anton&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-7209725954951462242?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/7209725954951462242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=7209725954951462242&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7209725954951462242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7209725954951462242'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2009/11/looking-for-apex-developers.html' title='Looking for APEX Developers'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-3783442693251265286</id><published>2009-09-30T14:23:00.000-07:00</published><updated>2009-10-01T06:13:14.857-07:00</updated><title type='text'>Cloning an Oracle Schema</title><content type='html'>When I started this blog I decided I would only blog about things you could not find reasonably easily with a simple google search.  This post violates that rule.  Cloning a schema is something that I do fairly frequently but not frequently enough that I remember the exact syntax.  First I googled it every time, later I created a little text file with the commands.  Having already gone to the trouble to write a text file, I might as well just paste it in here.  I use datapump.  In the example below I want to export the SCOTT schema which has all of its data in the USERS tablespace.  I want to import it into a database (either the same or another Oracle database) as the user SCOTT2 in the tablespace USERS2.  That means I need to change both the database schema and tablespace.  Here are the commands (replace values as appropriate for your env):&lt;br /&gt;&lt;blockquote&gt;export ORACLE_HOME=/opt/oracle/product/oracle10g&lt;br /&gt;export ORACLE_SID=c2dev1&lt;br /&gt;cd $ORACLE_HOME/bin&lt;br /&gt;./expdp system/&lt;pw&gt; dumpfile=scott.dmp schemas=scott&lt;/pw&gt;&lt;/blockquote&gt;Note: this will create the file scott.dmp in the location $ORACLE_HOME/admin&lt;sid&gt;/dpdump.  You can create a different directory for it, but for my purposes this is sufficient.&lt;br /&gt;&lt;br /&gt;That is all it takes to do the export.&lt;br /&gt;If you plan to import into the same database it can stay in the same location.&lt;br /&gt;&lt;br /&gt;To do the import into a different database you will need to copy the scott.dmp file to the right location for the other database.&lt;br /&gt;&lt;blockquote&gt;cp $ORACLE_HOME/admin/c2dev1/dpdump/scott.dmp /mynas/scott.dmp&lt;/blockquote&gt;Then I ssh to the target machine and copy to the new target location&lt;br /&gt;&lt;blockquote&gt;cp /mynas/scott.dmp $ORACLE_HOME/admin/c2dev2/dpdump/scott.dmp&lt;br /&gt;&lt;br /&gt;export ORACLE_HOME=/opt/oracle/product/oracle10g&lt;br /&gt;export ORACLE_SID=c2dev2&lt;br /&gt;cd $ORACLE_HOME/bin&lt;br /&gt;./impdp system/&lt;pw&gt;  dumpfile=scott.dmp remap_schema=scott:scott2 remap_tablespace=USERS:USERS2&lt;/pw&gt;&lt;/blockquote&gt;That should do it.  This should make it easy for me to do in the future and hopefully help someone else along the way.&lt;/sid&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-3783442693251265286?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/3783442693251265286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=3783442693251265286&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3783442693251265286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3783442693251265286'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2009/09/cloning-oracle-schema.html' title='Cloning an Oracle Schema'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-1616372315135361053</id><published>2009-09-29T18:31:00.000-07:00</published><updated>2009-09-29T18:52:12.401-07:00</updated><title type='text'>APEXposed 2009 - A request for input</title><content type='html'>I will be speaking at &lt;a href="http://www.odtugapextraining.com/agenda.htm"&gt;APEXposed 2009&lt;/a&gt; in Atlanta, GA on 10 &amp;amp; 11 November.  Some of you have certainly seen the How to Hack an APEX Application presentation.  I will be giving a revised version of that.  It is difficult to find interesting things because the APEX developers keep adding features to make it harder for developers to get into trouble, but I'll have a few items of interest, plus the old standby's.&lt;br /&gt;&lt;br /&gt;My second talk is APEX and the Oracle Database. &lt;br /&gt;The power of APEX is partly the immense scope of capabilities present in the Oracle database.  In this presentation I am going to show how to use many of these capabilities within APEX.  Below are a few topics I  have in mind.&lt;span class="style29"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Oracle Text (Intermedia)&lt;/li&gt;&lt;li&gt;Spacial&lt;/li&gt;&lt;li&gt;SQL Analytics&lt;/li&gt;&lt;li&gt;File Compression&lt;/li&gt;&lt;li&gt;owa routines&lt;/li&gt;&lt;li&gt;utl_inaddr&lt;/li&gt;&lt;li&gt;External Tables&lt;/li&gt;&lt;li&gt;Virtual Private Database&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="style29"&gt;                                 &lt;/span&gt; &lt;span style="font-weight: bold;"&gt;I'd love to get additional ideas--if you have any favorites, please let me know&lt;/span&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-1616372315135361053?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/1616372315135361053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=1616372315135361053&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/1616372315135361053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/1616372315135361053'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2009/09/apexposed-2009-request-for-input.html' title='APEXposed 2009 - A request for input'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-7480096012077166977</id><published>2009-06-10T14:15:00.000-07:00</published><updated>2009-06-10T14:25:51.473-07:00</updated><title type='text'>Migrating Portal Repository with change in DN</title><content type='html'>Another in a long line of very esoteric issues...&lt;br /&gt;&lt;br /&gt;If you are migrating a portal repository, possibly from Production back into Dev or vice versa you may run into the following error when running ptlconfig&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;STEP 1 : Populating Portal seed in OID&lt;br /&gt;Connected.&lt;br /&gt;Creating Lightweight User Accounts and Groups in OID&lt;br /&gt;Portal schema version is: 10.1.2.0.2&lt;br /&gt;Error code   : -6502&lt;br /&gt;Error message: ORA-06502: PL/SQL: numeric or value error&lt;br /&gt;ERROR: creating lightweight users and groups in OID ... exiting&lt;br /&gt;&lt;br /&gt;PL/SQL procedure successfully completed.&lt;/blockquote&gt;&lt;br /&gt;This happens if you have changed the base dn of your OID.  For example, you might have had a dn of &lt;span style="font-weight: bold;"&gt;dc=concept2completion,dc=net&lt;/span&gt;&lt;br /&gt;and then decided to change to dot com&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;dc=concept2completion,dc=com&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;or possibly you removed a sub-domain&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;dc=chicago,dc=concept2completion,dc=net&lt;/span&gt;&lt;br /&gt;changed to&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;dc=concept2completion,dc=net&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In either case, you will get the error listed above.  The problem is that the script secoidd.sql relies on the dn stored in the table wwsub_model$.  Below is an extract of secoidd.sql&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;if l_subscriber_dn is null then&lt;br /&gt;            -- The control should never reach here as the subscriber DN&lt;br /&gt;            -- should be available in the wwsub_model$ table. &lt;/blockquote&gt;So, if you get into this position, you will need to update the value in the dn column of wwsub_model$.&lt;br /&gt;&lt;br /&gt;Seems like such a simple solution.  So simple that I have now gone to the process of figuring it out three times.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-7480096012077166977?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/7480096012077166977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=7480096012077166977&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7480096012077166977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7480096012077166977'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2009/06/migrating-portal-repository-with-change.html' title='Migrating Portal Repository with change in DN'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-3544495458142554624</id><published>2009-06-08T10:58:00.000-07:00</published><updated>2009-06-16T14:13:01.713-07:00</updated><title type='text'>SQL for Date Spanned Data</title><content type='html'>I was recently presented with a sql challenge.  Although I came up with something that works, I'm not convinced it is the best solution.  This is a very long post that is mostly question, but possibly a helpful example.  The details are below.&lt;br /&gt;&lt;br /&gt;I was given a table with the following columns&lt;br /&gt;ID             -- Primary Key&lt;br /&gt;DIVISION       -- Identifier of a Division&lt;br /&gt;START_DATE     -- Date when the Division starts&lt;br /&gt;END_DATE       -- Date when the Division ends&lt;br /&gt;&lt;br /&gt;If you want to try this yourself, I added all the create statements and sample data creation to the end of this note.&lt;br /&gt;&lt;br /&gt;The data has an implicit concept of a "span."  A Division may have many spans.  The start date of a new span is typically one day after the end date of the previous span.  In this case a Division has a contiguous span.  Spans never overlap; that is, a single division never has a row with a start date between the start and end date of another row of the same division (and never has an end date between the start and end of another row of the same division).&lt;br /&gt;&lt;br /&gt;Below is some sample data:&lt;br /&gt;&lt;br /&gt;Id, Division, Start_date, End_date&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;10 1 09-JUN-2009 10-JUN-2009&lt;br /&gt;11 1 11-JUN-2009 12-JUN-2009&lt;br /&gt;12 1 13-JUN-2009 14-JUN-2009  -- Note the following row is not contiguous&lt;br /&gt;14 1 17-JUN-2009 18-JUN-2009&lt;br /&gt;15 1 19-JUN-2009 20-JUN-2009&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;If this were the total data set then Division 1 would have 5 spans, but only two contiguous spans (09 - 14 Jun and 17 - 20 Jun).&lt;br /&gt;&lt;br /&gt;The challenge was to create a sql statement to only return contiguous spans by division.  I immediately thought of a CONNECT BY but the challenge was to determine the START WITH condition.&lt;br /&gt;&lt;br /&gt;[Update:  In response to this post Alex Nuijten came up with a better method than any described below.  Take a look here:&lt;br /&gt;&lt;a href="http://nuijten.blogspot.com/2009/06/analytic-function-finding-gaps.html"&gt;http://nuijten.blogspot.com/2009/06/analytic-function-finding-gaps.html&lt;/a&gt; ]&lt;br /&gt;I came up with two ways to do this.  I'm still not certain if there is a better solution.  The first is far better and uses some SQL analytics to determine the START WITH condition.  If you were to use a WHERE clause, it should go in the WITH section as identified.  My example is below.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;with span_info as (select s.division, s.start_date, s.end_date&lt;br /&gt;, (s.start_date -lag(end_date, 1) over (partition by s.division order by start_date))  new_span&lt;br /&gt;   -- null or &gt; 1 indicates a new contiguous span&lt;br /&gt;, (lead(start_date, 1) over (partition by s.division order by start_date) - s.end_date) end_span&lt;br /&gt;   -- the end_span is not needed, just left for example&lt;br /&gt;   -- null or &gt; 1 indicates the end of a contiguous span&lt;br /&gt;from spantest s&lt;br /&gt;-- a WHERE clause would go HERE, not in the main SELECT below&lt;br /&gt;order by 1, 2 )&lt;br /&gt;select division&lt;br /&gt;, connect_by_root start_date span_start  -- start of a contiguous span&lt;br /&gt;--  , start_date  -- start of the last span of a contiguous span&lt;br /&gt;, end_date  -- end of the contiguous span&lt;br /&gt;--  , new_span, end_span, connect_by_isleaf&lt;br /&gt;from span_info&lt;br /&gt;where connect_by_isleaf = 1&lt;br /&gt;      -- gets only "leaf" recodes, i.e. the end of a contiguous span&lt;br /&gt;start with nvl(new_span,1000) &gt; 1&lt;br /&gt;-- gets beginning of a contiguous span&lt;br /&gt;connect by&lt;br /&gt;  prior end_date + 1 = start_date&lt;br /&gt;  -- connects spans, the 1 here and in the "start with" can be changed together&lt;br /&gt;  and prior division = division  &lt;br /&gt;  -- ensures spans are for the same division&lt;br /&gt;order by 1, 2&lt;/blockquote&gt;&lt;br /&gt;My second idea is to use an exists command to determine if the the first there exists a row with an end_date equal to start_date - 1 for the division.  I can write the statement, but I'm not sure how to get the combination of the DIVISION and the START_DATE in to the START WITH.  I could do some concatenation, but I don't like that at all.  The code is below, but DO NOT RUN THE QUERY; it is very slow.&lt;br /&gt;&lt;br /&gt;-- ************ DO NOT RUN THIS QUERY&lt;br /&gt;&lt;blockquote&gt;select division&lt;br /&gt;, connect_by_root start_date span_start  -- start of a contiguous span&lt;br /&gt;--  , start_date  -- start of the last span of a contiguous span&lt;br /&gt;, end_date  -- end of the contiguous span&lt;br /&gt;--  , new_span, end_span, connect_by_isleaf&lt;br /&gt;from spantest&lt;br /&gt;where connect_by_isleaf = 1&lt;br /&gt;      -- gets only "leaf" recodes, i.e. the end of a contiguous span&lt;br /&gt;start with to_char(start_date,'yyyymmdd') ||'~' || division in&lt;br /&gt;  (select to_char(st2.start_date,'yyyymmdd') ||'~' || st2.division&lt;br /&gt;     from spantest st2&lt;br /&gt;     where not exists&lt;br /&gt;       (select 1 from spantest st3&lt;br /&gt;          where st3.division = st2.division&lt;br /&gt;            and st3.end_date = st2.start_date + 1&lt;br /&gt;            and st3.id != st2.id)&lt;br /&gt;   )&lt;br /&gt;-- gets beginning of a contiguous span&lt;br /&gt;connect by&lt;br /&gt;  prior end_date + 1 = start_date&lt;br /&gt;  -- connects spans, the 1 here and in the "start with" can be changed together&lt;br /&gt;  and prior division = division  &lt;br /&gt;  -- ensures spans are for the same division&lt;br /&gt;order by 1, 2&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This is a lot of code and no-one other than me may ever read it.  If you do, though, and have other ideas, I would love to hear them.&lt;br /&gt;&lt;br /&gt;-- *********  Create Statements and sample data&lt;br /&gt;&lt;br /&gt;CREATE TABLE  "SPANTEST"&lt;br /&gt; ( "ID" NUMBER NOT NULL ENABLE,&lt;br /&gt;"DIVISION" NUMBER NOT NULL ENABLE,&lt;br /&gt;"START_DATE" DATE NOT NULL ENABLE,&lt;br /&gt;"END_DATE" DATE NOT NULL ENABLE,&lt;br /&gt; CONSTRAINT "SPANTEST_PK" PRIMARY KEY ("ID") ENABLE&lt;br /&gt; )&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;CREATE INDEX  "SPANTEST_IDX3" ON  "SPANTEST" ("END_DATE")&lt;br /&gt;/&lt;br /&gt;CREATE INDEX  "SPANTEST_IDX2" ON  "SPANTEST" ("START_DATE")&lt;br /&gt;/&lt;br /&gt;CREATE INDEX  "SPANTEST_IDX1" ON  "SPANTEST" ("DIVISION")&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;CREATE SEQUENCE   "SPANTEST_SEQ"  MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 1441 CACHE 20 NOORDER  NOCYCLE&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE TRIGGER  "BI_SPANTEST"&lt;br /&gt;before insert on "SPANTEST"             &lt;br /&gt;for each row&lt;br /&gt;begin &lt;br /&gt;if :NEW."ID" is null then&lt;br /&gt;  select "SPANTEST_SEQ".nextval into :NEW."ID" from dual;&lt;br /&gt;end if;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;/&lt;br /&gt;ALTER TRIGGER  "BI_SPANTEST" ENABLE&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- create sample data for 10 Divisions&lt;br /&gt;begin&lt;br /&gt;for i in 1..20 loop&lt;br /&gt;  insert into spantest (division, start_date, end_date)&lt;br /&gt;    select 1, trunc(sysdate + (rownum*2 - 1)),trunc(sysdate + (rownum*2))  from all_tables;&lt;br /&gt;end loop;&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;-- create span gaps on the 15th of each month&lt;br /&gt;delete from spantest where&lt;br /&gt;to_char(start_date,'dd') = '15'&lt;br /&gt;/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-3544495458142554624?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/3544495458142554624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=3544495458142554624&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3544495458142554624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3544495458142554624'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2009/06/sql-for-date-spanned-data.html' title='SQL for Date Spanned Data'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-4593538893520238332</id><published>2009-05-06T13:57:00.000-07:00</published><updated>2009-05-07T06:30:07.614-07:00</updated><title type='text'>Locating a Corrupt PDF (or many types of corrupt files) in a BLOB</title><content type='html'>I recently had a client pose the following question to me.&lt;br /&gt;&lt;blockquote&gt;We have a system that generates pdf's based upon data from our Oracle database.  The pdf's are then stored in a BLOB column in a table.  We recently realized that at least one of those pdf's was corrupt.  Is there a way within Oracle to determine if others are corrupt?&lt;/blockquote&gt;&lt;br /&gt;I initially thought about trying to write a script that would pull each blob, run it through some kind of pdf validator and write a log entry if it were bad.  Hmmm, use plsql and call out to a validator on the O/S?  Write a java routine to do the same thing?  What validator would I use?&lt;br /&gt;&lt;br /&gt;Then I had an idea--Oracle Text (formerly Intermedia and Context).  I could create a context index on the blob column and see if there are any errors.&lt;br /&gt;&lt;br /&gt;CREATE INDEX myIndex ON my_table(my_blob) INDEXTYPE IS ctxsys.context;&lt;br /&gt;&lt;br /&gt;If the Oracle Text engine is unable to index the blob it writes a log entry to the view ctx_user_index_errors including the rowid.  Depending on the database version you might have issues with very recent versions of the pdf, but that was not an issue in our case as every pdf was created by the same pdf generator.&lt;br /&gt;&lt;br /&gt;I think Oracle Text is underused.  This is just one more example of how to make it work for you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-4593538893520238332?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/4593538893520238332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=4593538893520238332&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/4593538893520238332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/4593538893520238332'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2009/05/locating-corrupt-pdf-or-many-types-of.html' title='Locating a Corrupt PDF (or many types of corrupt files) in a BLOB'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-7569625132836460574</id><published>2009-05-02T10:12:00.000-07:00</published><updated>2009-05-02T10:34:35.017-07:00</updated><title type='text'>Oracle SQL Delimiter</title><content type='html'>It's been a while since I made a real post, one that has some technical merit.  This one just barely qualifies.&lt;br /&gt;&lt;br /&gt;There is a nice classic report type "Function Returning a SQL Query" which allows you to write a block of code that returns a select statement.  That select statement is the basis for the report.  I often use it to simplify building a where clause.  It might look something like this:&lt;br /&gt;&lt;br /&gt;declare &lt;br /&gt;  l_q   varchar2(32767);  -- This is the return variable.  It will hold a select statement&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;begin&lt;br /&gt;  l_q := 'select d.name department, e.name employee&lt;br /&gt;   from dept d, emp e&lt;br /&gt;   where d.deptno = e.deptno ';&lt;br /&gt;&lt;br /&gt;  if :P1_DEPTNO is not null then&lt;br /&gt;    l_q := l_q || ' and d.deptno = :P1_DEPTNO ';&lt;br /&gt;  end if;&lt;br /&gt;&lt;br /&gt;  -- insert more if statements like above&lt;br /&gt;&lt;br /&gt;  return l_q;&lt;br /&gt;end;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;With Interactive Reports this has become less likely, but it still happens.&lt;br /&gt;&lt;br /&gt;Sometimes, though, the query is a bit more complicated, something like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;begin&lt;br /&gt;  l_q := 'select d.name department, e.name employee,&lt;br /&gt;     to_date(to_char(e.hiredate,''yyyymm'' ||''01''),''yyyymmdd'') first_day_of_month&lt;br /&gt;   from dept d, emp e&lt;br /&gt;   where d.deptno = e.deptno &lt;br /&gt;     and e.status in (''NEW'', ''PENDING'', ''FOO'') &lt;br /&gt;     and d.status = ''NEW'' ';&lt;br /&gt;&lt;br /&gt;  if :P1_DEPTNO is not null then&lt;br /&gt;    l_q := l_q || ' and d.deptno = :P1_DEPTNO ';&lt;br /&gt;  end if;&lt;br /&gt;&lt;br /&gt;  -- insert more if statements like above&lt;br /&gt;&lt;br /&gt;  return l_q;&lt;br /&gt;end;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;You get the idea, a lot of strings and a lot of double ticks ('').  There is an easier way, though: a custom SQL Delimiter.  Usually a single tick (') indicates the start of a string.  If you use a tick within it, you need two ticks ('') to escape it (see code above).  But you can avoid that with a custom delimiter.  You turn it on with q', that's all, just the letter q followed by a tick.  The trick is that the very next character is the delimiter, and a few are special.  You end the statement with &lt;your special character&gt; followed by a tick.  Examples are the easiest, so here are a few:&lt;br /&gt;&lt;br /&gt;1. l_q := q'! I don't need to escape the ' in the word don't !'; &lt;br /&gt;  In this case the ! is the special character.  q'! starts the string and !' ends it.&lt;br /&gt;&lt;br /&gt;2. l_q = q'{ I don't need to escape the ' in the word don't }'; &lt;br /&gt;  This is a little different.  If your special character is { then you use }' to turn it off.  It is pretty obvious which are special: [], {}, &lt;&gt;.&lt;br /&gt;&lt;br /&gt;So, the code above becomes:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;begin&lt;br /&gt;  l_q := q'{ select d.name department, e.name employee,&lt;br /&gt;     to_date(to_char(e.hiredate,'yyyymm' ||'01'),'yyyymmdd') first_day_of_month&lt;br /&gt;   from dept d, emp e&lt;br /&gt;   where d.deptno = e.deptno &lt;br /&gt;     and e.status in ('NEW', 'PENDING', 'FOO') &lt;br /&gt;     and d.status = 'NEW' }';&lt;br /&gt;&lt;br /&gt;  if :P1_DEPTNO is not null then&lt;br /&gt;    l_q := l_q || ' and d.deptno = :P1_DEPTNO ';&lt;br /&gt;  end if;&lt;br /&gt;&lt;br /&gt;  -- insert more if statements like above&lt;br /&gt;&lt;br /&gt;  return l_q;&lt;br /&gt;end;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;You can use this just about anywhere in sql or pl/sql where you want a string.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-7569625132836460574?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/7569625132836460574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=7569625132836460574&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7569625132836460574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7569625132836460574'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2009/05/oracle-sql-delimiter.html' title='Oracle SQL Delimiter'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-7813115894952588993</id><published>2009-04-10T06:03:00.000-07:00</published><updated>2009-05-02T10:38:27.389-07:00</updated><title type='text'>What is this?</title><content type='html'>&lt;div style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 330px; height: 500px;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_zDUUOBtIrlU/Sd9E9h0gk3I/AAAAAAAAACM/WMXtiKJ_sZI/s1600-h/IMGP2591.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 230px;" src="http://4.bp.blogspot.com/_zDUUOBtIrlU/Sd9E9h0gk3I/AAAAAAAAACM/WMXtiKJ_sZI/s320/IMGP2591.JPG" alt="" id="BLOGGER_PHOTO_ID_5323049108416533362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_zDUUOBtIrlU/Sd9E9RNEjuI/AAAAAAAAACE/lXY3f7cRqCU/s1600-h/IMGP2584.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 230px;" src="http://3.bp.blogspot.com/_zDUUOBtIrlU/Sd9E9RNEjuI/AAAAAAAAACE/lXY3f7cRqCU/s320/IMGP2584.JPG" alt="" id="BLOGGER_PHOTO_ID_5323049103956152034" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;First, I apologize, this is my third post in a row that is not technical.  I promise I will get back to the real purpose of this blog in my next post.&lt;br /&gt;&lt;br /&gt;Now, on to the question.  Does anyone recognize this device?  I found it in my closet the other morning.  I suspect I probably took it out of a bag after a trip, or picked it up instead of stepping on it in one of my kids' rooms.  I probably knew what it was at the time, probably thought I would stick it there for a few days and deal with it later.  Now it is later, though, and I have no idea what it is or where it came from.&lt;br /&gt;&lt;br /&gt;It takes 3 AAA batteries.  It has no identifying markings of any kind.  Inside the battery compartment there is no writing.  When I turn it on it makes a very high pitched, very low volume whining noise.  There is nothing on the sides that are not shown in the two images above.  You now know as much as I do about this thing.&lt;br /&gt;&lt;br /&gt;If you know what this is, really know what it is, please post a comment.  Thanks.&lt;br /&gt;&lt;br /&gt;Update:  We have a winner!  I won't publish the answer here, in case you want to guess.  Check out the comments for the answer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-7813115894952588993?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/7813115894952588993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=7813115894952588993&amp;isPopup=true' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7813115894952588993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7813115894952588993'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2009/04/what-is-this.html' title='What is this?'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zDUUOBtIrlU/Sd9E9h0gk3I/AAAAAAAAACM/WMXtiKJ_sZI/s72-c/IMGP2591.JPG' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-5329272352607419630</id><published>2009-04-09T06:52:00.000-07:00</published><updated>2009-04-09T06:57:33.067-07:00</updated><title type='text'>Going Viral</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_zDUUOBtIrlU/Sd3-sinfX7I/AAAAAAAAAB8/BTqJoqxYhP0/s1600-h/viral.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 226px;" src="http://1.bp.blogspot.com/_zDUUOBtIrlU/Sd3-sinfX7I/AAAAAAAAAB8/BTqJoqxYhP0/s320/viral.jpg" alt="" id="BLOGGER_PHOTO_ID_5322690375781932978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is a chart of traffic on &lt;a href="http://www.crapmanagement.com/"&gt;http://www.crapmanagement.com&lt;/a&gt;&lt;br /&gt;As you can see, yesterday crapmanagement "went viral," more than doubling its former high (which was mostly me testing the web logging capabilities).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-5329272352607419630?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/5329272352607419630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=5329272352607419630&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/5329272352607419630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/5329272352607419630'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2009/04/going-viral.html' title='Going Viral'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zDUUOBtIrlU/Sd3-sinfX7I/AAAAAAAAAB8/BTqJoqxYhP0/s72-c/viral.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-8514525913036176802</id><published>2009-03-25T12:40:00.001-07:00</published><updated>2009-04-10T13:36:28.644-07:00</updated><title type='text'>Oracle Portal and APEX RSS Feeds and Traffic Analysis</title><content type='html'>I try to avoid advertising in this blog, but I'm going to break that rule as I have had a few inquiries lately on these topics.  C2 has new product offerings that provide RSS feeds for Oracle Portal and APEX.  For details, &lt;a href="http://concept2completion.com"&gt;contact C2&lt;/a&gt;.  C2 also has a web traffic capture and reporting tool.  This tool can be used on any site, but has a few specific capabilities related to Oracle Portal and Application Express.  Again, for details, &lt;a href="http://concept2completion.com/"&gt;contact C2&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And just an update on my last post -- the fine folks on the APEX team released patch 833890 to solve this import issue.  You can get the patch at &lt;a href="http://metalink.oracle.com/"&gt;http://metalink.oracle.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-8514525913036176802?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/8514525913036176802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=8514525913036176802&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/8514525913036176802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/8514525913036176802'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2009/03/oracle-portal-and-apex-rss-feeds-and.html' title='Oracle Portal and APEX RSS Feeds and Traffic Analysis'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-8424702205006069042</id><published>2009-03-11T11:20:00.000-07:00</published><updated>2009-03-25T12:39:56.256-07:00</updated><title type='text'>APEX 3.2 Gives Error on Import - ERR-3331</title><content type='html'>Just a quick note regarding the 3.2 import process... APEX added a number of enhancements and checks during the import of an application.  The downside is that these introduced some negative performance characteristics.  If you are importing a medium to large size app you are likely to get either a timeout or an error message:&lt;br /&gt;ERR-3331 This page was already submitted and  can not be re-submitted.&lt;br /&gt;&lt;br /&gt;Oracle has confirmed the problem and a fix is in the works.  I'll update this post when the patch is available.&lt;br /&gt;&lt;br /&gt;The good news is that the application will import anyway.  After you get the error, just go back to the builder and check to make sure the import was successful.&lt;br /&gt;&lt;br /&gt;25-Mar-2009: More good news -- the fine folks on the APEX team released patch 833890 to solve this issue.  You can get the patch at &lt;a href="http://metalink.oracle.com"&gt;http://metalink.oracle.com&lt;/a&gt;.&lt;span class="525464821-24032009"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&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/24686153-8424702205006069042?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/8424702205006069042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=8424702205006069042&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/8424702205006069042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/8424702205006069042'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2009/03/apex-32-gives-error-on-import-err-3331.html' title='APEX 3.2 Gives Error on Import - ERR-3331'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-3660600237626886993</id><published>2009-03-09T11:06:00.000-07:00</published><updated>2009-03-09T11:08:09.022-07:00</updated><title type='text'>APEX 3.2 - save state before branching</title><content type='html'>Just a quick note about a little known new feature in APEX 3.2: save state before branching.  When creating a branch and setting items with values, you now have the option to either pass those values in the URL or to have APEX set them into session state prior to doing the branch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-3660600237626886993?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/3660600237626886993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=3660600237626886993&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3660600237626886993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3660600237626886993'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2009/03/apex-32-save-state-before-branching.html' title='APEX 3.2 - save state before branching'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-209391822554383930</id><published>2009-03-05T04:54:00.000-08:00</published><updated>2009-03-05T09:43:25.609-08:00</updated><title type='text'>Application Express (APEX) 3.2</title><content type='html'>We went through the upgrade to 3.2 last night and it was very smooth.  We had a couple minor challenges but that is because of our unique environment.&lt;br /&gt;&lt;br /&gt;1. We have an SSO configuration.  APEX does not specify the owner of the package wwv_flow_custom_auth_sso when it generates the return link for SSO.  This means that the APEX_PUBLIC_USER (or whatever user your DAD is configured to use) must have a synonym to wwv_flow_custom_auth_sso.  You can also create a public synonym so long as one does not exist for another application.&lt;br /&gt;&lt;br /&gt;2. I noticed that some of our custom stylesheets give a slightly different look with date picker items.  This may be due to a change in the way APEX 3.2 generates date pickers.  I'll look into it and post anything I find.&lt;br /&gt;&lt;br /&gt;3.  Apex has a new database schema.  It has finally moved to APEX_030200.  [ removed a comment about the version that was wrong... thanks Patrick! ]&lt;br /&gt;&lt;br /&gt;A very easy install, really.  Thanks to the APEX team once again!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-209391822554383930?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/209391822554383930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=209391822554383930&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/209391822554383930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/209391822554383930'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2009/03/application-express-apex-32.html' title='Application Express (APEX) 3.2'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-8707221564032550574</id><published>2009-01-16T10:24:00.000-08:00</published><updated>2009-01-16T11:00:19.240-08:00</updated><title type='text'>APEX - Application Express 3.2, More than a Forms Conversion Release</title><content type='html'>Application Express 3.2 has been advertised as a Forms Conversion release, but I've recently been looking over an additional category of enhancements that are due to be in the next early adopters release.  It probably comes as not surprise to those who know me that the category is security.  Below is a partial list of the enhancements as I understand them.  Once I get my hands on the EA release I'll provide more significant commentary, but I like what I see so far.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Declarative authentication timeouts by session length and idle time&lt;/span&gt;&lt;br /&gt;Only allow a developer to stay logged into the APEX builder for a specified period of time or time spent idle.  This is handled server side, so just hacking the local cookie won't bypass the timeout--nice!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;HTML Form settings for Password pages (autocomplete=off)&lt;/span&gt;&lt;br /&gt;Does what it says.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Reduced privilege of APEX schema&lt;/span&gt;&lt;br /&gt;No change to functionality, or really even to security as long as your FLOWS_xxx schema is secure, but any time you can skinny down privs to the minimum required it closes the possibility of a loophole.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Database monitoring disabled by default&lt;/span&gt;&lt;br /&gt;Seems to make sense.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Declarative session state encryption&lt;/span&gt;&lt;br /&gt;Now this makes great sense.  APEX has a reasonably good security model in place to protect session state information, but we all know where session state is stored, in a single table in the FLOWS_XXX schema.  I've never liked the idea that my SSN make hang out in that table for some DBA to look at, or possibly have some rogue developer write some hidden page that let's them go peek at my session state.  Allowing a developer to indicate that an item be encrypted when saved in the database without having to worry about encrypting and decrypting the item greatly reduces the developer's burden--or more likely, means it will actually happen.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;New Password item types that do not save state&lt;/span&gt;&lt;br /&gt;In short, never persist this password data into the APEX sessions state table.  I love the idea, though I wonder if a checkbox giving all items this option might not be better.  We'll see how this turns out . . . &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ability to specify HTTPS for the APEX instance&lt;/span&gt;&lt;br /&gt;In short, only allow the APEX builder to run when the browser is communicating via HTTPS.&lt;br /&gt;&lt;br /&gt;OK, so how about one feature that is not on the list?  Who would like a "Scratch" item type--an item that is never rendered, never posted and not settable on the URL?  It would just be a place to store session state, somewhat like an application item that has session state protection enabled, but the item is on a page.  Let me know what you think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-8707221564032550574?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/8707221564032550574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=8707221564032550574&amp;isPopup=true' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/8707221564032550574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/8707221564032550574'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2009/01/apex-application-express-32-more-than.html' title='APEX - Application Express 3.2, More than a Forms Conversion Release'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-5800560443517402649</id><published>2008-12-05T13:52:00.000-08:00</published><updated>2008-12-05T14:41:35.940-08:00</updated><title type='text'>Oracle Application Express (APEX): Three Kinds of Session State</title><content type='html'>One of the best features of APEX is its ability to manage session state for you.  One of the trickiest things you run in to when getting in to advanced development, though, is understanding just when session state is updated and when it is persisted.  The easiest way I can describe this is with some examples:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. PERSISTED Session State&lt;/span&gt;&lt;br /&gt;Most of the time you will be dealing with persisted session state--session state that resides within the database and that is available from subsequent page requests.  Any time you set an item's value with a computation or process you get PERSISTED session state.  If you pass an item and value on the URL you get PERSISTED session state.  If you submit a page with a text item (or radiobox, checkbox, select list, hidden item, etc.) the item will get persisted session state.&lt;br /&gt;&lt;br /&gt;That seems like most of the ways you set item session state, but there are a couple of other ways.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. IN MEMORY Session State (IMSS)&lt;/span&gt;&lt;br /&gt;This category really falls in to two parts: Item Rendering and Automated Row Fetch&lt;br /&gt;So . . .&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2A. Item Rendering&lt;/span&gt;&lt;br /&gt;You can set item attributes of Source and Default.  Let's say we set an text item (P2_VALUE10) to have default value to C2C.  Run the page and you will see an item on the page with C2C in a text box.  Check the session state (use the Session link at the bottom of the page) and you will find that P2_VALUE10 does not have any session state.  How is this possible?  It's right there on the page with C2C, right?&lt;br /&gt;&lt;br /&gt;The value C2C was set IN MEMORY session state.  It disappears immediately when the page is done rendering; it is not saved in the database.  This is not usually an issue, because you are probably going to submit the page, in which case (according to point 1 above) it will store as PERSISTED session state.&lt;br /&gt;&lt;br /&gt;A special note on item rendering in memory session state (IRIMSS :) ): IRIMSS happens as the item is rendered.  Say you have 20 items on the page, with the tenth item, P2_VALUE10, having default value of C2C.  If you have any computations or conditions inside of items 1..9 that depend on P2_VALUE10, it will not have the default value.  For example, say P2_VALUE3 has a display condition: Display when P2_VALUE10 = C2C.  P2_VALUE3 will not show.  Items 11..20, though, will see P2_VALUE10 = C2C.  It can be a bit confusing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2B. Automated Row Fetch (ARF)&lt;/span&gt;&lt;br /&gt;Using ARF produces IN MEMORY session state as described above, with a little twist.  The ARF process allows you to choose whether to put the value of the item values into IMSS right when the process is run, or as the items are rendered.  In early versions of APEX it always happened as the items were rendered.  In recent versions the default is to put the value into IMSS when the ARF process runs.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Why Does It Matter&lt;/span&gt;&lt;br /&gt;Why does it matter if it is PERSISTED Session State or IMSS?  I have found many cases where IMSS caused confusion and bugs.  A good example is breadcrumbs.  Say we have a department report, which drills in to a department form, which in turn drills in to an employee form.  You could have a breadcrumb like this:&lt;br /&gt;&lt;br /&gt;Dept Report &gt; Dept Form &gt; Employee&lt;br /&gt;&lt;br /&gt;But that is not very enlightening.  Wouldn't it be better to have the following?&lt;br /&gt;&lt;br /&gt;Dept Report &gt; Accounting &gt; Nielsen&lt;br /&gt;&lt;br /&gt;Which means you would define something like this&lt;br /&gt;&lt;br /&gt;Dept Report &gt; &amp;P2_DNAME. &gt; &amp;P3_LAST_NAME.&lt;br /&gt;&lt;br /&gt;If you used ARF to set P2_DNAME, however, but did not submit page 2, instead clicking on an employee link, P2_DNAME will be null on the employee page, resulting in the following breadcrumb: &lt;br /&gt;&lt;br /&gt;Dept Report &gt; &gt; Nielsen&lt;br /&gt;&lt;br /&gt;There are many other similar scenarios.  But, the underlying cause is IMSS.&lt;br /&gt;&lt;br /&gt;If you need persisted session state, just do your own fetch process or computation.  You can leave the ARF process if you want, it won't hurt to have both.&lt;br /&gt;&lt;br /&gt;I hope this sheds a little light on APEX session state.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-5800560443517402649?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/5800560443517402649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=5800560443517402649&amp;isPopup=true' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/5800560443517402649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/5800560443517402649'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2008/12/oracle-application-express-apex-three.html' title='Oracle Application Express (APEX): Three Kinds of Session State'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-5938648763508312573</id><published>2008-12-04T13:38:00.000-08:00</published><updated>2008-12-04T14:04:20.571-08:00</updated><title type='text'>Oracle Portal and Oracle BI Publisher</title><content type='html'>If you are using Oracle Portal and are used to using the Portal Forms Builder, you may want to create parameter forms for your BI reports in the Portal Forms Builder.  This article provides a methodology for generating and redirecting to the BI Publisher URL from a Portal Form.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 1: Create a package that will do the redirect for you given the appropriate parameters.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;--&lt;br /&gt;-- &lt;br /&gt;create or replace &lt;br /&gt;package            bip1 as&lt;br /&gt;  g_url  varchar2(32767);&lt;br /&gt;&lt;br /&gt;-- add additional parameters as required&lt;br /&gt;    procedure  bip_r&lt;br /&gt;(&lt;br /&gt;    p_xf IN VARCHAR2 DEFAULT  NULL,&lt;br /&gt;    p_custom1name IN VARCHAR2 DEFAULT  NULL,&lt;br /&gt;    p_custom1val IN VARCHAR2 DEFAULT  NULL,&lt;br /&gt;    p_custom2name IN VARCHAR2 DEFAULT  NULL,&lt;br /&gt;    p_custom2val IN VARCHAR2 DEFAULT  NULL);&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;create or replace &lt;br /&gt;package body            bip1 as&lt;br /&gt;&lt;br /&gt; procedure   bip_r&lt;br /&gt;(&lt;br /&gt;    p_xf IN VARCHAR2 DEFAULT  NULL,&lt;br /&gt;    p_custom1name IN VARCHAR2 DEFAULT  NULL,&lt;br /&gt;    p_custom1val IN VARCHAR2 DEFAULT  NULL,&lt;br /&gt;    p_custom2name IN VARCHAR2 DEFAULT  NULL,&lt;br /&gt;    p_custom2val IN VARCHAR2 DEFAULT  NULL)&lt;br /&gt;as&lt;br /&gt;  -- for information on determining the URL below, see&lt;br /&gt;  -- http://blogs.oracle.com/xmlpublisher/2006/07/accessing_xmlp_enterprise_repo.html&lt;br /&gt;  l_url  varchar2(32767) := 'http://[Your_BIP_Server]:9704/xmlpserver/[your_folder]/[your_report]/[your_report].xdo?_xpf=&amp;_xpt=1&amp;...';&lt;br /&gt;begin&lt;br /&gt;  l_url := l_url || '&amp;_xf=' || p_xf || '&amp;' &lt;br /&gt;    || p_custom1name || '=' || p_custom1val || '&amp;'&lt;br /&gt;    || p_custom2name || '=' || p_custom2val ;&lt;br /&gt; &lt;br /&gt;  bip1.g_url := l_url;&lt;br /&gt;end;&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 2: Create a Portal Form against a procedure and choose the bip1.bip_r procedure.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 3: Modify the Portal Form&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;a. p_xf is the allowable output formats: html, pdf, csv, etc.&lt;br /&gt;b. p_custom1name (and all p_custom#name items) should be hidden and should be the name of your BI Publisher report variables&lt;br /&gt;c. p_custom1val (and all p_custom#val items) are the values you want your users to enter, associated with the corresponding p_custom#name&lt;br /&gt;d. At the Portal Form level, where you see the text area following &lt;br /&gt;&lt;blockquote&gt;On successful submission of a form, execute this PL/SQL block or PL/SQL procedure:&lt;br /&gt;Hint:&lt;br /&gt;You can redirect your browser to a PL/SQL procedure, for example a procedure that creates a Web page, using either of these methods:&lt;br /&gt;&lt;br /&gt;   1. call('&lt;url&gt;', '&lt;parameter name for back url&gt;');&lt;br /&gt;      Redirects the browser to the procedure and passes a parameter containing the URL back to the form.&lt;br /&gt;   2. go('&lt;url&gt;');&lt;br /&gt;      Redirects the browser to the procedure but does not pass a URL to return to the form.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Enter: go(bip1.g_url);&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Running this form will redirect you to the correct BI Publisher URL.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-5938648763508312573?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/5938648763508312573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=5938648763508312573&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/5938648763508312573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/5938648763508312573'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2008/12/oracle-portal-and-oracle-bi-publisher.html' title='Oracle Portal and Oracle BI Publisher'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-3212202992148283139</id><published>2008-11-10T08:19:00.000-08:00</published><updated>2008-11-10T08:29:32.141-08:00</updated><title type='text'>Haiku</title><content type='html'>One of the last times I hung out with Carl Backstrom we talked about texting someone a haiku.  It's not much, but the occasional blog post in Carl's memory can't be a bad thing.  I offer this:&lt;br /&gt;&lt;br /&gt;Dynamic&lt;br /&gt;CarlBack blogs now fixed&lt;br /&gt;Early Night&lt;br /&gt;&lt;br /&gt;I invite you to post your own haiku.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-3212202992148283139?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/3212202992148283139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=3212202992148283139&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3212202992148283139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3212202992148283139'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2008/11/haiku.html' title='Haiku'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-7238736428787412529</id><published>2008-10-28T07:19:00.000-07:00</published><updated>2008-10-28T07:23:13.586-07:00</updated><title type='text'>Carl Backstrom</title><content type='html'>Many have already posted about the tragic loss to the APEX development team and community.  I feel the need to add my own short tribute--though it will certainly take me time to collect my thoughts.  For now, simply, "We already miss you, Carl."&lt;br /&gt;&lt;br /&gt;Anton&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-7238736428787412529?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/7238736428787412529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=7238736428787412529&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7238736428787412529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7238736428787412529'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2008/10/carl-backstrom.html' title='Carl Backstrom'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-2090606135430092781</id><published>2008-09-11T12:22:00.001-07:00</published><updated>2008-09-12T07:51:01.569-07:00</updated><title type='text'>Oracle Application Server Portal, Application Express (APEX) and OID</title><content type='html'>We have done a lot of work at C2 over the past few years integrating Portal with APEX (security and themes/ui), APEX with OID/SSO, OID with MS Active Directory (AD), APEX with AD, APEX with SSL LDAP . . . Well, you get the idea.  We finally put this experience into a couple of training modules.  If you are interested in these topics, click on the C2 Consulting logo at the right.&lt;br /&gt;&lt;br /&gt;We have done similar work with all of the above and Oracle Universal Content Management (UCM) but have not integrated that into the course.  Let me know if you think that would be worthwhile.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-2090606135430092781?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/2090606135430092781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=2090606135430092781&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/2090606135430092781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/2090606135430092781'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2008/09/oracle-application-server-portal.html' title='Oracle Application Server Portal, Application Express (APEX) and OID'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-7911950576839722099</id><published>2008-08-29T19:04:00.000-07:00</published><updated>2008-08-29T19:10:04.269-07:00</updated><title type='text'>Oracle Application Express (APEX) "submit" Button</title><content type='html'>We just ran in to the strangest problem.  All of our buttons and standard tabs stopped working on a particular page.  Parent tabs worked fine, but anything that relied on posting the page (javascript:doSubmit) stopped working.  &lt;a href="http://neeleshshah.blogspot.com/"&gt;Neelesh Shah&lt;/a&gt; came up with the solution.  One of our buttons was "submit"--all lower case.  Usually a submit button in APEX is either SUBMIT of Submit, with at least one upper case letter.  APEX automatically adds an id="&lt;button_name&gt;" to all the buttons.  As it turns out, id="submit" (all lower case) causes browsers to stop submitting (posting) pages.   Just changes the value to Submit did the trick.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-7911950576839722099?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/7911950576839722099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=7911950576839722099&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7911950576839722099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7911950576839722099'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2008/08/oracle-application-express-apex-submit.html' title='Oracle Application Express (APEX) &quot;submit&quot; Button'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-3257137687311909920</id><published>2008-08-22T14:42:00.000-07:00</published><updated>2008-08-25T09:05:47.933-07:00</updated><title type='text'>Oracle Internet Directory (IDM OID) patchset 10.1.4.2 and WNA</title><content type='html'>Ouch! We recently installed the OID 10.1.4.2 patch to solve some issues with Server Chaining to Microsoft Active Directory (MS AD).  There were two object classes that did not get mapped for groups and there were problems that OID would not find any group that was not directly in the dn that was chained to AD.  If you chained&lt;br /&gt;cn=ad,cn=groups,dc=mycompany,dc=com&lt;br /&gt;to&lt;br /&gt;cn=groups,ou=myDept,dc=mycompany,dc=com&lt;br /&gt;but you had a group in subcontainer&lt;br /&gt;cn=anotherLevel,cn=ad,cn=groups,dc=mycompany,dc=com&lt;br /&gt;OID would not find it.&lt;br /&gt;&lt;br /&gt;The patch almost worked as expected--we got one of the two object classes promised and we could find the groups in subcontainers.  Unfortunately the patchset broke Windows Native Authentication (WNA).  The problem is that the patch introduced a new java JDK, version 1.4.2._14.  After many hours of troubleshooting we found Oracle bug 6658334--WNA FAILS AFTER APPLYING IDM 10.1.4.2.0 PATCHSET.  The solution appears to be to downgrade the Sun JDK to 1.4.2_13.  We did this and it works, but oh what a headache.&lt;br /&gt;&lt;br /&gt;You might get an error stack that looks like this:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;date&gt; DAS servlet init enter&lt;br /&gt;&lt;date&gt; oiddas: Release 10.1.4.0.1 Production Started&lt;br /&gt;&lt;date&gt; &lt;$ORACLE_HOME&gt;/j2ee/OC4J_SECURITY/applications/oiddas/ui/WEB-INF/lib/oiddas.jar archive&lt;br /&gt;&lt;date&gt; DAS servlet init exit&lt;br /&gt;&lt;date&gt; Getting creds for HTTP/&lt;your&gt; ...&lt;br /&gt;&lt;date&gt; Debug is true storeKey true useTicketCache false useKeyTab true doNotPrompt true ticketCache is null KeyTab is&lt;br /&gt; &lt;$ORACLE_HOME&gt;/j2ee/OC4J_SECURITY/config/sso.keytab refreshKrb5Config is&lt;br /&gt; false principal is HTTP/&lt;your&gt; tryFirstPass is false&lt;br /&gt; useFirstPass is false storePass is false clearPass is false&lt;br /&gt; principal's key obtained from the keytab&lt;br /&gt;&lt;date&gt; principal is HTTP/&lt;your&gt;&lt;br /&gt;&lt;date&gt; KerberosAuthenticator: GSSException raised in constructor -&lt;br /&gt; No valid credentials provided (Mechanism level: Attempt to obtain new ACCEPT&lt;br /&gt; credentials failed!)&lt;br /&gt;&lt;date&gt; GSSException: No valid credentials provided (Mechanism&lt;br /&gt; level: Attempt to obtain new ACCEPT credentials failed!)&lt;br /&gt;&lt;date&gt; at&lt;br /&gt; sun.security.jgss.krb5.Krb5AcceptCredential.getKeyFromSubject(Krb5AcceptCreden&lt;br /&gt; tial.java:189)&lt;br /&gt;&lt;date&gt; at&lt;br /&gt; sun.security.jgss.krb5.Krb5AcceptCredential.getInstance(Krb5AcceptCredential.j&lt;br /&gt; ava:80)&lt;br /&gt;. . .&lt;br /&gt;&lt;date&gt;30 Caused by: javax.security.auth.login.LoginException:&lt;br /&gt; java.lang.NullPointerException&lt;br /&gt; at java.lang.StringBuffer.append(StringBuffer.java:467)&lt;br /&gt; at&lt;br /&gt; com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginMo&lt;br /&gt; dule.java:576)&lt;br /&gt; at&lt;br /&gt; com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:475)&lt;br /&gt; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-3257137687311909920?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/3257137687311909920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=3257137687311909920&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3257137687311909920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3257137687311909920'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2008/08/oracle-internet-directory-idm-oid.html' title='Oracle Internet Directory (IDM OID) patchset 10.1.4.2 and WNA'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-6511964721797538040</id><published>2008-08-13T13:12:00.000-07:00</published><updated>2008-08-25T09:48:27.837-07:00</updated><title type='text'>Oracle Open World (Oracle OpenWorld)</title><content type='html'>I will be speaking at OOW this year on two topics.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;How to Hack an Oracle Application Express Application&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you write HTML applications in any technology and you care about your data, this presentation is for you.  All HTML applications share some attributes that expose them to potential hacking. APEX has many features that will allow developers to lock down their applications – or to expose them to hacking. I will show techniques that can be used to hack HTML applications, how to close these holes within APEX and where APEX may expose these holes through its wizards. Naturally, I will show how to protect against any hack that I demonstrate. This session can benefit the novice to the highly advanced APEX developer as well as developers of any HTML application.&lt;br /&gt;&lt;br /&gt;This is a skinnied down version of the module that &lt;a href="http://concept2completion.net/" target="_blank"&gt;C2 Consulting&lt;/a&gt; teaches in its Application Express classes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Realizing ROI with Application Express&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As part of Massachusetts healthcare reform, C2 Consulting worked with Harvard Pilgrim Healthcare (HPHC) to develop a new business process for providing health insurance directly to the subscriber.  Utilizing Oracle Application Express, the HPHC system allows individuals to apply, enroll and be confirmed in a healthcare plan online in just a few minutes.  Developed in just one month, the project cost will be recovered in just one year's saved postage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-6511964721797538040?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/6511964721797538040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=6511964721797538040&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/6511964721797538040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/6511964721797538040'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2008/08/oracle-open-world-oracle-openworld.html' title='Oracle Open World (Oracle OpenWorld)'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-7036654057533737701</id><published>2008-08-13T12:58:00.000-07:00</published><updated>2008-08-13T13:05:26.487-07:00</updated><title type='text'>Oracle Portal Secure Content Repository Views</title><content type='html'>I recently went searching for the documentation on the Oracle Portal repository views for Portal 10.1.4 and had a hard time finding them.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/technology/products/ias/portal/html/plsqldoc/pldoc1014/wwsbr_api_view.html"&gt;The Views&lt;/a&gt;&lt;br /&gt;http://www.oracle.com/technology/products/ias/portal/html/plsqldoc/pldoc1014/wwsbr_api_view.html&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/technology/products/ias/portal/html/plsqldoc/pldoc1014/summary.html"&gt;The APIs&lt;/a&gt;&lt;br /&gt;http://www.oracle.com/technology/products/ias/portal/html/plsqldoc/pldoc1014/summary.html&lt;br /&gt;&lt;br /&gt;&lt;a href="http://download-west.oracle.com/docs/cd/B14099_19/portal.1012/b14134/toc.htm"&gt;The Documentation&lt;/a&gt;&lt;br /&gt;http://download-west.oracle.com/docs/cd/B14099_19/portal.1012/b14134/toc.htm&lt;br /&gt;&lt;br /&gt;&lt;a href="http://download.oracle.com/docs/cd/B14099_15/portal.1014/b14135/pdg_part3.htm#sthref1557"&gt;And More Documentation&lt;/a&gt;&lt;br /&gt;http://download.oracle.com/docs/cd/B14099_15/portal.1014/b14135/pdg_part3.htm#sthref1557&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-7036654057533737701?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/7036654057533737701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=7036654057533737701&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7036654057533737701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7036654057533737701'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2008/08/oracle-portal-secure-content-repository.html' title='Oracle Portal Secure Content Repository Views'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-2937672541724684464</id><published>2008-08-04T12:34:00.000-07:00</published><updated>2009-01-30T06:02:49.914-08:00</updated><title type='text'>Advanced Configuration Training Course: Oracle Application Express (APEX)</title><content type='html'>This is just a quick note to mention that C2 Consulting has added a new module to its Oracle Application Express (APEX) course.  The training class is modular, so class attendees or clients can choose which modules are taught during a particular session.  The new Advanced Configurations course covers installation and configuration in a variety of environments. Some of the topics follow:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;High Availability, RAC, HA Middle Tiers (I contributed to the &lt;a href="http://www.oracle.com/technology/products/database/application_express/pdf/apex_rac_wp.pdf"&gt;Oracle white paper&lt;/a&gt; on this topic)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Configuring Apache for SSL&lt;/li&gt;&lt;li&gt;Configuring Apache Virtual Hosts&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Using Apache 2.x as a reverse proxy&lt;/li&gt;&lt;li&gt;Using Oracle Web Cache&lt;/li&gt;&lt;li&gt;Capturing IP Address behind Firewalls, Reverse Proxies and Web Cache&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Using Apache Rewrite Rules&lt;/li&gt;&lt;li&gt;Custom DAD configurations--passing environment variables, setting default application, etc.&lt;/li&gt;&lt;li&gt;Custom Authentication and Authorization Schemes&lt;br /&gt;&lt;/li&gt;&lt;li&gt;How to enable Oracle Single Sign-On (SSO)&lt;/li&gt;&lt;li&gt;How to integrate with Netegrity (Computer Associates) Siteminder (Optional)&lt;/li&gt;&lt;li&gt;How to integrate with RSA (Optional)&lt;/li&gt;&lt;li&gt;How to integrate with PKI (client-side) certificates (Optional)&lt;/li&gt;&lt;/ul&gt;If you are interested in this topic or any of the C2 courses, &lt;a href="http://concept2completion.net/"&gt;contact C2&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-2937672541724684464?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/2937672541724684464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=2937672541724684464&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/2937672541724684464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/2937672541724684464'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2008/08/oracle-application-express-apex.html' title='Advanced Configuration Training Course: Oracle Application Express (APEX)'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-3303458434529986974</id><published>2008-07-18T07:35:00.000-07:00</published><updated>2008-07-18T07:38:44.007-07:00</updated><title type='text'>DBMS_XMLSCHEMA.generateschema gives ORA-22303: type not found</title><content type='html'>I just had someone call about this.&lt;br /&gt;SELECT DBMS_XMLSCHEMA.generateschema('your_schema','your_type') FROM DUAL;&lt;br /&gt;gives ORA-22303: type "your_schema"."your_type" not found&lt;br /&gt;ora-21700&lt;br /&gt;ora-06512&lt;br /&gt;&lt;br /&gt;Just upper case your_schema and your_type -- YOUR_SCHEMA and YOUR_TYPE.&lt;br /&gt;&lt;br /&gt;Hope this helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-3303458434529986974?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/3303458434529986974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=3303458434529986974&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3303458434529986974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3303458434529986974'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2008/07/dbmsxmlschemagenerateschema-gives-ora.html' title='DBMS_XMLSCHEMA.generateschema gives ORA-22303: type not found'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-7090728338567448860</id><published>2008-03-25T14:25:00.000-07:00</published><updated>2008-03-25T15:06:02.539-07:00</updated><title type='text'>Oracle Application Express (Apex) Breadcrumbs</title><content type='html'>In the early versions of Oracle HTML DB (the old name for Oracle Apex) breadcrumbs were called menus.  Under the covers, in the code, they still are.  They work great as breadcrumbs, but they still work as menus.  Many Apex training classes will tell you to use lists for navigations and use breadcrumbs for, well, breadcrumbs.  In most cases, though, you can use a single breadcrumb structure for both.  Let's say you have the following page/navigation structure&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Training&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;ul&gt;&lt;li&gt;In Class&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;ul&gt;&lt;li&gt;Application Express&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Oracle Database Tuning&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;10g Application Server&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Oracle Portal&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;ul&gt;&lt;li&gt;Web Based&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;ul&gt;&lt;li&gt;Application Express&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;SQL&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Oracle Database Management&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;PL/SQL&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;If you are on the SQL page you want a breadcrumb like this:&lt;br /&gt;Training &gt; Web Based &gt; SQL&lt;br /&gt;&lt;br /&gt;You may also want a menu that looks like this&lt;br /&gt; Application Express&lt;br /&gt; &lt;span style="font-weight:bold;"&gt;SQL&lt;/span&gt;&lt;br /&gt; Oracle Database Management&lt;br /&gt; PL/SQL&lt;br /&gt;&lt;br /&gt;You can use the same breadcrumb to provide both features.  Just create two regions, one with a breadcrumb template and another with a breadcrumb "menu" template, typically called Heirarchical in new versions of Apex.  Play with the template, changing "Start With" to Current Breadcrumb.  You will get a menu out of your breadcrumb.  If you are on the "Web Based" page, you could create a template with "Start With" set to Child Breadcrumb Entries.  This would give you a Menu that looks like this:&lt;br /&gt; Application Express&lt;br /&gt; SQL&lt;br /&gt; Oracle Database Management&lt;br /&gt; PL/SQL&lt;br /&gt;&lt;br /&gt;Play with the breadcrumb templates and Start With and you may find they work far better than lists for navigation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-7090728338567448860?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/7090728338567448860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=7090728338567448860&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7090728338567448860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7090728338567448860'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2008/03/oracle-application-express-apex.html' title='Oracle Application Express (Apex) Breadcrumbs'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-1557666788478655836</id><published>2008-02-07T06:50:00.000-08:00</published><updated>2008-02-07T07:11:00.703-08:00</updated><title type='text'>Security: How to Hack an Oracle Application Express Application</title><content type='html'>I will be presenting at both the &lt;a href="http://noug.com/" target="_blank"&gt;Northeast Oracle Users Group&lt;/a&gt; (NOUG) Training Day on 5 March 2008 and at the &lt;a href="http://www.odtug.com" target="_blank"&gt;Oracle Development Tools User Group&lt;/a&gt; &lt;a href="http://www.odtugkaleidoscope.com/abstracts3.html#Nielsen" target="_blank"&gt;Kaleidoscope 2008&lt;/a&gt; on 18 June 2008, 2:45 - 3:45 pm.&lt;br /&gt;&lt;br /&gt;Oracle's Application Express (APEX) allows developers to quickly build highly functional applications that interact with an Oracle database. APEX dynamically generates HTML applications (hence the former name, HTML DB). All HTML applications share some attributes that expose them to potential hacking. APEX has many features that will allow developers to lock down their applications – or to expose them to hacking. I will show (live!) a number of techniques that can be used to hack HTML applications—and how to close these holes within APEX and where APEX may expose these holes through its wizards. Naturally, I will show how to protect against any hack that I demonstrate. The session will be interactive with the audience participating in ways to hack and prevent hacks. This is truly a session that can benefit the novice to the highly advanced APEX developer.&lt;br /&gt;&lt;br /&gt;This is the same module that &lt;a href="http://concept2completion.net/" target="_blank"&gt;C2 Consulting&lt;/a&gt; teaches in its Application Express classes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-1557666788478655836?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/1557666788478655836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=1557666788478655836&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/1557666788478655836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/1557666788478655836'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2008/02/security-how-to-hack-oracle-application.html' title='Security: How to Hack an Oracle Application Express Application'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-6341617383170417600</id><published>2007-10-01T07:05:00.001-07:00</published><updated>2007-10-01T07:48:52.312-07:00</updated><title type='text'>Chained Oracle Web Caches, Reverse Proxy, REMOTE_ADDR and CLIENT_IP</title><content type='html'>Most people today are using a DMZ.  There is a great deal of variety in configuring the DMZ, from having nothing but a Reverse Proxy (RP) in the DMZ to having everything including the database in the DMZ (and possibly Dataguard or Oracle Streams to push data to the DMZ database).  This post will focus on the specific instances of needing to get the browser's IP (or as close as one can get) all the way through to the database--specifically using Oracle Portal, PL/SQL and Java Portlets, Application Express or anything sitting behind the Oracle Webcache.&lt;br /&gt;&lt;br /&gt;Scenario 1: This does not even require a DMZ configuration.  If you are running Oracle Portal you may find it hard to get access to the browser's IP address in a UI Template of Page or Item Skin.  The problem is that the Parallel Page Engine (PPE) calls Web Cache which in turn calls Apache to get your page.  Web Cache sees the call as coming from the PPE, so you get the IP address of your middle tier, not of the browser.  I have another post that covers that topic.  &lt;br /&gt;&lt;a href="http://c2anton.blogspot.com/2007/02/oracle-portal-client-ip-address.html"&gt;http://c2anton.blogspot.com/2007/02/oracle-portal-client-ip-address.html&lt;/a&gt;&lt;br /&gt;That post will be used in all of the scenarios below.&lt;br /&gt;&lt;br /&gt;**************************************&lt;br /&gt;&lt;br /&gt;Scenario 2:  Oracle Web Cache in the DMZ (WC1) acting as a Reverse Proxy to another Web Cache that serves your content (WC2).  It looks like this:&lt;br /&gt;&lt;br /&gt;Browser ---&gt; WC1 ---&gt; WC2 ---&gt; Apache ---&gt; mod/plsql ---&gt; Database&lt;br /&gt;&lt;br /&gt;The browser sends its IP address in a header variable, REMOTE_ADDR, in all requests.  (Note: if it uses a forward proxy, the forward proxy may change the REMOTE_ADDR value to its own IP address.  We can't do anything about that.  For example, all AOL users may show up with only 3 IP addresses.)  When WC1 gets the request, it moves the value of REMOTE_ADDR into a new header variable, CLIENT_IP and puts its own IP address into REMOTE_ADDR.  Normally this is not an issues, because mod/plsql automatically puts the value of CLIENT_IP back into REMOTE_ADDR, but with a second web cache, see what happens.  WC2 replaces ClientIP with REMOTE_ADDR and puts its own IP into REMOTE_ADDR.  The table below shows what happens to these values as they progress...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;                Browser       WC1           WC2         MODPLSQL    DATABASE&lt;br /&gt;REMOTE_ADDR     192.168.1.50  x.x.200.10    x.x.300.5   x.x.200.10  x.x.200.10&lt;br /&gt;ClientIP       not set       192.168.1.50  x.x.200.10  x.x.200.10  x.x.200.10&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you can see, by the time it makes it to the database the only thing available is the IP address of WC1 (unless it is a PPE call from Portal, in which case it is the IP of WC2).&lt;br /&gt;&lt;br /&gt;The Web Cache guys recognized this could happen and put a feature into the Web Cache settings to allow WC2 to accept the ClientIP that was forwarded from a previous Web Cache.  In the WC Admin, go to Properties &gt; Security and set "Accept client IP addresses encoded in ClientIP HTTP headers" to Yes.&lt;br /&gt;&lt;br /&gt;If you are using Portal, be sure to read about getting the value past the PPE in the link above.&lt;br /&gt;&lt;br /&gt;*******************************************&lt;br /&gt;&lt;br /&gt;Scenario 3:  Apache 2.x in the DMZ (RP1) acting as a Reverse Proxy to another Web Cache that serves your content (WC2).  It looks like this:&lt;br /&gt;&lt;br /&gt;Browser ---&gt; RP1 ---&gt; WC2 ---&gt; Apache ---&gt; mod/plsql ---&gt; Database&lt;br /&gt;&lt;br /&gt;This is similar to scenario 2, however RP1 uses the header variable X-Forwarded-For instead of ClientIP.  X-Forwarded-For makes it all the way through to modplsql, but modplsql does not know to send it on to the database.  You need to add the following line to your modplsql DAD:&lt;br /&gt;&lt;br /&gt;PlsqlCGIEnvironmentList   X-Forwarded-For&lt;br /&gt;&lt;br /&gt;Your dad will look something like the following:&lt;br /&gt;&lt;br /&gt;&lt;Location /pls/apex&gt;&lt;br /&gt;...&lt;br /&gt;    SetHandler pls_handler&lt;br /&gt;    PlsqlDocumentTablename wwv_flow_file_objects$&lt;br /&gt;    PlsqlDatabaseUsername HTMLDB_PUBLIC_USER&lt;br /&gt;    PlsqlDefaultPage apex&lt;br /&gt;    PlsqlDatabasePassword xxxxx&lt;br /&gt;    PlsqlCGIEnvironmentList   X-Forwarded-For&lt;br /&gt;    Allow from all&lt;br /&gt;&lt;/Location&gt;&lt;br /&gt;&lt;br /&gt;You can then use owa_util.get_cgi_env('X-Forwarded-For') to retrieve the IP Address of the client.&lt;br /&gt;&lt;br /&gt;*********************************&lt;br /&gt;&lt;br /&gt;That covers it.  I hope this helps.  As always, click on the My Work link to the right if you would like in-person assistance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-6341617383170417600?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/6341617383170417600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=6341617383170417600&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/6341617383170417600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/6341617383170417600'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2007/10/chained-oracle-web-caches-reverse-proxy.html' title='Chained Oracle Web Caches, Reverse Proxy, REMOTE_ADDR and CLIENT_IP'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-3754001189464645465</id><published>2007-09-17T08:00:00.000-07:00</published><updated>2008-06-20T07:46:39.187-07:00</updated><title type='text'>Oracle Internet Directory (OID) ldapbind gives: sgslufread: Hard error on read, OS error = 10054</title><content type='html'>We were using a Cisco Load Balancing Router (LBR or CSS) and trying to do a simple ldapbind -p 389 -h machine would give the following error:&lt;br /&gt;sgslufread: Hard error on read, OS error = 10054 (on windows)&lt;br /&gt;sgslufread: Hard error on read, OS error = 104 (on linux)&lt;br /&gt;ldap_bind: Can't contact LDAP server&lt;br /&gt;&lt;br /&gt;(might have also seen sgslufread: Hard error on read, OS error = 194 )&lt;br /&gt;&lt;br /&gt;It turned out that the LBR was configured with Layer 5 load balancing (it does URL inspection).  It is turned on by adding url "/*"  to the content &lt;br /&gt;  content layer5&lt;br /&gt;    protocol tcp&lt;br /&gt;    vip address xxx.xxx.xxx.xxx&lt;br /&gt;    add service server1&lt;br /&gt;    port 389&lt;br /&gt;    url "/*"&lt;br /&gt;    active&lt;br /&gt;&lt;br /&gt;The problem is that we have LDAP traffic, not HTTP traffic.  Layer5 (url "/*") is for HTTP traffic.  Removing the&lt;br /&gt; url "/*" &lt;br /&gt;took care of the issue.&lt;br /&gt;&lt;br /&gt;I also received the same error when using an F5 load balancer to connect via LDAPS (SSL encrypted) on port 636.  In this case the solution was to turn off the F5 LDAP monitor for port 636.  For some reason the F5 does not like to monitor the OID SSL LDAP port.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-3754001189464645465?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/3754001189464645465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=3754001189464645465&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3754001189464645465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3754001189464645465'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2007/09/oracle-internet-directory-oid-ldapbind.html' title='Oracle Internet Directory (OID) ldapbind gives: sgslufread: Hard error on read, OS error = 10054'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-1359340535043486393</id><published>2007-08-31T12:57:00.000-07:00</published><updated>2007-08-31T13:03:42.707-07:00</updated><title type='text'>ASM and ORA-29701: Unable to connect to Cluster Manager</title><content type='html'>I was recently at a client.  They told me that the Oracle database binaries were installed and that they wanted an ASM instance created and a couple of disk groups.  Easy enough...&lt;br /&gt;&lt;br /&gt;Every time I would try to start an ASM instance I would get this error:&lt;br /&gt;ORA-29701: Unable to connect to Cluster Manager&lt;br /&gt;&lt;br /&gt;It turns out that this machine was a clone of another machine and that the binaries weren't installed, but cloned from another machine.  I don't ever do it that way, so I was at a bit of a loss.  I finally found a solution.  From the $ORACLE_HOME/bin directory I ran&lt;br /&gt;&lt;br /&gt;localconfig delete&lt;br /&gt;localconfig add&lt;br /&gt;&lt;br /&gt;This took care of the problem.  Hope this helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-1359340535043486393?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/1359340535043486393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=1359340535043486393&amp;isPopup=true' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/1359340535043486393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/1359340535043486393'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2007/08/asm-and-ora-29701-unable-to-connect-to.html' title='ASM and ORA-29701: Unable to connect to Cluster Manager'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-122375644150928255</id><published>2007-08-28T14:34:00.000-07:00</published><updated>2007-12-06T07:45:34.750-08:00</updated><title type='text'>Oracle Portal Content Management Event Framework</title><content type='html'>I recently put together a little demo that might be helpful for people starting out with the Oracle Portal Content Management Event Framework (CMEF).  The documentation is &lt;a href="http://download.oracle.com/docs/cd/B14099_15/portal.1014/b14135/pdg_cm_cmef.htm" target="_blank"&gt;here&lt;/a&gt;.  While the documentation is good, it can be a bit overwhelming.  My example gives you everything you need to get started, and nothing you don't.  So, let's get started.&lt;br /&gt;&lt;br /&gt;Goal: Capture all events from the CMEF and store the content in a table.  If you can store it in a table, you can do just about anything with it.&lt;br /&gt;&lt;br /&gt;Overview:&lt;br /&gt;&lt;br /&gt;1. Create a sequence to be our table's primary key&lt;br /&gt;2. Create the table and associated triggers&lt;br /&gt;3. Create a package and procedure that will be notified when an event occurs, dequeue the event and put the contents in the table.&lt;br /&gt;4. Create a subscriber to the CMEF queue.&lt;br /&gt;5. Register the subscriber and the procedure created in step 3.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Full steps&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;All scripts run in the portal schema&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1. Create a sequence to be our table's primary key&lt;br /&gt;&lt;br /&gt;CREATE SEQUENCE   "C2_EVENT_LOG_SEQ"  &lt;br /&gt;MINVALUE 1 &lt;br /&gt;MAXVALUE 999999999999999999999999999 &lt;br /&gt;INCREMENT BY 1 START WITH 21 CACHE 20 NOORDER  NOCYCLE&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;2. Create the table and associated triggers&lt;br /&gt;&lt;br /&gt;CREATE TABLE  "C2_EVENT_LOG" &lt;br /&gt;   ( "ID" NUMBER NOT NULL ENABLE, &lt;br /&gt; "EVENT" VARCHAR2(4000), &lt;br /&gt; "EVENT_DATE" DATE, &lt;br /&gt; "EVENT_PAYLOAD" CLOB, &lt;br /&gt;  CONSTRAINT "C2_EVENT_LOG_PK" PRIMARY KEY ("ID") ENABLE&lt;br /&gt;   )&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE TRIGGER  "BI_C2_EVENT_LOG" &lt;br /&gt;  before insert on "C2_EVENT_LOG"               &lt;br /&gt;  for each row  &lt;br /&gt;begin   &lt;br /&gt;  if :NEW."ID" is null then &lt;br /&gt;    select "C2_EVENT_LOG_SEQ".nextval into :NEW."ID" from dual; &lt;br /&gt;  end if; &lt;br /&gt;end; &lt;br /&gt;&lt;br /&gt;/&lt;br /&gt;ALTER TRIGGER  "BI_C2_EVENT_LOG" ENABLE&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Create package and procedure&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE PACKAGE c2_ptl&lt;br /&gt;  is&lt;br /&gt;&lt;br /&gt;PROCEDURE event_notify(context raw,reginfo sys.aq$_reg_info,descr sys.aq$_descriptor,payload raw, payloadl number);&lt;br /&gt;&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE PACKAGE body c2_ptl&lt;br /&gt;  is&lt;br /&gt;&lt;br /&gt;PROCEDURE event_notify(context raw,reginfo sys.aq$_reg_info,descr sys.aq$_descriptor,payload raw, payloadl number)&lt;br /&gt;as&lt;br /&gt;  dequeue_options       dbms_aq.dequeue_options_t;&lt;br /&gt;  message_properties    dbms_aq.message_properties_t;&lt;br /&gt;  message_handle        RAW(16);&lt;br /&gt;  message               portal.wwsbr_event;&lt;br /&gt;  lclob                 clob;&lt;br /&gt;  pmsg                  varchar2(100);&lt;br /&gt;BEGIN&lt;br /&gt;  dequeue_options.msgid := descr.msg_id;&lt;br /&gt;  dequeue_options.consumer_name := descr.consumer_name;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  -- Get the Message and remove it from the queue&lt;br /&gt;  -- Note: this will dequeue the message.  If you don't do anything with i&lt;br /&gt;  -- it will be gone and you won't be able to retrieve it again&lt;br /&gt;  DBMS_AQ.DEQUEUE(queue_name            =&gt; descr.queue_name,&lt;br /&gt;                  dequeue_options       =&gt; dequeue_options,&lt;br /&gt;                  message_properties    =&gt; message_properties,&lt;br /&gt;                  payload               =&gt; message,&lt;br /&gt;                  msgid                 =&gt; message_handle);&lt;br /&gt; &lt;br /&gt;  -- Insert message contents into the table&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;  insert into c2_event_log (event, event_date, event_payload)&lt;br /&gt;    values ('A',sysdate, 'message.action: '||message.action &lt;br /&gt;      || ' message.object_class: '|| message.object_class);&lt;br /&gt;&lt;br /&gt;-- there are a log of other message properties, look at the portal.wwsbr_event type&lt;br /&gt;-- for a full list of the contents of the message&lt;br /&gt;&lt;br /&gt;  COMMIT;&lt;br /&gt;END event_notify;&lt;br /&gt;&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;4. Create a subscriber to the CMEF queue&lt;br /&gt;begin&lt;br /&gt;  dbms_aqadm.add_subscriber&lt;br /&gt;    ( queue_name =&gt; 'PORTAL.WWSBR_EVENT_Q',&lt;br /&gt;      subscriber =&gt; sys.aq$_agent( 'C2_SUB', null, null ) );&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;5. Register the subscriber and the procedure created in step 3&lt;br /&gt;begin&lt;br /&gt;  dbms_aq.register&lt;br /&gt;    ( sys.aq$_reg_info_list(&lt;br /&gt;      sys.aq$_reg_info('PORTAL.WWSBR_EVENT_Q:C2_SUB',&lt;br /&gt;                        DBMS_AQ.NAMESPACE_AQ,&lt;br /&gt;                        'plsql://c2_ptl.event_notify',&lt;br /&gt;                        HEXTORAW('FF')) ) ,&lt;br /&gt;     1 );&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;Let me know if this works for you!&lt;br /&gt;&lt;br /&gt;Just a little note... The following query will give you all queue registrations:&lt;br /&gt;SELECT * FROM sys.reg$&lt;br /&gt;&lt;br /&gt;The following URL will give you portal queue subscribers (you must be logged in as portal):&lt;br /&gt;http://machine:port/portal/pls/portal/PORTAL.wwsbr_event_dbg.show&lt;br /&gt;&lt;br /&gt;And finally . . . if you want to remove those subscriptions, do the following:&lt;br /&gt;/* *** UNREGISTER SUBSCRIBER *** */&lt;br /&gt;  begin  &lt;br /&gt;    dbms_aq.unregister  &lt;br /&gt;      ( sys.aq$_reg_info_list(  &lt;br /&gt;        sys.aq$_reg_info('PORTAL.WWSBR_EVENT_Q:C2_SUB',  &lt;br /&gt;                          DBMS_AQ.NAMESPACE_AQ,  &lt;br /&gt;                          'plsql://c2_ptl.event_notify',  &lt;br /&gt;                          HEXTORAW('FF')) ) ,  &lt;br /&gt;       1 );  &lt;br /&gt;  end;  &lt;br /&gt;  /  &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;/*  **** REMOVE SUBSCRIBER ****   */&lt;br /&gt;  begin  &lt;br /&gt;    dbms_aqadm.remove_subscriber  &lt;br /&gt;      ( queue_name =&gt; 'PORTAL.WWSBR_EVENT_Q',  &lt;br /&gt;        subscriber =&gt; sys.aq$_agent( 'c2_SUB', null, null ) );  &lt;br /&gt;  end;  &lt;br /&gt;  /&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-122375644150928255?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/122375644150928255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=122375644150928255&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/122375644150928255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/122375644150928255'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2007/08/oracle-portal-content-management-event.html' title='Oracle Portal Content Management Event Framework'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-894806652404697280</id><published>2007-06-21T08:56:00.000-07:00</published><updated>2007-06-21T09:05:59.201-07:00</updated><title type='text'>Oracle Fusion Middleware Regional Director Program</title><content type='html'>I was recently invited to become an &lt;a href="http://www.oracle.com/technology/community/ofm_directors/index.html#Nielsen" target="_blank"&gt;Oracle Fusion Middleware Regional Director&lt;/a&gt;.  While pleased by the recognition, I'm really enthused about the opportunity this will give me to meet with Oracle development and product management.  The Regional Directors are invited to regular con-calls and occasional live events.  I will be sure to pass along points of interest on this blog.  If you have anything that you would like addressed, add a comment and I will bring it up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-894806652404697280?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/894806652404697280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=894806652404697280&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/894806652404697280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/894806652404697280'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2007/06/oracle-fusion-middleware-regional.html' title='Oracle Fusion Middleware Regional Director Program'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-3588369769453853113</id><published>2007-06-01T08:05:00.001-07:00</published><updated>2007-06-21T08:55:59.077-07:00</updated><title type='text'>Application Express Debug Mode Timing on Post/Submit</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_zDUUOBtIrlU/RmBQ6ExldBI/AAAAAAAAAAU/YGdALv9W-9U/s1600-h/branch1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_zDUUOBtIrlU/RmBQ6ExldBI/AAAAAAAAAAU/YGdALv9W-9U/s320/branch1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5071142139063530514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_zDUUOBtIrlU/RmBQ6UxldCI/AAAAAAAAAAc/Gw_eTCS2EFs/s1600-h/branch2.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_zDUUOBtIrlU/RmBQ6UxldCI/AAAAAAAAAAc/Gw_eTCS2EFs/s320/branch2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5071142143358497826" /&gt;&lt;/a&gt;&lt;br /&gt;A co-worker recently approached me with an Apex 2.2.1 problem.  He had a report that was running extremely slowly.  The report used a database link.  He suspected the dblink was the problem.  &lt;br /&gt;&lt;br /&gt;We spent some time looking over it directly in sql*plus (always a good way to start) and confirmed that the query ran slowly accross the link.  Next step, we ran the query directly in the source database--still slow.  There were a lot of rows in the view (which was based upon two other views, which were both based upon views).  Only one index, on the primary key.  I recommended some specific indexes that would help his situation.&lt;br /&gt;&lt;br /&gt;A week later he returned.  Now the query ran great in sql*plus, but the report was still slow in Apex with certain query criteria. I ran the page, submitting different criteria and confirmed that with some criteria it ran very slowly.  Turning on debug indicated that the query region was running fast.  I suspected that the debug mode timing somehow did not include the time spent in the linked database (boy was I wrong).&lt;br /&gt;&lt;br /&gt;After some hair pulling, I looked at the page that I was submitting (the page with the query criteria) and saw several validations on that page.  Aha!  Perhaps a validation was the culprit.  The report was branched via a "Branch to Page or URL" branch, so debug mode was not showing anything that happened during the submit portion--only the render portion of the report page.  I created a new branch with sequence=1.  This branch was a Direct Branch (see image).  By making it a direct branch I was able to see the time spent in the validation:&lt;br /&gt;&lt;br /&gt; 0.03: Branch point: BEFORE_VALIDATION&lt;br /&gt;0.03: Perform validations:&lt;br /&gt;0.03: ...PL/SQL "function body returning error text"...&lt;br /&gt;317.62: ...&lt;br /&gt;&lt;br /&gt;As you can see, the validation was taking over 5 minutes.  Using the direct branch made all difference, allowing me to look at the submit processing.  The validation also used the dblink, but did a select count(*) from that same view (with 50 million rows)--not using any indexes.  Cleaning that up did the trick.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-3588369769453853113?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/3588369769453853113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=3588369769453853113&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3588369769453853113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3588369769453853113'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2007/06/application-express-debug-mode-timing.html' title='Application Express Debug Mode Timing on Post/Submit'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zDUUOBtIrlU/RmBQ6ExldBI/AAAAAAAAAAU/YGdALv9W-9U/s72-c/branch1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-2378486160280768337</id><published>2007-05-08T11:45:00.000-07:00</published><updated>2007-05-08T11:48:14.708-07:00</updated><title type='text'>How to Enable Tracing in Oracle Forms 10g</title><content type='html'>Enable Tracing from the url by adding the following to your forms url:&lt;br /&gt;&amp;record=forms&amp;tracegroup=0-98,100-199 (note: item 99 causes some issues, so we are skipping it here.  See the Oracle documenation for a description of what is being traced for each item.)&lt;br /&gt;&lt;br /&gt;for example&lt;br /&gt;http://machine:port/forms/frmservlet?config=myConfig&amp;record=forms&amp;tracegroup=0-98,100-199&lt;br /&gt;&lt;br /&gt;You will get a trace file in the following location:&lt;br /&gt;&lt;br /&gt;%ORACLE_HOME%\forms\trace\forms_xxx.trc    where xxx is the forms session ID.&lt;br /&gt;&lt;br /&gt;Open dos window and do the following:&lt;br /&gt;&lt;br /&gt;set ORACLE_HOME=&lt;your oracle home&gt;&lt;br /&gt;&lt;br /&gt;set PATH=%ORACLE_HOME%\jdk\bin;%PATH%&lt;br /&gt;&lt;br /&gt;set CLASSPATH=%ORACLE_HOME%\jdbc\lib\classes12.zip;%ORACLE_HOME%\forms\java\frmxlate.jar&lt;br /&gt;&lt;br /&gt;java oracle.forms.diagnostics.Xlate datafile=%ORACLE_HOME%\forms\trace\forms_xxx.trc outputfile=%ORACLE_HOME%\forms\trace\html_xxx.html outputclass=WriteOutHTML&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;you will get a file html_xxx.html in your %ORACLE_HOME%\forms\trace directory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-2378486160280768337?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/2378486160280768337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=2378486160280768337&amp;isPopup=true' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/2378486160280768337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/2378486160280768337'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2007/05/how-to-enable-tracing-in-oracle-forms.html' title='How to Enable Tracing in Oracle Forms 10g'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-1104440770929740890</id><published>2007-04-30T18:57:00.000-07:00</published><updated>2007-12-06T07:24:24.654-08:00</updated><title type='text'>Oracle Advanced Queue -- View Subscriber Registrations</title><content type='html'>Have you ever wanted to see what registrations/notfications you have registered to a queue subscriber?  I want to see that, but why is it so hard to figure out where the info is?  I see some mention of SYS.AQ_SRVNTFN_TABLE_Q, but I haven't been able to look into that possibility.&lt;br /&gt;&lt;br /&gt;Update:  This gives what you need, but it is not as nice as I would like.&lt;br /&gt;SELECT * FROM sys.reg$&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-1104440770929740890?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/1104440770929740890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=1104440770929740890&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/1104440770929740890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/1104440770929740890'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2007/04/oracle-advanced-queue-view-subscriber.html' title='Oracle Advanced Queue -- View Subscriber Registrations'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-2403930862646097608</id><published>2007-04-30T12:30:00.000-07:00</published><updated>2007-04-30T12:38:54.590-07:00</updated><title type='text'>Oracle DML Error Logging and ORA-38908</title><content type='html'>Have you ever encountered an error like this?&lt;br /&gt;&lt;br /&gt;ORA-38908: internal error occurred during DML Error Logging ORA-00942: table or view does not exist ORA-02291: integrity constraint (T1.T1_FK) violated - parent key not found&lt;br /&gt;&lt;br /&gt;You are probably using DML Error Logging, a statement like this&lt;br /&gt;&lt;br /&gt;insert into my_tab (c1, c2, c3) &lt;br /&gt;  select a.c1, a.c2, a.c3 from my_other_tab a&lt;br /&gt;  LOG ERRORS INTO err$_my_tab ('oops') REJECT LIMIT UNLIMITED;&lt;br /&gt;&lt;br /&gt;The reason is that err$_my_tab (and probably my_tab) is owned by a user A but the statement is being run by user B and user B does not have insert on err$_my_tab.  It's fairly clear from the documenation that this is required.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Security&lt;br /&gt;&lt;br /&gt;The user who issues the INSERT statement with DML error logging must have INSERT privileges on the error logging table.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The problem is, this is the case even if the insert statement is part of a package (my_pkg) and user B has execute on my_pkg.  It seems that user B should not need insert on err$_my_tab under this scenario, but it does.  This is probably because the DML Error Logging uses autonomous transactions (I assume) and operates outside the context of the package.  In this light, it makes sense.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-2403930862646097608?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/2403930862646097608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=2403930862646097608&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/2403930862646097608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/2403930862646097608'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2007/04/oracle-dml-error-logging-and-ora-38908.html' title='Oracle DML Error Logging and ORA-38908'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-9055981650051157578</id><published>2007-04-18T11:05:00.000-07:00</published><updated>2007-04-26T14:44:16.923-07:00</updated><title type='text'>Upgrading to Oracle Database R2 10.2.0.1 and the TEMP tablespace</title><content type='html'>When running utlu102i.sql you get&lt;br /&gt;WARNING: --&gt; TEMP tablespace is not large enough for the upgrade.&lt;br /&gt;&lt;br /&gt;This is because your current default TEMP tablespace is not locally managed.  The error could certainly be better!  Here is what you need to do.&lt;br /&gt;&lt;br /&gt;1. Create a new temporary tablespace that is locally managed:&lt;br /&gt;create temporary tablespace temp2&lt;br /&gt;tempfile '/opt/oradata/orcl/temp201.dbf' size 64m&lt;br /&gt;extent management LOCAL uniform size 1m&lt;br /&gt;autoextend on next 32m maxsize 128m;&lt;br /&gt;&lt;br /&gt;ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP2;&lt;br /&gt;&lt;br /&gt;2. Now, if you want to have the default tablespace you need to drop the TEMP tablespace, recreate is as locally managed, alter the database to have it as the default temporary tablespace, then drop TEMP2.&lt;br /&gt;&lt;br /&gt;drop tablespace temp including contents;&lt;br /&gt;&lt;br /&gt;create temporary tablespace temp&lt;br /&gt;tempfile '/opt/oradata/orcl/temp01.dbf' size 64m&lt;br /&gt;extent management LOCAL uniform size 1m&lt;br /&gt;autoextend on next 32m maxsize 128m;&lt;br /&gt;&lt;br /&gt;ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP;&lt;br /&gt;&lt;br /&gt;drop tablespace temp2 including contents;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-9055981650051157578?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/9055981650051157578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=9055981650051157578&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/9055981650051157578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/9055981650051157578'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2007/04/upgrading-to-oracle-database-r2-10201.html' title='Upgrading to Oracle Database R2 10.2.0.1 and the TEMP tablespace'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-1512533706526753411</id><published>2007-04-12T09:32:00.000-07:00</published><updated>2007-04-13T12:14:48.802-07:00</updated><title type='text'>Upgrading OEM Grid Control R1 to R3</title><content type='html'>I'll post more updates soon.  If it takes a long time, you need to follow note 421053.1 to install the EMDiagKit and the the R1 to R2 Upgrade checklist (note: 401592.1) the the R2 to R3 checklist (note: 422061.1).  Although the note has a link to the EMDiagKit, the link points inside the Oracle firewall--you'll need to call support to send you the file.  &lt;br /&gt;&lt;br /&gt;If your upgrade hangs on linux, that is, the Oracle Universal Installer (OUI) stops on the first page while detecting OMS and Agents, you may need to follow note 343158.1.  The installer will say Select Install or Upgrade but does not give you any options to select.  The problem is that the OUI is not playing well with your X-Windows emulator (you're not doing this right on the box, but by exporting your display).  Unfortunately, that note is not going to help you immediately if you are on Linux or Unix.  You will need to get Oracle Support to send you the patch.&lt;br /&gt;&lt;br /&gt;As you do the upgrade, the new R3 documentation has the following:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;If the older Oracle Management Service was a seed installation, run the following command:&lt;br /&gt;&lt;br /&gt;$NEW_OMS_HOME/oui/bin/runConfig.sh ORACLE_HOME=&lt;span style="font-weight:bold;"&gt;&amp;lt;OMS HOME&amp;gt;&lt;/span&gt; MODE=perform ACTION=configure COMPONENT_XML={encap_emseed.1_0_0_0_0.xml}&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This is wrong.  After you run this, the install log will say "encap_emseed not found".  The whole upgrade process changed in the R3 documenation, and, as far as I can tell, the R2 documentation doesn't exist on the Oracle documentation site.  They changed the install method to use the -noconfig option (runInstaller -noconfig) because they had a couple bugs they wanted to fix, so they "fixed" them by having you run the process manually--only they documented it wrong!&lt;br /&gt;&lt;br /&gt;So, here is what it should be:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;If the older Oracle Management Service was a seed installation, run the following command:&lt;br /&gt;&lt;br /&gt;$NEW_OMS_HOME/oui/bin/runConfig.sh ORACLE_HOME=&lt;span style="font-weight:bold;"&gt;&amp;lt;NEW_DB_HOME&amp;gt; &lt;/span&gt;MODE=perform ACTION=configure COMPONENT_XML={encap_emseed.1_0_0_0_0.xml}&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hope this helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-1512533706526753411?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/1512533706526753411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=1512533706526753411&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/1512533706526753411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/1512533706526753411'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2007/04/upgrading-oem-grid-control-r1-to-r3.html' title='Upgrading OEM Grid Control R1 to R3'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-124101715564830448</id><published>2007-03-20T20:34:00.000-07:00</published><updated>2007-03-20T20:36:29.986-07:00</updated><title type='text'>Oracle Application Express 3.0 (APEX 3.0)</title><content type='html'>It's available.  Not much more needs to be said.  We'll be downloading and installing this weekend.  If all goes well I won't need another blog entry.  If things don't go well, I'll post any fixes I come up with.&lt;br /&gt;&lt;a href="http://apex.oracle.com"&gt;http://apex.oracle.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-124101715564830448?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/124101715564830448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=124101715564830448&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/124101715564830448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/124101715564830448'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2007/03/oracle-application-express-30-apex-30.html' title='Oracle Application Express 3.0 (APEX 3.0)'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-318121263458273301</id><published>2007-03-01T11:58:00.000-08:00</published><updated>2007-03-07T13:26:43.807-08:00</updated><title type='text'>oraDAV Portal and Third Party Authentication</title><content type='html'>Have you used the Oracle Drive with your portal?  It is easy to set up and it is a great feature.  Do you use Third-Party Authentication (TPA) with Oracle Single Sign-On (SSO)?  You probably don't need it, but if your company has another SSO standard, at least it is fairly easy to set up.&lt;br /&gt;&lt;br /&gt;What if you want to use both?  Seems it should be available.  Search the documentation and you won't find anything saying you can't.  So it should work, right?  Maybe.  Nothing in the documenation tells you how, either.  So far it is impossible to tell.  Oracle Support has an SSO group (tpa), the http group (oraDAV), and the Portal group.  Getting them to work together on this is going to be tons of fun.  I'll give an update when we figure it out.&lt;br /&gt;&lt;br /&gt;Update&lt;br /&gt;&lt;br /&gt;Still waiting on something from Oracle Support, but I have figured out that Portal using mod_oradav does not use SSO at all.  It just does a test bind against OID.  SSO can be completely down and it will still authenticate (without TPA) as long as OID is up.&lt;br /&gt;&lt;br /&gt;This means that the authentication likely happens directly from Portal via dbms_ldap.  If this is the case, it means that the user's password in LDAP will be the authentication method, not what the SSO TPA is configured to use.  This won't be a problem if you keep users' passwords in OID up to date with whatever your TPA mechanism is, but it is a problem, as in my case, when OID doesn't have any idea what the users' real passwords are.&lt;br /&gt;&lt;br /&gt;Update 2&lt;br /&gt;&lt;br /&gt;It is clear that Portal is doing the authentication against OID.  No word from Oracle on whether this is by design or if there could ever be a TPA solution.  For now I have to assume that it won't work unless passwords are stored in OID.  Next step is to find a way to sync those passwords.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-318121263458273301?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/318121263458273301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=318121263458273301&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/318121263458273301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/318121263458273301'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2007/03/oradav-portal-and-third-party.html' title='oraDAV Portal and Third Party Authentication'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-5764763159391650156</id><published>2007-02-08T08:11:00.000-08:00</published><updated>2007-02-08T08:14:00.815-08:00</updated><title type='text'>Oracle SQL Developer - ORA-00942</title><content type='html'>I recently tried to  user SQL Developer with a schema and found that I could not view packages, procedures or functions.  I would get ORA-00942: table or view des not exist.  I still don't know why, but granting SELECT_CATALOG_ROLE to the user solved the problem.&lt;br /&gt;&lt;br /&gt;Update: I had a similar problem in Oracle Data Miner (Data Mining).  I granted unlimited tablespace to the user and the problem went away.  It may have been a tablespace issue for SQL Developer as well...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-5764763159391650156?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/5764763159391650156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=5764763159391650156&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/5764763159391650156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/5764763159391650156'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2007/02/oracle-sql-developer-ora-00942.html' title='Oracle SQL Developer - ORA-00942'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-3132015536798298882</id><published>2007-02-02T08:21:00.001-08:00</published><updated>2007-02-12T10:38:38.394-08:00</updated><title type='text'>Oracle Portal Client IP Address (REMOTE_ADDR)</title><content type='html'>You may want to show the IP address of the client (the browser) on a Portal page. This can be tough because the page is built by the parallel page engine (PPE). At that point, the actual requestor is the mid-tier itself. You need to make a call that goes all the way to the database without being redirected through the PPE. I do this by creating a pl/sql procedure (ideally part of a package) that I then call from a bit of javascript in the page (possibly through a UI Temple / HTML Template). Note: if the user is going through a proxy you will get the proxy IP. If you have a reverse proxy setup (e.g. multiple Oracle Web Caches or Apache Reverse Proxy) you can set things up to get the correct browser IP. See my other post on setting up chained Web Caches.&lt;br /&gt;&lt;br /&gt;Here is the procedure, it's fairly straightforward.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;CREATE OR REPLACE procedure c2_getClientIP is&lt;br /&gt;  l_ip varchar2(200);&lt;br /&gt;begin&lt;br /&gt;  l_ip := owa_util.get_cgi_env('REMOTE_ADDR');&lt;br /&gt;  htp.p(l_ip);&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;grant execute on c2_getClientIP to public;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then you put a little javascript in the page to call that procedure.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;script language="Javascript"&amp;gt;&lt;br /&gt;function xmlhttpPost(strURL) {&lt;br /&gt;   var xmlHttpReq = false;&lt;br /&gt;   var self = this;&lt;br /&gt;   // Mozilla/Safari&lt;br /&gt;   if (window.XMLHttpRequest) {&lt;br /&gt;       self.xmlHttpReq = new XMLHttpRequest();&lt;br /&gt;   }&lt;br /&gt;   // IE&lt;br /&gt;   else if (window.ActiveXObject) {&lt;br /&gt;       self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");&lt;br /&gt;   }&lt;br /&gt;   self.xmlHttpReq.open('GET', strURL, true);&lt;br /&gt;   self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');&lt;br /&gt;   self.xmlHttpReq.onreadystatechange = function() {&lt;br /&gt;       if (self.xmlHttpReq.readyState == 4) {&lt;br /&gt;           updatepage(self.xmlHttpReq.responseText);&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;   self.xmlHttpReq.send(getquerystring());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function getquerystring() {&lt;br /&gt;   var form     = document.forms['f1'];&lt;br /&gt;   var word = form.word.value;&lt;br /&gt;   qstr = 'w=' + escape(word);  // NOTE: no '?' before querystring&lt;br /&gt;   return qstr;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function updatepage(str){&lt;br /&gt;   document.getElementById("result").innerHTML = str;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;form name="f1"&amp;gt;&lt;br /&gt; word: &amp;lt;input name="word" type="text"&amp;gt;  &amp;lt;input value="Go" type="button" onclick='JavaScript:xmlhttpPost("/pls/portal/portal.c2_getClientIP")'&amp;gt;&lt;br /&gt; &amp;lt;div id="result"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can put the javascript in a template or as a text item. You can modify this however you want to either just show the IP, put in a variable, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-3132015536798298882?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/3132015536798298882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=3132015536798298882&amp;isPopup=true' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3132015536798298882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/3132015536798298882'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2007/02/oracle-portal-client-ip-address.html' title='Oracle Portal Client IP Address (REMOTE_ADDR)'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-7586808808832100904</id><published>2007-02-02T07:53:00.000-08:00</published><updated>2007-02-02T08:22:24.895-08:00</updated><title type='text'>DBMS_XMLSCHEMA.GENERATESCHEMA and ORA-21500</title><content type='html'>You may run into this error.  You want to generate an xsd based on on object type.  You create the object:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;CREATE OR REPLACE TYPE my_test_type&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  AS OBJECT (&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    EMPLOYEE_ID NUMBER(6),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    FIRST_NAME VARCHAR2(20)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then you want to get the associated xsd:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;SQL&gt; Set pagesize 9999&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SQL&gt; Set linesize 132&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SQL&gt; Set long 9999&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SQL&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SQL&gt; select DBMS_XMLSCHEMA.GENERATESCHEMA( 'APPS', 'MY_TEST_TYPE')&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  2  from dual&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  3  /&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Instead of getting the xsd, you get the following:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ERROR:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ORA-21500: internal error code, arguments: [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The problem is not at the database, but with sql*plus.  You are probably using a 9i sqlplus client.  Try a 10g sqlplus and it should work fine.&lt;br /&gt;&lt;br /&gt;As always, if this helps, drop me a comment.  It would be great to know that this actually helped someone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-7586808808832100904?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/7586808808832100904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=7586808808832100904&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7586808808832100904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7586808808832100904'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2007/02/dbmsxmlschemagenerateschema-and-ora.html' title='DBMS_XMLSCHEMA.GENERATESCHEMA and ORA-21500'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-6379127503808989401</id><published>2007-01-11T12:04:00.000-08:00</published><updated>2007-02-02T08:04:25.237-08:00</updated><title type='text'>RepCA on HPUX 64-Bit</title><content type='html'>You may run into the following errors when running RepCA on  HPUX 64-Bit (Itanium):&lt;br /&gt;&lt;br /&gt;in the repca.log file&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new;font-size:85%;" &gt;[CustomExternalProcessAction] Command line: /oracle/product/10.1.2.mrca/jdk/bin/java -cp /oracle/product/10.1.2.mrca/assistants/opca/jlib/opca.jar:/oracle/product/10.1.2.mrca/portal/jlib/ptlshare.jar:/oracle/product/10.1.2.mrca/jdbc/lib/classes12.jar:/oracle/product/10.1.2.mrca/jdbc/lib/nls_charset12.jar oracle.webdb.config.PortalConfigAssistant&lt;br /&gt;[CustomExternalProcessAction] Process exited abnormally&lt;br /&gt;[CustomExternalProcessAction] Action failed due to: oracle.ias.repca.ifs.utils.action.ActionFailedException: Some of the operations have failed during this OracleAS RepCA session. Please see the log file at /oracle/product/10.1.2.mrca/assistants/repca/log/repca_2007-01-11_01-38-25_PM.log for further details.&lt;br /&gt;ERROR - Some of the operations have failed during this OracleAS RepCA session. Please see the log file at /oracle/product/10.1.2.mrca/assistants/repca/log/repca_2007-01-11_01-38-25_PM.log for further details.&lt;br /&gt;oracle.ias.repca.ifs.utils.action.ActionFailedException: Some of the operations have failed during this OracleAS RepCA session. Please see the log file at /oracle/product/10.1.2.mrca/assistants/repca/log/repca_2007-01-11_01-38-25_PM.log for further details.&lt;br /&gt;at oracle.ias.repca.actions.CustomExternalProcessAction.perform(CustomExternalProcessAction.java:155)&lt;br /&gt;at oracle.ias.repca.ifs.utils.action.ActionQueue.performActions(ActionQueue.java:319)&lt;br /&gt;at oracle.ias.repca.ifs.utils.action.ActionQueue.run(ActionQueue.java:245)&lt;br /&gt;at java.lang.Thread.run(Thread.java:534)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;in the sso.log file&lt;br /&gt;&lt;br /&gt;...end of SSO install&lt;br /&gt;&lt;br /&gt;INSTALL_ACTION:createSSOSchema() : loadjava -resolve -verbose -user orasso/orasso@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xxxxx)))  /oracle/product/10.1.2.mrca/portal/admin/plsql/sso/SSOExtDB.class&lt;br /&gt;&lt;br /&gt;arguments: '-resolve' '-verbose' '-user' 'orasso/orasso@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xxxxx)))' '/oracle/product/10.1.2.mrca/portal/admin/plsql/sso/SSOExtDB.class'&lt;br /&gt;&lt;br /&gt;SQL Error while connecting with oci8 driver to (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xxxxx))): Closed Connection&lt;br /&gt;&lt;br /&gt;exiting  : could not open connection&lt;br /&gt;&lt;br /&gt;INSTALL_ACTION:createSSOSchema() : loadjava -resolve -verbose -user orasso/orasso@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xxxxx)))  /oracle/product/10.1.2.mrca/portal/admin/plsql/wwc/SSOHash.class&lt;br /&gt;&lt;br /&gt;arguments: '-resolve' '-verbose' '-user' 'orasso/orasso@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xxxxx)))' '/oracle/product/10.1.2.mrca/portal/admin/plsql/wwc/SSOHash.class'&lt;br /&gt;&lt;br /&gt;SQL Error while connecting with oci8 driver to (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xxxxx))): Closed Connection&lt;br /&gt;&lt;br /&gt;exiting  : could not open connection&lt;br /&gt;&lt;br /&gt;INSTALL_ACTION : Set the component loading flag for SSO&lt;br /&gt;&lt;br /&gt;ERROR: Setting the component loading flag in the DBMS registry raised exception.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;It could be that the loadjava of the repca doesn't work well in this configuration.  There are probably at least two issues: first, the symbolic link $REPCA_HOME/JRE does not point to the correct location.  It needs to point to the full JRE location (java/1.3.1).   Second, the loadjava itself is an issue. I tried to solve the problem in a bunch of ways, but found the easiest thing to do is just run the repca from a Windows or Linux box.  Much faster than troubleshooting the install on HPUX.&lt;/span&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/24686153-6379127503808989401?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/6379127503808989401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=6379127503808989401&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/6379127503808989401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/6379127503808989401'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2007/01/repca-on-hpux-64-bit.html' title='RepCA on HPUX 64-Bit'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-2856924655682591890</id><published>2006-12-22T13:30:00.000-08:00</published><updated>2006-12-22T13:37:24.281-08:00</updated><title type='text'>ssoreg.sh throws exception: IAS Property not found</title><content type='html'>When running ssoreg.sh you may run into this error:&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:helvetica;"&gt;Repository Access API throws exception :oracle.ias.repository.schema.SchemaException: iAS Property could not be found Property Name OIDhost in ...&lt;/span&gt;&lt;/p&gt;&lt;p&gt;This is most likely because you used the actual ORACLE_HOME when running it instead of using $ORACLE_HOME.  For some reason you MUST use $ORACLE_HOME.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-2856924655682591890?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/2856924655682591890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=2856924655682591890&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/2856924655682591890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/2856924655682591890'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2006/12/ssoregsh-throws-exception-ias-property.html' title='ssoreg.sh throws exception: IAS Property not found'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-7314927937687477726</id><published>2006-12-06T08:45:00.000-08:00</published><updated>2006-12-06T09:16:58.518-08:00</updated><title type='text'>Suse Linux and ORA-27125</title><content type='html'>It's basically Unix, right, so you almost never reboot it.  That's great, except when you can't remember what you did the last time to fix something.  Well, I rebooted today.  I didn't really need to, but something made me do it.  Then I tried to bring up my database.  I saw the following:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SQL&gt; startup;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ORA-32004: obsolete and/or deprecated parameter(s) specified&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ORA-27125: unable to create shared memory segment&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Linux-x86_64 Error: 1: Operation not permitted&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What to do about it!?   It turns out I had two distinct problems.  That can be tough, because it looks like it could be one problem.  Somehow the database OEM had introduced an old init.ora parameter, that's the ora-32004.  If the db won't start, you don't get the output in the alert log telling you which parameter is the problem.  First I solved the ora-27125, then I found that I had plsql_compiler_flags specified and reset it.&lt;br /&gt;&lt;br /&gt;So, what caused the ora-27125?  Would you believe... metalink had the answer, note: 293988.1&lt;br /&gt;&lt;br /&gt;I'm going to paste the note here just so it is handy.&lt;br /&gt;&lt;br /&gt;&lt;h2 class="awiz"&gt;Applies to: &lt;/h2&gt;  Oracle Server - Enterprise Edition - Version: 9.2 to 10.2&lt;br /&gt;Linux Itanium&lt;br /&gt;SUSE \ UnitedLinux x86-64&lt;br /&gt;Linux x86-64&lt;br /&gt;Linux x86&lt;br /&gt;This Problem can be seen on the SUSE SLES9 linux distribution which runs on kernel '2.6.5-7.191'  &lt;h2 class="awiz"&gt;&lt;a name="SYMPTOM"&gt;&lt;/a&gt;Symptoms&lt;/h2&gt; While starting the database instance following error is encountered.&lt;br /&gt;&lt;br /&gt;SQL&gt; startup&lt;br /&gt;ORA-27125: unable to create shared memory segment&lt;br /&gt;Linux Error: 1: Operation not permitted&lt;br /&gt;&lt;br /&gt;&lt;h2 class="awiz"&gt;&lt;a name="CAUSE"&gt;&lt;/a&gt;Cause&lt;/h2&gt; This is caused by '2.6.5-7.nnn' kernels requiring MLOCK privilege for hugetlb memory.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;  &lt;/p&gt; &lt;h2 class="awiz"&gt;&lt;a name="FIX"&gt;&lt;/a&gt;Solution&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;To enable use of "hugetlb memory", or to allow the init.ora parameter "lock_sga=true" to be used, do:&lt;br /&gt;&lt;blockquote&gt; --- Login as root&lt;br /&gt;--- # echo &lt;strong&gt;&lt;em&gt;1&lt;/em&gt;&lt;/strong&gt; &gt; &lt;em&gt;/proc/sys/vm/&lt;strong&gt;disable_cap_mlock&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;/blockquote&gt;  If you need to make this change persistent&lt;br /&gt;&lt;blockquote&gt; --- Login as root&lt;br /&gt;--- Edit /etc/sysctl.conf&lt;br /&gt;     Add following lines&lt;br /&gt;        # Oracle requires MLOCK priviledge for hugetlb memory.&lt;br /&gt;        vm.disable_cap_mlock=1&lt;br /&gt;--- Execute the command&lt;br /&gt;       #/etc/init.d/boot.sysctl start&lt;br /&gt;       Setting current sysctl status from /etc/sysctl.conf&lt;br /&gt;       vm.disable_cap_mlock = 1&lt;br /&gt;--- Dont forget to enable the service.&lt;br /&gt;      chkconfig boot.sysctl on&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-family:helvetica;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-7314927937687477726?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/7314927937687477726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=7314927937687477726&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7314927937687477726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/7314927937687477726'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2006/12/suse-linux-and-ora-27125.html' title='Suse Linux and ORA-27125'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-116421885202048519</id><published>2006-11-22T09:58:00.000-08:00</published><updated>2008-09-09T08:00:39.911-07:00</updated><title type='text'>Export Portal schema and move to another db</title><content type='html'>OK, so I admit this is very esoteric, but if you ever need to move a Portal schema by using export/import (e.g., you are changing database operating system), you may run into this problem... (I'll try to put up a more comprehensive "how to" later, but thought this little issue deserved its own spot.)  In the meantime, we have done a bunch of these moves.  If you need some help, click on the C2 Consulting link to the right.&lt;br /&gt;&lt;br /&gt;The solution is right in the documentation&lt;br /&gt;http://download-east.oracle.com/docs/cd/B14099_18/core.1012/b13995/prodtest.htm#BHAHIHBH&lt;br /&gt;but if you miss it, the errors are not too helpful.&lt;br /&gt;&lt;br /&gt;You get a servlet error&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size:78%;"&gt;Servlet Error&lt;/span&gt;&lt;/b&gt;  &lt;p&gt;An unexpected servlet error was encountered.  &lt;/p&gt;&lt;p&gt;Please check the log file for more details. &lt;/p&gt;In the log file&lt;br /&gt;$ORACLE_HOME/j2ee/OC4J_Portal/application-deployments/portal/OC4J_Portal_default_island_1&lt;br /&gt;you will see the following:&lt;br /&gt;&lt;br /&gt;06/11/22 09:43:41 portal: [module=PortalServlet, ecid=92635952220,1] ERROR: oracle.webdb.repository.service.RepositoryServiceException: Unable to obtain Portal Repository version.&lt;br /&gt;&lt;br /&gt;Search all through metalink and on the web and it will likely tell you that your PORTAL schema password is wrong.  Well, that might be true, but once you find it isn't wrong, log in as either PORTAL, sys or system and run the following command:&lt;br /&gt;&lt;br /&gt;ALTER USER PORTAL_PUBLIC GRANT CONNECT THROUGH PORTAL;&lt;br /&gt;&lt;br /&gt;Bounce everything.  I'm interested in finding out if this helps anyone.  If it does, leave a comment.&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;&lt;br /&gt;Anton&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-116421885202048519?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/116421885202048519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=116421885202048519&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/116421885202048519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/116421885202048519'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2006/11/export-portal-schema-and-move-to.html' title='Export Portal schema and move to another db'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-116301617740068995</id><published>2006-11-08T11:58:00.000-08:00</published><updated>2006-11-08T12:02:57.413-08:00</updated><title type='text'>High Availability Identity Management Install (10gAS)</title><content type='html'>The installation guides tell you that you must have your load balancer resolve via dns or in the host file.  The guides don't mention that if you have a metadata repository on a separate box, then the load balancer must resolve from that box as well.  If it doesn't, you will get the following error in InstallActions.log:&lt;br /&gt;&lt;br /&gt;SQL&gt; Connected.&lt;br /&gt;&lt;br /&gt;SQL&gt; Creating OID entries for SSO&lt;br /&gt;Error code : 1&lt;br /&gt;&lt;br /&gt;Error message: User-Defined Exception&lt;br /&gt;&lt;br /&gt;LDAP error : ORA-31203: DBMS_LDAP: PL/SQL - Init Failed.&lt;br /&gt;&lt;br /&gt;ERROR: deleting application entry&lt;br /&gt;&lt;br /&gt;Error code: 1&lt;br /&gt;&lt;br /&gt;Error message: User-Defined Exception&lt;br /&gt;&lt;br /&gt;ERROR: creating SSO users and groups in OID&lt;br /&gt;&lt;br /&gt;PL/SQL procedure successfully completed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-116301617740068995?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/116301617740068995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=116301617740068995&amp;isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/116301617740068995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/116301617740068995'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2006/11/high-availability-identity-management.html' title='High Availability Identity Management Install (10gAS)'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-116293656297217964</id><published>2006-11-07T13:47:00.000-08:00</published><updated>2006-11-07T13:56:02.986-08:00</updated><title type='text'>Oracle REPCA on a RAC Database</title><content type='html'>If you run the Oracle Metadata Repository Creation Assistant (RepCA) into a RAC Database you may find that the PORTAL_DEMO schema does not get created.  You get an error saying that some things failed at the same moment that you get an installation completed successfully message.  The fix is fairly easy, just remove the MR and re-install, but only indicate a single RAC node in the installer.    Section 2.3.2, Step 4 of the following document mentions this:&lt;br /&gt;http://download-west.oracle.com/docs/cd/B14099_19/sol.1012/repca.1012/repca/load.htm#sthref158&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-116293656297217964?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/116293656297217964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=116293656297217964&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/116293656297217964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/116293656297217964'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2006/11/oracle-repca-on-rac-database.html' title='Oracle REPCA on a RAC Database'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-116231039545320939</id><published>2006-10-31T07:56:00.000-08:00</published><updated>2006-10-31T07:59:55.463-08:00</updated><title type='text'>Oracle Portal Virtual Host and SSL</title><content type='html'>I recently ran into an issue that Oracle Portal was presenting the wrong base href in some pages.  This was a virtual hosted environment, that is, several machine names point to the same installation of portal.  We had followed the virtual hosting documentation perfectly, and in fact, we had it running for quite some time without any issue.  The issue cropped up when we added an additional virtual host.&lt;br /&gt;This additional host was the first one that was not SSL.  It took a little while to figure it out, but the solution was to make sure that all of the https (ssl) virtual hosts appear in the httpd.conf file prior to the first http virtual host.  I'm still not sure why this would make a difference, but it solved the problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-116231039545320939?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/116231039545320939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=116231039545320939&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/116231039545320939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/116231039545320939'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2006/10/oracle-portal-virtual-host-and-ssl.html' title='Oracle Portal Virtual Host and SSL'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-116222845730405716</id><published>2006-10-30T08:52:00.000-08:00</published><updated>2010-12-07T06:42:54.192-08:00</updated><title type='text'>Setting Up SSL for Application Express</title><content type='html'>If you are reading this, you might be interested in &lt;a href="http://c2anton.blogspot.com/2008/08/oracle-application-express-apex.html"&gt;this post as well&lt;/a&gt; and &lt;a href="http://c2anton.blogspot.com/2008/08/oracle-open-world-oracle-openworld.html"&gt;probably this one&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'll try to give sufficient info to do this...&lt;br /&gt;All steps are done with ORACLE_HOME set to the middle tier home (Apache, Companion CD home)&lt;br /&gt;&lt;br /&gt;1. You need to use Oracle Wallet Manager (OWM) to create a wallet and get it set up.&lt;br /&gt;-- a. set up ORACLE_HOME, etc.&lt;br /&gt;-- b. go to $ORACLE_HOME/bin&lt;br /&gt;-- c. run Oracle Wallet Manager  ./owm&lt;br /&gt;-- d. create a new wallet and save in a new directory (e.g. /home/oracle/myWallet/)&lt;br /&gt;-- e. create a certificate request&lt;br /&gt;-- -- i. the common name is the name of the url, for example www.concept2completion.net&lt;br /&gt;-- --         ii. Organizational Unit and Organization are just text associated with your company&lt;br /&gt;-- -- iii. &lt;b&gt;&lt;u&gt;You should spell out the state&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;--     f. export the request to a text file&lt;br /&gt;--     g. You will need to go to a certificate authority (CA) to get a certificate and paste in the contents of the text file created in (f).  I have had problems with both goDaddy and Verisign.  I have had good luck with entrust.com and thawte.com&lt;br /&gt;--     h.  If you get a trial certificate you will need to get the trial Root Certificate (aka trusted certificate) from the CA.  Save it as a text file.  Install that into OWM as a trusted cert.&lt;br /&gt;--     i. Now install your cert (from g) in OWM and save.&lt;br /&gt;2. Configure your ssl.conf file, located in $ORACLE_HOME/Apache/Apache/conf&lt;br /&gt;-- a. You can use the default listen and port settings (probably 4443 or 4447) or you can change to 443.  If you change to 443, you need to change all occurences.  Also, the apachectl file will need to be owned by root (located in $ORACLE_HOME/Apache/Apache/bin/).   Same requirement as running on Port 80.&lt;br /&gt;---- 1. Setting up Apache to run on ports below 1024&lt;br /&gt;1 Shutdown OHS&lt;br /&gt;2 Become root&lt;br /&gt;3 cd $ORACLE_HOME/Apache/Apache/bin&lt;br /&gt;4 chown root .apachectl&lt;br /&gt;5 chmod 6750 .apachectl&lt;br /&gt;6 cd $ORACLE_HOME/Apache/Apache/logs&lt;br /&gt;7 rm -f *&lt;br /&gt;-- b. Besides the port change, you need to change the location of your wallet and give your wallet password.  You can encrypt the password, but I'm not covering that here and now. (See Oracle Support Note 184677.1)&lt;br /&gt;SSLWallet file:/home/oracle/myWallet/&lt;br /&gt;SSLWalletPassword mySuperPW1&lt;br /&gt;-- c. Save ssl.conf&lt;br /&gt;3. &lt;span style="font-weight: bold;"&gt;Here is the trick.&lt;/span&gt;  You need to configure OPMN to run in SSL mode.  Edit the file opmn.xml (located in $ORACLE_HOME/opmn/conf/)&lt;br /&gt;-- a. under start mode, look for ssl-disabled&lt;br /&gt;&lt;data id="start-mode" value="ssl-disabled"&gt;-- -- change to&lt;br /&gt;-- --  ssl-enabled&lt;br /&gt;&lt;data id="start-mode" value="ssl-enabled"&gt;&lt;/data&gt;&lt;/data&gt;-- &lt;data id="start-mode" value="ssl-disabled"&gt;&lt;data id="start-mode" value="ssl-enabled"&gt;b. Save opmn.xml&lt;br /&gt;4. go to $ORACLE_HOME/opmn/bin and restart&lt;br /&gt;&lt;/data&gt;&lt;/data&gt;    -- &lt;data id="start-mode" value="ssl-disabled"&gt;&lt;data id="start-mode" value="ssl-enabled"&gt;a. opmnctl stopall&lt;br /&gt;&lt;/data&gt;&lt;/data&gt;    -- &lt;data id="start-mode" value="ssl-disabled"&gt;&lt;data id="start-mode" value="ssl-enabled"&gt;b. opmnctl startall&lt;br /&gt;&lt;br /&gt;OK, now you are running in SSL.  You might want to run everything in SSL, or just some things.  To do this, you can set an Apache Rewrite Rule.   Here is an example that will rewrite everything that is in pls/apex to https (assumes you are running on port 443).  Edit your httpd.conf file, add the lines below at the end of the file, opmnctl stopall, opmnctl startall:&lt;br /&gt;RewriteEngine On&lt;br /&gt;RewriteCond   %{SERVER_PORT}  !^443$&lt;br /&gt;RewriteRule ^/pls/apex/(.*)$ https://concept2completion.net/pls/apex/$1 [L,R]&lt;br /&gt;&lt;br /&gt;Hope this captures all of the steps.  Let me know if this helps.&lt;br /&gt;&lt;br /&gt;&lt;/data&gt;&lt;/data&gt;If you are reading this, you might be interested in &lt;a href="http://c2anton.blogspot.com/2008/08/oracle-application-express-apex.html"&gt;this post as well&lt;/a&gt; and &lt;a href="http://c2anton.blogspot.com/2008/08/oracle-open-world-oracle-openworld.html"&gt;probably this one&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-116222845730405716?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/116222845730405716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=116222845730405716&amp;isPopup=true' title='42 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/116222845730405716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/116222845730405716'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2006/10/setting-up-ssl-for-application-express.html' title='Setting Up SSL for Application Express'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>42</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-116128632412735019</id><published>2006-10-19T12:22:00.000-07:00</published><updated>2008-05-15T06:53:56.765-07:00</updated><title type='text'>Oracle Instant Portal - Public</title><content type='html'>I recently began playing with OIP a bit more.  It has a fun UI, so when my son asked to make a website for his school project I suggested that my son use it for his project.  I figured it would force me to learn the in-and-outs a bit better.  Well, I was right.&lt;br /&gt;&lt;br /&gt;After getting some content into the site, my son asked to make it available so anyone could see it.  I had never even tried it.  So, I just tried it.  I added PUBLIC to the oip_available_users group in Oracle Internet Directory (OID).  Then I added PUBLIC as a view user to the pages I wanted to be public.  Seems to make sense, right?  It didn't work.  After a little poking around I found out that OIP won't allow a page to be public.  So, what's the next thing to do?  Remove the public user, right?  Wrong!&lt;br /&gt;&lt;br /&gt;If you use the OIP user management feature to remove a user, it DELETES the user from OID.  That, of course, is exactly what I did.  I deleted the public user from OID, thereby causing all of my public portal pages to break.  I could barely log in. &lt;br /&gt;&lt;br /&gt;I did a little research to find a solution.   The two solutions I could find were reinstall and try reseeding all of the initial users, then clean up.  I did not like either choice.  I just created a new user in OID called PUBLIC.  Everything has worked since then, but I may yet have issues.&lt;br /&gt;&lt;br /&gt;Update: Since this original post I have found that a lot of permissions get lost.  You will need to run the script that recreates all of the public permissions on form building, etc.  If  you run in to this,  run all the set_user_acl procedures in the /portal30/admin/plsql/wwv/wwvsecd.sql script, which reference the PUBLIC user (USER_PUBLIC).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-116128632412735019?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/116128632412735019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=116128632412735019&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/116128632412735019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/116128632412735019'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2006/10/oracle-instant-portal-public.html' title='Oracle Instant Portal - Public'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-115878098370114193</id><published>2006-09-20T12:12:00.000-07:00</published><updated>2006-09-20T12:36:24.016-07:00</updated><title type='text'>Oracle Application Express File Download</title><content type='html'>I recently had a client complain that when clicking on a file from an ApEx application it always asked them to save or open the file rather than just rendering it in the browser via a plug-in (e.g. rendering a pdf in Acrobat Reader).&lt;br /&gt;&lt;br /&gt;I almost always want that, so it never seemed to be an issue to me, but I could see the point.  I had utilized the standard ApEx routines for downloading files from a blob in my custom table.  This has the following code:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;  htp.p('Content-length: ' || v_length);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 255); font-weight: bold;"&gt;  -- the filename will be used by the browser if the users does a save as&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 255); font-weight: bold;"&gt;  htp.p('Content-Disposition: attachment; filename="' || v_file_name || '"');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        -- close the headers&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  owa_util.http_header_close;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        -- download the BLOB&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  wpg_docload.download_file( Lob_loc );&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This code is fine and it does just what it will do, but the blue text causes (at least some, including IE) browsers to force a download, and never open within the browser.&lt;br /&gt;&lt;br /&gt;It was easy to comment out that line, but that left another issue.  Now when the user does a save (right clicks and does "Save as" or saves from the plugin) it doesn't have the correct filename.  It will have as a filename whatever comes after the last slash (/) in the url.  That probably looks something like my_package.download?p_id=12442.  Users really didn't like that.&lt;br /&gt;&lt;br /&gt;So . . . What to do?  We changed the download links to look like this instead:&lt;br /&gt;/apexfiledownload/&lt;id&gt;/&lt;filename&gt;&lt;br /&gt;like this&lt;br /&gt;/apexfiledownload/12442/myFile.pdf&lt;br /&gt;&lt;br /&gt;Then we used an Apache rewrite rule to route that to our download routine (my_package.download?p_id=12442).  Here is the rule:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;RewriteRule ^/apexfiledownload/([^/]+)/?(.*) /htmldb/my_package.download?p_id=$1 [PT] &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That works and everyone is happy now.&lt;br /&gt;&lt;br /&gt;I have an idea that I could also have implemented this by simply changing the offending line from attachment to inline:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 255); font-weight: bold;"&gt;  htp.p('Content-Disposition: &lt;span style="color: rgb(204, 0, 0);"&gt;inline&lt;/span&gt;; filename="' || v_file_name || '"');&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Testing that will be left to another day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-115878098370114193?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/115878098370114193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=115878098370114193&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/115878098370114193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/115878098370114193'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2006/09/oracle-application-express-file.html' title='Oracle Application Express File Download'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-115826581571206536</id><published>2006-09-14T13:16:00.000-07:00</published><updated>2006-09-14T13:32:01.596-07:00</updated><title type='text'>Always something to do during a con-call</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8046/2562/1600/IMGP0725.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/8046/2562/320/IMGP0725.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Just to show that there is more to do than Oracle . . . I was recently on a long con-call.  And you can always find something to do during a long con-call.   I had to switch phones to make the call because a couple of the keys on my cordless Motorola phone (md400 series) had stopped working.  It happened over time, becoming more and more annoying until a few just don't work at all.  Of course, the "1" doesn't work--and I live in the Boston area, where you need to dial a 1 to call next door.  So, I grabbed another phone, dialed the call-in number, and got to work.&lt;br /&gt;&lt;br /&gt;The hardest part, of course, is to just get the darn thing apart.  At least nothing was glued together.  It just required some prying and determination (and removing a few screws, 2 obvious, 2 hidden under a panel).&lt;br /&gt;&lt;br /&gt;Then off to figure out the problem.  The contacts were all good, and the keys all looked the same, but a few just wouldn't cause the contacts to connect.&lt;br /&gt;&lt;br /&gt;So, I added a little piece of aluminum foil over each key and reassembled (you can see the first five in the picture).  Now it works great, maybe a little too easy to get a number, but I suspect that will change over time.  Now I don't need to buy a new phone, and it didn't take me any time because I was on a con-call.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-115826581571206536?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/115826581571206536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=115826581571206536&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/115826581571206536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/115826581571206536'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2006/09/always-something-to-do-during-con-call.html' title='Always something to do during a con-call'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-115500205025319791</id><published>2006-08-07T18:51:00.000-07:00</published><updated>2006-08-07T18:54:10.266-07:00</updated><title type='text'>Oracle 10gAS install in a custom database</title><content type='html'>If you create a custom database (10.2.0.2) with the dbca, it will automatically install Oracle Spatial.  If you use the command line or sqlplus, it doesn't.   Spatial is required prior to running Repca.  But, the pre-check doesn't catch that it isn't there.  And the select statement given in the 10gAS documentation returns true when it isn't really there.  So, be sure to put in prior to installing, otherwise you'll have to remove the metadata repository and start over.  No fun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-115500205025319791?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/115500205025319791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=115500205025319791&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/115500205025319791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/115500205025319791'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2006/08/oracle-10gas-install-in-custom.html' title='Oracle 10gAS install in a custom database'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-115412435942183387</id><published>2006-07-28T14:59:00.000-07:00</published><updated>2006-08-17T11:06:15.673-07:00</updated><title type='text'>Application Express (html db) Breadcrumbs</title><content type='html'>Here is a little bug (in 2.0 anyway).&lt;br /&gt;&lt;br /&gt;Create a breadcrumb, b1.  Create a child, b1_1.  Delete  the page associated with b1.  The child still exists, but there is no way to edit it or delete it.&lt;br /&gt;&lt;br /&gt;Solution:&lt;br /&gt;select to_char(id), * from flows_02000.wwv_menu_options&lt;br /&gt;where flow_id = &lt;your&gt;&lt;br /&gt;&lt;br /&gt;find the option that you want to edit.  Copy the id.&lt;br /&gt;&lt;br /&gt;Edit a different menu option, you'll see a link like the one below:&lt;br /&gt;htmldb/f?p=4000:290:::NO:290:F4000_P290_ID:6009524130400412&lt;br /&gt;&lt;br /&gt;change the final number to the id you copied.&lt;br /&gt;&lt;br /&gt;Voila!  Now you can edit your menu option and give it a new parent.&lt;br /&gt;&lt;br /&gt;Hope this helps someone.&lt;/your&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-115412435942183387?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/115412435942183387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=115412435942183387&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/115412435942183387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/115412435942183387'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2006/07/application-express-html-db.html' title='Application Express (html db) Breadcrumbs'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-115412394946238249</id><published>2006-07-28T14:53:00.000-07:00</published><updated>2008-02-29T11:12:30.469-08:00</updated><title type='text'>Oracle Advanced Queue pl/sql Subscriptions</title><content type='html'>Here is a quick pointer on Oracle Advanced Queues and pl/sql registrations.  In the documenation it tells you that the queue name must be less than or equal to 30 characters for pl/sql subscriptions to work.  It doesn't mention that schema.queue_name must be &lt;= 30.  But that is the case--at least in 9i.  Once you get to 10g (or 10.2.0.1 anyway) it is even more difficult.  Same rule applies, but what they don't tell you is that in 10g it is "schema"."queue_name" must be  &lt;= 30.  So really, the length of the queue name plus the length of the schema must be &lt;= 25.   This can be tricky if you do an upgrade and suddenly your plsql queue stops working.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-115412394946238249?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/115412394946238249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=115412394946238249&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/115412394946238249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/115412394946238249'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2006/07/oracle-advanced-queue-plsql.html' title='Oracle Advanced Queue pl/sql Subscriptions'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-114809857077224879</id><published>2006-05-19T21:06:00.000-07:00</published><updated>2006-08-17T11:09:04.440-07:00</updated><title type='text'>Installing Oracle 10g AS w/ Forms on SuSE 9</title><content type='html'>Wow, this has been a challenge.  I'll try to put up a few useful URLs and then add comments later.  I wish I had taken closer notes along the way.&lt;br /&gt;&lt;br /&gt;Be sure to install Motif (32 Bit).  And get this... the SuSE ES9 will likely have a newer version of Motif than Forms Server will accept, so you will need to be sure to install the correct version.  If you just want to get it to install, but don't want to compile forms, you can get it to work with a link, but then frmcmp.sh won't work:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;ln -s libXm.so.3 libXm.so.2&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;So, you should just do the download (I think this is the link, though I'm not even sure anymore):&lt;br /&gt;&lt;span style="font-size:78%;"&gt;http://support.novell.com/techcenter/psdb/388a4c0511756c9a8aff38e2c5170509.html&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;If you forget to do this, you will get an error like this:&lt;br /&gt;01/05/21 09:42:44 Internal server error&lt;br /&gt;java.lang.UnsatisfiedLinkError: &lt;oracle_home&gt;/lib/librwu.so: libXm.so&lt;br /&gt;.2: cannot open shared object file: No such file or directory&lt;/oracle_home&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Set up Enviroment:  Run OraRun by Novell&lt;br /&gt;http://ftp.novell.com/partners/oracle/sles-9/&lt;br /&gt;&lt;br /&gt;Install GCC 32 Bit, DB1 32 Bit&lt;br /&gt;&lt;br /&gt;Error: &lt;span style=";font-family:courier new;font-size:130%;"  &gt;&lt;span style="font-size:x-small;"&gt;&lt;pre&gt;checking for hardnofiles = 65536 found hardnofiles = 1024 Failed&lt;br /&gt;checking for softnofiles = 4096; softnofiles = 1024 &lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;Solution: Set Up Security Parameters (I should boil this down, but the URL below gets you there, ):&lt;br /&gt;&lt;span style="font-size:85%;"&gt;http://asktom.oracle.com/pls/ask/f?p=4950:8:::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:454420165038&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Error in WebCache Configuration Assistant: error while loading shared libraries: libdb&lt;br /&gt;See http://nextre.it/oracledocs/gridcontrolonsles9.html (basically install db1 32 bit)&lt;br /&gt;&lt;br /&gt;Also check this URL:&lt;br /&gt;http://ivan.kartik.sk/oracle/install_ids10_suse.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-114809857077224879?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/114809857077224879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=114809857077224879&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/114809857077224879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/114809857077224879'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2006/05/installing-oracle-10g-as-w-forms-on.html' title='Installing Oracle 10g AS w/ Forms on SuSE 9'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-114806512487957747</id><published>2006-05-19T11:49:00.000-07:00</published><updated>2006-05-19T11:59:54.086-07:00</updated><title type='text'>Fast Refreshing a Materialized View</title><content type='html'>Just a quick post about fast refreshing an MV.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;schema1 in db1 has a database link to schema2 in db2&lt;br /&gt;&lt;br /&gt;schema2 has select on table t1 in  schema3 in db2&lt;br /&gt;&lt;br /&gt;You want to create a fast refreshable MV in schema1 on table t1.&lt;br /&gt;&lt;br /&gt;You must create a materialized view log on t1 and grant select on the log to schema2:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SQL&gt; connect schema3@db2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Enter password: ********&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Connected.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SQL&gt; create materialized view log on t1;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Materialized view log created.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SQL&gt; grant select on mlog$_t1 to schema2;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Grant succeeded.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;If you neglect to do the grant, you will get the following error:&lt;br /&gt;&lt;br /&gt;ORA-12008: error in materialized view refresh path&lt;br /&gt;ORA-01031: insufficient privileges&lt;br /&gt;ORA-02063: preceding line from LINK_TO_ESUBMIT&lt;br /&gt;ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2255&lt;br /&gt;ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2461&lt;br /&gt;ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2430&lt;br /&gt;ORA-06512: at line 2&lt;br /&gt;&lt;br /&gt;Seems like there could be a better error message, but that's what you get.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&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/24686153-114806512487957747?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/114806512487957747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=114806512487957747&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/114806512487957747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/114806512487957747'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2006/05/fast-refreshing-materialized-view.html' title='Fast Refreshing a Materialized View'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-114591743603755748</id><published>2006-04-24T15:21:00.000-07:00</published><updated>2006-04-24T15:24:57.686-07:00</updated><title type='text'>Oracle 10gAS SSO UID attribute</title><content type='html'>Here is a quick tidbit on Oracle SSO for v10.1.2.0.2.  There is a new user attribute, uid, that is required for v10.1.2.0.2.  I'm not sure what version introduced it, but it was not required in 9iAS R2.  You will get a 500 Internal Server Error if you attempt an SSO login with a OID user account that does not have a UID attribute.&lt;br /&gt;&lt;br /&gt;I'll try to get a full upgrade plan from 9i R2 Portal to 10gAS v10.1.2.0.2 shortly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-114591743603755748?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/114591743603755748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=114591743603755748&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/114591743603755748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/114591743603755748'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2006/04/oracle-10gas-sso-uid-attribute.html' title='Oracle 10gAS SSO UID attribute'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24686153.post-114323545790482452</id><published>2006-03-24T13:21:00.000-08:00</published><updated>2006-04-24T15:11:32.863-07:00</updated><title type='text'>Time to Start</title><content type='html'>Wow.  I can't believe it has taken me this long to join the blogging fray, but here I am.  Of course, I've had time to create the blog site, but that's all the time I have at the moment.  More soon . . .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24686153-114323545790482452?l=c2anton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://c2anton.blogspot.com/feeds/114323545790482452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24686153&amp;postID=114323545790482452&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/114323545790482452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24686153/posts/default/114323545790482452'/><link rel='alternate' type='text/html' href='http://c2anton.blogspot.com/2006/03/time-to-start.html' title='Time to Start'/><author><name>Anton Nielsen</name><uri>http://www.blogger.com/profile/01507583135719899159</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
