<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Only Four Left... &#187; EBS</title>
	<atom:link href="http://only4left.jpiwowar.com/category/ebs/feed/" rel="self" type="application/rss+xml" />
	<link>http://only4left.jpiwowar.com</link>
	<description>Oracle stuff.  Some Linux and Mac stuff.  ALTER TABLE blog DISABLE UNIQUE (content_type);</description>
	<lastBuildDate>Thu, 02 Sep 2010 07:00:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Resolving a pesky ORA-12545 during EBS patching</title>
		<link>http://only4left.jpiwowar.com/2010/07/ora-12545-during-ebs-patching/</link>
		<comments>http://only4left.jpiwowar.com/2010/07/ora-12545-during-ebs-patching/#comments</comments>
		<pubDate>Sat, 24 Jul 2010 06:55:01 +0000</pubDate>
		<dc:creator>jpiwowar</dc:creator>
				<category><![CDATA[EBS]]></category>
		<category><![CDATA[11i]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[patching]]></category>
		<category><![CDATA[troubleshooting]]></category>

		<guid isPermaLink="false">http://only4left.jpiwowar.com/2010/07/ora-12545-during-ebs-patching/</guid>
		<description><![CDATA[<p>Don't you just love it when random networking errors spice up an otherwise routine large EBS patching run?</p>
<p>Yeah, me neither.</p>
]]></description>
			<content:encoded><![CDATA[<p>I'm working with a client for the next few weeks to help them meet baseline patching requirements for <a href="https://supporthtml.oracle.com/ep/faces/secure/km/DocumentDisplay.jspx?id=883202.1" title="Minimum Baseline Patch Requirements for Extended Support on Oracle E-Business Suite 11.5.10">EBS 11i Extended Support</a>. You know what that means:</p>
<ol>
<li>A bazillion browser tabs</li>
<li>An SR or two</li>
<li>Piles of patch READMEs</li>
<li>Resolving prerequisites until your eyes cross</li>
<li>Memorizing individual patch numbers, whether you like it or not</li>
<li>The reward for all the hard research work: "15 jobs running, 235 ready to run, and 50682 waiting."</li>
<li>Sporadic ORA-12545 errors in the adworker logs</li>
</ol>
<p>Yeah, okay, #7 caught me a bit by surprise, too. The really tricky bit was that the worker wouldn't usually be marked as "Failed" when it received an ORA-12545. Instead, it would stay in a "Running" state, and eventually the entire patch session would go idle, until I manually restarted the errored worker. There is no shortage of <a href="https://supporthtml.oracle.com/ep/faces/secure/km/DocumentDisplay.jspx?id=553328.1" title="My Oracle Support Note 553328.1: Troubleshooting ORA-12545 / TNS-12545 Connect failed because target host or object does not exist ">troubleshooting notes for ORA-12545</a>, but the essential condition is that the client cannot resolve the hostname of the database server. Considering how sporadic the errors were, this was more than a bit strange. So we tested client connectivity using the various permutations of the EBS database hostnames, verified that there wasn't any <a href="https://supporthtml.oracle.com/ep/faces/secure/km/DocumentDisplay.jspx?id=975457.1" title="My Oracle Support Note 975457.1: How to Troubleshoot Connectivity Issue with 11gR2 SCAN Name ">weirdness in the RAC listener setup</a>, and still the problems persisted.</p>
<p>At a high level, it's always disturbing to have sporadic network wonkiness. More practically, it wasn't very much fun to contemplate writing production patching instructions that read, "Babysit the adpatch session very closely. Manually restart any workers that fail with ORA-12545." (I could also note that it's not very much fun to have a multi-hour patch test run grind to a halt 10 minutes after leaving the office for the day, but that would be whining, so I won't do that). I was just starting to consider running SQLNet traces to try to capture more information about this 1-in-1000 chance error condition, when one of the client's DBAs mentioned that the test systems and the DNS server were in separate data centers, connected over a WAN.</p>
<p>Rather than suggesting that we march over to the network admins and claim that DNS requests were being dropped on the floor (what a great way to make new friends!), and lacking the time to put together an easily-reproducible test to back up such a claim, I recommended adding the hostnames and IPs of the database servers to the apps tier's /etc/hosts file. All subsequent patch runs were free of ORA-12545 errors, which left me free to concentrate on other, more interesting errors. I'm not a big fan of solution-by-assumption, but in this case I was able to carry the work forward, and the investigation into potential DNS problems can wait for a quieter time.</p>
]]></content:encoded>
			<wfw:commentRss>http://only4left.jpiwowar.com/2010/07/ora-12545-during-ebs-patching/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weekend mumblings: Oracle and VMware</title>
		<link>http://only4left.jpiwowar.com/2010/06/weekend-mumblings-oracle-and-vmware/</link>
		<comments>http://only4left.jpiwowar.com/2010/06/weekend-mumblings-oracle-and-vmware/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 07:13:01 +0000</pubDate>
		<dc:creator>jpiwowar</dc:creator>
				<category><![CDATA[EBS]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[references]]></category>
		<category><![CDATA[VMware]]></category>

		<guid isPermaLink="false">http://only4left.jpiwowar.com/2010/06/weekend-mumblings-oracle-and-vmware/</guid>
		<description><![CDATA[<p>Rambling about Oracle and VMware. I don't do "opinion pieces" very often, and after reading this, you'll better understand why. ;-)</p>
]]></description>
			<content:encoded><![CDATA[<p>I’ve had VMware and Oracle on my mind recently, probably for three reasons:</p>
<ol>
<li>In the last week or so, I’ve been involved in a two discussions about the viability/supportability of Oracle E-Business Suite on VMware, one on <a href="http://www.oraclecommunity.net/forum/topics/ebusiness-suite-vmware" title="Eddie Awad's independent Oracle Community on Ning">OracleCommunity.net</a>, and the other on <a href="http://www.linkedin.com/groupItem?view=&amp;gid=60191&amp;type=member&amp;item=22872516&amp;qid=981a0f92-e198-433f-9a29-9c629856e230&amp;goback=.gna_60191" title="recruiters, the unemployed, and occasional useful content">LinkedIn</a>.</li>
<li>The <a href="http://ioug.org" title="Independent Oracle Users Group">IOUG</a> recently sent out a VMware-sponsored email entitled, “Why Oracle DBAs should care about virtualization.”</li>
<li>I am an unreformed, unrepentant nerd.</li>
</ol>
<p>So, if you're up for some lazy Saturday evening musings about Oracle and VMware, keep reading. I’ll try not to ramble <i>too</i> much.</p>
<h3 id="fud">FUD or misinterpretation? The difference between “supported” and “certified”</h3>
<p>The crux of the recent online discussions in which I participated was the age-old question: Will Oracle support customers running on VMware, or not? The confusion arises from a My Oracle Support note stating Oracle’s position on the topic: <a href="https://supporthtml.oracle.com/ep/faces/secure/km/DocumentDisplay.jspx?id=249212.1">Support Position for Oracle Products Running on VMWare Virtualized Environments (Doc ID 249212.1)</a>. If read too quickly, or too conservatively, it’s possible to conclude that Oracle won’t provide full support for its products in a VMware environment. Coupled with the knowledge that Oracle offers its own virtualization product, <a href="http://www.oracle.com/us/technologies/virtualization/oraclevm/index.html" title="Oracle VM">Oracle VM</a>, that it <i>does</i> fully certify and support, it’s easy to see where Oracle customers might think twice about considering VMware as a virtualization platform.</p>
<p>It’s important to remember, however, that when it comes to Oracle products, there’s a big difference between certification and support. <i>Certification</i> of Oracle software on specific hardware platforms, for example, is pretty much out of scope for Oracle Support, and VMware is, in effect, providing a virtual hardware platform upon which to run your systems. The My Oracle Support note referenced above actually spells out pretty clearly how Oracle will <i>support</i> you if you’re running on VMware. What the note effectively states is, “If the reported issue looks like a problem with our software, we will support you. If your issue looks like it’s related to VMware, we’re going to send you to VMware for resolution.” While it might seem like this is a less-than-usual level of support, it’s actually entirely fair. If your problem could be traced to the OS, after all, you could expect to be referred to the OS vendor. Similarly, if the conclusion were that you had hardware problems, you could expect to be sent to your hardware vendor.</p>
<p>Incidentally, this illustrates a core benefit of the Oracle-OEL/Solaris-Oracle-VM technology stack: if you have issues that require intervention from Oracle Support, whether they’re with software, hardware, or virtualization layer, there’s no concern that you’ll be left playing “vendor volleyball.” Your issues will be handled entirely by Oracle, and there won’t <i>ever</i> be any finger-pointing between the various product support teams, because everyone is living in peace and harmony. *ahem* <img src='http://only4left.jpiwowar.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Bottom line: Currently, yes, you’ll be supported if you run your Oracle environment in VMware. Unless your problem turns out to be VMware-related, in which case you probably want VMware’s help anyway.</p>
<h3 id="prod">That’s great and all, but does it work, particularly in production?</h3>
<p>DIsclosure time: I’ve had my doubts in the past about the viability of VMware for production E-Business Suite environments, as noted here in a comment <a href="http://blogs.oracle.com/stevenChan/2006/08/virtualization_ebusiness_suite.html#comment-5681" title="Darn it, the Internet remembers *everything*">on Steven Chan’s blog</a>. I’m just one guy, though. VMware’s products have matured since then, and some of the problems I alluded to were not strictly VMware issues. Even back then (2005-2006), though, I was comfortable running Grid Control and some production Oracle Collaboration Suite application tiers in VMware. From what I’ve read, things have only gotten better with VMware vSphere.</p>
<p>It’s worth noting that VMware itself runs Oracle products, including E-Business Suite, in a <a href="http://www.vmware.com/solutions/partners/alliances/oracle-vmware-support.html" title="+1 for eating own dog food. Om nom nom...">VMware virtualization environment</a>. They also have a list of <a href="http://www.vmware.com/solutions/partners/alliances/oracle-applications-customers.html" title="testimonials">customer references</a> on their web site; if you elect to use VMware in your production Oracle environment, you won’t be in uncharted waters. If you’d like to read about the experiences of an Oracle customer running on VMware without the marketing filter of the vendor’s website, I recommend reading <a href="http://weinshenker.net/blog/" title="Technology Defenestration">Jay Weinshenker’s blog</a>. That’s twice I’ve linked to him in two blog posts, but I’m not digitally stalking him, I swear. He just writes interesting stuff. <img src='http://only4left.jpiwowar.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  I’ll probably link to him one more time before I’m done here.</p>
<h3 id="orclvm">Why not just use Oracle VM?</h3>
<p>I have far more experience with VMware than I do with Oracle VM, so it shouldn’t be surprising that I present as a VMware <a href="http://www.urbandictionary.com/define.php?term=fanboy" title="when nerds say, at least I'm not as bad as *that* guy">fanboy</a>. Oracle has made a clear commitment to the virtualization space, however, and has put together an attractive package to support it. Oracle VM might be a good fit for you, particularly if you:</p>
<ul>
<li>are interested primarily in virtualizing Oracle products (note: Oracle VM can be used for non-Oracle virtualization needs as well)</li>
<li>haven’t already made an investment in VMware in other parts of your IT infrastructure.</li>
<li>prefer having just one vendor to flog when things go wrong. <img src='http://only4left.jpiwowar.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<h3 id="ref">References/Additional reading</h3>
<p>As if I haven’t packed enough links into this post, here are a few more:</p>
<ul>
<li>Apparently Oracle and VMware were on others’ minds this weekend, because while I composed this post, I saw a tweet referencing a VMware article, “<a href="http://blogs.vmware.com/oracle/2010/06/yes-you-really-can-run-tier1-enterprise-applications-on-vsphere.html">Yes, You Really *Can* Run Tier-1 Enterprise Applications on vSphere</a>.</li>
<li>Jay Weinshenker (told you I’d link him again) has written about <a href="http://weinshenker.net/blog/2010/06/13/why-run-oracle-e-business-on-vsphere/">reasons to run Oracle on VMware vSphere</a>, and has discussed the Oracle <a href="http://weinshenker.net/blog/2010/05/28/oracle-licensing-under-vmware-and-how-to-get-the-best-bang-for-your-buck/">license savings that can be achieved</a> with a carefully laid-out VMware cluster.</li>
<li>The <a href="http://www.oracle.com/us/technologies/virtualization/oraclevm/index.html" title="Oracle VM">Oracle VM</a> page on OTN links to a lot of technical and marketing material about Oracle’s virtualization product.</li>
<li>Steven Chan and his team have blogged several times about virtualization in the context of Oracle E-Business Suite, including posts on <a href="http://blogs.oracle.com/stevenChan/2009/04/ebs_support_policies_for_virtualization_technologies.html">Support Policies for Virtualization Technologies and Oracle E-Business Suite</a> and <a href="http://blogs.oracle.com/stevenChan/2009/12/oracle_vm_ebs_virtualization_kit.html">Using Oracle VM with Oracle E-Business Suite Virtualization Kit</a>. The “Virtualization” listing of the blog’s <a href="http://blogs.oracle.com/stevenChan/concepts.html">Concepts</a> section has more.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://only4left.jpiwowar.com/2010/06/weekend-mumblings-oracle-and-vmware/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Small change to GL_SECURITY_PKG in EBS 12.1.2</title>
		<link>http://only4left.jpiwowar.com/2010/06/change-to-gl_security_pkg-in-r1212/</link>
		<comments>http://only4left.jpiwowar.com/2010/06/change-to-gl_security_pkg-in-r1212/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 16:09:23 +0000</pubDate>
		<dc:creator>jpiwowar</dc:creator>
				<category><![CDATA[EBS]]></category>
		<category><![CDATA[R12]]></category>

		<guid isPermaLink="false">http://only4left.jpiwowar.com/2010/06/change-to-gl_security_pkg-in-r1212/</guid>
		<description><![CDATA[<p>A change to the package definition of GL_SECURITY_PKG in E-Business Suite Release 12.1.2 may result in unexpected behavior when the package is called from a non-APPS schema.</p>
]]></description>
			<content:encoded><![CDATA[<p>After a recent upgrade to Oracle Applications 12.1.2, a client started experiencing problems with Discoverer reports.  These reports were based on views in a custom schema that use APPS.GL_SECURITY_PKG.VALIDATE_ACCESS to restrict the returned data set.  Despite no known changes to the reports or associated permissions, reports were terminating with the following error:</p>
<pre class="brush: plain;">
ORA-00942: table or view does not exist
ORA-06512: at &quot;APPS.GL_SECURITY_PKG&quot;, line 1427
</pre>
<p>Line 1427 of GL_SECURITY_PKG starts a query against table owned by APPS to which the custom schema did not have access.  While this section of the code had not changed between the original system and the upgraded one, one thing that had changed was the package header.</p>
<p>Here's the header from the original package:</p>
<pre class="brush: sql;">SQL&gt; select line
  2       , text
  3    from all_source
  4   where owner = 'APPS'
  5     and name = 'GL_SECURITY_PKG'
  6     and type = 'PACKAGE'
  7     and line &lt;= 2
  8   order by line asc
  9  /

      LINE TEXT
---------- --------------------------------------------------------------------------------
	 1 PACKAGE gl_security_pkg AS
	 2 /* $Header: gluoases.pls 120.10.12000000.1 2007/01/16 22:31:44 appldev ship $ */
</pre>
<p>And on the upgraded system:</p>
<pre class="brush: sql;">
      LINE TEXT
---------- --------------------------------------------------------------------------------
	 1 PACKAGE gl_security_pkg AUTHID CURRENT_USER AS
	 2 /* $Header: gluoases.pls 120.10.12000000.1 2007/01/16 22:31:44 appldev ship $ */
</pre>
<p>Somehow, the GL_SECURITY_PKG was recompiled with invoker's rights (CURRENT_USER) instead of the default DEFINER rights.  This explains why the custom schema was suddenly unable to access the APPS-owned tables without explicit permission to read the tables.  </p>
<p>It may be that someone manually compiled this package with AUTHID CURRENT_USER, but it seems more likely that this was done during patching.  The short-term "band-aid" fix here is to grant read permission to the custom schema on the tables  referenced in APPS.GL_SECURITY_PKG.  The longer-term solution, currently underway, is to engage with Oracle Support to determine how or why this package was recompiled with the AUTHID CURRENT_USER property, and learn if there is new guidance regarding the use of this package.  </p>
]]></content:encoded>
			<wfw:commentRss>http://only4left.jpiwowar.com/2010/06/change-to-gl_security_pkg-in-r1212/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EBS R12 nugget: The difference between adopmnctl.sh and opmnctl</title>
		<link>http://only4left.jpiwowar.com/2010/05/r12-adopmnctl-vs-opmnctl/</link>
		<comments>http://only4left.jpiwowar.com/2010/05/r12-adopmnctl-vs-opmnctl/#comments</comments>
		<pubDate>Sun, 23 May 2010 18:15:08 +0000</pubDate>
		<dc:creator>jpiwowar</dc:creator>
				<category><![CDATA[EBS]]></category>
		<category><![CDATA[R12]]></category>

		<guid isPermaLink="false">http://only4left.jpiwowar.com/2010/05/e12-adopmnctl-vs-opmnctl/</guid>
		<description><![CDATA[An illustration of the difference between running opmnctl and adopmnctl.sh in EBS R12]]></description>
			<content:encoded><![CDATA[<p>This post takes its inspiration from a recent <a href="http://forums.oracle.com/forums/message.jspa?messageID=4315859#4315859" title="R12 opmnctl error">OTN forum thread</a> about problems with E-Business Suite R12 web services, but it's not an attempt to resolve the root cause of that thread -- lots of other people had already chimed in to help by the time I got there. One thing that was going on in the thread as part of the troubleshooting, however, was an attempt to start web services using the generic 10gAS <code>opmnctl</code> script, instead of the R12-specific <code>adopmnctl.sh</code> script. This might not seem like such a bad idea on the surface, since adopmnctl.sh is "just" a wrapper script that calls opmnctl, and the latter script is very familiar to admins who have worked with Oracle Application Server components. But take a look at the difference in the behavior of the two scripts, even when R12 web services are down:</p>
<pre class="brush: plain;">
[applvis@londo ~]$ adopmnctl.sh status

You are running adopmnctl.sh version 120.6

Checking status of OPMN managed processes...
Unable to connect to opmn.
Opmn may not be up.

adopmnctl.sh: exiting with status 0

adopmnctl.sh: check the logfile /u01/ebs/R12VIS/inst/apps/R12VIS_londo/logs/appl/admin/log/adopmnctl.txt for more information ...  

[applvis@londo ~]$ opmnctl status
Error reading opmn.xml
Message:{/u01/ebs/R12VIS/inst/apps/R12VIS_londo/ora/10.1.2/opmn/conf/opmn.xml (No such file or directory)}
Filename:{/u01/ebs/R12VIS/inst/apps/R12VIS_londo/ora/10.1.2/opmn/conf/opmn.xml}
FileContent:{}
</pre>
<p><i>(Disclosure: I added opmnctl to my PATH for ease of reading/typing; it's not there by default in the applmgr environment)</i></p>
<p>What's causing the difference?  The opmnctl script uses the value of the ORACLE_CONFIG_HOME environment variable to set the ONS (Oracle Notification Service) home, and if that environment variable isn't set correctly, then opmnctl will look in the wrong place for the opmn.xml file, resulting in the error displayed above.  The default value of ORACLE_CONFIG_HOME in the apps tier environment is the 10.1.2 configuration directory, but in order to function properly, opmnctl needs to see the 10.1.3 ORACLE_CONFIG_HOME.  Here's an illustration:</p>
<p>First, the default value of ORACLE_CONFIG_HOME:</p>
<pre class="brush: plain; highlight: [2];">
[applvis@londo ~]$ echo $ORACLE_CONFIG_HOME
/u01/ebs/R12VIS/inst/apps/R12VIS_londo/ora/10.1.2
</pre>
</p>
<p>Then, in the opmnctl script, see that the value of oracle.ons.oraclehome is set based on the value of ORACLE_CONFIG_HOME. If you call it directly from the apps environment, that will make it point to the 10.1.2 config directory, as shown by these lines in the opmnctl script (I've highlighted the relevant parts):</p>
<pre class="brush: bash; highlight: [1,2,3,7,12,13,14];">
if [ -n &quot;$ORACLE_CONFIG_HOME&quot; ]
then
MODIFIED_ORA_CONFIG_HOME=&quot;`echo $ORACLE_CONFIG_HOME | tr -d &quot;[:space:]&quot;`&quot;
else
MODIFIED_ORA_CONFIG_HOME=&quot;&quot;
fi
if [ -z &quot;$MODIFIED_ORA_CONFIG_HOME&quot; ]
then
$JAVA -classpath $ARGUS_JAR:$OPTIC_JAR \
-Doracle.ons.oraclehome=$ORACLE_HOME \
oracle.ias.opmn.argus.Argus -help
else
$JAVA -classpath $ARGUS_JAR:$OPTIC_JAR \
-Doracle.ons.oraclehome=$MODIFIED_ORA_CONFIG_HOME \
oracle.ias.opmn.argus.Argus -help
fi
</pre>
</p>
<p>If you run adopmnctl.sh instead, ORACLE_CONFIG_HOME gets set to the 10.1.3 config directory, as it should be, and that is the value that gets passed to the opmnctl script:</p>
<pre class="brush: plain; highlight: [3,8];">
[applvis@londo ~]$ grep ORAENV_FILE `which adopmnctl.sh`
# Set ORAENV_FILE to 10.1.3 Oracle Home Environment File
ORAENV_FILE=&quot;/u01/ebs/R12VIS/inst/apps/R12VIS_londo/ora/10.1.3/R12VIS_londo.env&quot;
# Check the existence of ORAENV_FILE
if [ ! -f &quot;$ORAENV_FILE&quot; ];
. $ORAENV_FILE
[applvis@londo ~]$ grep ORACLE_CONFIG_HOME= /u01/ebs/R12VIS/inst/apps/R12VIS_londo/ora/10.1.3/R12VIS_londo.env
ORACLE_CONFIG_HOME=&quot;/u01/ebs/R12VIS/inst/apps/R12VIS_londo/ora/10.1.3&quot;
</pre>
</p>
<p>
Please note that the takeaway from all of this is <b>NOT</b> "manually change the value of ORACLE_CONFIG_HOME to run opmnctl."  The takeaway is that running adopmnctl.sh is not the equivalent to running opmnctl, and that you can expect strange behavior if you try start R12 web services without using adopmnctl.sh.  Whenever possible, use the tools provided as they're intended to be used.</p>
]]></content:encoded>
			<wfw:commentRss>http://only4left.jpiwowar.com/2010/05/r12-adopmnctl-vs-opmnctl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Old PLAN_TABLE in EBS Vision</title>
		<link>http://only4left.jpiwowar.com/2010/05/old-plan_table-in-ebs-vision/</link>
		<comments>http://only4left.jpiwowar.com/2010/05/old-plan_table-in-ebs-vision/#comments</comments>
		<pubDate>Sat, 22 May 2010 05:50:46 +0000</pubDate>
		<dc:creator>jpiwowar</dc:creator>
				<category><![CDATA[EBS]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[R12]]></category>
		<category><![CDATA[Vision]]></category>

		<guid isPermaLink="false">http://only4left.jpiwowar.com/2010/05/old-plan_table-in-ebs-vision/</guid>
		<description><![CDATA[<p>I went digging into a problem with EXPLAIN PLAN in and R12 Vision instance, and dug deep enough to find an antique.</p>
]]></description>
			<content:encoded><![CDATA[<p>While attempting to generate an explain plan in an R12 Vision database, I instead generated the following error:</p>
<pre class="brush: sql;">
APPS@R12VIS(11.1.0.7)&gt;set autotrace traceonly explain
APPS@R12VIS(11.1.0.7)&gt;select count(*) from DUAL;

Execution Plan
----------------------------------------------------------
ERROR: an uncaught error in function display has happened; please contact Oracle support
       Please provide also a DMP file of the used plan table PLAN_TABLE
       ORA-00904: &quot;OTHER_TAG&quot;: invalid identifier
</pre>
<p>Well, okay, I wasn't really querying the DUAL table, but it makes the example shorter. Since this was only happening when I was connected as the APPS user, I suspected a private PLAN_TABLE had been created for APPS, and sure enough:</p>
<pre class="brush: sql;">
APPS@r12vis(11.1.0.7)&gt;select owner
  2  , object_name
  3  , object_type
  4  from dba_objects
  5  where object_name like 'PLAN_TABLE%';

OWNER		OBJECT_NAME		       OBJECT_TYPE
--------------- ------------------------------ --------------------
SYS		PLAN_TABLE$		       TABLE
PUBLIC		PLAN_TABLE		       SYNONYM
APPS		PLAN_TABLE		       TABLE
</pre>
<p>It's not too unusual to have a private PLAN_TABLE in a schema, even in a post-9i database. Oracle has definitely kept utlxplan.sql up to date in 11g. What <b>was</b> surprising to me was the structure of the table:</p>
<pre class="brush: sql;">
APPS@r12vis(11.1.0.7)&gt;desc plan_table;
 Name								   Null?    Type
 ----------------------------------------------------------------- -------- --------------------------------------------
 STATEMENT_ID								    VARCHAR2(30)
 TIMESTAMP								    DATE
 REMARKS								    VARCHAR2(80)
 OPERATION								    VARCHAR2(30)
 OPTIONS								    VARCHAR2(30)
 OBJECT_NODE								    VARCHAR2(128)
 OBJECT_OWNER								    VARCHAR2(30)
 OBJECT_NAME								    VARCHAR2(30)
 OBJECT_INSTANCE							    NUMBER(38)
 OBJECT_TYPE								    VARCHAR2(30)
 SEARCH_COLUMNS 							    NUMBER(38)
 ID									    NUMBER(38)
 PARENT_ID								    NUMBER(38)
 POSITION								    NUMBER(38)
 OTHER									    LONG
</pre>
<p>There are a <b>lot</b> of fields missing from that table. A quick reference check reveals that this is not a 9i version of the PLAN_TABLE, not even an <a href="http://download.oracle.com/docs/cd/F49540_01/DOC/server.815/a67775/ch13_exp.htm#4952">8i version</a>, but a <a href="http://download.oracle.com/docs/cd/A57673_01/DOC/server/doc/SRF73/ch2a.htm#index0924">vintage Oracle 7.3 PLAN_TABLE</a>. This is actually pretty cool, since it implies that Oracle's been <a href="http://en.wikipedia.org/wiki/Eating_your_own_dog_food">eating its own dog food</a> with respect to upgrading its demo instance. The Vision database clearly has a long and storied history. <img src='http://only4left.jpiwowar.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>The solution to my original problem, of course, is to just drop the old plan table. If you'd rather keep a static PLAN_TABLE around for the APPS schema, it's still a good idea to drop it and recreate it with the 11g utlxplan.sql.</p>
]]></content:encoded>
			<wfw:commentRss>http://only4left.jpiwowar.com/2010/05/old-plan_table-in-ebs-vision/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An overview of merging patches in E-Business Suite</title>
		<link>http://only4left.jpiwowar.com/2010/04/overview_merge_ebs_patch/</link>
		<comments>http://only4left.jpiwowar.com/2010/04/overview_merge_ebs_patch/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 04:36:56 +0000</pubDate>
		<dc:creator>jpiwowar</dc:creator>
				<category><![CDATA[EBS]]></category>
		<category><![CDATA[patching]]></category>

		<guid isPermaLink="false">http://only4left.jpiwowar.com/2010/04/overview_merge_ebs_patch/</guid>
		<description><![CDATA[<p>A quick overview of what happens when individual E-Business Suite patches are merged with admrgpch.</p>
]]></description>
			<content:encoded><![CDATA[<p>A few days ago, a poster on the OTN forums <a href="http://forums.oracle.com/forums/thread.jspa?threadID=1062797">asked a question about merged patches in EBS</a>, wondering if it was possible to identify which individual patches in a merged patch had failed. The short answer, as explained in the thread, is, "no, merged patches don't work that way."</p>
<p>In nutshell, here is what the Oracle Applications patch merge utility, admrgpch, does:</p>
<ol>
<li>Reads through the drivers of each patch to be merged</li>
<li>Checks the version of each file within the patch to determine if it should be included in the merged patch</li>
<li>Copies the appropriate files to the new merged patch destination directory</li>
<li>Generates a new patch driver that encompasses all of the actions for the individual patches. This driver will be u_<i>merge_name</i>.drv, where <i>merge_name</i> is supplied as an argument to admrgpch. If you elect not to specify a value for <i>merge_name</i>, the default is "merged," which is both boring and potentially confusing to you if you perform multiple merges over the lifetime of your EBS instance.</li>
</ol>
<p>You can watch these steps unfold for yourself by using the verbose flag when running admrgpch. The default level, 1 (QUIET), is kind of dull, but level 3 (LOUD) can be instructive. In particular, you'll see the decisions made in the course of comparing file versions:</p>
<ul>
<li>"File does not exist in the merged patch, adding...." - new file found</li>
<li>"Versions Same" - no need to add this file to the merge, as it was found in an earlier patch</li>
<li>"Replacing old entry with new one." -- Current file has a newer revision</li>
<li>Presumably, there's also a message for "this version is older than the one in the merge", but my test run didn't include that condition.</li>
</ul>
<p>Merging patches saves time in two ways. First, since the result of the process is a single new patch, there is no need to run multiple patching sessions. Second, the merged patch will often do less work than applying patches in series, since multiples versions of files are culled, and only the highest version of a given file is applied. Consider the following example, from a merged set of arbitrarily selected patches. This file exists in multiple individual patches, with different versions.</p>
<pre class="brush: plain;">
zathras: jpiwowar$ find unmerged -name zxifsrvctypspkgb.pls | xargs grep '$Header' | cut -f4 -d\

120.246.12010000.19
120.246.12010000.9
120.246.12010000.27
120.246.12010000.19
120.246.12010000.45
120.246.12010000.28</pre>
<p>If I were to apply each patch individually, adpatch could have to process that PL/SQL file up to 6 times. Perhaps that doesn't seem like a big deal, but there are sure to be similar situations for other files, and that can add up to a significant amount of extra work for large groups of patches. Of course, I could also have the good fortune to apply the patch with the highest version of the file first, and therefore only process that .pls file once, but how often does that ever happen? <img src='http://only4left.jpiwowar.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  In contrast, by creating a merged patch, earlier versions of the file are discarded in favor of the highest version:</p>
<pre class="brush: plain;">
zathras:ZX jpiwowar$ find merged_patches -name zxifsrvctypspkgb.pls | xargs grep '$Header' | cut -f4 -d\

120.246.12010000.45</pre>
<p>Incidentally, while it may look like the transcription of a stifled sneeze, or the name of an Icelandic volcano, that's actually a real filename.</p>
<p>A final, slightly repetitive point: The result of the patch merging process is a new, single patch. The driver file for the merged patch will indicate that the patch is merged, but the only time this information matters is when the AD_BUGS and AD_APPLIED_PATCHES tables are populated at the end of the adpatch session. When adpatch is running, there are no indications of the source of the individual files being processed. There aren't any intermediate steps wherein adpatch records the completion of individual patches, because there aren't individual patches anymore.</p>
<p>Even though the individual patches have lost their identities during the merge, it is still possible to retrieve information about the bug fixes themselves by joining ad_applied_patches, ad_comprising_patches, ad_patch_drivers, and ad_bugs. Here's a query that associates a merged patch with its individual bug fixes. If you're not in the habit of giving your merged patches unique names, then you'll need to modify the query to use <code>ad_applied_patches.applied_patch_id</code> rather than <code>patch_name</code>. When reviewing the results of the query, remember that patch numbers <b>often</b>, but not <b>always</b>, correspond to bug numbers.</p>
<pre class="brush: sql; toolbar: true;">
select ap.patch_name
     , ad.orig_patch_name
     , ad.driver_file_name
     , ad.merged_driver_flag
     , ad.merge_date
     , bug.bug_number
     , cp.patch_abstract
  from ad_applied_patches ap
  join ad_patch_drivers ad using (applied_patch_id)
  join ad_comprising_patches cp using (patch_driver_id)
  join ad_bugs bug using (bug_id)
 where ap.patch_name = '&amp;merge_name'
</pre>
]]></content:encoded>
			<wfw:commentRss>http://only4left.jpiwowar.com/2010/04/overview_merge_ebs_patch/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A sampling of R12 AOL and database object changes</title>
		<link>http://only4left.jpiwowar.com/2010/03/r12-aol-and-db-object-changes/</link>
		<comments>http://only4left.jpiwowar.com/2010/03/r12-aol-and-db-object-changes/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 21:18:26 +0000</pubDate>
		<dc:creator>jpiwowar</dc:creator>
				<category><![CDATA[EBS]]></category>
		<category><![CDATA[R12]]></category>
		<category><![CDATA[R12 upgrade]]></category>
		<category><![CDATA[references]]></category>

		<guid isPermaLink="false">http://only4left.jpiwowar.com/?p=173</guid>
		<description><![CDATA[A high-level summary of changes to EBS database objects and AOL entities after an upgrade from 11i to R12.]]></description>
			<content:encoded><![CDATA[<p>From time to time, a post appears in the OTN E-Business Suite Forums of the following form:</p>
<blockquote><p>
  We are planning our upgrade to R12, and need to know how many new tables/forms/views/etc there are in the new version. Where are the documents that list these changes?
</p></blockquote>
<p>In these cases, forum posters are usually directed (quite appropriately) to review the upgrade manuals and Release Content documents for R12, which probably contain pieces of the answer to the question. To the best of my knowledge, however, there is no comprehensive, monolithic list of schema changes that occur in the course of an R12 upgrade. One significant reason is the resource burden involved in maintaining a such a list. The upgrade process has so many start and end points. Are you upgrading from 11.0.x? 11.5.8? 11.5.10? Which family packs and CUs are applied? Are you upgrading to to 12.0.6? 12.1.1? 12.1.2? Keeping track of all of those permutations, while perhaps possible, would accomplish little beyond crushing the spirit of a small army of interns.</p>
<h3 id="question">This is not the question we're looking for; you can go about your business...</h3>
<p>An even bigger reason to not be concerned about the number of schema changes in the R12 upgrade: it doesn't seem to be particularly useful information. I can't think of any "effort estimate" metric that would benefit from know knowing the number of new tables, forms, etc. that have been changed, added, or removed. Even knowing that specific tables and forms have disappeared or changed isn't very helpful.  After all, you're going to be running thorough tests of any custom reports and forms, anyway, as well as testing to see what common user activities are impacted by the upgrade.  Right?  (Please say, "right!") We found out pretty quickly, for example, that there were some tables used by our custom reports that had been emptied; the data had been moved to another schema, and our custom reports returned no rows.  Good times, and a simple "does this table still exist in R12?" test would not have caught that new feature.</p>
<p>After such a long setup, you must know where this is going.  During a long ago (2007-2008) R12 upgrade project, I actually ran some queries comparing the contents of a few key tables (ALL_OBJECTS, FND_APPLICATION, etc) before and after the upgrade. I'll present the results of those queries below.  Perhaps someone can find some use for them that I was unable to divine.</p>
<h3 id="disclaimers">Data of dubious utility</h3>
<p>Anyone who's read more than two posts here knows that I disclaim like there's no tomorrow. This post is no different:</p>
<ul>
<li>The data presented is for an 11.5.10.2 system upgraded to 12.0.3. Your mileage <b>will</b> vary, because no one's upgrading to 12.0.3 these days.  At least, I hope not.
</li>
<li>This data is based on notes and SQLPLUS spool files that are over 2 years old by now, which is not exactly "fresh." Since I no longer have the source data, I can't even do a useful sanity check to be sure I extracted it all correctly. Where possible (i.e. salvageable from my logs), I have included the text of my queries, primarily so readers can understand how I generated the data. There is no doubt substantial room for improvement. Many of the queries are slapdash jobs, since I was just doing informal research. Nonetheless, I believe in showing my work, even if it's sometimes embarrassing. <img src='http://only4left.jpiwowar.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>If you read Oracle documentation that contradicts anything that you see here, you should definitely trust those docs. Furthermore, if your own investigations contradict what you see here, you should trust your own work. <img src='http://only4left.jpiwowar.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<h3 id="listlinks">Categories</h3>
<p>After all of that, if you're still on board, follow the links below to jump to the relevant sections. If you get any interesting nuggets out of these lists, then I'm glad I could help. Otherwise, you could just summarize the answer to the "how many changes" question as, "Whoa, lots." <img src='http://only4left.jpiwowar.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="#apps">Applications</a><br />
<a href="#conc">Concurrent Programs</a><br />
<a href="#forms">Forms</a><br />
<a href="#prof">Profile Options</a><br />
<a href="#db">Database Objects</a>
</p>
<h3 id="apps">Applications</h3>
<p>The following tables summarize the number of new and removed applications, as well as an attempt at listing the applications that are marked obsolete, but not actually removed. The major assumption is that the application_id does not change between versions, though I didn't do much to confirm that assumption. The absence of a "removed" table suggests that I didn't find any deleted application_ids, but I don't rule out the possibility that I was just lazy. <img src='http://only4left.jpiwowar.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><b>New applications</b></p>
<pre class="brush: sql;">SQL&gt;select application_short_name
 2       , application_name
 3    from r12_application_tl r12 join r12_application using (application_id)
 4   where application_id not in
 5                        (
 6                         select application_id
 7                           from r11_application r11
 8                        )
 9   order by 1
10  /
</pre>
<table>
<tr>
<th>
APPLICATION_SHORT_NAME
</th>
<th>
APPLICATION_NAME
</th>
</tr>
<tr>
<td>CDR</td>
<td>Oracle Clinical Data Repository</td>
</tr>
<tr>
<td>CLA</td>
<td>APAC Consulting Localizations</td>
</tr>
<tr>
<td>CLE</td>
<td>EMEA Consulting Localizations</td>
</tr>
<tr>
<td>CLJ</td>
<td>Japan Consulting Localizations</td>
</tr>
<tr>
<td>CLL</td>
<td>LAD Consulting Localizations</td>
</tr>
<tr>
<td>CSN</td>
<td>Call Center</td>
</tr>
<tr>
<td>DEM01</td>
<td>Team 01 Order Entry Demo</td>
</tr>
<tr>
<td>DUMMY_GMO</td>
<td>Obsolete Process Operations</td>
</tr>
<tr>
<td>GMO</td>
<td>Manufacturing Execution System for Process Manufacturing</td>
</tr>
<tr>
<td>IBW</td>
<td>Oracle Web Analytics</td>
</tr>
<tr>
<td>IPM</td>
<td>Oracle Imaging Process Management</td>
</tr>
<tr>
<td>IRC</td>
<td>iRecruitment</td>
</tr>
<tr>
<td>ITA</td>
<td>Information Technology Audit</td>
</tr>
<tr>
<td>JMF</td>
<td>Supply Chain Localizations</td>
</tr>
<tr>
<td>OKC_REP_TXT_INDEX_OPTIMIZE</td>
<td>Optimize Contracts Repository Text index</td>
</tr>
<tr>
<td>OKC_REP_TXT_INDEX_SYNC</td>
<td>Build/syncronize Contracts Repository Text index</td>
</tr>
<tr>
<td>OUC</td>
<td>University Curriculum</td>
</tr>
<tr>
<td>PSR</td>
<td>Public Sector Receivables</td>
</tr>
<tr>
<td>RRC</td>
<td>Retail Core</td>
</tr>
<tr>
<td>RRS</td>
<td>Site Management</td>
</tr>
<tr>
<td>TEST</td>
<td>test</td>
</tr>
</table>
<p><b>Renamed applications</b></p>
<pre class="brush: sql;">SQL&gt;select application_short_name
 2       , r12.application_name new_name
 3       , r11.application_name old_name
 4    from r12_application_tl r12 join r12_application using (application_id)
 5         join r11_application_tl r11 using (application_id)
 6   where not regexp_like(r12.application_name,'obsolete','i')
 7     and r11.application_name &amp;lt;&amp;gt; r12.application_name
 8  /</pre>
<table>
<tr>
<th>
APPLICATION_SHORT_NAME
</th>
<th>
NEW_NAME
</th>
<th>
OLD_NAME
</th>
</tr>
<tr>
<td>ICX</td>
<td>Oracle iProcurement</td>
<td>Self-Service Web Applications</td>
</tr>
<tr>
<td>FEM</td>
<td>Enterprise Performance Foundation</td>
<td>Strategic Enterprise<br />
Management</td>
</tr>
<tr>
<td>IBY</td>
<td>Payments</td>
<td>iPayment</td>
</tr>
<tr>
<td>IGS</td>
<td>Student System</td>
<td>Student Systems</td>
</tr>
<tr>
<td>ASP</td>
<td>Oracle Sales for Handhelds</td>
<td>Field Sales/Palm Devices</td>
</tr>
<tr>
<td>CSE</td>
<td>Asset Tracking</td>
<td>Enterprise Install Base</td>
</tr>
<tr>
<td>XNB</td>
<td>Oracle Telecommunications Billing Integrator</td>
<td>eBusiness<br />
Billing</td>
</tr>
<tr>
<td>GCS</td>
<td>Financial Consolidation Hub</td>
<td>Global Consolidation System
</td>
</tr>
<tr>
<td>FPA</td>
<td>Project Portfolio Analysis</td>
<td>Portfolio Analyzer</td>
</tr>
<tr>
<td>HCP</td>
<td>Healthcare Intelligence</td>
<td>Healthcare Portal</td>
</tr>
<tr>
<td>PFT</td>
<td>Oracle Profitability Manager</td>
<td>Performance Analyzer</td>
</tr>
</table>
<p><b>Obsolete applications</b></p>
<pre class="brush: sql;">
SQL&gt;select application_short_name
 2       , application_name
 3    from r12_application_tl join r12_application using (application_id)
 4   where regexp_like(application_name,'obsolete','i')
 5   order by 1
 6  /
</pre>
<table>
<tr>
<th>
APPLICATION_SHORT_NAME
</th>
<th>
APPLICATION_NAME
</th>
</tr>
<tr>
<td>ABM</td>
<td>Activity Based Management (Obsolete)</td>
</tr>
<tr>
<td>AHM</td>
<td>Hosting Manager(Obsolete)</td>
</tr>
<tr>
<td>AMF</td>
<td>Fulfillment Services (Obsolete)</td>
</tr>
<tr>
<td>BIC</td>
<td>Customer Intelligence (obsolete)</td>
</tr>
<tr>
<td>CSS</td>
<td>Support (obsolete)</td>
</tr>
<tr>
<td>CUE</td>
<td>Billing Connect (obsolete)</td>
</tr>
<tr>
<td>CUN</td>
<td>Network Logistics - NATS (obsolete)</td>
</tr>
<tr>
<td>DUMMY_GMO</td>
<td>Obsolete Process Operations</td>
</tr>
<tr>
<td>EAA</td>
<td>SEM Exchange (obsolete)</td>
</tr>
<tr>
<td>FPT</td>
<td>Banking Center (obsolete)</td>
</tr>
<tr>
<td>IBA</td>
<td>iMarketing (Obsolete)</td>
</tr>
<tr>
<td>IMT</td>
<td>iMeeting (obsolete)</td>
</tr>
<tr>
<td>IPD</td>
<td>Product Development (obsolete)</td>
</tr>
<tr>
<td>ME</td>
<td>Controlled Availability Product(Obsolete)</td>
</tr>
<tr>
<td>OKB</td>
<td>Contracts for Subscriptions (Obsolete)</td>
</tr>
<tr>
<td>OKO</td>
<td>Contracts for Sales (Obsolete)</td>
</tr>
<tr>
<td>OKP</td>
<td>Contracts for Procurement (Obsolete)</td>
</tr>
<tr>
<td>OKR</td>
<td>Contracts for Rights (Obsolete)</td>
</tr>
<tr>
<td>OZP</td>
<td>Trade Planning (Obsolete)</td>
</tr>
<tr>
<td>OZS</td>
<td>iClaims (Obsolete)</td>
</tr>
<tr>
<td>RCM</td>
<td>Regulatory Capital Manager (obsolete)</td>
</tr>
<tr>
<td>RHX</td>
<td>Advanced Planning Foundation(obsolete)</td>
</tr>
<tr>
<td>RLA</td>
<td>Release Management Integration Kit (Obsolete)</td>
</tr>
<tr>
<td>VEH</td>
<td>Automotive Integration Kit (Obsolete)</td>
</tr>
<tr>
<td>XNC</td>
<td>Sales for Communications (Obsolete)</td>
</tr>
<tr>
<td>XNI</td>
<td>Install Base Intelligence (Obsolete)</td>
</tr>
<tr>
<td>XNM</td>
<td>Marketing for Communications (Obsolete)</td>
</tr>
<tr>
<td>XNS</td>
<td>Service for Communications (obsolete)</td>
</tr>
</table>
<h3 id="conc">Concurrent Programs</h3>
<p>In addition to new concurrent programs introduced in R12, a handful were removed, renamed, or marked obsolete.  I also generated a longer list that broke down the counts by application, and another that listed each changed concurrent program individually.  In the interest of saving space (and formatting pain), I've just offered the summary data here, followed by the query.</p>
<table>
<tr>
<th>
PROG_COUNT
</th>
<th>
PROG_STATUS
</th>
</tr>
<tr>
<td align="right">
      1587
</td>
<td>New</td>
</tr>
<tr>
<td align="right">
        31
</td>
<td>Obsolete</td>
</tr>
<tr>
<td align="right">
        87
</td>
<td>Removed</td>
</tr>
<tr>
<td align="right">
       294
</td>
<td>Renamed</td>
</tr>
</table>
<pre class="brush: sql;">SQL&gt;select count(r12c.concurrent_program_id) prog_count
  2  	 , 'New' prog_status
  3   from r12_application_tl r12a join r12_concurrent_programs r12c
  4        using (application_id)
  5  where not exists
  6  	   (
  7  	    select application_id
  8  	         , concurrent_program_id
  9  	      from r11_concurrent_programs r11c
 10  	     where r11c.application_id = application_id
 11  	       and r12c.concurrent_program_id = r11c.concurrent_program_id
 12  	    )
 13  group by 'New'
 14  union all
 15  select  count(r11c.concurrent_program_id) prog_count
 16  	  , 'Removed' Status
 17    from r11_application_tl r11a join r11_concurrent_programs r11c
 18  	    using (application_id)
 19   where not exists
 20  	    (
 21  	     select application_id
 22  		  , concurrent_program_id
 23  	       from r12_concurrent_programs r12c
 24  	      where r12c.application_id = application_id
 25  		and r11c.concurrent_program_id = r12c.concurrent_program_id
 26  	    )
 27  group by 'Removed'
 28  union all
 29  select  count(r12c.user_concurrent_program_name) prog_count
 30  	  , 'Obsolete' prog_status
 31    from r12_application_tl r12a
 32  	    join
 33  	    r12_concurrent_programs_tl r12c
 34  	    using (application_id)
 35  	    join r11_concurrent_programs_tl r11c
 36  	    using (application_id, concurrent_program_id)
 37   where regexp_like(r12c.user_concurrent_program_name,'obsolete','i')
 38  	and r12c.user_concurrent_program_name &amp;lt;&amp;gt; r11c.user_concurrent_program_name
 39  group by 'Obsolete'
 40  union all
 41  select  count(r12c.user_concurrent_program_name) prog_count
 42  	  , 'Renamed' prog_status
 43    from r12_application_tl r12a
 44  	    join
 45  	    r12_concurrent_programs_tl r12c
 46  	    using (application_id)
 47  	    join r11_concurrent_programs_tl r11c
 48  	    using (application_id, concurrent_program_id)
 49   where not regexp_like(r12c.user_concurrent_program_name,'obsolete','i')
 50  	and r12c.user_concurrent_program_name &amp;lt;&amp;gt; r11c.user_concurrent_program_name
 51  group by 'Renamed'
 52  order by 2
 53  /
</pre>
<h3 id="forms">Forms</h3>
<p>Here's a count by application of new and removed forms.  We didn't have much in the way of customized forms, so I didn't drill down to form names, but the queries would be easy enough to modify if needed.</p>
<p>
<pre class="brush: sql;">SQL&gt;select r12a.application_name
  2       , count(r12f.user_form_name) new_forms
  3    from r12_application_tl r12a join r12_form_tl r12f
  4         using (application_id)
  5   where not exists
  6         (
  7          select application_id
  8               , form_id
  9            from r11_form_tl r11f
 10           where r11f.application_id = application_id
 11             and r12f.form_id = r11f.form_id
 12         )
 13  group by r12a.application_name
 14  order by 2 desc
 15  /
</pre>
<table>
<tr>
<th>
APPLICATION_NAME
</th>
<th>
NEW_FORMS
</th>
</tr>
<tr>
<td>Asia/Pacific Localizations</td>
<td align="right">
       114
</td>
</tr>
<tr>
<td>Subledger Accounting</td>
<td align="right">
        17
</td>
</tr>
<tr>
<td>Process Manufacturing Process Execution</td>
<td align="right">
         7
</td>
</tr>
<tr>
<td>Student System</td>
<td align="right">
         7
</td>
</tr>
<tr>
<td>General Ledger</td>
<td align="right">
         7
</td>
</tr>
<tr>
<td>Field Service</td>
<td align="right">
         6
</td>
</tr>
<tr>
<td>Inventory</td>
<td align="right">
         6
</td>
</tr>
<tr>
<td>Process Manufacturing Financials</td>
<td align="right">
         5
</td>
</tr>
<tr>
<td>Marketing</td>
<td align="right">
         5
</td>
</tr>
<tr>
<td>Process Manufacturing Product Development</td>
<td align="right">
         5
</td>
</tr>
<tr>
<td>Bills of Material</td>
<td align="right">
         4
</td>
</tr>
<tr>
<td>Depot Repair</td>
<td align="right">
         4
</td>
</tr>
<tr>
<td>Advanced Supply Chain Planning</td>
<td align="right">
         4
</td>
</tr>
<tr>
<td>Supply Chain Localizations</td>
<td align="right">
         4
</td>
</tr>
<tr>
<td>Financial Aid</td>
<td align="right">
         3
</td>
</tr>
<tr>
<td>Public Sector Budgeting</td>
<td align="right">
         3
</td>
</tr>
<tr>
<td>Public Sector Financials International</td>
<td align="right">
         3
</td>
</tr>
<tr>
<td>Receivables</td>
<td align="right">
         3
	</td>
</tr>
<tr>
<td>Cash Management</td>
<td align="right">
	         2
	</td>
</tr>
<tr>
<td>Enterprise Asset Management</td>
<td align="right">
	         2
	</td>
</tr>
<tr>
<td>Process Manufacturing Regulatory Management</td>
<td align="right">
	         2
	</td>
</tr>
<tr>
<td>Treasury</td>
<td align="right">
	         2
	</td>
</tr>
<tr>
<td>Shipping Execution</td>
<td align="right">
	         2
	</td>
</tr>
<tr>
<td>Warehouse Management</td>
<td align="right">
	         2
	</td>
</tr>
<tr>
<td>Payables</td>
<td align="right">
	         2
	</td>
</tr>
<tr>
<td>E-Business Tax</td>
<td align="right">
	         2
	</td>
</tr>
<tr>
<td>Install Base</td>
<td align="right">
	         2
	</td>
</tr>
<tr>
<td>Federal Financials</td>
<td align="right">
	         2
	</td>
</tr>
<tr>
<td>Assets</td>
<td align="right">
	         2
	</td>
</tr>
<tr>
<td>Process Manufacturing Systems</td>
<td align="right">
	         2
	</td>
</tr>
<tr>
<td>Process Manufacturing Inventory</td>
<td align="right">
	         1
	</td>
</tr>
<tr>
<td>Property Manager</td>
<td align="right">
	         1
	</td>
</tr>
<tr>
<td>XML Gateway</td>
<td align="right">
	         1
	</td>
</tr>
<tr>
<td>Shop Floor Management</td>
<td align="right">
	         1
	</td>
</tr>
<tr>
<td>Application Object Library</td>
<td align="right">
	         1
	</td>
</tr>
<tr>
<td>Manufacturing Execution System for Process Manufacturing</td>
<td align="right">
	         1
	</td>
</tr>
<tr>
<td>Collections</td>
<td align="right">
	         1
	</td>
</tr>
<tr>
<td>Regional Localizations</td>
<td align="right">
		         1
		</td>
</tr>
<tr>
<td>Oracle Telecommunications Billing Integrator</td>
<td align="right">
		         1
		</td>
</tr>
<tr>
<td>Purchasing</td>
<td align="right">
		         1
		</td>
</tr>
</table>
<p><pre class="brush: sql;">SQL&gt;select r11a.application_name
  2       , count(r11f.user_form_name) deleted_forms
  3    from r11_application_tl r11a join r11_form_tl r11f
  4         using (application_id)
  5   where not exists
  6         (
  7          select application_id
  8               , form_id
  9            from r12_form_tl r12f
 10           where r12f.application_id = application_id
 11             and r11f.form_id = r12f.form_id
 12         )
 13  group by r11a.application_name
 14  order by 2 desc
 15  /
</pre>
<table>
<tr>
<th>
		APPLICATION_NAME
		</th>
<th>
		DELETED_FORMS
		</th>
</tr>
<tr>
<td>Public Sector Budgeting</td>
<td align="right">
		         7
		</td>
</tr>
<tr>
<td>Project Contracts</td>
<td align="right">
		         4
		</td>
</tr>
<tr>
<td>Grants Accounting</td>
<td align="right">
		         3
		</td>
</tr>
<tr>
<td>Quality</td>
<td align="right">
		         3
		</td>
</tr>
<tr>
<td>Financial Aid</td>
<td align="right">
		         3
		</td>
</tr>
<tr>
<td>Common Modules-AK</td>
<td align="right">
		         1
		</td>
</tr>
</table>
<h3 id="prof">Profile Options</h3>
<p>Summary data for new and removed profile options, with additional information here.  Some profile options marked obsolete as well, but if there were any renamed, either I didn't run the query or the results weren't very interesting:
</p>
<p>
<pre class="brush: sql;">SQL&gt;select count(distinct application_id) affected_apps
  2  	  , count(1) new_options
  3    from r12_profile_options r12
  4   where not exists
  5  	    (
  6  	     select 1
  7  	       from r11_profile_options r11
  8  	      where r12.application_id = r11.application_id
  9  		and r12.profile_option_id = r11.profile_option_id
 10  	    )
 11  /</pre>
<table>
<tr>
<th>
AFFECTED_APPS
</th>
<th>
NEW_OPTIONS
</th>
</tr>
<tr>
<td align="right">
       115
</td>
<td align="right">
       963
</td>
</tr>
</table>
<p>
<pre class="brush: sql;">SQL&gt;select count(distinct application_id) affected_apps
  2  	  , count(1) removed_options
  3    from r11_profile_options r11
  4   where not exists
  5  	    (
  6  	     select 1
  7  	       from r12_profile_options r12
  8  	      where r12.application_id = r11.application_id
  9  		and r12.profile_option_id = r11.profile_option_id
 10  	    )
 11  /</pre>
<table>
<tr>
<th>
AFFECTED_APPS
</th>
<th>
REMOVED_OPTIONS
</th>
</tr>
<tr>
<td align="right">
        32
</td>
<td align="right">
       260
</td>
</tr>
</table>
<p>
<pre class="brush: sql;">SQL&gt;select application_short_name
  2       , user_profile_option_name obsolete_option
  3    from r12_profile_options_tl
  4         join r12_profile_options
  5         using (profile_option_name)
  6         join r12_application
  7         using (application_id)
  8   where regexp_like(user_profile_option_name,'obsolete','i')
  9   order by 1
 10  /</pre>
<table>
<tr>
<th>
APPLICATION_SHORT_NAME
</th>
<th>
OBSOLETE_OPTION
</th>
</tr>
<tr>
<td>AK</td>
<td>AK: Loaders input directory - Obsolete</td>
</tr>
<tr>
<td>AK</td>
<td>AK: Loaders output directory - Obsolete</td>
</tr>
<tr>
<td>AR</td>
<td>HZ: Report Error on Obsolete Columns</td>
</tr>
<tr>
<td>CS</td>
<td>Knowledge: OBSOLETED PROFILE - CS_KB_NEAR_REALTIME_INDEXIN</td>
</tr>
<tr>
<td>CSS</td>
<td>OBSOLETE: Automated Escalation Task Owner Role</td>
</tr>
<tr>
<td>CSS</td>
<td>OBSOLETE: Automated Escalation Task Assignee Role</td>
</tr>
<tr>
<td>CSS</td>
<td>OBSOLETE: Automated Escalation Task Template Name</td>
</tr>
<tr>
<td>CSS</td>
<td>OBSOLETE: Automated Escalation Notification Role</td>
</tr>
<tr>
<td>CSS</td>
<td>OBSOLETE: Default Notification Condition</td>
</tr>
<tr>
<td>CSS</td>
<td>OBSOLETE: Knowledge Base Status</td>
</tr>
<tr>
<td>CSS</td>
<td>OBSOLETE: Knowledge Base Set Type</td>
</tr>
<tr>
<td>CSS</td>
<td>OBSOLETE: Product Reporting Category Set</td>
</tr>
<tr>
<td>CSS</td>
<td>OBSOLETE: Platform Category Set</td>
</tr>
<tr>
<td>GMA</td>
<td>GML: (this profile can be deleted) **obsolete**</td>
</tr>
<tr>
<td>ICX</td>
<td>Obsolete</td>
</tr>
<tr>
<td>IGS</td>
<td>IGS: JTF Resource - Obsolete</td>
</tr>
<tr>
<td>IGS</td>
<td>IGS: JTF Result - Obsolete</td>
</tr>
<tr>
<td>IGS</td>
<td>IGS: Degree Audit Organization Types --Obsolete</td>
</tr>
<tr>
<td>IGS</td>
<td>IGS: Degree Audit Program Major Definitions --Obsolete</td>
</tr>
<tr>
<td>IGS</td>
<td>IGS: Degree Audit Student List --Obsolete</td>
</tr>
<tr>
<td>IGS</td>
<td>IGS: Degree Audit Student Alternate ID Type --Obsolete</td>
</tr>
<tr>
<td>IGS</td>
<td>IGS: Degree Audit Debug Option --Obsolete</td>
</tr>
<tr>
<td>IGS</td>
<td>IGS: Degree Audit Major Unit Set Category --Obsolete</td>
</tr>
<tr>
<td>IGS</td>
<td>IGS: Degree Audit Preferred Address Usage --Obsolete</td>
</tr>
<tr>
<td>IGS</td>
<td>IGS: Degree Audit What If Unit Set Titles --Obsolete</td>
</tr>
<tr>
<td>IGS</td>
<td>IGS: Degree Audit Track Unit Set Category --Obsolete</td>
</tr>
<tr>
<td>IGS</td>
<td>IGS: Degree Audit Institution Alternate Identifier Types --Obsolete</td>
</tr>
<tr>
<td>IGS</td>
<td>IGS: Degree Audit Minor Unit Set Category --Obsolete</td>
</tr>
<tr>
<td>IGS</td>
<td>IGS: JTF Outcome - Obsolete</td>
</tr>
<tr>
<td>IGS</td>
<td>IGS: AMS Category Type - Obsolete</td>
</tr>
<tr>
<td>IGS</td>
<td>IGS: AMS Category Sub Type - Obsolete</td>
</tr>
<tr>
<td>IGS</td>
<td>IGS: JTF Reason - Obsolete</td>
</tr>
<tr>
<td>JL</td>
<td>Obsolete in R12 - JLBR Automatically Populate Payment Batch Name</td>
</tr>
<tr>
<td>SQLGL</td>
<td>GL AHE: Saving Allowed (Obsolete)</td>
</tr>
</table>
<h3 id="db">Database Objects</h3>
<p>How many new database objects?  A ton.  How many deleted database objects?  A lot, but less than a ton.  Breakdown by application would probably be instructive, since many of those tables and packages are likely in support of new applications.</p>
<pre class="brush: sql;">SQL&gt;select r12.object_type
  2  	  , count(object_name) new_objects
  3    from r12_objects r12
  4   where not exists
  5  	    (
  6  	     select 1
  7  	       from r11_objects r11
  8  	      where r12.owner = r11.owner
  9  		and r12.object_name = r11.object_name
 10  		and r12.object_type = r11.object_type
 11  	     )
 12  group by r12.object_type
 13  order by 1
 14  /</pre>
<table>
<tr>
<th>
OBJECT_TYPE
</th>
<th>
NEW_OBJECTS
</th>
</tr>
<tr>
<td>EVALUATION CONTEXT</td>
<td align="right">
         2
</td>
</tr>
<tr>
<td>INDEX</td>
<td align="right">
      6901
</td>
</tr>
<tr>
<td>INDEX PARTITION</td>
<td align="right">
       497
</td>
</tr>
<tr>
<td>INDEX SUBPARTITION</td>
<td align="right">
        48
</td>
</tr>
<tr>
<td>JAVA CLASS</td>
<td align="right">
        28
</td>
</tr>
<tr>
<td>LOB</td>
<td align="right">
       271
</td>
</tr>
<tr>
<td>LOB PARTITION</td>
<td align="right">
        14
</td>
</tr>
<tr>
<td>LOB SUBPARTITION</td>
<td align="right">
        48
</td>
</tr>
<tr>
<td>MATERIALIZED VIEW</td>
<td align="right">
       104
</td>
</tr>
<tr>
<td>PACKAGE</td>
<td align="right">
      4687
</td>
</tr>
<tr>
<td>PACKAGE BODY</td>
<td align="right">
      4635
</td>
</tr>
<tr>
<td>PROCEDURE</td>
<td align="right">
         2
</td>
</tr>
<tr>
<td>QUEUE</td>
<td align="right">
        11
</td>
</tr>
<tr>
<td>RULE</td>
<td align="right">
         2
</td>
</tr>
<tr>
<td>RULE SET</td>
<td align="right">
         6
</td>
</tr>
<tr>
<td>SEQUENCE</td>
<td align="right">
      1393
</td>
</tr>
<tr>
<td>SYNONYM</td>
<td align="right">
      8801
</td>
</tr>
<tr>
<td>TABLE</td>
<td align="right">
      4562
</td>
</tr>
<tr>
<td>TABLE PARTITION</td>
<td align="right">
      1311
</td>
</tr>
<tr>
<td>TABLE SUBPARTITION</td>
<td align="right">
        48
</td>
</tr>
<tr>
<td>TRIGGER</td>
<td align="right">
       749
</td>
</tr>
<tr>
<td>TYPE</td>
<td align="right">
       402
</td>
</tr>
<tr>
<td>TYPE BODY</td>
<td align="right">
        76
</td>
</tr>
<tr>
<td>VIEW</td>
<td align="right">
      2903
</td>
</tr>
<tr>
<td>XML SCHEMA</td>
<td align="right">
         3
</td>
</tr>
</table>
<pre class="brush: sql;">SQL&gt;select r11.object_type
  2  	  , count(object_name) removed_objects
  3    from r11_objects r11
  4   where not exists
  5  	    (
  6  	     select 1
  7  	       from r12_objects r12
  8  	      where r12.owner = r11.owner
  9  		and r12.object_name = r11.object_name
 10  		and r12.object_type = r11.object_type
 11  	     )
 12  group by r11.object_type
 13  order by 1
 14  /</pre>
<table>
<tr>
<th>
OBJECT_TYPE
</th>
<th>
REMOVED_OBJECTS
</th>
</tr>
<tr>
<td>INDEX</td>
<td align="right">
      2577
</td>
</tr>
<tr>
<td>INDEX PARTITION</td>
<td align="right">
        48
</td>
</tr>
<tr>
<td>JAVA CLASS</td>
<td align="right">
       296
</td>
</tr>
<tr>
<td>JAVA RESOURCE</td>
<td align="right">
        39
</td>
</tr>
<tr>
<td>LOB</td>
<td align="right">
       119
</td>
</tr>
<tr>
<td>MATERIALIZED VIEW</td>
<td align="right">
         9
</td>
</tr>
<tr>
<td>PACKAGE</td>
<td align="right">
      2279
</td>
</tr>
<tr>
<td>PACKAGE BODY</td>
<td align="right">
      2237
</td>
</tr>
<tr>
<td>PROCEDURE</td>
<td align="right">
         1
</td>
</tr>
<tr>
<td>QUEUE</td>
<td align="right">
         6
</td>
</tr>
<tr>
<td>SEQUENCE</td>
<td align="right">
       282
</td>
</tr>
<tr>
<td>SYNONYM</td>
<td align="right">
      1326
</td>
</tr>
<tr>
<td>TABLE</td>
<td align="right">
       922
</td>
</tr>
<tr>
<td>TABLE PARTITION</td>
<td align="right">
        12
</td>
</tr>
<tr>
<td>TRIGGER</td>
<td align="right">
       322
</td>
</tr>
<tr>
<td>TYPE</td>
<td align="right">
        14
</td>
</tr>
<tr>
<td>VIEW</td>
<td align="right">
      2593
</td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://only4left.jpiwowar.com/2010/03/r12-aol-and-db-object-changes/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Friday mumblings: VanOUG, 11gR2, and EBS</title>
		<link>http://only4left.jpiwowar.com/2010/03/friday-mumblings-vanoug-11gr2-and-ebs/</link>
		<comments>http://only4left.jpiwowar.com/2010/03/friday-mumblings-vanoug-11gr2-and-ebs/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 20:29:13 +0000</pubDate>
		<dc:creator>jpiwowar</dc:creator>
				<category><![CDATA[EBS]]></category>
		<category><![CDATA[Oracle RDBMS]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[R12]]></category>
		<category><![CDATA[vanoug]]></category>

		<guid isPermaLink="false">http://only4left.jpiwowar.com/2010/03/friday-mumblings-vanoug-11gr2-and-ebs/</guid>
		<description><![CDATA[<p>Random notes about the March 2010 VanOUG meeting presentations</p>
]]></description>
			<content:encoded><![CDATA[<p>At the first meeting of the newly-reconstituted <a href="http://vanoug.org" title="Vancouver Oracle Users Group">Vancouver Oracle Users Group</a> this past week, we were treated to three great presentations by <a href="http://caleb.com/" title="Caleb Small">Caleb Small</a> and <a href="http://morganslibrary.org/" title="Morgan's Library">Dan Morgan</a>. They've made the content of their presentations available on the VanOUG web site (these links go to PDFs, if that sort of thing bugs you, consider yourself warned):</p>
<ul>
<li><a href="http://vanoug.org/caleb_RAC11gR2_ha.pdf" title="11gR2 HA Best Practices">11gR2 High Availability Best Practices</a> (Caleb Small)</li>
<li><a href="http://vanoug.org/morgan_2010_11gR2nf.pdf" title="11g New features, Dan Morgan">11g New Features You Won't Hear About From Oracle</a> (Dan Morgan)</li>
<li><a href="http://vanoug.org/morgan_2010_ebr.pdf" title="EBR demo slides, Dan Morgan">Edition Based Redefinition Presentation Slides</a> (Dan Morgan)</li>
</ul>
<p>I'm not going to go into a full recap of the presentations, but they were all full of really cool information. This post is an attempt to collect some of my mental notes, mostly cast in the context of one of my favorite topics, Oracle Applications.</p>
<h3 id="HA">11gR2 HA Best Practices</h3>
<p>Caleb's presentation was very thorough and well-constructed. Dan gave him grief for boring the audience, but I think there was just so much new content to absorb that people were too busy processing to ask many questions on the fly. <img src='http://only4left.jpiwowar.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Here are some one-liners from my notebook (anything that looks like an opinion is my commentary/interpretation, not Caleb's):</p>
<ul>
<li>Lots more "moving parts" in 11gR2 Grid Infrastructure, clear "separation of duties" across three privileged OS accounts.</li>
<li>Service startup order is a little different now</li>
<li>Cluster status utilities show a lot more information, but need to learn to not rely upon crsstat as much</li>
<li>Proper networking configuration of 11gR2 GI not for the faint of heart. <img src='http://only4left.jpiwowar.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li>Increased memory requirements will make this tougher to virtualize; I'm going to need a bigger laptop.</li>
<li>ACFS looks interesting; I wonder if it will be a valid option for an (shared application tier filesystem) for Oracle Applications. (Turns out the answer is "not currently planned," based on <a href="http://blogs.oracle.com/stevenChan/2010/03/ocfs2_linux_certified_ebs12.html#comment-297368" title="Question">this</a> <a href="http://blogs.oracle.com/stevenChan/2010/03/ocfs2_linux_certified_ebs12.html#comment-297506" title="Answer. Oh well.">exchange</a> I had w/ Steven Chan on his blog later in the week).</li>
</ul>
<h3 id="new">11g New Features</h3>
<p>There's a <b>lot</b> of really neat stuff going on in this presentation. I'd like to call out small nugget that, while far from the most important, is still pretty interesting on the surface: "deferred segment creation." When a table is created, no extents are actually allocated until rows are inserted. Seems like an odd feature, but one touted benefit is for large ERP systems like SAP and Oracle Applications, where lots of tables are created that may never be used, depending on what products are implemented. Those thousands of initial extents can certainly add up to real storage, and a more cluttered data dictionary. I can't speak to SAP implementations, but I don't see it as a huge win for EBS customers, given that:</p>
<ol>
<li>This feature is available only when tables are created, which means the benefit will only really be available when Oracle starts shipping Oracle Applications install media with an 11gR2 database. Anyone upgrading to the 11gR2 database will still be stuck with those empty extents.</li>
<li>Given the overall footprint of an EBS database, the storage savings isn't such a big deal. For example, here's the potential savings from eliminating "empty" tables from an R12 Vision database:
<pre class="brush: sql;">
  SYSTEM@R12VIS(11.1.0.7)&gt;select sum(bytes)/1024/1024 potential_savings
2  from dba_segments s
3  where exists (select table_name
4                  from dba_tables
5                 where num_rows = 0
6                   and table_name = s.segment_name
7               )
8  /

POTENTIAL_SAVINGS
-----------------
3850.36719
</pre>
<p>
    3.5(ish) GB out of 200GB is okay, I guess, but not a huge deal for a system that's only going to keep growing. FWIW, I'm going to wave my hands and pretend that the fact that a Vision database has way more populated tables than a "fresh-install" EBS database is balanced by the fact that my quick query doesn't account for the possibility that table stats are stale and some of those tables are actually populated. <img src='http://only4left.jpiwowar.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />
  </li>
</ol>
<p>Of course, it's possible that I'm missing the point. It wouldn't be the first time! Maybe it really comes down more to a less-cluttered data dictionary. I mean, it can't be about tablespace fragmentation, since we're not supposed to care about that anymore, right?</p>
<h3 id="EBR">Edition Based Redefinition (EBR)</h3>
<p>This seemed like an interesting feature when I first heard about it last autumn, but I'll confess that I didn't quite comprehend the power of EBR until seeing Dan's demo (parts <a href="http://morganslibrary.org/reference/ebr_demo1.html" title="EBR demo, part 4">1</a>, <a href="http://morganslibrary.org/reference/ebr_demo2.html" title="EBR demo, part 2">2</a>, and <a href="http://morganslibrary.org/reference/ebr_demo3.html" title="EBR demo, part 3">3</a> are on his Morgan's Library site, with part 4 still in the works). Setting aside the obvious benefits for home-grown applications, the potential benefits in an Oracle Applications environment are huge. Consider:</p>
<ol>
<li>There's already an option to create a <a href="https://supporthtml.oracle.com/ep/faces/secure/km/DocumentDisplay.jspx?id=734025.1" title="Using a Staged Applications System to Reduce Patching Downtime in Oracle Applications Release 12 ">staged Applications System</a> to shorten patch downtime windows, allowing administrators to run the "copy" and "generate" portions of large EBS patches prior to applying the patch to production. With EBR, it could be possible to stage the "database" portion of a patch as well, and switch to a new default edition at patch time. You'd probably still want to do the database staging at a quiet time in the database, of course, but daring souls could accomplish "almost-no-downtime" patching if EBR were worked into the Oracle Applications patching framework. Wicked.</li>
<li>EBR might even make it possible to truly have EBS patches that could be rolled back. The current patching process already backs up files that are replaced. Thoughtful application of cross-edition triggers might make it possible to revert to a previous edition without loss of data if a patch needs to be backed out. Granted, the process would have to be demonstrated to be pretty bullet-proof before I'd try it in production, but it could save restoring test and dev systems from backup in the event that a patch doesn't work out as expected.</li>
</ol>
<p>Just as I might be missing the point about deferred segment creation's advantages in EBS, I might be guilty of over-extended enthusiasm with respect to edition based redefinition. Or maybe I've decided to turn this into a science fiction blog. <img src='http://only4left.jpiwowar.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  It's sure to be far more complicated to implement EBR in an Oracle Applications context than I'm implying above, and this is only speculation on my part, <b>not</b> anything that's actually promised by Oracle. Still, a nerd can dream...</p>
<p>Thanks again to Caleb and Dan for the great presentations, and for your continued support in getting the user group launched!</p>
]]></content:encoded>
			<wfw:commentRss>http://only4left.jpiwowar.com/2010/03/friday-mumblings-vanoug-11gr2-and-ebs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>32-bit to 64-bit database migration tips: OLAP upgrade</title>
		<link>http://only4left.jpiwowar.com/2010/02/32-bit-to-64-bit-olap-migration-tips/</link>
		<comments>http://only4left.jpiwowar.com/2010/02/32-bit-to-64-bit-olap-migration-tips/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 23:33:18 +0000</pubDate>
		<dc:creator>jpiwowar</dc:creator>
				<category><![CDATA[EBS]]></category>
		<category><![CDATA[Oracle RDBMS]]></category>
		<category><![CDATA[10g]]></category>
		<category><![CDATA[64-bit]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[R12]]></category>

		<guid isPermaLink="false">http://only4left.jpiwowar.com/2010/02/32-bit-to-64-bit-database-migration-tips-olap-upgrade/</guid>
		<description><![CDATA[Notes on upgrading OLAP workspaces when migrating a database from 32-bit to 64-bit Linux.
]]></description>
			<content:encoded><![CDATA[<p>A while ago, I had the opportunity to migrate an E-Business Suite database (Apps version 12.0.4, database version 10.2.0.4) from 32-bit Linux to 64-bit Linux. It's a straightforward process, outlined in <a href="https://supporthtml.oracle.com/ep/faces/secure/km/DocumentDisplay.jspx?id=471566.1" title="Migrating Oracle E-Business Suite R12 from Linux 32-bit to Linux 64-bit ">My Oracle Support Note 471566.1: Migrating Oracle E-Business Suite R12 from Linux 32-bit to Linux 64-bit</a>. Performing one of the critical migration steps, upgrading OLAP analytical workspaces (AWs), requires some careful reading, starting with the primary migration document for the database tier: <a href="https://supporthtml.oracle.com/ep/faces/secure/km/DocumentDisplay.jspx?id=456197.1" title="Using Oracle E-Business Suite Release 12 with a Database Tier Only Platform on Oracle 10g Release 2 ">Note 456197.1: Using Oracle E-Business Suite Release 12 with a Database Tier Only Platform on Oracle 10g Release 2</a>. This document directs you to <a href="https://supporthtml.oracle.com/ep/faces/secure/km/DocumentDisplay.jspx?id=352306.1" title="Upgrading OLAP from 32 to 64 bits ">Note 352306.1: Upgrading OLAP from 32 to 64 bits</a>, which covers the migration process for OLAP workspaces: export and delete from the the 32-bit system, then recreate on the 64-bit system and import the contents. The remainder of this blog post includes some embellishment of those four steps, from my migration notes.  Examples were recreated on my test database; please don't look for these workspace names in an actual EBS database.</p>
<p>Please note that I'm by no means an OLAP expert; if you have your own observations or experiences to share, including corrections to any errors I might have made, please leave a comment. The last thing I want to do is spread misinformation! And, as always, remember: test systems exist for a reason, and instructions from Oracle Support should trump anything you read in this blog entry <img src='http://only4left.jpiwowar.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h3 id="exp">"No objects to export" error when exporting AWs</h3>
<p>The export process is explained thoroughly in Note 352306.1. You may encounter the following error, however, when attempting to export an empty workspace:</p>
<pre class="brush: sql;">
BEGIN dbms_aw.execute('export all to eif file ''EXPORT_DIR/AWTEST.eif'''); END;
*
ERROR at line 1:
ORA-33390: There are no objects to export.
ORA-06512: at &quot;SYS.DBMS_AW&quot;, line 93
ORA-06512: at &quot;SYS.DBMS_AW&quot;, line 122
ORA-06512: at line 1
</pre>
<p>An export file will not be created, since there's no data in the workspace. Nonetheless, you will still need to recreate the AW in the 64-bit database, which leads us to the next section...</p>
<h3 id="del">Before deleting AWs</h3>
<p>In addition to gathering the OLAP workspace's name, schema, and tablespace, make sure that you make a note of how the AW is partitioned. This will allow you to more faithfully reconstruct the AW in the 64-bit database. Again, the basics can be found in Note 352306.1, except for a discussion of workspace partitioning. According to the <a href="http://download.oracle.com/docs/cd/B19306_01/olap.102/b14350/dbms_aw.htm#BABGAHEG" title="DBMS_AW.AW_CREATE description (10gR2)">documentation for DBMS_AW.AW_CREATE</a>, by default, analytic workspaces are created with 8 partitions. Querying dba_segments seemed to tell a different story:</p>
<pre class="brush: sql;">
SYSTEM@mactest(10.2.0.4)&gt;select segment_name
2    , segment_type
3    , count(*)
4   from dba_segments
5   where segment_name= 'AW$TESTDEFAULT'
6   group by segment_name
7   , segment_type;

SEGMENT_NAME                   SEGMENT_TYPE           COUNT(*)
------------------------------ -------------------- ----------
AW$TESTDEFAULT                 TABLE SUBPARTITION           16
</pre>
<p>This initially confused me, until I found that the table created for the default workspace is actually comprised of two partitions, each comprised of 8 subpartitions. Apparently, "partition" means different things to different people:</p>
<pre class="brush: sql;">
SYSTEM@mactest(10.2.0.4)&gt;select table_name
2  , partition_name
3  , subpartition_count sub
4  from all_tab_partitions
5  where table_name = 'AW$TESTDEFAULT';

TABLE_NAME           PARTITION_NAME        SUB
-------------------- -------------- ----------
AW$TESTDEFAULT       PTN1                    8
AW$TESTDEFAULT       PTNN                    8
</pre>
<p>So, before you delete the AWs in the 32-bit database, be sure to consult the data dictionary. In most cases, you'll probably see segment count of 16 in dba_segments (implying a default partitioning scheme). But there are exceptions...</p>
<h3 id="crt">There's always one goofball</h3>
<p>One of those exceptions came when my query to get a count of AW segments returned a 1. Naturally, I was expecting an even number, so this came as a surprise. At first, I thought this might be a special case when specifying partnum=&gt;1 when creating the workspace:</p>
<pre class="brush: sql;">
SYSTEM@mactest(10.2.0.4)&gt;exec dbms_aw.aw_create('JPTEST.TEST1PART','USERS',1);
PL/SQL procedure successfully completed.

SYSTEM@mactest(10.2.0.4)&gt;select segment_name
2  , segment_type
3  ,count(*)
4  from dba_segments
5  where segment_name = 'AW$TEST1PART'
6  group by segment_name
7  , segment_type
8  /

SEGMENT_NAME                   SEGMENT_TYPE           COUNT(*)
------------------------------ -------------------- ----------
AW$TEST1PART                   TABLE SUBPARTITION            2
</pre>
<p>Then it occurred to me that zero is also a number... <img src='http://only4left.jpiwowar.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<pre class="brush: sql;">
SYSTEM@mactest(10.2.0.4)&gt;exec dbms_aw.aw_create('JPTEST.TEST0PART','USERS',0);
PL/SQL procedure successfully completed.

SYSTEM@mactest(10.2.0.4)&gt;select segment_name
2  , segment_type
3  ,count(*)
4  from dba_segments
5  where segment_name = 'AW$TEST0PART'
6  group by segment_type
7  , segment_name
8  /

SEGMENT_NAME                   SEGMENT_TYPE           COUNT(*)
------------------------------ -------------------- ----------
AW$TEST0PART                   TABLE                         1
</pre>
<p>Please recall: Note 352306.1 recommends using the Analytic Workspace Manager (AWM) tool to recreate the AWs in the 64-bit database. If you want to create the AWs manually, I suggest engaging with Oracle Support to get their approval. The preceding examples are provided only for illustration of what's going on when the AW is created.</p>
<h3 id="import">Importing AWs</h3>
<p>I don't really have much to add here, other than:</p>
<ol>
<li>If you had any empty AWs in the 32-bit system, you won't have anything to import for those workspaces, though hopefully you recreated them in the 64-bit system</li>
<li>Isn't this process the sort of thing that cries out to be scripted? Would I really resort to such cheap, obvious devices to foreshadow my next post? I would indeed!</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://only4left.jpiwowar.com/2010/02/32-bit-to-64-bit-olap-migration-tips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Accessing EBS R12 forms when the HTML interface is unavailable</title>
		<link>http://only4left.jpiwowar.com/2010/01/access-r12-forms-directly/</link>
		<comments>http://only4left.jpiwowar.com/2010/01/access-r12-forms-directly/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 07:30:15 +0000</pubDate>
		<dc:creator>jpiwowar</dc:creator>
				<category><![CDATA[EBS]]></category>
		<category><![CDATA[R12]]></category>
		<category><![CDATA[troubleshooting]]></category>

		<guid isPermaLink="false">http://only4left.jpiwowar.com/2010/01/access-r12-forms-directly/</guid>
		<description><![CDATA[<p>A short blurb on the method and limitations of launching the EBS R12 Forms interface "manually," without going through the HTML interface.</p>
]]></description>
			<content:encoded><![CDATA[<p>Astute readers of my <a href="http://only4left.jpiwowar.com/2010/01/resolving-an-ebs-login-problem/" title="Linking myself, again. I'm getting as bad as Chet. ;)">last post</a> may have taken a short break from the riveting drama to wonder, "hey, wait, if you couldn't <i>access</i> the EBS home page, how did you change the profile option to <i>fix</i> the EBS home page?" Well, okay, if you've been using Oracle Apps for a while, this is probably not a mystery, but I might have some EBS learners onboard thanks to the <a href="http://www.oraclenerd.com/2009/12/ebs-challenge.html" title="The EBS Challenge! Grawr!">ORACLENERD series</a>. For the sake of completeness, I feel compelled to offer this tidbit:</p>
<p>To launch the E-Business Suite R12 Forms interface directly, use the URL http://yourhost:port/forms/frmservlet. This will present a small login window where you can provide your EBS credentials. After that, you will need to select your responsibility from a list of values, and the appropriate forms menu will appear. A few additional things to consider:</p>
<ul>
<li>This method of accessing Forms is primarily intended to verify that the Forms server is functioning properly. Oracle does <a href="https://metalink.oracle.com/metalink/plsql/showdoc?db=NOT&amp;id=742969.1" title="My Oracle Support Note 742969.1">not recommend</a> (or support) direct access to Forms as a normal mode of operation. Use sparingly, as a last resort.</li>
<li>You need to supply login credentials for a user that has permission to authenticate locally to Oracle Applications. This is not normally a big deal, since it's the default configuration, but if your EBS instance is integrated with Single Sign-On, be aware that you can't connect to Forms directly with an SSO-only account.</li>
<li>If your HTML interface is broken, as mine was, selecting an option from the Forms-based menu that would normally launch the HTML interface is likely to produce disappointing results.</li>
</ul>
<p>Despite Oracle's warning to not use the Forms interface this way without specific guidance from Support, it seemed far better than writing an update statement against the FND_PROFILE_OPTION_VALUES table at 1AM. <img src='http://only4left.jpiwowar.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://only4left.jpiwowar.com/2010/01/access-r12-forms-directly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
