Monday, December 28, 2009

Multiple LDAP servers

OBIEE does allow us to add multiple LDAP server. We needed this functionality as some of the global users were on different domain than the majority of users. Apparently when more than one LDAP servers are configured, BI attempts to get user authenticated with first server in the list, if it fails then it tries using second LDAP server.

This method can also be user for implementing redundant LDAP servers.

Catalog Manager Does not open in offline mode

I don't know when exactly the issue was started, but we had recently upgraded our platform from 10.1.3.3.1 to 10.1.3.4.1. We also installed a patch for date format issue that started coming after upgrade. We installed patch p8599681_101341_WINNT.zip for bug# 8599681.

When I was trying to migrate catalog to new version of BI Apps, I had to use Catalog Manager in offline mode and it did not open, online was working although. I checked the log file for errors:

D:\OracleBI\web\catalogmanager\workspace\.metadata\.log

Following error were logged every time I tried to open webcat in offline mode:

!ENTRY org.eclipse.ui 4 0 2009-12-22 15:11:46.694
!MESSAGE no perfapi in java.library.path
!STACK 0
java.lang.UnsatisfiedLinkError: no perfapi in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at com.siebel.analytics.web.catalogmanager.JNIConnection.init(JNIConnection.java:62)
at com.siebel.analytics.web.catalogmanager.JNIConnection.<init>(JNIConnection.java:22)
at com.siebel.analytics.web.catalogmanager.OfflineConnectionManager.<init>(OfflineConnectionManager.java:17)
at com.siebel.analytics.web.catalogmanager.CatalogmanagerPlugin.setOnline(CatalogmanagerPlugin.java:105)
at com.siebel.analytics.web.catalogmanager.dialogs.OpenCatalogDialog.okPressed(OpenCatalogDialog.java:195)
at org.eclipse.jface.dialogs.Dialog.buttonPressed(Dialog.java:409)
at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:556)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:90)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:843)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3080)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2713)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:809)
at org.eclipse.jface.window.Window.open(Window.java:787)
at com.siebel.analytics.web.catalogmanager.actions.OpenCatalogAction.doRun(OpenCatalogAction.java:43)
at com.siebel.analytics.web.catalogmanager.actions.CMAction.run(CMAction.java:92)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:996)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:538)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:488)
at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:400)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:843)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3080)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2713)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1699)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1663)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:367)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143)
at com.siebel.analytics.web.catalogmanager.CatalogManager.run(CatalogManager.java:170)
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:226)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:376)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:163)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:334)
at org.eclipse.core.launcher.Main.basicRun(Main.java:278)
at org.eclipse.core.launcher.Main.run(Main.java:973)
at org.eclipse.core.launcher.Main.main(Main.java:948)


Next, I tried to uninstall the patch for bug fix. To my surprise catalog manager was working. Another example of shabby bug fix by Oracle. This bug fix has two brand new bugs. First messing the catalog manager offline function, and second, dashboard date default by repository variable throws error in underlying reports (session variable work fine).

Tuesday, December 22, 2009

Upgrade BUG - Default Date in prompt gives error

After upgrading from 10.1.3.3.1 to 10.1.3.4.1 we got a bug in BI where if a report is defaulted to date using any variables in prompt, the report will error out with error:


View Display Error

A date value was expected (received "2009-12-20 00:00:00.000").
Error Details
Error Codes: QABPH2PO

Oracle did acknowledge this as a bug (BUG 8599681 - DATE FORMAT ISSUE ON THE DASHBOARD PROMPT) and we had them create a patch for this, however even the patch had a bug. After patch installation the dashbaord will work if reposiroty variable is used in prompts to default a date prompt. However if we use session variable to default a prompt, the report throws same error.

Monday, December 14, 2009

Cache Purge Bug

If you want to purge cache for specific tables during the day, oracle has a utility SAPURGECACHEBYTABLE. However apparently it does not work with many versions of OBIEE. Refer to the bug:

The Bug 6906535 - SAPURGECACHEBYDATABASE AND SAPURGECACHEBYTABLE NOT WORKING IN 10.1.3.4.0 [ID 956345.1]

Upgrading OBIEE 7.9.2 to 7.9.6.1

Upgrading BI apps version is a big process. Following steps were taken while upgrading in our environment:

1 . We will need three repositories to begin with, 7.9.2 original rpd , 7.9.2 customized rpd and 7.9.61 rpd. Its important than in 7.9.6.1 all OOTB modules from 7.9.2 should also be installed in addition to new SAs.

2. Equalize repositories - when installing OBI apps, oracle ships with map files that are requried to equialize the rpds. These have two steps:

StepA: Equalize 7961 to 792, command for this is :

equalizerpds -A Administrator -B SADMIN -C OracleBIAnalyticsApps792.rpd -D Administrator -E SADMIN -F OracleBIAnalyticsApps7961.rpd -J rename792796new.map -O oracleBIAnalyticsApps.rpd

StepB: Equalize CustomRPD to 792

equalizerpds -A Administrator -B SADMIN -C OracleBIAnalyticsApps792.rpd -D Administrator -E custompwd -F OracleBIAnalyticsAppscustom.rpd -J rename792796new.map -O customoracleBIAnalyticsApps.rpd

3. Next step is to use three way merge and create a new RPD. AdminTool has inbuilt merge option which will need to be used. Details of merge and other steps are available in "OBI Apps Upgrade.pdf" page 6-37 to page 6-44.

We had multiple errors during merge process. The goal here is to minimize this so that least manual work is required later. Way to do this is notice pattern of error and then change the custom rpd (equalized custom rpd) before merging and making the objects same as in 7.9.6.1 rpd, so that the algorithm treats the object as equal.

4. After rpds are successfull merged, consistency check needs to be performed. Here again there will be patterns of error, some can be fixed by making changed to rpd before merging and then merging again, others will need to be fixed manually.

We faced an unusuall error that read : "[nQSError: 42001] Missing repository object with ID=3003:338714". This error completely halted the process as we could not fix the error without knowing where the error is comming from. To fix this issue we followed three step process:

StepA: export merged rpd to udml using following syntax:

nqudmlgen.exe -u Administrator -p custompwd-r C:\OracleBI\Upgrade\04AfterManualWork\ManualoracleBIAnalyticsApps.rpd -o
C:\OracleBI\Upgrade\04AfterManualWork\merged.udml

StepB: convert udml file back to rpd file using following command:

nQUDMLExec -u Administrator -p customrpd -i C:\OracleBI\Upgrade\04AfterManualWork\merged.udml -o
C:\OracleBI\Upgrade\04AfterManualWork\ManualoracleBIAnalyticsApps1.rpd

This will create the rpd back , except that it will not bring in objects that was causing unusual errors.

StepC: Compare the new rpd with rpd that was give unusual error. This should be able to point all object which need to be fixed in order to proceed.

5. Once all errors and warningd are resolved, rpd is ready for regression testing. Any errors there after will need to be manually fixed.