<?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"
	>

<channel>
	<title>The Oracle Lite Blog</title>
	<atom:link href="http://www.rekounas.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rekounas.org</link>
	<description>The Rekounas Blog about Oracle Lite and Mobile Server Technologies and Solutions</description>
	<pubDate>Thu, 28 Aug 2008 13:25:22 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Where to find me at Oracle OpenWorld 2008</title>
		<link>http://www.rekounas.org/2008/08/28/where-to-find-me-at-oracle-openworld-2008/</link>
		<comments>http://www.rekounas.org/2008/08/28/where-to-find-me-at-oracle-openworld-2008/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 13:25:22 +0000</pubDate>
		<dc:creator>rekounas</dc:creator>
		
		<category><![CDATA[Oracle Lite]]></category>

		<category><![CDATA[Oracle OpenWorld]]></category>

		<guid isPermaLink="false">http://www.rekounas.org/?p=53</guid>
		<description><![CDATA[If you plan on attending Oracle OpenWorld 2008 in San Francisco this year, I will be at the Oracle Lite booth in the Oracle DEMOgrounds.  More details as they become available.

]]></description>
			<content:encoded><![CDATA[<p>If you plan on attending Oracle OpenWorld 2008 in San Francisco this year, I will be at the Oracle Lite booth in the Oracle DEMOgrounds.  More details as they become available.</p>
<p><img src="http://www.rekounas.org/wp-content/uploads/2008/08/demogroundssmall.jpg" alt="" title="DEMOgrounds" width="422" height="158" class="alignnone size-full wp-image-54" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rekounas.org/2008/08/28/where-to-find-me-at-oracle-openworld-2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Oracle OpenWorld 2008 Session Suggested</title>
		<link>http://www.rekounas.org/2008/06/13/oracle-openworld-2008-session-suggested/</link>
		<comments>http://www.rekounas.org/2008/06/13/oracle-openworld-2008-session-suggested/#comments</comments>
		<pubDate>Sat, 14 Jun 2008 01:41:07 +0000</pubDate>
		<dc:creator>rekounas</dc:creator>
		
		<category><![CDATA[Oracle Lite]]></category>

		<category><![CDATA[Oracle OpenWorld]]></category>

		<category><![CDATA[2008]]></category>

		<category><![CDATA[OpenWorld]]></category>

		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.rekounas.org/?p=48</guid>
		<description><![CDATA[I have posted a suggestion at Oracle Mix for an Oracle Lite session on sizing and performance tuning.  If you plan on going to Oracle OpenWorld San Francisco 2008 and are interested in this topic, go to Performance Tuning and Sizing Oracle Lite for a Global Enterprise Application and cast your vote.
I am waiting [...]]]></description>
			<content:encoded><![CDATA[<p>I have posted a suggestion at Oracle Mix for an Oracle Lite session on sizing and performance tuning.  If you plan on going to Oracle OpenWorld San Francisco 2008 and are interested in this topic, go to <a href="https://mix.oracle.com/ideas/32780-performance-tuning-and-sizing-oracle-lite-for-a-global-enterprise-application">Performance Tuning and Sizing Oracle Lite for a Global Enterprise Application</a> and cast your vote.</p>
<p>I am waiting for my registration confirmation code and once I have that, I will be posting methods to contact me and my planned schedule at this years event.  If you plan on being at the event this year and would like to meet up, just contact me and through my <a href="http://www.rekounas.org/contact-me">contact form</a> and we can plan ahead.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rekounas.org/2008/06/13/oracle-openworld-2008-session-suggested/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Oracle Lite versus MobiLink</title>
		<link>http://www.rekounas.org/2008/06/05/oracle-lite-versus-mobilink/</link>
		<comments>http://www.rekounas.org/2008/06/05/oracle-lite-versus-mobilink/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 12:25:23 +0000</pubDate>
		<dc:creator>rekounas</dc:creator>
		
		<category><![CDATA[Oracle Lite]]></category>

		<guid isPermaLink="false">http://www.rekounas.org/?p=41</guid>
		<description><![CDATA[As the mobility market is increasing in popularity more companies are recognizing the value of pushing the current boundaries of enterprise applications to extend the reach into mobile computing. With the extension of the enterprise to mobile devices the strategy and technology used to support them has met the growing demand but offered some interesting [...]]]></description>
			<content:encoded><![CDATA[<p>As the mobility market is increasing in popularity more companies are recognizing the value of pushing the current boundaries of enterprise applications to extend the reach into mobile computing. With the extension of the enterprise to mobile devices the strategy and technology used to support them has met the growing demand but offered some interesting new challenges along the way. There are many products on the market today that can be used for deploying mobile applications. I have been asked recently to compare two such products and offer a perspective. The two products evaluated which also happen to be leaders in this space; Oracle Lite and Sybase’s MobiLink. First let’s look at some of the core elements that are required of these products to baseline the evaluation approach.</p>
<table border=1 cellpadding=5 cellspacing=0>
<tr bgcolor="Navy" style="font-weight:bold; color:rgb(255,255,255);">
<th>Global Features</th>
<th>MobiLink Features</th>
<th>Oracle Lite</th>
</tr>
<tr>
<td>Database Synchronization</td>
<td>Bi-directional database synchronization</td>
<td>Bi-directional database replication</td>
</tr>
<tr bgcolor="Aqua">
<td>Synchronization Options</td>
<td>Synchronize over TCP/IP, HTTP, HTTPS, Palm Hotsync, ActiveSync</td>
<td>HTTP, HTTPS, HotSync</td>
</tr>
<tr>
<td>Data Synchronization</td>
<td>Subset data by rows and columns</td>
<td>Sync done by rows and subset parameters.  Columns are defined for sync.</td>
</tr>
<tr bgcolor="Aqua">
<td>Execution of Data Synchronization</td>
<td>File Transfer</td>
<td>DDL Scripts</td>
</tr>
<tr>
<td>Synchronization Control</td>
<td>Server-initiated synchronization</td>
<td>Automatic Sync, Server Initiated</td>
</tr>
<tr bgcolor="Aqua">
<td>Conflict Resolution</td>
<td>Programmable conflict resolution in SQL, .NET or Java</td>
<td>Customizing Synchronization Conflict Resolution Outcomes</td>
</tr>
<tr>
<td>Set Synchronization Priority</td>
<td>Priority-based synchronization</td>
<td>Priority-based replication</td>
<tr bgcolor="Aqua">
<td>Encryption</td>
<td>Data encryption</td>
<td>Database encryption</td>
</tr>
</table>
<p>In comparing these products there were a couple of features that did seem to be product specific. Some things that Oracle Lite has that enhanced the synchronization solution are:</p>
<ul>
<li>Device Manager for application updates and and Oracle Lite related patches for each client.  This feature allows an application to update and deploy their application enhancements without having to build or use a third-party deployment mechanism.</li>
<li>Webtogo and OC4J for web based and J2EE applications.  This feature enables an enterprise application to be deployed to a client’s laptop without having the additional requirement of managing a third-party J2EE server container and HTTP server.</li>
</ul>
<p>One distinct difference between these two pieces software is MobiLink is session-based replication vs. Oracle Lite uses asynchronous replication.  Both of these have their advantages and disadvantages.</p>
<table border=1 cellpadding=5 cellspacing=0>
<tr bgcolor="Navy" style="font-weight:bold; color:rgb(255,255,255);">
<th>&nbsp;</th>
<th>Oracle Lite</th>
<th>MobiLink</th>
</tr>
<tr>
<td>Advantages:</td>
<td>Incremental downloads are fast because the data has been composed on the consolidation database.</td>
<td>Consolidation is performed when the user performs synchronization.</td>
</tr>
<tr bgcolor="Aqua">
<td>Disadvantages:</td>
<td>Server changes need to be replicated to the users out queue by the background MGP process.</td>
<td>Concurrent user synchronizing can cause issues with blocking locks and synchronization performance.</td>
</tr>
</table>
<p><em><strong>Environment Baseline</strong></em><br />
In order to create an environment to equally test the two products I have set up a small application syncing 16 tables for both Oracle Lite and MobiLink. The database assumption will replicate the solution to an Oracle database as this appears to be a fairly common type of configuration in my encounters., To keep the anaylsis straight forward the key attributes that will be measured are:</p>
<ul>
<li>Performance</li>
<li>Development</li>
<li>Maintenance</li>
<li>Troubleshooting</li>
</ul>
<p><strong>MobiLink Publication</strong><br />
To get a feel for the MobiLink product, I created a small synchronization model synchronizing 16 tables.  These tables ranged from having a few records to one table syncing 140,000+ records.  The development environment for an experienced SQL developer is pretty easy to follow.  You can customize various events in the synchronization process to suit your needs.  Once you have set up all your business rules and synchronization package, you deploy your model and the software creates scripts for the MobiLink server, a client database (distributed using batch files), and the SQL for your consolidated database.</p>
<p><strong>Oracle Lite Publication</strong><br />
I also created an application in Oracle Lite using same tables as MobiLink to get a good baseline for performance and used the Mobile Workbench for development.  If you have read my blog, you know that I use the Java APIs for development and the reason that I have chosen this path is that the APIs give me something that I can quickly reuse on any Mobile Server environment along with added flexibility in deployment options.  With the Workbench, you first create the publication, then you create the publication items, you add your publication items to the publication, and finally you deploy your publication.<br />
<em><br />
<strong>Results</strong></em><br />
<strong>Performance</strong><br />
I had an assumption that Oracle Lite would be faster for synchronization performance, the only thing that I thought might be quicker in favour of MobiLink was the fact that it synched via TCP/IP.  The test was to do an initial synchronization of 16 tables.  MobiLink remote databases are already installed on the client, so they have a head start.  But even with that head start, Oracle Lite was much faster then MobiLink.  Oracle Lite synchronized 157,131 records in 13 seconds.  The same amount of data took MobiLink 1 minute and 38 seconds.</p>
<p>The most common challenge for most new users of Oracle Lite is the sizing and background performance of Message Generator Processor (MGP).  Sizing of the enterprise database for Oracle Lite accordingly, most people run into issues with space and IO waits.  This is probably the most common factor that user run into with Oracle Lite.  Typically back to my assumption replicated to an Oracle database. If you have Oracle DBAs already on staff, those skills can be leveraged to assist in the Oracle Lite optimization.  </p>
<p><strong>Development</strong><br />
<strong>Mobilink</strong> offers an advantage to very novice users and appears to have the better development environment. This is due to the fact that all the customization can be performed with modification to some simple SQL scripts. Based on your skill sets and strategy this might be an approach however it has some drawbacks. The most significant one is you have to go through these scripts to update various events with your new customized SQL each time and update or deployment is required. This might be ok for very small (30 – 40 tables) environments, but in true enterprise environments this could become more difficult exponentially.</p>
<p><strong>Oracle</strong> offers a different approach to this same type of synchronization event. They achieve this in a similar manner by allowing you to adjust the SQL needed for replication but they build the deployment packages for you. These packages can be tailored or customized if necessary but in my experience it has not been necessary. The one benefit I did find with Oracle Lite is using the API’s for advanced tasks. The API’s allowed me to create integration scripts that could be reused and ended up making the deployments much easier to manage.   </p>
<p><strong>Schema Evolution</strong><br />
Schema evolution is the changes that happen to a database during the life cycle of the application. Tables can be added, modified or deleted during the life of an application. Schema evolution is usually a significant challenge for most mobile systems because getting a schema changes to the client without disrupting the users is extremely difficult.</p>
<p>Oracle Lite holds a clear advantage in schema evolution.  In Oracle Lite, to make changes to a table in you application:</p>
<p>1. Stop Mobile Server.<br />
2. Change the Oracle database schema (add/drop column).<br />
3. Create a Java program to call the ConsolidatorManager API AlterPublicationItem().<br />
4. Start Mobile Server<br />
5. Execute sync from the client<br />
6. The change to the table will now be available on the client.</p>
<p>Typically you should not have to stop/start the server, you can just reset the metadata cache, but it is good practice to shut down the server so no one attempts synchronization while you are performing the change.</p>
<p>For MobiLink&#8217;s schema evolution, I am going to send you to <a href="http://www.ddj.com/mobile/193402348;jsessionid=W2OFQVJIA3IE4QSNDLOSKH0CJUNN2JVN?pgno=2" target="_blank">Dr. Dobbs Portal</a>.  Apparently to achieve the same function you have to build something that will do this and it does not appear to be as easy in the long term as Oracle Lite.</p>
<p>Along with schema evolution, comes referential integrity.  How does MobiLink handle this?  Once again I will send you to <a href="http://www.ddj.com/mobile/193402348;jsessionid=ZHOPZWACTLMUQQSNDLOSKH0CJUNN2JVN?pgno=3" target="_blank">Dr. Dobbs Portal</a>.  Oracle Lite uses table weights.  It applies change to the tables in the order that the publication items are assigned a weight.  So, all the number 1 items get applied first and the number 2 items are second, and so on.  Three methods for applying weights are manually determining your FK constraints per publication item, use the API method assignWeights(), and finally, you can run the code that I have in this <a href="http://www.rekounas.org/2006/11/10/4/" target="_blank">post</a> to determine your weights.</p>
<p><strong>Troubleshooting and Debugging</strong><br />
The better your resources are for troubleshooting issues, the less time it takes to resolve issues.  I haven&#8217;t worked with the MobiLink product enough to identify how good the tools are for troubleshooting.  I can however comment on Oracle Lite&#8217;s troubleshooting resources.  Since I have started working with the product, I would have to say Oracle Lite&#8217;s documentation is probably the biggest improvement Oracle has made to the product.  Starting with the 10g R1 release, Oracle has added tracing to the following:<br />
GLOBAL<br />
SYNC<br />
MGP<br />
MGPAPPLY<br />
MGPCOMPOSE</p>
<p>In those 5 areas of the synchronization life cycle, I can set debugging to 6 different levels (mandatory, warning, normal, info, config, finest, and all).  From that, I can select 6 categories as well (general, SQL, timing, data, resume, function, and all).  Then finally, I can set this for all users or I can simply specify a list of users.  I can do this on the fly through Mobile Manager. Gathering the debug results, I can quickly resolve the issue combined with the schema evolution, fixes have hardly any impact to the user base.</p>
<p>Oracle Lite has also added debugging to the client and SQL tracing of all SQL statements that are executed on the client.  For the client, this is as simple as changing this variable in the polite.ini to OLITE_SQL_TRACE=YES.  With the Device Manager, I can specify that I want to add some debug information for a particular user.  I can then get the user to perform the action that is causing them grief, and with the Device Manager I can then pull the debug file from their device.</p>
<p><strong>Administration</strong><br />
MobiLinks doesn&#8217;t have a user administration interface.  You have to create your own and hook it into their application.  So, on top of developing all the code to do your synchronization, you are going to have to spend some time identifying ways to administer the users.  Oracle Lite has the Mobile Manager.  If you are familiar with Oracle OEM tools, this follows the same conventions.  From Mobile Manager, you can monitor syncs, get debug logs, monitor MGP, add and remove users, add users to applications (did I mention one mobile server can have many publications). Training support staff for trouble shooting is easy with Mobile Manager.</p>
<p>The Mobile Manager can be deployed standalone or on top of Oracle Application Server.  Oracle Lite is an n-tier based enterprise solution.  If you require the use of the APIs to create your users, here is a sample:<br />
<code>MobileResourceManager rm = new MobileResourceManager(con);<br />
rm.createUser("USERNAME", "PASSWORD", "DISPLAYED NAME", "U");<br />
ConsolidatorManager cm = new ConsolidatorManager();<br />
cm.openConnection(con);<br />
cm.setSubscriptionParameter("PUBLICATION_NAME", "USERNAME", "BIND_VARIABLE", "'bind value'");<br />
cm.instantiateSubscription("PUBLICATION_NAME", "USERNAME");</code></p>
<p><strong>Conclusion</strong><br />
If you fall under the following category, then you should be choosing Oracle Lite as your mobile solution:<br />
1.    Already using Oracle Enterprise Database.<br />
2.    Already have an application using Oracle Enterprise Database that has a business requirement to go mobile.<br />
3.    Have a J2EE or .Net application that you need to port to a mobile environment.<br />
4.    Required synchronization of high volumes of data and high volume of tables and database objects.</p>
<p>Reasons to choose MobiLink are:<br />
1.    Your enterprise database is something other then Oracle.<br />
2.    Lots of resources on the net.  Web casts and other information available.</p>
<p><strong>Final thoughts</strong><br />
MobiLink seems to be a good product and fulfills many areas of mobile environment.  However, MobiLink does not seem to have an enterprise approach to mobile computing..  The MobiLink product requires a fair amount of coding before you have users up and running.  Oracle Lite seamlessly integrates with Oracle and Oracle Application Server giving you an n-tier enterprise solution for your business. Over time the current draw back of Oracle Lite such as lack of documentation will improve. The technology appears to be solid and is applying the lessons Oracle has learned in the Enterprise. Looking at the total cost of ownership it appears at a high level that Oracle Lite could have a distinct advantage of a lower cost over the life of a mobile enterprise application. </p>
<p>Authors:<br />
<a href="http://www.rekounas.org/about/">Greg Rekounas</a><br />
Solution Architect<br />
<a href="http://www.oaot.com">OAO Technology Solutions, Inc.</a></p>
<p><a href="http://www.oaot.com/about/leadership_team.asp?id=306">Cameron Chehreh</a><br />
Chief Technology Officer<br />
<a href="http://www.oaot.com">OAO Technology Solutions, Inc.</a><br />
<a href="http://cioconnection.blogspot.com">CIO Connection</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rekounas.org/2008/06/05/oracle-lite-versus-mobilink/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Is performance tuning important in Oracle Lite Part 2</title>
		<link>http://www.rekounas.org/2008/05/31/is-performance-tuning-important-in-oracle-lite-part-2/</link>
		<comments>http://www.rekounas.org/2008/05/31/is-performance-tuning-important-in-oracle-lite-part-2/#comments</comments>
		<pubDate>Sun, 01 Jun 2008 01:48:41 +0000</pubDate>
		<dc:creator>rekounas</dc:creator>
		
		<category><![CDATA[Oracle Lite]]></category>

		<guid isPermaLink="false">http://www.rekounas.org/?p=44</guid>
		<description><![CDATA[Performance is often overlooked on a mobile database.   Users are generally only dealing with thousands of rows instead of millions of rows, so not a lot of thought is spent on tuning a client database.  I will show you a scenario where querying a table with 3600 hundred records can cause a [...]]]></description>
			<content:encoded><![CDATA[<p>Performance is often overlooked on a mobile database.   Users are generally only dealing with thousands of rows instead of millions of rows, so not a lot of thought is spent on tuning a client database.  I will show you a scenario where querying a table with 3600 hundred records can cause a fair amount of grief to a users device.</p>
<p>First, we create our table:<br />
<code> CREATE TABLE HIERARCHY<br />
(<br />
LEVEL_ID  NUMBER      ,<br />
CHILD_ID  VARCHAR2(40),<br />
PARENT_ID VARCHAR(40)<br />
);</code><br />
Then we populate this recursive table with data.</p>
<p>Using msql, we will execute the following:<br />
<code>SQL&gt; set timing on;<br />
SQL&gt; SELECT count(1)<br />
FROM HIERARCHY START<br />
WITH LEVEL_ID = 1<br />
1&gt; 2&gt; 3&gt; CONNECT BY PRIOR CHILD_ID = PARENT_ID;<br />
COUNT(1)<br />
--------<br />
3681</code></p>
<p><code>1 row(s) returned</code></p>
<p><code>Elapsed:    0:0:18.343</code></p>
<p>Here is a screen shot of what my CPU was doing while I executed the code:<br />
<a href="http://www.rekounas.org/wp-content/uploads/2008/05/processor1.jpg"><img class="alignnone size-medium wp-image-45" title="processor1" src="http://www.rekounas.org/wp-content/uploads/2008/05/processor1-266x300.jpg" alt="" width="266" height="300" /></a></p>
<p>Figure 1</p>
<p>This small query consumed a fair amount of resources for something that is going against 3681 rows.  This example uses the very powerful CONNECT BY clause.  In many field based applications, where data is distributed via some type of organizational hierarchy, these types of queries are quite common.  Imagine what the user would experience on their laptop or hand held device if something like this wasn&#8217;t addressed.  Most users would attribute it to &#8220;my computer is running slow.&#8221;  Something like this could even go unnoticed and over time, become a huge waste of time for users causing loss of productivity resulting in loss of revenue.</p>
<p><strong>Executing Explain Plans in Oracle Lite</strong><br />
Here is what you need to do to execute explain plans in Oracle Lite:<br />
Step 1: Using msql, connect to your Oracle Lite database.<br />
Step 2: Execute the following create table statement:<br />
<code>create table PLAN_TABLE (<br />
statement_id varchar2(30),<br />
timestamp date,<br />
remarks varchar2(80),<br />
operation varchar2(30),<br />
options varchar2(30),<br />
object_owner varchar2(30),<br />
object_name varchar2(30),<br />
id int,<br />
parent_id int,<br />
Position int,<br />
cost int,<br />
cardinality int,<br />
text varchar(4096));</code></p>
<p><code>commit;</code></p>
<p><em>Note: In Oracle Lite, it is important to execute commits after DDL operations as well DML operations.</em></p>
<p>Step 3: Execute your explain plan:<code><br />
EXPLAIN PLAN FOR SELECT LPAD(LEVEL_ID,LENGTH(TO_CHAR(LEVEL_ID))+LEVEL*2,' '), CHILD_ID , PARENT_ID<br />
FROM HIERARCHY<br />
START WITH LEVEL_ID = 1<br />
CONNECT BY PRIOR CHILD_ID = PARENT_ID;</code></p>
<p>Step 4: Your explain plan information is stored in the plan_table:<br />
<a href='http://www.rekounas.org/wp-content/uploads/2008/05/explain_plan1.jpg'><img src="http://www.rekounas.org/wp-content/uploads/2008/05/explain_plan1-300x187.jpg" alt="" title="explain_plan1" width="300" height="187" class="alignnone size-medium wp-image-46" /></a><br />
Figure 2</p>
<p>You can see from the explain plan that the query is doing two full table scans on the HIERARCHY table.  Even though this is just one table, the CONNECT BY clause behind the scenes joins HIERARCHY to itself and since no indexes exist, full table scans are performed on both joins (the CHILD_ID and PARENT_ID).</p>
<p>To improve performance here, we will add two indexes, one for CHILD_ID and one for PARENT_ID.<br />
<code>CREATE INDEX IDX_HIERARCHY_1 ON HIERARCHY(CHILD_ID);<br />
CREATE INDEX IDX_HIERARCHY_2 ON HIERARCHY(PARENT_ID);</code></p>
<p>Now, lets see if the performance of the query improved:<br />
<code>SQL> SELECT count(1)<br />
FROM HIERARCHY START<br />
WITH LEVEL_ID = 1<br />
1> 2> 3> CONNECT BY PRIOR CHILD_ID = PARENT_ID;<br />
COUNT(1)<br />
--------<br />
    3681</code></p>
<p><code>1 row(s) returned</code></p>
<p><code>Elapsed:    0:0:0.63</code></p>
<p>The query has gone from just over 18 seconds to under 1 second.  Lets take a look at the new explain plan:<br />
<a href='http://www.rekounas.org/wp-content/uploads/2008/05/explain_plan2.jpg'><img src="http://www.rekounas.org/wp-content/uploads/2008/05/explain_plan2-300x187.jpg" alt="" title="explain_plan2" width="300" height="187" class="alignnone size-medium wp-image-47" /></a></p>
<p>You can see from the explain plan that we have been reduced to one full table scan (can&#8217;t do without this because of the nature of the recursive relationship) and we now replaced the full table scan with an ACCESS BY ROWID scan on IDX_HIERARCHY_2.  We would still need IDX_HIERARCHY_1 down the road because users will most likely be accessing this table by CLIENT_ID.  So, this is a safe guard.</p>
<p>Don&#8217;t underestimate performance tuning. Don&#8217;t just rely on your DBA or your users to tell you something is slow.  Have all your developers spend some time learning how to execute explain plans and SQL performance tuning techniques so that your application is better prepared for the real world.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rekounas.org/2008/05/31/is-performance-tuning-important-in-oracle-lite-part-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Comparing Database Mobile Synchronization Solutions</title>
		<link>http://www.rekounas.org/2008/05/29/comparing-database-mobile-synchronization-solutions/</link>
		<comments>http://www.rekounas.org/2008/05/29/comparing-database-mobile-synchronization-solutions/#comments</comments>
		<pubDate>Thu, 29 May 2008 12:37:00 +0000</pubDate>
		<dc:creator>rekounas</dc:creator>
		
		<category><![CDATA[Oracle Lite]]></category>

		<category><![CDATA[DB2 Everyplace]]></category>

		<category><![CDATA[MobiLink]]></category>

		<category><![CDATA[SQL Server CE]]></category>

		<guid isPermaLink="false">http://www.rekounas.org/?p=43</guid>
		<description><![CDATA[The last couple of weeks, for my own benefit, I have been looking at what products other then Oracle Lite do data synchronization between mobile devices and an enterprise database.  These products are:

Sybase MobiLink
IBM DB2 Everyplace
Microsoft SQL Server Compact Edition (CE)


From those 3, MobiLink and Everyplace are capable of syncing with an Oracle database.  I [...]]]></description>
			<content:encoded><![CDATA[<p>The last couple of weeks, for my own benefit, I have been looking at what products other then Oracle Lite do data synchronization between mobile devices and an enterprise database.  These products are:</p>
<ul>
<li><a href="http://www.sybase.com/products/databasemanagement/sqlanywhere/data-synchronizaton/mobiLink">Sybase MobiLink</a></li>
<li><a href="http://www-306.ibm.com/software/data/db2/everyplace/">IBM DB2 Everyplace</a></li>
<li><a href="http://www.microsoft.com/sql/editions/compact/default.mspx">Microsoft SQL Server Compact Edition (CE)<br />
</a></li>
</ul>
<p>From those 3, MobiLink and Everyplace are capable of syncing with an Oracle database.  I looked at the documentation to MobiLink and it is pretty straight forward.  Everyplace&#8217;s documentation isn&#8217;t as clear as MobiLink&#8217;s.  CE&#8217;s doesn&#8217;t sync with an Oracle database, so I am not going to go into detail about that product.</p>
<p>Between MobiLink and DB2 Everyplace, I have decided, based on information I have read in the documentation and other users evaluation, that MobiLink stacks up the better of the two.  Now, what I plan on doing is setting up a small application, about 15-20 tables and synchronize those tables.  From that, I will hope to take away the following:</p>
<ul>
<li>Ease of development and complexity</li>
<li>Performance and scalability</li>
<li>Maintainability and schema evolution</li>
<li>Troubleshooting and debugging</li>
</ul>
<p>I will take that information and stack it up against Oracle Lite and compare those categories.  Look for a post on my findings soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rekounas.org/2008/05/29/comparing-database-mobile-synchronization-solutions/feed/</wfw:commentRss>
		</item>
		<item>
		<title>New Look Blog</title>
		<link>http://www.rekounas.org/2008/05/07/new-look-blog/</link>
		<comments>http://www.rekounas.org/2008/05/07/new-look-blog/#comments</comments>
		<pubDate>Thu, 08 May 2008 02:09:26 +0000</pubDate>
		<dc:creator>rekounas</dc:creator>
		
		<category><![CDATA[Oracle Lite]]></category>

		<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.rekounas.org/?p=40</guid>
		<description><![CDATA[I recently upgraded my WordPress and while I was at it, I decided to update my blog theme as well.  I change the images to be images from Oracle OpenWorld 2007 in San Francisco.  They were all pictures that I took.
Let me know what you think of the new look.
]]></description>
			<content:encoded><![CDATA[<p>I recently upgraded my WordPress and while I was at it, I decided to update my blog theme as well.  I change the images to be images from Oracle OpenWorld 2007 in San Francisco.  They were all pictures that I took.</p>
<p>Let me know what you think of the new look.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rekounas.org/2008/05/07/new-look-blog/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Is performance tuning important in Oracle Lite Part 1</title>
		<link>http://www.rekounas.org/2008/04/26/is-performance-tuning-important-in-oracle-lite-part-1/</link>
		<comments>http://www.rekounas.org/2008/04/26/is-performance-tuning-important-in-oracle-lite-part-1/#comments</comments>
		<pubDate>Sat, 26 Apr 2008 11:18:53 +0000</pubDate>
		<dc:creator>rekounas</dc:creator>
		
		<category><![CDATA[Oracle Lite]]></category>

		<guid isPermaLink="false">http://www.rekounas.org/2008/04/26/is-performance-tuning-important-in-oracle-lite-part-1/</guid>
		<description><![CDATA[When you start designing an Oracle Lite solution, the very first thing you should think about after you determine that Oracle Lite is the path for your company, start thinking about performance. You are probably thinking, performance? This is Oracle Lite. I shouldn&#8217;t have to worry about performance tuning. Well, the truth of the matter [...]]]></description>
			<content:encoded><![CDATA[<p>When you start designing an Oracle Lite solution, the very first thing you should think about after you determine that Oracle Lite is the path for your company, start thinking about performance. You are probably thinking, performance? This is Oracle <strong>Lite</strong>. I shouldn&#8217;t have to worry about performance tuning. Well, the truth of the matter is Oracle Lite, without the proper care for the SQL in the publication items, size of the tables being synchronized, and number of users your application is synchronizing, you could quickly find yourself in a heap of trouble and you will quickly be looking for an experienced DBA or an Oracle Lite expert to save you. When an Oracle Lite publication item is published, 5 tables are created on the back end database. They are:</p>
<ul>
<li>CVR$ - This table is the version table. This table maps back to your base table and indicates what DML operation and version has occurred on a record.</li>
<li>CLG$ - This table is the log table. The first pass of the MGP compose process dirty rows in the version table are copied to log table. The version table rows are then cleared as being dirty.</li>
<li>CEQ$ - This the the error queue table. Any rows that encounter errors during the apply phase are placed in the error table. The error message corresponding to the error is placed in the mobileadmin schema C$EQ table.</li>
<li>CFM$ - This is the in queue. Rows that are dirty (new/updated/deleted) on the client are placed in this table during a replication session. They are stamped with the version number of the corresponding row on the CVR$PublicationItemName table. Once the have been applied to the base table, they are deleted.</li>
<li>CMP$ - This is the out queue. You may also refer to these tables as the mapped tables. Rows that need to be sent to the client are placed in this queue. The rows in this table persist and provide a record of what has been sent to the client.</li>
</ul>
<p>The culprit of your performance issues will be in your out queue. Tables in the out queue can grow to be quite large. 10 Million records. 100 Million records. All depends on how big your application is and how many users you have. With each user you add to your application, the map tables will grow by the number of records that user is associate to by the snapshot predicate. When your application has added enough users that these tables become large, you can start thinking about partition mapping.  No, partition mapping isn&#8217;t the same as partitioning a table.  What happens is a process that takes your CMP$PublicationItem table and divides it by a number you specify.  The partition mapping process then goes out and starts adding users to these new map tables.  So, if you have 100 users and you create a partition map to the 10th degree, you will have 10 Mapped tables with 10 users per mapped table.  So now each table is 1/10th (approximately) the original size of the publication mapped table.</p>
<p>If you have an experienced DBA on hand, he should have already pointed out to you that the SYNCSERVER table space was created on $ORACLE_HOME and you are quickly running out of disk space.  Once you have straightened out that mess, (Can be avoided by creating the SYNCSERVER table space prior to running the repwizard), you will notice that all tables and indexes are under the same table space.  If you are running ASM as your volume manager, this is not an issue as ASM will move your indexes and tables around your disk array evenly.  If you do not have a volume manager in place, ensure that you go through an exercise where you distribute your tables space, tables, and indexes around your disk array.  As mentioned, DBAs have probably already noticed this and have come knocking on your door asking you what you are doing.</p>
<p>Have you used CONSPERF to analyze your timing and explain plans for your MGP and SYNC?   Consperf will choose the best query with the best timing and not the best cost.  Don&#8217;t get hung up on the cost of queries, it is all about timing.  Have you analyzed your base queries for your publication items as well?  If these queries take more then a few seconds to start returning data, then you will have issues with MGP and SYNC.  Tune these by adding appropriate indexes and query rewriting.  Make sure, if possible to remove any sorting or grouping from your select statements.</p>
<p>The last item I will talk about is shared maps.  Shared maps are publication items where a group of users are sharing the exact same data.  This helps by MGP only having to go through those publication items by the number of groups associate to your shared map.  These snapshots have to be read-only and if there is a bound subset parameter, it has to be the same for every member of the group.  Shared maps are often used for look-up tables.</p>
<p> This concludes part 1 and part 2 will be about performance tuning on the client.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rekounas.org/2008/04/26/is-performance-tuning-important-in-oracle-lite-part-1/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Upgrading from Webtogo to OC4J</title>
		<link>http://www.rekounas.org/2008/04/21/upgrading-from-webtogo-to-oc4j/</link>
		<comments>http://www.rekounas.org/2008/04/21/upgrading-from-webtogo-to-oc4j/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 12:36:51 +0000</pubDate>
		<dc:creator>rekounas</dc:creator>
		
		<category><![CDATA[Oracle Lite]]></category>

		<category><![CDATA[Webtogo]]></category>

		<guid isPermaLink="false">http://www.rekounas.org/2008/04/21/upgrading-from-webtogo-to-oc4j/</guid>
		<description><![CDATA[Starting upgrading Webtogo to OC4J and here are my likes and dislikes so far:Likes:

Full J2EE compliance
Easier to develop and debug application code
I can specify different JVM from the one that is installed last.

Dislikes:

Customized workspace is not supported (Although, I think I can get around that)
WTGJDBCDriver is doing some really, really weird things.
Session does not contain [...]]]></description>
			<content:encoded><![CDATA[<p>Starting upgrading Webtogo to OC4J and here are my likes and dislikes so far:Likes:</p>
<ul>
<li>Full J2EE compliance</li>
<li>Easier to develop and debug application code</li>
<li>I can specify different JVM from the one that is installed last.</li>
</ul>
<p>Dislikes:</p>
<ul>
<li>Customized workspace is not supported (Although, I think I can get around that)</li>
<li>WTGJDBCDriver is doing some really, really weird things.</li>
<li>Session does not contain OraUserProfile object.  So, even if wanted to build my own connection string and not use the WTGJDBCDriver, I can&#8217;t.  I have an SR open for this now.</li>
<li>All the code is located on the file system and not embedded into webtogo.odb</li>
</ul>
<p>I think once I get past the WTGJDBCDriver issue and the OraUserProfile issue, I think I will like the OC4J much better.  I will keep this post updated with my findings.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rekounas.org/2008/04/21/upgrading-from-webtogo-to-oc4j/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Oracle ACE Award</title>
		<link>http://www.rekounas.org/2008/02/19/oracle-ace-award/</link>
		<comments>http://www.rekounas.org/2008/02/19/oracle-ace-award/#comments</comments>
		<pubDate>Tue, 19 Feb 2008 14:07:30 +0000</pubDate>
		<dc:creator>rekounas</dc:creator>
		
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.rekounas.org/2008/02/19/oracle-ace-award/</guid>
		<description><![CDATA[Received notice of my Oracle ACE Award last week.  My ACE profile is up if you wanted to check it out here.
What is an Oracle ACE?
Oracle ACEs and Oracle ACE Directors are known for their strong credentials as Oracle community enthusiasts and advocates, with candidates nominated by anyone in the Oracle Technology and Applications [...]]]></description>
			<content:encoded><![CDATA[<p>Received notice of my Oracle ACE Award last week.  My ACE profile is up if you wanted to check it out <a href="http://apex.oracle.com/pls/otn/f?p=19297:4:4320698221913071::NO:4:P4_ID:1362">here</a>.</p>
<p>What is an <a href="http://www.oracle.com/technology/community/oracle_ace/index.html">Oracle ACE</a>?</p>
<blockquote><p>Oracle ACEs and Oracle ACE Directors are known for their strong credentials as Oracle community enthusiasts and advocates, with candidates nominated by anyone in the Oracle Technology and Applications communities. The baseline requirements are the same for both designations; however, Oracle ACE Directors work more closely and formally with Oracle in terms of their community activity.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.rekounas.org/2008/02/19/oracle-ace-award/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Deploying an application using the APIs</title>
		<link>http://www.rekounas.org/2008/02/15/deploying-an-application-using-the-apis/</link>
		<comments>http://www.rekounas.org/2008/02/15/deploying-an-application-using-the-apis/#comments</comments>
		<pubDate>Sat, 16 Feb 2008 03:51:32 +0000</pubDate>
		<dc:creator>rekounas</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Oracle Lite]]></category>

		<guid isPermaLink="false">http://www.rekounas.org/2008/02/15/deploying-an-application-using-the-apis/</guid>
		<description><![CDATA[Here is an example of how you deploy an application.  I will follow it up with examples of how to add publication items to the application and adding users to the application as well.
The following command should be all on one line:
java -classpath .:$ORACLE_HOME/mobile/classes/consolidator.jar:
$ORACLE_HOME/mobile/server/bin/devmgr.jar:
$ORACLE_HOME/mobile/server/bin/webtogo.jar:
$ORACLE_HOME/jdbc/lib/ojdbc14.jar Deploy MOBILEADMIN MOBILEPWD localhost 1521 XE


import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import [...]]]></description>
			<content:encoded><![CDATA[<p>Here is an example of how you deploy an application.  I will follow it up with examples of how to add publication items to the application and adding users to the application as well.</p>
<p>The following command should be all on one line:<br />
<code>java -classpath .:$ORACLE_HOME/mobile/classes/consolidator.jar:<br />
$ORACLE_HOME/mobile/server/bin/devmgr.jar:<br />
$ORACLE_HOME/mobile/server/bin/webtogo.jar:<br />
$ORACLE_HOME/jdbc/lib/ojdbc14.jar Deploy MOBILEADMIN MOBILEPWD localhost 1521 XE<br />
</code></p>
<pre><code>
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import oracle.lite.sync.Consolidator;
import oracle.lite.sync.ConsolidatorException;
import oracle.lite.sync.ConsolidatorManager;

public class Deploy {
    private static Connection con = null;

    public static void main(String[] arg) throws ConsolidatorException,
                                                 SQLException {
        if (arg.length == 5) {
            ConsolidatorManager cm = new ConsolidatorManager();
            String PUBLICATION = &#8220;PUBLICATION&#8221;;

            // arguments are:
            // 0 - Mobile Schema Repository
            // 1 - Mobile Schema Repository Password
            // 2 - URL
            // 3 - Port
            // 4 - SID
            String MOBILE_SCHEMA = arg[0];
            String MOBILE_PASSWORD = arg[1];
            String JDBC_URL =
                &#8220;jdbc:oracle:thin:@&#8221; + arg[2] + &#8220;:&#8221; + arg[3] + &#8220;:&#8221; + arg[4];

            System.out.println(&#8221;JDBC URL = &#8221; + JDBC_URL);
            try {
                DriverManager.registerDriver((Driver)(Class.forName(&#8221;oracle.jdbc.OracleDriver&#8221;).newInstance()));
                try {
                    con = DriverManager.getConnection(JDBC_URL, MOBILE_SCHEMA, MOBILE_PASSWORD);
                } catch (SQLException sqle) {
                    sqle.printStackTrace();
                }
            } catch (Exception e) {
                e.printStackTrace();
                return;
            }

            cm.openConnection(con);

            // Alter the session if you are dealing with a multilingual application
            PreparedStatement stmt = null;
            stmt = con.prepareStatement(&#8221;alter session SET NLS_LENGTH_SEMANTICS=&#8217;BYTE&#8217;&#8221;);
            stmt.execute();

            try {
                cm.dropPublication(PUBLICATION);
            } catch (ConsolidatorException ce) {
                System.out.println(ce.getMessage());
            }

            cm.createPublication(PUBLICATION, Consolidator.DFLT_CREATOR_ID,
                                 PUBLICATION.toLowerCase() + &#8220;.%s&#8221;, null);

        } else {
            System.out.println(&#8221;Invalid parameters!&#8221;);
            System.out.println(&#8221;java -classpath :. Deploy mobileadmin mobilepass url port sid&#8221;);
        }
    }
}
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.rekounas.org/2008/02/15/deploying-an-application-using-the-apis/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
