OBIEE 12c Catalog Validation: Command Line
I wrote a blog post a while ago describing the catalog validation: an automated process performing a consistency check of the catalog and reporting or deleting the inconsistent artifacts.
In the post I stated that catalog validation should be implemented regularly as part of the cleanup routines and provides precious additional information during the pre and post upgrade phases.
However some time later I noted Oracle's support Doc ID 2199938.1 stating that the startup procedure I detailed in the previous blog post is not supported in any OBI release since 12.2.1.1.0. You can imagine my reaction...
The question then became: How do we run the catalog validation since the known procedure is unsupported? The answer is in catalog manager and the related command line call runcat.sh
which, in the server installations (like the SampleApp v607p), can be found under $DOMAIN_HOME/bitools/bin
.
How Does it Work?
As for most of command line tools, when you don't have a clue on how it works, the best approach is to run with the -help
option which provides the list of parameters to pass.
Catalog Manager understands commands in the following areas:
Development To Production
createFolder Creates folder in the catalog
delete Deletes the given path from the catalog
maintenanceMode Puts the catalog into or out of Maintenance Mode (aka ReadOnly)
...
Multi-Tenancy
provisionTenant Provisions tenants into a web catalog
...
Patch Management
tag Tags all XML documents in a catalog with a unique id and common version string
diff Compares two catalogs
inject Injects a single item to a diff file
...
Subject Area Management
clearQueryCache Clears the query cache
Unfortunately none of the options in the list seems to be relevant for catalog validation, but with a close look at the recently updated Doc ID 2199938.1 I could find the parameter to pass: validate
.
The full command then looks like
./runcat.sh -cmd validate
In my previous blog I mentioned different types of validation. What type of validation is the default command going to implement? How can I change the behaviour? Again the -help
option provides the list of instructions.
# Command : -cmd validate -help
validate Validates the catalog
Description
Validates the catalog
For more information, please see the Oracle Business Intelligence Suite
Enterprise Edition's Presentation Services Administration Guide.
Syntax
runcat.cmd/runcat.sh -cmd validate
[ -items (None | Report | Clean) [ -links (None | Report | Clean) ] [-folder <path{:path}>] [-folderFromFile <path of inclusion list file>] ]
[ -accounts (None | Report | Clean) [ -homes (None | Report | Clean) ] ]
-offline <path of catalog>
Basic Arguments
None
Optional Arguments
-items (None | Report | Clean) Default is 'Report'
-links (None | Report | Clean) Default is 'Clean'. Also, '-items' cannot be 'None'.
-accounts (None | Report | Clean) Default is 'Clean'
-homes (None | Report | Clean) Default is 'Report'. Also, '-accounts' cannot be 'None'.
-folder <path{:path}> Which folders in the catalog to validate
-folderFromFile <path of inclusion list file> File containing folders in the catalog to validate
Common Arguments
-offline <path of catalog>
-folderFromFile <folder from file> ----- Sample Folder From File ------
/shared/groups/misc
/shared/groups/_filters
------------------------------------
Example
runcat.cmd/runcat.sh -cmd validate -offline c:\oraclebi\data\web\catalog\paint
Few bits to notice:
- -offline: the catalog validation needs to happen offline. Either with services down or on a copy of the live catalog. Running catalog validation on a online catalog is dangerous especially with "Clean" options since could delete content in use.
- -folder: the catalog validation can be run only for a subset of the catalog
- None | Report | Clean: each validation can be skipped (None), logged (Report) or solved via removal of the inconsistent object (Clean)
- Also, '-accounts' cannot be 'None'.: some validations are a prerequisite for others to happen
- Default is 'Clean': some validations have a "Clean" as default value, meaning that will solve the issue by removing the inconsistent object, this may be inappropriate in some cases.
As written before, the initial catalog validation should be done with all options set on Report since this will give a log file of all inconsistencies without deleting pieces of the catalog that could still be valuable. In order to do so the command to execute is:
./runcat.sh -cmd validate -items Report -links Report -accounts Report -homes Report -offline <path_to_catalog> > cat_validation.log
runcat.sh
output is displayed direcly in the console, I'm redirecting it to a file called cat_validation.log
for further analysis.
If, after the initial run with all options to Report you want the catalog validation utility to "fix" the inconsistent objects, just change the desired options to Clean. Please make sure to take a backup of the catalog before since the automatic fix is done by removing the related objects. Moreover ensure that catalog validation is working on a offline catalog. The command itself can work on top on a online catalog but is never a good idea checking a catalog that could potentially be changed while the tool is running.
The output
Let's see few examples of how Catalog Validation spots inconsistent objects. For the purpose of this test I'll work with Oracle's Sampleapp.
Abandoned and inaccessible homes
Running the validation against the Sampleapp catalog provides some "interesting" results: some homes are declared "abandoned": this could be due to the related user not existing anymore in weblogic console, but that's not the case
E10 saw.security.validate.homes Abandoned home /users/weblogic
Looking deeper in the logs we can see that the same user folders are flagged as
User facing object '/users/weblogic' has no user permissions and is inaccessible
Logging in with the user weblogic
doesn't allow me to check the "My Folders" in the catalog. When switching to "Admin View" and trying to open "My Folder" I get the following error
As written in the logs looks like the user folder has permission problems. How can we solve this? One option is to use again the runcat.sh
command with the forgetAccounts
option to remove the inconsistent homes. However this solution deletes all the content related to the user that was stored under the "My Folders".
In order to keep the content we need to overwrite the folder's permission with an administrator account. Unfortunately, when right-clicking on the folder, the "Permission" option is not available.
As a workaround I found that clicking on Properties
and then on Set Ownership of this item and all subitems
allows you to grant full access to the administrator which is then able to reset the proper user the relevant access privilege.
Once the workaround is implemented the users is able to check his "My Folder" content, however the the errors are still present in catalog validation. The solution is storing the relevant artifacts in another part of the catalog, run runcat.sh
with forgetAccounts
option and then reimport the objects if needed.
Inconsistent Objects
The main two reasons generating inconsistent objects are:
- Invalid XML: The object (analysis or dashboard) XML code is not valid. This can be caused by errors during the write to disk or problems during migrations.
- Broken Links: analysis contained in a dashboard or linked from other analysis have been renamed or deleted.
Let's see how catalog validation shows the errors.
Invalid XML
To test this case I created a simple analysis with two columns and then went to the Advanced tab and deliberately removed an >
to make the XML invalid.
When trying to applying the change I got the following error which denied me the possibility to save.
Since I really wanted to ruin my analysis I went directly to the file system under $BI_HOME/bidata/service_instances/ssi/metadata/content/catalog/root/shared/$REQUEST_PATH
and changed the XML directly there.
After than I run the catalog validation with only the flag items
equal to Report
and the rest set to None
since I'm looking only at invalid XMLs.
The result as expected is:
Message: Unterminated start tag, 'saw:column', Entity publicId: /app/oracle/biee/user_projects/domains/bi/bidata/service_instances/ssi/metadata/content/catalog/root/shared/rm+demo/notworkinanalysis, Entity systemId: , Line number: 9, Column number: 13
Which tells me that my analysis notworkinganalysis
is invalid with an unterminated start tag, exactly the error I was expecting. Now I have two choices: either fixing the analysis XML manually or rerunning the catalog validation with option Clean
which will delete the analysis since it's invalid. As said before there is no automated fix.
I wanted to do a further example on this, instead of removing the >
, i removed a quotation mark "
to make the analysis invalid
After clicking to Apply OBIEE already tells me that there is something wrong in the analysis. But since it allows me to save and since I feel masochist I saved the analysis.
But... when running the catalog validation as before I end up seeing 0 errors related to my notworkinganalysis
.
The answer to Jackie Chan question is that I got 0 errors since in this second case the XML is still valid. Removing a "
doesn't make the XML syntax invalid! In order to find and solve that error we would need to use Oracle's Baseline Validation Tool.
Broken Links
To test the broken links case I created the following scenario:
- Analysis
SourceAnalysis
which has navigation action toTargetAnalysis
- Dashboard
TestDashboard
which contains theTargetAnalysis
object.
In order to break things I then deleted the TargetAnalysis
.
Running catalog validation with the option links
to Report
. As expected I get a line
N1 saw.catalog.impl.scour.validateDeadLink Referenced path /shared/RM Demo/TargetAnalysis in file /shared/RM Demo/_portal/TestDashboard/page 1 is inaccessible.
But I don't get anything on the SourceRequest
object, for which navigation is failing.
But if instead of an action link I use TargetAnalysis
to filter the results of SourceAnalysis
And then delete TargetAnalysis
, I get the expected error:
N1 saw.catalog.impl.scour.validateDeadLink Referenced path /shared/RM Demo/TargetAnalysis in file /shared/RM Demo/SourceAnalysis is inaccessible
Summarizing the broken link validation reports if missing objects are included in the main definition of other objects (as filters or as parts of dashboards) but doesn't seem to report if the missing object is only linked via an action.
Conclusion
My experiments show that catalog validation finds some errors like invalid homes, XML files and broken links which otherwise users would hit at the run-time and that won't make them happy. But there are still some errors which it doesn't log like analysis with wrong column syntax, luckily for most of the cases other tools like the Baseline Validation can spot them easily so use all you have, use as frequently as possible and if you want more details about how it works and how it can be included in the automatic checks for code promotions don't hesitate to contact us!