<?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>Rittman Mead Consulting &#187; Oracle Warehouse Builder</title>
	<atom:link href="http://www.rittmanmead.com/category/oracle-warehouse-builder/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rittmanmead.com</link>
	<description>Delivered Intelligence</description>
	<lastBuildDate>Wed, 17 Mar 2010 20:23:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Oracle Warehouse Builder 11gR2 &#8211; Importing Essbase Cubes using ODI Knowledge Modules &#8211; Part 1</title>
		<link>http://www.rittmanmead.com/2010/03/17/oracle-warehouse-builder-11gr2-importing-essbase-cubes-using-odi-knowledge-modules-part-1/</link>
		<comments>http://www.rittmanmead.com/2010/03/17/oracle-warehouse-builder-11gr2-importing-essbase-cubes-using-odi-knowledge-modules-part-1/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 20:21:53 +0000</pubDate>
		<dc:creator>Venkatakrishnan J</dc:creator>
				<category><![CDATA[Hyperion Essbase]]></category>
		<category><![CDATA[Oracle Warehouse Builder]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=4518</guid>
		<description><![CDATA[One of the new features introduced in OWB 11gR2 is the ability to import metadata objects through JDBC drivers. So, as long as we have an external API providing the JDBC interface to OWB, OWB should be able to leverage that and import the metadata through the API. For example, David Allan, one of the [...]]]></description>
			<content:encoded><![CDATA[<p>One of the new features introduced in OWB 11gR2 is the ability to import metadata objects through JDBC drivers. So, as long as we have an external API providing the JDBC interface to OWB, OWB should be able to leverage that and import the metadata through the API. For example, David Allan, one of the key driving people behind OWB has blogged about this extensively <a href="http://blogs.oracle.com/warehousebuilder/2010/01/owb_11gr2_mysql_open_connectivity.html" target="_blank">here</a> for MySQL. Though i knew that we can use custom JDBC drivers, i did not know how to use them especially in the context of Essbase. As you probably know, ODI has connectivity to Essbase and can reverse engineer the metadata of Essbase as well. ODI uses Essbase JDBC drivers and a custom RKM to convert an Essbase cube in the form of relational tables and columns. The core code of the RKM exists in 4 main jar files. They are</p>
<p>1. ess_es_server.jar<br />
2. ess_japi.jar<br />
3. odihapp_common.jar<br />
4. odihapp_essbase.jar</p>
<p>Out of these 4, the first 2 are essbase jdbc connectivity jar files. The remaining 2 contain the core code for reverse engineering the Essbase Metadata (RKM). This is not a straightforward JDBC interface. So, how do we leverage this within the OWB framework. This is where David Allan was extremely kind enough to get me started. To reverse engineer any metadata in OWB, through an external API requires 3 main tasks</p>
<p>1. An external Stub Driver which should be accessible to the OWB code path – This is the base for enabling custom API connectivity – The driver is available <a href="http://www.rittmanmead.com/?attachment_id=4505" target="_blank">here</a> for download</p>
<p>2. Platform Definition – Since Essbase does not exist as a platform in OWB, we need to manually define them using a set of OMB Plus scripts. There is a platform definition XML file which can be download from <a href="http://www.rittmanmead.com/?attachment_id=4506" target="_blank">here</a>.</p>
<p>3. Necessary JDBC API jar files in OWB Code path</p>
<p>In the first step, we have to basically copy the Stub jar file to the {ORACLE_HOME}/owb/lib/ext directory.</p>
<p align="center"><img style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" title="Picture 2" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/03/Picture2.png" border="0" alt="Picture 2" width="504" height="78" /></p>
<p>Once the stud driver is copied over, we need to copy the Platform definition XML file to the {ORACLE_HOME}/owb/bin/admin directory. This file will be used from our OMB Plus scripts while defining the platform.</p>
<p align="center"><img style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" title="Picture 3" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/03/Picture3.png" border="0" alt="Picture 3" width="504" height="191" /></p>
<p>To define the platform, run the following commands from within OMBPlus. Ensure that your working directory is {ORACLE_HOME}/owb/bin</p>
<pre>OMBCONNECT OWB_WS_OWNER/welcome1@ORCL USE WORKSPACE 'OWB_WS_OWNER.WORKSPACE1'
OMBCREATE PLATFORM 'HYPERION_ESSBASE' SET PROPERTIES (BUSINESS_NAME) VALUES ('Hyperion Essbase')
OMBALTER PLATFORM 'HYPERION_ESSBASE' SET PROPERTIES (DRIVER_CLASS,URI_TEMPLATE) VALUES ('oracle.owb.jdbc.StubDriver','false:Accounts:Accounts:false')
OMBALTER PLATFORM 'HYPERION_ESSBASE' SET PROPERTIES (LOCAL_OBJECT_MASK) VALUES ('%SCHEMA.%OBJECT')
OMBALTER PLATFORM 'HYPERION_ESSBASE' SET  PROPERTIES (DDLNULL) VALUES ('null')
OMBALTER PLATFORM 'HYPERION_ESSBASE' SET PROPERTIES (LOCAL_OBJECT_MASK) VALUES ('%OBJECT')
OMBALTER PLATFORM 'HYPERION_ESSBASE' SET PROPERTIES (DEFAULT_MAX_NAME_LEN) VALUES ('35')
OMBALTER PLATFORM 'HYPERION_ESSBASE' SET PROPERTIES (REMOTE_OBJECT_MASK) VALUES ('%OBJECT')

OMBALTER PLATFORM 'HYPERION_ESSBASE' ADD PLATFORM_TYPE 'NUMERIC'
OMBALTER PLATFORM 'HYPERION_ESSBASE' MODIFY PLATFORM_TYPE 'NUMERIC' SET PROPERTIES(SYNTAX) VALUES ('new Integer(%precision,%scale)')
OMBALTER PLATFORM 'HYPERION_ESSBASE' MODIFY PLATFORM_TYPE 'NUMERIC' SET PROPERTIES (P1,P1MAX,P1DEFAULT,P1TYPE) VALUES ('precision','3000', '0','range')
OMBALTER PLATFORM 'HYPERION_ESSBASE' MODIFY PLATFORM_TYPE 'NUMERIC' SET PROPERTIES (P2, P2MIN, P2MAX, P2TYPE) VALUES ('scale', '0', '18', 'range')

OMBALTER PLATFORM 'HYPERION_ESSBASE' ADD FROM_PLATFORM_TYPEMAP 'NUMERIC_TOG' SET PROPERTIES (FROM_DATATYPE, TO_DATATYPE) VALUES ('NUMERIC', 'NUMERIC')
OMBALTER PLATFORM 'HYPERION_ESSBASE' ADD TO_PLATFORM_TYPEMAP 'NUMERIC_FROMG' SET PROPERTIES (FROM_DATATYPE, TO_DATATYPE) VALUES ('NUMERIC', 'NUMERIC')

OMBALTER PLATFORM 'HYPERION_ESSBASE' ADD PLATFORM_TYPE 'STRING'
OMBALTER PLATFORM 'HYPERION_ESSBASE' MODIFY PLATFORM_TYPE 'STRING' SET PROPERTIES(SYNTAX) VALUES ('new String(%size)')
OMBALTER PLATFORM 'HYPERION_ESSBASE' MODIFY PLATFORM_TYPE 'STRING' SET PROPERTIES (P1,P1MAX,P1DEFAULT,P1TYPE) VALUES ('size','3000', '1','range')
OMBALTER PLATFORM 'HYPERION_ESSBASE' ADD FROM_PLATFORM_TYPEMAP 'STRING_TOG' SET PROPERTIES (FROM_DATATYPE, TO_DATATYPE) VALUES ('STRING', 'VARCHAR')
OMBALTER PLATFORM 'HYPERION_ESSBASE' ADD TO_PLATFORM_TYPEMAP 'STRING_FROMG' SET PROPERTIES (FROM_DATATYPE, TO_DATATYPE) VALUES ('VARCHAR', 'STRING')

OMBALTER PLATFORM 'HYPERION_ESSBASE' ADD PLATFORM_TYPE 'DATE'
OMBALTER PLATFORM 'HYPERION_ESSBASE' MODIFY PLATFORM_TYPE 'DATE' SET PROPERTIES(SYNTAX) VALUES ('new Date()')
OMBALTER PLATFORM 'HYPERION_ESSBASE' ADD FROM_PLATFORM_TYPEMAP 'DATE_TOG' SET PROPERTIES (FROM_DATATYPE, TO_DATATYPE) VALUES ('DATE', 'DATE')</pre>
<p>When you connect using OMBCONNECT, ensure that you are connecting to your workspace using the Workspace owner username/password. As you see, this basically defines certain extrinsic and intrinsic properties of the new platform that we have defined. Thanks to David Allan for providing the necessary stub driver, platform definition XML files. Without these there is no way i would have got the connectivity to work.</p>
<p>Once the platform is successfully defined, you should see the new platform within OWB as shown below.</p>
<p align="center"><img style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" title="Picture 4" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/03/Picture4.png" border="0" alt="Picture 4" width="180" height="315" /></p>
<p>So far so good. The next step is to copy the 4 ODI jar files (ess_japi.jar, ess_es_server.jar, odihapp_common.jar and odihapp_essbase.jar) from {ODI_HOME}/drivers/ directory to {ORACLE_HOME}/owb/lib/ext directory. I could not get this to work with 10.1.3.5 version of these jar files. Somehow it was always using a 9.3 version of the provider services for connecting to essbase. So, i had to upgrade to 10.1.3.6 of ODI to get this working. But David did mention the fact that it will work 10.1.3.5 version as well. Remember, just to use the jar files itself requires the license of ODI. Also, check with Oracle support on whether this is supported. Though there is no reason why this will not work, since it is not documented, i doubt Oracle Support would actually support this.</p>
<p align="center"><img style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" title="Picture 5" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/03/Picture5.png" border="0" alt="Picture 5" width="504" height="77" /></p>
<p>Restart the OWB client. In the new “Hyperion Essbase” platform, create a new module as shown below</p>
<p align="center"><img style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" title="Picture 6" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/03/Picture6.png" border="0" alt="Picture 6" width="424" height="315" /></p>
<p>In the Locations screen, enter the connection details to Essbase as shown below</p>
<p align="center"><img style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" title="Picture 8" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/03/Picture8.png" border="0" alt="Picture 8" width="418" height="315" /></p>
<p>The schema will be the Essbase Database name. In my case, i am connecting to the Sample-&gt;Basic cube. So Basic is the schema name. The port will be the essbase port (1423 is the default). The username/password will be the one that you will be using for connecting to Essbase. The Driver Class will be automatically populated as we had copied the Stub Driver class already. But the URL needs to be populated. the URL basically points to the options that we get while importing Essbase metadata through ODI RKM’s. In ODI, while choosing an RKM, we need to basically choose whether we want to import the measure dimension as a flat list or as a separate column. Since we are using the same RKM, the parameters will be passed through the URL as</p>
<p align="center"><img style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" title="Picture 12" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/03/Picture12.png" border="0" alt="Picture 12" width="411" height="311" /></p>
<p><strong>&lt;MultipleDataColumns&gt;:&lt;Account Dimension&gt;:&lt;AccountDimensionMembers&gt;:&lt;AttribMem&gt;</strong></p>
<p>In my case, i am importing the Accounts dimension as a separate column. So, my URL will look like</p>
<p><strong>false:Measures:Accounts:false</strong></p>
<p>In the Advanced tab, enter the Application ,database and the server names as shown below.</p>
<p align="center"><img style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" title="Picture 7" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/03/Picture7.png" border="0" alt="Picture 7" width="504" height="220" /></p>
<p>Once this is done, import the metadata tables in the same fashion as we do on a normal database connection. The screenshots below should give you an idea of how the Essbase metadata will be imported</p>
<p align="center"><img style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" title="Picture 9" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/03/Picture9.png" border="0" alt="Picture 9" width="474" height="301" /></p>
<p align="center"><img style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" title="Picture 10" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/03/Picture10.png" border="0" alt="Picture 10" width="436" height="315" /></p>
<p align="center"><img style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" title="Picture 11" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/03/Picture11.png" border="0" alt="Picture 11" width="130" height="315" /></p>
<p>As you see, OWB is now able to import Essbase metadata using the ODI RKMs. This is extremely good and shows the extensibility of OWB which to me has been the biggest downside in the prior releases. Effectively one can use this to import custom application metadata using any JDBC API. The SAP, PSFT connectors in OWB basically extend this concept by connecting through an API instead of directly to the database. The next in line is how can we use this imported Cube in a ETL process in OWB using OWB Code Templates.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2010/03/17/oracle-warehouse-builder-11gr2-importing-essbase-cubes-using-odi-knowledge-modules-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle 11g Pivot</title>
		<link>http://www.rittmanmead.com/2010/02/23/oracle-11g-pivot/</link>
		<comments>http://www.rittmanmead.com/2010/02/23/oracle-11g-pivot/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 12:02:16 +0000</pubDate>
		<dc:creator>Peter Scott</dc:creator>
				<category><![CDATA[BI (General)]]></category>
		<category><![CDATA[Data Warehousing]]></category>
		<category><![CDATA[Oracle Database]]></category>
		<category><![CDATA[Oracle Warehouse Builder]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=4401</guid>
		<description><![CDATA[One of the things that I often come across is the &#8220;up-dateable fact&#8221;, that is a fact that starts life &#8220;incomplete&#8221; and changes overtime. Examples include things such as support calls that start life as &#8220;open&#8221; then progress through &#8220;responded&#8221;, &#8220;resolved&#8221; and finally &#8220;closed&#8221;; statuses in the sales cycle such as ordered, paid, shipped; stock [...]]]></description>
			<content:encoded><![CDATA[<p>One of the things that I often come across is the &#8220;up-dateable fact&#8221;, that is a fact that starts life &#8220;incomplete&#8221; and changes overtime. Examples include things such as support calls that start life as &#8220;open&#8221; then progress through &#8220;responded&#8221;, &#8220;resolved&#8221; and finally &#8220;closed&#8221;; statuses in the sales cycle such as ordered, paid, shipped; stock movements in a warehouse &#8211; goods received and dispatched. Of course the business, rightly, needs to measure the times between stages or the number or value of transactions at each stage.</p>
<p>As a principle, I hate the idea of having to update a fact. A fact has happened, it is not going to change. I suppose to be more accurate a &#8220;change&#8221; is a new event, a new fact, a new fact occurring at a different time. So how to model this? &#8211; well instinctively I would go for a table that is only inserted (preferably appended to &#8211; think set based!) containing whatever dimensions are needed (don&#8217;t forget the &#8216;when&#8217; dimension) PLUS an &#8216;EVENT&#8217; dimension (one row per expected status) and the measures (how many, how much etc). To report on this we need to rotate the table so that the events that belong to single item appear in the same row. Before Oracle 11g we would need to construct some SQL using a mix of case statements and analytic functions to rotate the data. But now we have a potentially better way the, Oracle 11g Pivot operator.</p>
<p>Here we define a set of dimensions for the row (similar to the dimensions in a Group BY clause), the aggregation operators for the pivoted measures &#8211; which of course could include MIN() or MAX() for the cases when want to pivot DATE types. We also need to define the dimensions we want to pivot by, and here we can actually choose multiple dimensions; this again is somewhat similar to the GROUP BY of traditional SQL. Remember though when we pivot we sometimes only expect to &#8216;aggregate&#8217; a single row &#8211; if we want to pivot order date and dispatch date then we probably have just one of each!.</p>
<p>So how does it look? Well the Oracle 11g documentation describes the syntax and gives some examples &#8211; here I am showing a slightly more complicated case where we are pivoting by two dimensions, each with a known set of code values. This example is based on two of the examples in the Oracle 11g Data Warehousing Guide</p>
<pre>	SELECT * FROM	(
		SELECT product, channel, quarter, quantity_sold FROM sales_view
		) PIVOT (SUM(quantity_sold) as SUMQ, SUM(amount_sold) as SUMS
			FOR (channel, quarter) IN
			((5, '02') AS CATALOG_Q2,
		 	(4, '01') AS INTERNET_Q1,
		 	(4, '04') AS INTERNET_Q4,
		 	(2, '02') AS PARTNERS_Q2,
		 	(9, '03') AS TELE_Q3
			) );</pre>
<p>The query returns a column for the product and for each of the specified pairs of channel and quarter a column for each measure. So we get columns for:</p>
<p>PRODUCT, CATALOG_Q2_SUMQ, CATALOG_Q2_SUMS, INTERNET_Q1_SUMQ, INTERNET_Q1_SUMS, INTERNET_Q4_SUMQ, INTERNET_Q4_SUMS, PARTNERS_Q2_SUMQ, INTERNET_Q4_SUMS, TELE_Q3_SUMQ, and TELE_Q3_SUMS</p>
<p>Note how the the measure name is concatenated to the alias in the in list.<br />
As you can see we don&#8217;t need to specify each combination of channel and quarter &#8211; just the ones we want in our pivoted view. We also don&#8217;t use a GROUP BY clause &#8211; we specify the columns we want to see (both the dimensions and the aggregations) and Oracle implicitly groups by all of the columns not in aggregated functions.</p>
<p>In my example I used SELECT * to wrap the inline pivot, in practice I would explicitly select the columns and perhaps alias them to more meaningful names than the concatenated ones generated by Oracle. I would also expose the pivot as database view and thus access it from OWB or OBIEE where it appears to be just another table or view.</p>
<p>Another point to note is that you might see null values in the pivoted measures and these can be due to one of two reasons: the value stored for that combination of dimensions (in our case channel and quarter) is actually NULL, or that the combination does not exist. If you need to (and you may not need to) you can differentiate by using a COUNT measure; if the count is zero then the combination does not exist in the source table, if one or more then the source has NULLs stored for the combination.</p>
<p>We used a similar pivot view to the one above to monitor stock movements in a warehouse &#8211; in this case we needed to track individual batches of product from multiple potential suppliers, so in addition to the product dimension we had dimensional columns for batch id (a degenerate dimension) and supplier. The view was then exposed to OWB to allow us to include the aggregated result set in our ETL process &#8211; we needed to calculate some additional measures based on the difference between two of the pivoted columns. The Pivot operator greatly simplified our ETL for this fact &#8211; we could easily write an ETL process with a straight aggregation then pivot the results with CASE statements or DECODES or whatever &#8211; but that would have been less clear and also increased the number of &#8220;moving parts&#8221;.</p>
<p>We have had no problems with performance with our data set &#8211; 80 million rows pivoted on Exadata to just a few seconds. But it was not too slow on our non-exadata development machine either.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2010/02/23/oracle-11g-pivot/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Atlanta BI Users Group Meeting</title>
		<link>http://www.rittmanmead.com/2010/02/23/atlanta-bi-users-group-meeting/</link>
		<comments>http://www.rittmanmead.com/2010/02/23/atlanta-bi-users-group-meeting/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 05:08:19 +0000</pubDate>
		<dc:creator>Stewart Bryson</dc:creator>
				<category><![CDATA[Oracle Warehouse Builder]]></category>
		<category><![CDATA[Rittman Mead]]></category>
		<category><![CDATA[User Groups & Conferences]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=4394</guid>
		<description><![CDATA[Rittman Mead is proud to announce our sponsorship of the February meeting of the Atlanta BI Users Group, a regional special interest group with involvement from IOUG, ODTUG the IOUG BIWA SIG, and the Georgia Oracle Users Group (GOUSER). I&#8217;d like to thank Greg Lancaster and the entire BI team at Cox Communications for hosting [...]]]></description>
			<content:encoded><![CDATA[<p>Rittman Mead is proud to announce our sponsorship of the February meeting of the <a href="http://communities.ioug.org/Home/BIRUGs/AtlantaBIUsersGroup/tabid/104/Default.aspx">Atlanta BI Users Group</a>, a regional special interest group with involvement from IOUG, ODTUG the IOUG BIWA SIG, and the Georgia Oracle Users Group (GOUSER). I&#8217;d like to thank Greg Lancaster and the entire BI team at Cox Communications for hosting the event, which will take place at Cox Enterprises, Daytona B Conference Room, 6205 Peachtree Dunwoody Road, Atlanta, GA from 3:00 PM to 6:00 PM on February 24th. I&#8217;ll be giving a presentation similar to the one Mark Rittman and I gave at the RMOUG Training Days event described by Mark <a href="http://www.rittmanmead.com/2010/02/19/owb-rmoug-and-odtug-in-denver/">here</a>.</p>
<p>With involvement from diverse groups, I wanted to make sure the presentation would be interesting from a lot of perspectives, so involving core database functionality like OWB seemed important. And this particular presentation is directed at DBAs and developers, so the non-BI representation from GOUSER might be interested in what&#8217;s going on.</p>
<p>If you&#8217;re new to OWB, don&#8217;t be alarmed by the focus on the newest release: 11gR2. I&#8217;ll explain in general what OWB is and how it&#8217;s positioned, moving into some of the new features that make this release the best OWB yet. Also speaking at the event will be Mitch Campbell, Director of Business Intelligence with Oracle, who will be talking about Oracle&#8217;s BI product roadmap. Following both talks, I&#8217;ll be sitting for a BI panel discussion with Mitch and Greg, to give responses to attendees questions, hopefully representing the perspectives of Oracle, their partners, and their customers.</p>
<p>The event is free, with snacks and refreshments provided, so hopefully we&#8217;ll see you there.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2010/02/23/atlanta-bi-users-group-meeting/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Off to Denver</title>
		<link>http://www.rittmanmead.com/2010/02/16/off-to-denver/</link>
		<comments>http://www.rittmanmead.com/2010/02/16/off-to-denver/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 14:47:50 +0000</pubDate>
		<dc:creator>Stewart Bryson</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Oracle Warehouse Builder]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=4357</guid>
		<description><![CDATA[I&#8217;m sitting in the Atlanta airport waiting for my flight to Denver to go to the RMOUG Training Days, which I described here. It&#8217;s snowing (again) in Atlanta, but not very much this time, and I think my flight will take off. To reiterate about RMOUG, Mark and I will be speaking about new features [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m sitting in the Atlanta airport waiting for my flight to Denver to go to the RMOUG Training Days, which I described <a href="http://www.rittmanmead.com/2010/01/27/rmoug-training-days/">here</a>. It&#8217;s snowing (again) in Atlanta, but not very much this time, and I think my flight will take off. To reiterate about RMOUG, Mark and I will be speaking about new features in OWB 11gR2, but the focus will be functionality for DBA&#8217;s and database developers. If you come to the presentation, or see Mark or myself around the conference, feel free to say hello. We would enjoy talking with you about your current BI/DW project, discussing any issues you may be having, or anything that&#8217;s on your mind. Any recommendations on places to go in Denver would be greatly appreciated.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2010/02/16/off-to-denver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Data Rules and Error Handling in Warehouse Builder 10gR2/11gR2</title>
		<link>http://www.rittmanmead.com/2010/01/22/data-rules-and-error-handling-in-warehouse-builder-10gr211gr2/</link>
		<comments>http://www.rittmanmead.com/2010/01/22/data-rules-and-error-handling-in-warehouse-builder-10gr211gr2/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 09:12:59 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Oracle Warehouse Builder]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2010/01/22/data-rules-and-error-handling-in-warehouse-builder-10gr211gr2/</guid>
		<description><![CDATA[One of the less well-known features in recent releases of Warehouse Builder is Data Rules, and how they can help you gracefully handle consistency issues in your data. Data Rules act as virtual constraints on your data and add error handling tables to your mappings to allow you to divert off, or reprocess data that [...]]]></description>
			<content:encoded><![CDATA[<p>One of the less well-known features in recent releases of Warehouse Builder is Data Rules, and how they can help you gracefully handle consistency issues in your data. Data Rules act as virtual constraints on your data and add error handling tables to your mappings to allow you to divert off, or reprocess data that fails one or more consistency checks. Let&#8217;s take a look at an example to see how they work.</p>
<p>To create an example, we have a table called CUSTOMERS_TGT that has a column called GENDER. We want to enforce a data rule that says this column cannot be null. However we want our Warehouse Builder mapping to catch rows coming in that have null in this column, and replace the nulls with an &#8220;Unknown&#8221; value. To start this process we open up the target table in the Data Object Editor (I&#8217;m using version 11gR1 of Warehouse Builder, but the feature works the same in 10gR2 and 11gR2), click on the <strong>Data Rules</strong> tab at the bottom, and click on the <strong>Apply Rule</strong> button.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/01/dq1-1.jpg" height="404" width="500" border="0" hspace="4" vspace="4" alt="Dq1-1" /></p>
<p>I am then presented with the first page of a wizard, and then I&#8217;m shown a list of pre-defined data quality checks that I can select from. I select the <strong>NOT NULL</strong> check and press <strong>Next</strong> to continue, I then name the data quality check and are then asked which table column the check should be &#8220;bound&#8221; to. I select the <strong>GENDER</strong> column and press <strong>Next</strong> to continue.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/01/dq3.jpg" height="400" width="500" border="0" hspace="4" vspace="4" alt="Dq3" /></p>
<p>Once the wizard is complete, my table now has an entry under Data Rules, with this Not Null rule shown as applying and bound to the GENDER column.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/01/dq4.jpg" height="406" width="500" border="0" hspace="4" vspace="4" alt="Dq4" /></p>
<p>I then use the Control Center Manager to redeploy this table, not because the new data rule has caused a physical NOT NULL constraint to be added to the target table (all of these constraints are &#8220;virtual&#8221; and handled within the Warehouse Builder mapping), but because of a &#8220;Shadow Table&#8221; that needs to be deployed alongside the target table to handle the errors. You don&#8217;t see this table listed in the set of tables within the OWB database module, it only appears as a script when you go to redeploy the table, but it&#8217;s important you deploy this (or create your own of the same definition) otherwise the mappings later on will fail.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/01/dq9.jpg" height="259" width="465" border="0" hspace="4" vspace="4" alt="Dq9" /></p>
<p>Note also that your target table shouldn&#8217;t have a real NOT NULL constraint on it , as this can cause your mapping to fail even when error handling is enabled in the mapping, as the real constrain gets in there first before your mapping can gracefully handle the error. The target table should however have a primary key as this is used later on when moving incoming rows around that fail the error check.</p>
<p>Over to the mapping editor now, where I&#8217;ve got a simple mapping that loads from a source table into this target table. Note that my target table, the one above, has some extra rows in the table operator now due to the data rule that I&#8217;ve added to it.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/01/dq6.jpg" height="298" width="500" border="0" hspace="4" vspace="4" alt="Dq6" /></p>
<p>As you can see, the target table has some extra rows that are used to hold any incoming rows that fail data rule checks, with the ERR$$$ columns holding the reason for the error. Before the error handling will take place though you need to tell OWB, via the target table properties editor, to move the errors to the error handling table rather than just ignore, or report on them.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/01/dq7.jpg" height="219" width="334" border="0" hspace="4" vspace="4" alt="Dq7" /></p>
<p>Note also the Error Table section of the table properties, which lets you substitute your own, pre-built error handling table if you want to, and to fine-tune how error records are stored in the table.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/01/dq10.jpg" height="205" width="330" border="0" hspace="4" vspace="4" alt="Dq10" /></p>
<p>So now we&#8217;re ready to go. I deploy the mapping (if the mapping deployment fails because of a table it can&#8217;t find, check that you&#8217;ve deployed the error (shadow) table mentioned above) and then run it. Even though my incoming data had one row with a null value in the GENDER column, the mapping completes successfully.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/01/dq11.jpg" height="150" width="445" border="0" hspace="4" vspace="4" alt="Dq11" /></p>
<p>However the Job Details page shows that some incoming data was diverted to my error handling table.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/01/dq12.jpg" height="164" width="533" border="0" hspace="4" vspace="4" alt="Dq12" /></p>
<p>SQL Developer shows that the new error handling table does in fact contain the row that&#8217;s failed the data quality check.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/01/dq13.jpg" height="157" width="500" border="0" hspace="4" vspace="4" alt="Dq13" /></p>
<p>Checking the target table shows that all of the remaining rows are compliant with the NOT NULL data rule.</p>
<p>But what if we wanted to correct data that failed the check, as well as record it in this error handling table. Well, we can take the output of the error rows in the target table operator, apply a transformation to it and then load just these back into the target table, if there&#8217;s a &#8220;not known&#8221; value for example that we wish to apply to values that would otherwise be null.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/01/dq14.jpg" height="278" width="500" border="0" hspace="4" vspace="4" alt="Dq14" /></p>
<p>Make sure you set the error handling action of this new target table operator to also reject rows that fail the not null check (otherwise you might inadvertently add the row back with data that might still fail the data rule check).</p>
<p>Running the mapping again shows it executing correctly, but this time if I check SQL Developer, I can see a new row appearing that has had its otherwise null GENDER value converted to a &#8220;U&#8221;, for unknown.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/01/dq15.jpg" height="201" width="362" border="0" hspace="4" vspace="4" alt="Dq15" /></p>
<p>The mapping execution still added a row to the error table though for this row, so that I can see where the mapping has corrected data in the background.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2010/01/dq16.jpg" height="158" width="500" border="0" hspace="4" vspace="4" alt="Dq16" /></p>
<p>The process works in the same way for other data rules you might apply, such as domain check rules, foreign key rules, &#8220;not number&#8221; rules and so forth. <del datetime="2010-01-27T21:53:04+00:00">One thing to bear in mind though is that these mappings run in PL/SQL (as opposed to SQL, set-based) mode and therefore might not perform as well as ones without data rules applied</del> <em>[This was fixed from 10.2.0.3, see the note from David Allen in the comments below, these mappings now run set-based in the same way as other mappings]</em>. However if you think about the benefits in terms of graceful error handling, the &#8220;self-documenting&#8221; nature of mappings that use this feature and so on, it&#8217;s certainly a good way of handling data quality issues in your staging or integration layer before bulk-loading the data into your main warehouse tables.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2010/01/22/data-rules-and-error-handling-in-warehouse-builder-10gr211gr2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>OWB11gR2 on Windows?</title>
		<link>http://www.rittmanmead.com/2009/12/10/owb11gr2-on-windows/</link>
		<comments>http://www.rittmanmead.com/2009/12/10/owb11gr2-on-windows/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 01:43:15 +0000</pubDate>
		<dc:creator>Borkur Steingrimsson</dc:creator>
				<category><![CDATA[Oracle Warehouse Builder]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2009/12/10/owb11gr2-on-windows/</guid>
		<description><![CDATA[So, OWB 11g R2 is out now, and has been for a few weeks &#8211; ever since the database version was released. But as a Windows version of the database hasn&#8217;t been released yet we are also stuck with Linux version version of OWB. Or are we? If you think about it, OWB is an [...]]]></description>
			<content:encoded><![CDATA[<p>So, OWB 11g R2 is out now, and has been for a few weeks &#8211; ever since the database version was released. But as a Windows version of the database hasn&#8217;t been released yet we are also stuck with Linux version version of OWB. Or are we? If you think about it, OWB is an application written in Java. So why should there be any real difference between the Windows release and Linux? At least that was my thought.</p>
<p>So, I set out to give it a go: Can I run the Linux installed version of OWB11gR2 on Windows? And the answer is simple: It&#8217;s easy as pie</p>
<p>First you need to download the stand-alone version linux version of the binaries. Follow the instruction and install the software on a linux box. I used an Oracle REL VM for this purpose. Once the installer has completed we need to copy the whole OWB home over to our Windows box (I used Windows XP VM). Once we get the 1GB directory copied over there are a few minor steps we must take:</p>
<ol>
<li>Make sure we have a java runtime to use. The Linux install will not include a Windows version of JRE/JDK. I had an Oracle DB installed on my VM so I used the JDK that came with that installation.</li>
<li>Create a valid setowbenv.bat file that takes care of setting up the OWB runtime environment. The $OWB_HOME/bin/win32/ directory contains a template file, setownenv.tmp for this, so go ahead and make a working version.</li>
<li>Run the owbclient.bat file from the £OWB_HOME/bin/win32/ directory and you are good to go</li>
</ol>
<p><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/12/config.png" alt="config.png" width="480" height="91" /></p>
<p><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/12/owb11gr2_on_windows.png" alt="owb11gr2_on_windows.png" width="480" height="294" /></p>
<p>Since you need to connect to an OWB11gR2 repository, I simply followed the documents to run against an 11gR1 database on my VM. To put it simple you need to upgrade the pre-sseded OWBSYS schema that comes with all 11g Oracle instances to the R2 version. After that you are good to go &#8230;<P></p>
<p><B> UPDATE:</B> To sum up the extra steps I have put in the comments here:</p>
<ol>
<li> To get the Control Center Agent running (the bit that takes care of the new Code Template technology): Edit the %OWBHOME%\owb\jrt\config\secure-web-site.xml file and fix the absolute path of the <i>ssl-config keystore</i> entry</li>
<li> To get the Control Center Service running (the bit that takes (and always has taken) care of the regular mappings): Make sure that the %JAVAHOME% variable is set to a proper Java home, in the %OWBHOME%\owb\bin\win32\run_service_local.bat file. Then start the service using the local_service_login.bat script.</li>
<p>/
<ol>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2009/12/10/owb11gr2-on-windows/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>UKOUG Tech and EBS Conference, Day 1</title>
		<link>http://www.rittmanmead.com/2009/11/30/ukoug-tech-and-ebs-conference-day-1/</link>
		<comments>http://www.rittmanmead.com/2009/11/30/ukoug-tech-and-ebs-conference-day-1/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 22:38:53 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Oracle Data Integrator]]></category>
		<category><![CDATA[Oracle Warehouse Builder]]></category>
		<category><![CDATA[User Groups & Conferences]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=3704</guid>
		<description><![CDATA[I&#8217;m now back in my hotel room, having escaped from the Focus Pubs at the end of Day 1 of the UKOUG Technology and E-Business Suite Conference in Birmingham. It&#8217;s been a long day, with an 8am meeting on the stand in the exhibition, a stint in the speaker ready room prepping my demonstrations, and [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m now back in my hotel room, having escaped from the Focus Pubs at the end of Day 1 of the UKOUG Technology and E-Business Suite Conference in Birmingham. It&#8217;s been a long day, with an 8am meeting on the stand in the exhibition, a stint in the speaker ready room prepping my demonstrations, and then delivery of two sessions this afternoon on OBIEE, Essbase and Oracle Warehouse Builder 11gR2.</p>
<p>This year we&#8217;ve brought most of the consulting team along to the conference, as a way of getting to see people who are often working away on-site, and so that everyone can get to meet the great delegates, speakers and partners at the conference. Here&#8217;s the team at the start of the day, having just set up the demo and waiting for the opening of the exhibition.</p>
<p align="center"><img src="http://farm3.static.flickr.com/2620/4148504538_b622287e1e_d.jpg" alt="" /></p>
<p>And here&#8217;s things at the end of the day, during the Exhibition Hall Drinks Reception. We had our famous Rittman Mead beer available again, and it was great to catch up with people such as Paul Vallee, Connor McDonald, Jonathan Lewis, Lisa Dobson and everyone else who stopped by.</p>
<p align="center"><img src="http://farm3.static.flickr.com/2713/4147747981_bd28b827aa_d.jpg" alt="" /></p>
<p>The two sessions we ran today were on Essbase and OBIEE Integration, and on the new 11gR2 release of OWB. The Essbase and OBIEE session went well; we had Venkat doing the demos, myself doing the positioning, and then a great questions and answer session at the end where we discussed attendees experiences with the integration and gave some feedback on what worked for us. The slides are available <a href="http://www.rittmanmead.com/files/UKOUG_2009_OBIEE_and_Essbase_Deep_Dive.pdf">here</a> if you&#8217;re interested.</p>
<p>The second session was particularly well attended and was on the 11gR2 version of OWB. Now if you&#8217;ve been following our blog, we&#8217;ve posted a <a href="http://www.rittmanmead.com/category/oracle-warehouse-builder/">series of articles</a> on this new release, and we&#8217;re particularly excited by the new code template (ODI) features in this release, especially as the integration between the ODI and OWB technologies seems to have been done so well. We were lucky enough to be joined by Craig Stewart, our Oracle ODI representative in EMEA and someone we know well from his attendance at various user group events and indeed our own BI Forum earlier in the year in Brighton. Craig was able provide a &#8220;hot off the presses&#8221; roadmap slide on OWB and ODI 12g which he&#8217;s kindly agreed for me to reproduce here:</p>
<p align="center"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/11/roadmapowb.png" alt="roadmapowb" title="roadmapowb" width="510" height="385" class="aligncenter size-full wp-image-3705" /></p>
<p>What we can take from this are a few points:</p>
<ul>
<li>Going forward, the OWB product name will be de-emphasized in favour of &#8220;In-Database ETL&#8221;, to differentiate itself from Oracle&#8217;s strategic data integration platform, ODI</li>
<li>The 11gR2 version of OWB will be the last in it&#8217;s current packaging, and license-wise it&#8217;ll now be incorporated into ODI Enterprise Edition. The free OWB functionality will still remain but will be renamed &#8220;In-Database ETL&#8221; as above.</li>
<li>ODI 12g is the target version for integration between the ODI and OWB platforms</li>
<li>There will be an ODI 11g release out in the first half of next year (usual disclaimers apply</li>
<li>ODI is the strategic data integration platform for Oracle</li>
</ul>
<p>Again, the slides are available for download <a href="http://www.rittmanmead.com/files/UKOUG_2009_OWB11gR2_New_Features.pdf">here</a> if you want to take a look, and they cover code templates, heterogeneous sources, OBIEE integration, change data capture and web service integration.</p>
<p>Craig is actually going to join me again tomorrow for the ODI and Oracle BI Applications session I&#8217;ll be running (14.30 &#8211; 15.30, Tuesday, Hall 10b), so again if you&#8217;ve got questions on the ETL direction for the BI Applications and the role that ODI will play, come along and we&#8217;ll be pleased to answer any questions.</p>
<p>Finally, if you&#8217;re around tomorrow (Tuesday) evening, we&#8217;re running a BI &#8220;Appreciation&#8221; drinks session at the Pitcher and Piano, Brindley Place, from 6pm &#8211; 9pm. If you&#8217;re a BI user, customer, developer, partner etc, or you just know us and would like to join us for drinks and canapes, come down in the evening and it&#8217;ll be great to see you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2009/11/30/ukoug-tech-and-ebs-conference-day-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>OWB 11gR2 Workspace Creation Issues</title>
		<link>http://www.rittmanmead.com/2009/10/31/owb-11gr2-workspace-creation-issues/</link>
		<comments>http://www.rittmanmead.com/2009/10/31/owb-11gr2-workspace-creation-issues/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 20:41:03 +0000</pubDate>
		<dc:creator>Stewart Bryson</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Oracle Database]]></category>
		<category><![CDATA[Oracle Warehouse Builder]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=3502</guid>
		<description><![CDATA[First of all, I&#8217;d like to thank David Allan of the OWB Product Team for helping me solve the problem I discuss below&#8230; and also for identifying what he thinks to be the cause.
A few days after Oracle Database 11gR2 was available, I went about building my first VM to test both the database features [...]]]></description>
			<content:encoded><![CDATA[<p>First of all, I&#8217;d like to thank David Allan of the OWB Product Team for helping me solve the problem I discuss below&#8230; and also for identifying what he thinks to be the cause.</p>
<p>A few days after Oracle Database 11gR2 was available, I went about building my first VM to test both the database features as well as OWB. I installed 64-bit Oracle Enterprise Linux 5.4 on a VM and then installed the 64-bit version of Oracle Database 11gR2. The database install went just fine, and once complete I executed $ORACLE_HOME/owb/bin/owb to get OWB started, specifying a valid username and password. OWB recognizes that my username is not a registered user of an existing workspace, so it asks me if I want to create a new workspace&#8230; or at least register with an existing one.</p>
<div style="text-align:center"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/login-error.png" alt="login error.png" border="0" width="500" height="214" /></div>
<p></p>
<p>I select yes, which immediately launches the Repository Assistant. I select the first option, &#8220;Manage Warehouse Builder Workspaces&#8221;, and then again select the first option: &#8220;Create a new Warehouse Builder workspace&#8221;. At the next screen, I select &#8220;Create a workspace with a new user as workspace owner&#8221;.</p>
<div style="text-align:center"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/new-or-existing-user.png" alt="new or existing user.png" border="0" width="500" height="401" /></div>
<p></p>
<p>At Step 6, I provide a username for my new workspace, a password, and a name for the workspace. Then I select Next.</p>
<div style="text-align:center"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/workspace-owner.png" alt="workspace owner.png" border="0" width="500" height="401" /></div>
<p></p>
<p>At Step 10, I go ahead and select the username STEWART to be added as a workspace user, and then select next. I then get a summary screen, where I press Finish. Immediately, I get an error involving the installation of the OWBSYS user. The actual exception is &#8220;oracle.ide.ExitNotAllowedException&#8221; in the process called &#8220;processLoadJavaToken&#8221;.</p>
<div style="text-align:center"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/repository-error.png" alt="repository error.png" border="0" width="500" height="462" /></div>
<p></p>
<p>I look at the log generated by the Repository Assistant in the $ORACLE_HOME/owb/UnifiedRepos directory&#8230; but the only additional piece of information supplied is the following: &#8220;Error occurred during Seeding OWBSYS&#8221;. This was all quite confusing, as I knew that Mark had successfully built OWB with no issues, and so had Pete Scott, Venkat and others.</p>
<p>At this point, I contacted David Allan and asked if he had seen this error, which he hadn&#8217;t. He looked into it a bit further, but in the end, he simply recommended that I clean out the OWBSYS user and then try to &#8220;seed&#8221; it manually, which simply means creating the required objects in the schema for supporting new workspaces. This is of course what the Repository Assistant is trying to do, but for whatever reason, the seed process in the GUI is not working correctly for me.</p>
<p>To clean out the OWBSYS schema, I use the clean_owbsys.sql script in the $ORACLE_HOME/owb/UnifiedRepos directory. This will drop the OWBSYS user and all roles associated with it.</p>
<pre>
SQL&gt; @clean_owbsys

User dropped.

User dropped.

Role dropped.

Role dropped.

Role dropped.

SQL&gt;
</pre>
<p>I follow that up with cat_owb.sql script, which recreates OWBSYS and seeds all the required objects. I truncated some of the output for brevity sake, which I indicated with the &#8220;&#8230;&#8221; characters.</p>
<pre>
SQL&gt; @cat_owb
Enter Tablespace Name for OWBSYS user:
USERS

Package created.

Package body created.

Create user OWBSYS with default tablespace USERS ...
old   1: CREATE USER OWBSYS IDENTIFIED BY OWBSYS DEFAULT TABLESPACE &amp;owbsys_tbs
new   1: CREATE USER OWBSYS IDENTIFIED BY OWBSYS DEFAULT TABLESPACE USERS

User created.

User OWBSYS has been created.

PL/SQL procedure successfully completed.

Grant succeeded.

...

Grant succeeded.

PL/SQL procedure successfully completed.

PL/SQL procedure successfully completed.

Commit complete.

...

PL/SQL procedure successfully completed.

Commit complete.

Role created.

Grant succeeded.

Role created.

Grant succeeded.

Role created.

Grant succeeded.

...

Grant succeeded.

old   1: CREATE USER owbsys_audit IDENTIFIED BY owbsys_audit DEFAULT TABLESPACE &amp;owbsys_tbs
new   1: CREATE USER owbsys_audit IDENTIFIED BY owbsys_audit DEFAULT TABLESPACE USERS

User created.

Grant succeeded.

Grant succeeded.

Synonym created.

...

Synonym created.

Table created.

PL/SQL procedure successfully completed.

User altered.

User altered.

NOTE: To associate the Control Center with the correct OWB home, now run owb/UnifiedRepos/reset_owbcc_home.sql. You must run the script as a user with java admin privileges. For example, connect as sys as sysdba to run the script.
SQL&gt;
</pre>
<p>I follow the advice from the cat_owb.sql script, and I execute the reset_owbcc_home.sql.</p>
<pre>
SQL&gt; @reset_owbcc_home
Enter the full path of the Oracle home for the OWB Control Center install.
If you are installing in a Windows environment, please ensure that the case of the path exactly matches the Oracle install path including the drive letter.

OWB Control Center Home:
/oracle/product/11.2.0/dbhome_1

PL/SQL procedure successfully completed.

PL/SQL procedure successfully completed.

SQL&gt;
</pre>
<p>The cat_owb.sql script recreates and locks the OWBSYS account&#8230; so I unlock the account and change the password. Now, when I run the repository assistant I get a different result.</p>
<div style="text-align:center"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/install-successful.png" alt="install successful.png" border="0" width="500" height="274" /></div>
<p></p>
<p>David Allan&#8217;s assessment of the cause of this issue is the use of the client tools, namely the Design Client and the Repository Assistant, on a 64-bit Linux platform. According to the <a href="http://www.oracle.com/technology/products/warehouse/htdocs/OTN_Certify.html">certification matrix</a>, none of the OWB client tools are certified on 64-bit Linux. That&#8217;s very strange, as it&#8217;s unclear why any of the client tools would continue to ship on the 64-bit installations if they shouldn&#8217;t be used.</p>
<p>Remember, both the Oracle Database and OWB continue to be supported on 64-bit Linux, it&#8217;s just my use of the client tools from that same installation that is not supported. Were I to download a 32-bit Linux installation and use the client tools from that installation to connect to a 64-bit installation&#8230; I&#8217;d be using a certified solution. And when Oracle starts shipping 11gR2 on Windows, the use of the 32-bit Windows client installation to connect to the 64-bit database installation is supported as well.</p>
<p>I can certainly work around the workspace creation issue, as I showed above, by doing the OWBSYS seeding manually. However, as David points out, I&#8217;m opening myself up for lots of issues by using a non-certified OWB client.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2009/10/31/owb-11gr2-workspace-creation-issues/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Upgrading an OWB Project to 11gR2</title>
		<link>http://www.rittmanmead.com/2009/10/29/upgrading-an-owb-project-to-11gr2/</link>
		<comments>http://www.rittmanmead.com/2009/10/29/upgrading-an-owb-project-to-11gr2/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 15:50:41 +0000</pubDate>
		<dc:creator>Stewart Bryson</dc:creator>
				<category><![CDATA[Oracle Database]]></category>
		<category><![CDATA[Oracle Warehouse Builder]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=3481</guid>
		<description><![CDATA[Mark has been out front and center in demonstrating the new features of OWB 11gR2, both in the OWB Unconference and in numerous blog postings over the last few months. But one thing we haven&#8217;t covered yet on the blog is what the upgrade of a current OWB project looks like. I will be demonstrating [...]]]></description>
			<content:encoded><![CDATA[<p>Mark has been out front and center in demonstrating the new features of OWB 11gR2, both in the <a href="http://www.rittmanmead.com/2009/10/13/calling-all-owb-developers-oow-2009/">OWB Unconference</a> and in numerous <a href="http://www.rittmanmead.com/category/oracle-warehouse-builder/">blog postings</a> over the last few months. But one thing we haven&#8217;t covered yet on the blog is what the upgrade of a current OWB project looks like. I will be demonstrating how to upgrade an 11.1.0.6 OWB project to 11gR2, but I will also point out some of the different steps that should be taken if your version of OWB is 10g. The database I&#8217;m going to be upgrading is from the VM I put together to do <a href="http://www.rittmanmead.com/2009/04/22/using-a-partition-by-join-to-fill-in-the-gaps/">this</a> blog posting&#8230; it consists of two mappings and a single process flow.</p>
<p>As OWB installs as part of the database now, the upgrade to 11gR2 begins with an update to the database, and regardless of the intial platform, most of the database upgrade looks the same. I start by running the database installer, and when prompted for configurations preferences, I select &#8220;Upgrade an existing database&#8221;.</p>
<div style="text-align:center"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/install-11gR2.png" alt="install 11gR2.png" border="0" width="500" height="375" /></div>
<p></p>
<p>After the software install is complete, the Database Upgrade Assistant (DBUA) launches automatically to handle upgrading existing databases. The Assistant handles the basic tasks of starting the database with STARTUP UPGRADE, and then executing the appropriate catalog scripts to manage the modifications to the data dictionary, as well as other stored objects owned by the various default Oracle schemas.</p>
<div style="text-align:center"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/dbua.png" alt="dbua.png" border="0" width="500" height="354" /></div>
<p></p>
<p>During the database upgrade, I can see all the different components of the Oracle Server being upgraded, including the Java server, the XML server, the OLAP catalog, etc.</p>
<div style="text-align:center"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/dbua-progress.png" alt="dbua progress.png" border="0" width="500" height="348" /></div>
<p></p>
<p>The only interesting thing about my database upgrade is that the process changed the default port for the listener from 1521 to 1522. When I create demonstration database VM&#8217;s on my Mac, I typically use dynamic listener registration, which eliminates the need for a listener.ora file. Instead, the database uses the information in the pfile or spfile to register services to listen for, but I&#8217;m not really sure why the Upgrade Assistant thought I needed to change the port number.</p>
<p>This change is problematic for OWB installations, as I already know that I will have to modify all the database and process flow locations to use this new port number. It&#8217;s a huge inconvenience that I could eliminate by moving away from dynamic listener registration and creating a listener.ora file. However, it seems like a decent thing to work through in the name of science, so I leave it and move on.</p>
<p>After the database upgrade is complete, I now have the database mounted with the new ORACLE_HOME, therefore the 11gR2 binaries and database objects are available for this database, and if I were to create a new OWB project, then that project would use the 11gR2 version of OWB. But pre-existing OWB projects don&#8217;t get upgraded automatically, and there&#8217;s quite bit of massaging required to make this happen. The process of upgrading the OWB repository is one instance where the upgrade steps will differ depending on which database version is being upgraded. Because 11gR1 already has the concept of the &#8220;workspace&#8221; built in, the schema OWBSYS already exists, so the main modification to the repository is the addition of the OWBSYS_AUDIT schema. To make the required change to the repository, the $ORACLE_HOME/owb/UnifiedRepos/cat_owb_reposupgrade.sql script is executed as SYSDBA.</p>
<pre>
SQL&gt; @cat_owb_reposupgrade

Role altered.

Grant succeeded.

Grant succeeded.

PL/SQL procedure successfully completed.

PL/SQL procedure successfully completed.

Commit complete.
</pre>
<p>If the upgrade is performed against a 10gR2 database, the OWBSYS schema doesn&#8217;t exist yet, and needs to be created. In this case, the $ORACLE_HOME/owb/UnifiedRepos/cat_owb.sql should be executed instead.</p>
<p>The next step is to run the OWB Repository Assistant to complete the migration of the repository. I&#8217;m not exactly sure why the Repository Assistant couldn&#8217;t have included the previous step of running either the cat_owb_reposupgrade.sql or cat_owb.sql scripts. It&#8217;s not a major effort to do that step manually, but simplifying the process wherever possible is a definite benefit.</p>
<p>On Linux, the Repository Assistant is executed using the $ORACLE_HOME/owb/bin/unix/reposinst.sh script. One of the first questions I get asked is what sort of operation I would like to complete, and I select &#8220;Upgrade repository to current release of Oracle Warehouse Builder&#8221;.</p>
<div style="text-align:center"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/repository-assistant.png" alt="repository assistant.png" border="0" width="500" height="432" /></div>
<p></p>
<p>I am then asked what sort of upgrade option I would like to perform. I choose &#8220;Upgrade repository on the same database instance&#8221;, and then the upgrade process takes off.</p>
<div style="text-align:center"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/repository-assistant2.png" alt="repository assistant2.png" border="0" width="500" height="432" /></div>
<p></p>
<p>The other options include &#8220;Export entire repository to a file&#8221; or &#8220;Import entire repository from a file&#8221;. According to the <a href="http://download.oracle.com/docs/cd/E11882_01/owb.112/e10579/migrate.htm#CHDEHGJG">documentation</a>, we would have to perform these two steps manually if our repository was 10g, first exporting the entire contents to a file, and then importing them. I don&#8217;t know what aspect of the 10g upgrade limits the &#8220;upgrade in place&#8221; option. Conceptually, the lack of workspace functionality is quite a significant change, but I&#8217;m not certain it&#8217;s significant enough that it can&#8217;t be handled by a single migration option in the Repository Assistant.</p>
<p>Anyway.. back to 11gR1. While the Repository Upgrade is underway, we see several different informational messages concerning the status of the upgrade. Finally, I get a message that states: &#8220;Upgrading repository completed successfully&#8221;. Not the best grammar&#8230; but it&#8217;ll do.</p>
<div style="text-align:center"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/repository-complete.png" alt="repository complete.png" border="0" width="500" height="257" /></div>
<p></p>
<p>Once the migration is complete, I launch the OWB Client to have a look around and notice that the mappings and process flows are all deployed, and the deployment and execution history is all intact. However, I know I have to modify the port number for all the locations (because it was changed to 1522 during the database upgrade), and also update the version from 11.1 to 11.2 for all the database locations. There are two options for completing this, and because I&#8217;m using a VM, I was able to test both options by first trying one, rolling back, and then trying the other. Both worked successfully for me, so pick your poison.</p>
<p>First, I unregister all the locations, make the required modifications, and then reregister them. Then I redeploy all the dependent objects (mappings, process flows), and this worked fine. However, I only had two mappings and a single process flow. If this were an actual OWB project for a data warehouse, there would be lots of mappings and process flows, so you would have to decide if you think this is worth it.</p>
<div style="text-align:center"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/location-modification.png" alt="location modification.png" border="0" width="500" height="349" /></div>
<p></p>
<p>The second choice is to use the Repository Browser to upgrade the locations, and the instructions are in the <a href="http://download.oracle.com/docs/cd/E11882_01/owb.112/e10579/migrate.htm#CHDJJIGA">documentation</a>. I start the Repository Browser listener by executing $ORACLE_HOME/owb/bin/unix/startOwbbInst.sh, and then point a browser to https://localhost:8999/owbb/RABLogin.uix?mode=design. After logging into the Repository Browser, I choose Location Reports. I can start with any of the database or process flow locations by clicking the &#8220;Unknown&#8221; hyperlink in the the Validation column.</p>
<div style="text-align:center"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/location-report.png" alt="location report.png" border="0" width="500" height="147" /></div>
<p></p>
<p>I set the port number to 1522, and then click Update Details. Then I click Get Status, and click Upgrade.</p>
<div style="text-align:center"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/upgrade-location.png" alt="upgrade location.png" border="0" width="500" height="333" /></div>
<p></p>
<p>This completes the upgrade of the locations. Now it&#8217;s time to execute the process flow, which in turn executes the two mappings.</p>
<div style="text-align:center"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/flow-success.png" alt="flow success.png" border="0" width="500" height="280" /></div>
<p></p>
<p>So at this point, I have my OWB project migrated and working, but I&#8217;m not taking advantage of any of the new features that Mark has been blogging about. I&#8217;ll tackle that with my next post&#8230; how to modify mappings to make better use of the Code Template functionality.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2009/10/29/upgrading-an-owb-project-to-11gr2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Publishing Mappings as Web Services using OWB11gR2</title>
		<link>http://www.rittmanmead.com/2009/10/18/publishing-mappings-as-web-services-using-owb11gr2/</link>
		<comments>http://www.rittmanmead.com/2009/10/18/publishing-mappings-as-web-services-using-owb11gr2/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 18:38:17 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Oracle Warehouse Builder]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2009/10/18/publishing-mappings-as-web-services-using-owb11gr2/</guid>
		<description><![CDATA[Over the past few weeks I&#8217;ve covered some of the new features in OWB11gR2 including heterogeneous sources and targets, code template mappings, hybrid mappings, change data capture and OBIEE integration. 11gR2 comes with a bunch of other interesting new features including data chunking (automatic parallelization of PL/SQL mappings), orphan management for dimension loading, support for [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past few weeks I&#8217;ve covered some of the new features in OWB11gR2 including <a href="http://www.rittmanmead.com/2009/09/21/code-templates-in-owb11gr2-part-1-introduction-and-support-for-heterogeneous-databases/">heterogeneous sources and targets</a>, <a href="http://www.rittmanmead.com/2009/09/21/code-templates-in-owb11gr2-part-2-introduction-to-code-template-mappings/">code template mappings</a>, <a href="http://www.rittmanmead.com/2009/09/22/code-templates-in-owb11gr2-part-3-hybrid-code-template-mappings/">hybrid mappings</a>, <a href="http://www.rittmanmead.com/2009/10/10/changed-data-capture-and-owb11gr2/">change data capture</a> and <a href="http://www.rittmanmead.com/2009/09/10/owb-11gr2-and-bi-ee-deriving-the-business-model-part-1/">OBIEE</a> <a href="http://www.rittmanmead.com/2009/09/16/owb-11gr2-and-bi-ee-creating-a-business-model-part-2/">integration</a>. 11gR2 comes with a bunch of other interesting new features including data chunking (automatic parallelization of PL/SQL mappings), orphan management for dimension loading, support for EJBs in process flows and enhanced configuration management, but one feature I particularly wanted to blog about was the ability of OWB11gR2 to publish and consume web services.</p>
<p>This feature works in two ways. Mappings, process flows, data auditors and transformations can be published as web services, as well as tables (more on this later on). Process flows can also now consume web services, so that data can be brought in from an external source and copied in to staging tables. The process works through publishing the mapping, process, data auditor or transformation to either OC4J Standalone or Oracle Application Server (though curiously, not Weblogic which is now the standard for the rest of the Oracle BI stack), so that it can either be called from an external process or a remote installation of Warehouse Builder. So how does it work?</p>
<p>To keep things simple, I created a basic mapping that copied a few rows of data from a source table to a target table. The web service integration works with both classic and code template mappings, and this one was created as a straightforward classic (database-resident) mapping.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa7.jpg" height="231" width="500" border="1" hspace="4" vspace="4" alt="Soa7" /></p>
<p>I then deploy this mapping to the target database as usual.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa8.jpg" height="220" width="402" border="1" hspace="4" vspace="4" alt="Soa8" /></p>
<p>Now it&#8217;s time to set the web service up. To start, I create a new <strong>Application Server</strong> module within the OWB11gR2 Project Explorer, a module type that&#8217;s new for this release.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa1.jpg" height="240" width="413" border="1" hspace="4" vspace="4" alt="Soa1" /></p>
<p> I connect to the bundled OC4J instance that comes with OWB11gR2, and enter the connection details.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa3.jpg" height="386" width="500" border="1" hspace="4" vspace="4" alt="Soa3" /></p>
<p>Once this module is set up, I can see it in the Project Explorer along with entries for individual web services and web service packages.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa4.jpg" height="266" width="290" border="1" hspace="4" vspace="4" alt="Soa4" /></p>
<p>At this point I can add two types of web service. I can register external web services, via a WSDL file and a URL, so that I can reference them in process flows within my project. Or I can do what I&#8217;m going to do now, and register one of the mappings, process flows, transformations or data auditors as a web service, so that I can call them from outside Warehouse Builder or indeed through one of my own process flows (I&#8217;ll explain why in a moment).</p>
<p>The simplest way to make a mapping available as a web service is to right-click on it and select <strong>Create as Web Service</strong>. I do this with the mapping I created earlier.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa9.jpg" height="254" width="471" border="1" hspace="4" vspace="4" alt="Soa9" /></p>
<p>This brings up an initial dialog where I select the application server to deploy it to. I select the local OC4J instance that I registered in the project earlier.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa10.jpg" height="355" width="434" border="1" hspace="4" vspace="4" alt="Soa10" /></p>
<p>Warehouse Builder creates the new web service in the application server module. The project now looks like this.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa11.jpg" height="154" width="279" border="1" hspace="4" vspace="4" alt="Soa11" /></p>
<p>Double-clicking on the new web service shows the options for web services within OWB. For this entry though, the choices are greyed out and all I can do is view what&#8217;s already been set.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa12.jpg" height="435" width="500" border="1" hspace="4" vspace="4" alt="Soa12" /></p>
<p>Creating a new web service from scratch though, without right-clicking on an existing module, makes all of the options available. Interestingly, there&#8217;s an option to <strong>Create from a Table or Module for Change Data Capture</strong>.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa15.jpg" height="388" width="500" border="1" hspace="4" vspace="4" alt="Soa15" /></p>
<p>In Oracle Data Integrator, creating a web service over an existing table or view makes it available for insert, update, select or delete via web service calls (see <a href="http://www.rittmanmead.com/2008/02/20/delving-in-to-odis-web-services-support/">here</a> for more information on ODI and web services). In OWB11gR2 though, creating web services off of tables or database modules provides methods for starting and stopping changed data capture, extending and purging the capture window, or adding or removing subscribers, which answers the question in <a href="http://www.rittmanmead.com/2009/10/10/changed-data-capture-and-owb11gr2/">my previous blog post on change data capture</a> as to how these tasks are performed programmatically. What presumably you&#8217;d do then is publish these web service methods and then call then from within a process flow to extend and purge the CDC subscriber window, a bit of a roundabout method but one that replicates the module functionality in ODI.</p>
<p>Going back to my previous web service, I now need to generate the code to implement the web service. I select the web service module and select <strong>Generate&#8230;</strong>.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa17.jpg" height="291" width="492" border="1" hspace="4" vspace="4" alt="Soa17" /></p>
<p>This generates the code and reports back on the success or failure of the task.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa18.jpg" height="220" width="404" border="1" hspace="4" vspace="4" alt="Soa18" /></p>
<p>Everything looks OK so far. I then deploy the web service, again by right-clicking on the entry in the Project Explorer and selecting <strong>Deploy&#8230;</strong> (I could have used the Control Center Manager instead, if I liked).</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa19.jpg" height="272" width="482" border="1" hspace="4" vspace="4" alt="Soa19" /></p>
<p>Again the task seemed to execute properly, with no reported errors.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa20.jpg" height="249" width="404" border="1" hspace="4" vspace="4" alt="Soa20" /></p>
<p>Before you can run a web service built using an OWB mapping, you need to create an OC4J user that you then assign an execute privilege to. You do this from the main Design Center menu, selecting <strong>J2EE User Management</strong>.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa25.jpg" height="262" width="385" border="1" hspace="4" vspace="4" alt="Soa25" /></p>
<p>Using this interface I create a new user, and assign it the <strong>OWB_J2EE_EXECUTOR</strong> role, which comes pre-created in the bundled OC4J instance that comes with OWB11gR2, but which you&#8217;ll need to create beforehand in standalone installations.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa29.jpg" height="428" width="500" border="1" hspace="4" vspace="4" alt="Soa29" /></p>
<p>So now I&#8217;m ready to roll. I could execute the web service from a URL, or from the OC4J Console that comes with the OC4J instance, like this:</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa24.jpg" height="337" width="500" border="1" hspace="4" vspace="4" alt="Soa24" /></p>
<p>But the easiest way to test it is to run it from within the Control Center Manager, where I can just right-click on it and select <strong>Start</strong>.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa32.jpg" height="235" width="398" border="1" hspace="4" vspace="4" alt="Soa32" /></p>
<p>Starting the web service brings up a menu where i can select the method to be invoked. I select the <strong>Run</strong> method and press <strong>OK</strong>.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa33.jpg" height="166" width="344" border="1" hspace="4" vspace="4" alt="Soa33" /></p>
<p>The web service then runs and completed successfully.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa34.jpg" height="224" width="439" border="1" hspace="4" vspace="4" alt="Soa34" /></p>
<p>Finally, checking the contents of the target table, the rows from the source table have been loaded as expected.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa35.jpg" height="218" width="466" border="1" hspace="4" vspace="4" alt="Soa35" /></p>
<p>Consuming a web service is a fairly straightforward process, and a web service called in this way would typically either move data into a staging area, transform some data or in the case below, extend the subscriber window for a CDC operation.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa36.jpg" height="292" width="500" border="1" hspace="4" vspace="4" alt="Soa36" /></p>
<p>When you add a web service invocation to a process flow, you are presented with a list of the methods available. Once you&#8217;ve selected the method you are interested in, the web service then appears in the process as just another task giving you an easy way to call external processes or perform administration around change data capture.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/10/soa37.jpg" height="101" width="237" border="1" hspace="4" vspace="4" alt="Soa37" /></p>
<p>So there you have it. If you happen to be in <a href="http://www.ougf.fi/index.php?option=com_content&amp;view=article&amp;id=80%3Asyysseminaari-2009&amp;catid=923%3Aseminaari&amp;Itemid=2&amp;lang=en">Helsinki on 5th November</a>, or at our <a href="http://www.rittmanmead.com/trainingdays2009">Training Days later in October</a>, I&#8217;ll be going through all of these new features in a lot more detail. Until then, if you get to use anything new in OWB11gR2 on a project, be sure to leave some feedback, and when things are a bit quieter around here I&#8217;ll finish off the series by looking at data chunking and orphan management.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2009/10/18/publishing-mappings-as-web-services-using-owb11gr2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
