Month: January 2012

FRM-92095: Oracle Jnitiator version too low – please install version 1.1.8.2 or higher

A customer of mine who deploys Oracle Forms 10g  on the wild wild web, ran into a little problem.
They don’t have control over the java plugin being installed on the client machine and with the latest java 1.7 update
they encountered the following forms error :
FRM-92095: Oracle Jnitiator version too low – please install version 1.1.8.2 or higher
Doh – we’re running java 1.7 – not Oracle’s obscure Jnitiator.
This seems to be a know issue on metalink see 
FRM-92095 Error When Running Forms Using JRE 7 (JRE 1.7) [ID 1348436.1]
A bug has been filed Bug:11782681 APPS6: FORMS DO NOT LAUNCH WITH BETA JRE 1.7
There’s no patch yet(not even for the latest 11g Forms). And because Forms 10.1.2.x permier support
ended in December 2011… God only knows there will be a back-port. So for now – we’re on our own !
However … why does the Forms applet thinks it is running on an Oracle Jnitiator ?
Can it be that Java’s vendor system property changed from ‘Sun Microsystems Inc’ to ‘Oracle Corporation’ ?
A little test program will show :
import java.util.* ;
class test
{
public static void main(String args[])
{
System.out.println(“java.version =” + System.getProperty(“java.version”) ) ;
       System.out.println(“java.vendor =” + System.getProperty(“java.vendor”) ) ;
}
}
On java 1.6:
java test
java.version =1.6.0_30
java.vendor =Sun Microsystems Inc.
On java 1.7:
java.version =1.7.0_02
java.vendor =Oracle Corporation
This property string for Java 1.6 and below is ‘Sun Microsystems Inc’ – starting from 1.7 it is ‘Oracle Corporation’.
Oracle Jnitiator also used the vendor string ‘Oracle Corporation’.
So – Forms now thinks it is running on an old jnitiator instead of the latest java 1.7 plugin.
I used a bootstrapper applet which sets the vendor property back to ‘Sun Microsystems inc’ like this :
– System.setProperty(“java.vendor”, “Sun Microsystems Inc.”) ;
Then the applet(stub) loads Oracle Forms’ main engine class.
– Class oforms = Class.forName(“oracle.forms.engine.Main”);
– init and start the Forms applet
I can’t share the code nor class as the IP belongs to my employer but this fixed the problem and we can now run Forms on Java 1.7 !
The great part of this is – we don’t touch the original frmall.jar, which is important if 3000 end users need a new jar downloaded over limited bandwidth ! 
Then, I went into a creative overdrive 🙂 
In the spirit of the 80’s and 90’s atari and amiga demo scene I added an intro with plasma effect. 
Update – see also a very elegant workaround by Didier Marcelis in the comments (add -Djava.vendor=”Sun Microsystems Inc.”)
Update – if you are interested in the Forms bootstrapper (without plasma intro) – send me a mail.
Check out the flash screen capture I’ve made of the application loading :-)))
Update – it looks like there is a patch for forms 10g (bundle patch 10.1.2.3.2) that will solve the problem !
The patch number is 14825718 – and can be downloaded here.
One of the fixed bugs is 
#  11782681 - APPS6  FORMS DO NOT LAUNCH WITH BETA JRE 1.7
I have not yet installed and tested it – so if someone has – please leave a comment !

Reducing cluster waits by Granville Bonyata

If you’re seeing high cluster waits because you have multiple processes all inserting into the same set of tables, the cluster waits are resolved by pointing to a single node on the cluster. But just pointing to a single node defeats the rollover benefits of running on RAC. To that end, Oracle gives us Services […]

Workaround for “ORA-00998: must name this expression with a column alias”

Did you ever encounter ORA-00998: must name this expression with a column alias and wondered why ?   Doc says Error: ORA 998 Text: must name this expression with a column alias ——————————————————————————- Cause: An expression or function was used in a CREATE VIEW statement, but no corresponding column name was specified. When expressions or […]

DB link from Oracle to SQL Server

We had a need for a DB link from an Oracle database to a SQL Server database. I initially feared that this might be a huge task, but it turned out to be quite a easy setup. Thanks Oracle for making it almost seamless!

There are basically 4 steps involved 

1.) Install & configure the Gateway

The Oracle Gateway can be found in the Oracle Database 11g Release 2 Enterprise Edition software. Installation is straight forward. You basically have to make 2 choices during installation. What Gateway you want to install (SQL Server in our case) and which ORACLE_HOME you want to use. You can create a separate Gateway home or just use the current ORACLE_HOME, which is what we did.

After installation you will find a new directory in ORACLE_HOME called dg4msql. Configure the Gateway by creating a agent init.ora file in $ORACLE_HOME/dg4msql/admin. The name of the file is important, as the name you use will be used in your listener as well. We kept it to the default initdg4msql.ora. The information you need to supply in the agent init.ora file are SQL Server Database Server Host Name, SQL Server Database Server Port number and SQL Server Database. The information all goes into one parameter called HS_FDS_CONNECT_INFO.
Ex:

# This is a customized agent init file that contains the HS parameters

# that are needed for the Database Gateway for Microsoft SQL Server

#

# HS init parameters

#

# HS_FDS_CONNECT_INFO=[server_name]:port//mssql_db

HS_FDS_CONNECT_INFO=[ABC02.company.co.za]:1433//MSCIM

# alternate connect format is hostname/serverinstance/databasename

HS_FDS_TRACE_LEVEL=OFF

HS_FDS_RECOVERY_ACCOUNT=RECOVER

HS_FDS_RECOVERY_PWD=RECOVER

2.) Listener & names lookup
We used port 1524 to setup the gateway
LISTENER =

  (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = tcp)(HOST = abc01.company.co.za)(PORT = 1521))

    (ADDRESS = (PROTOCOL = tcp)(HOST = localhost)(PORT = 1524))

  )

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = dg4msql)

      (ORACLE_HOME = /opt/apps/oracle/product/11.2.0/dbhome_1)

      (PROGRAM = dg4msql)

    )

  )

And Local Naming

MSCIM =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = tcp)(HOST = localhost)(PORT = 1524))

    (CONNECT_DATA =

      (SID = dg4msql)

    )

    (HS = OK)

  )

HS=OK – indicates this connect descriptor is using heterogeneous Service.

3.) Database Link
Once the SQL Server team gave us a username and password we could just create a DB link

CREATE PUBLIC DATABASE LINK MSCIM_DBLINK CONNECT TO ‘mssql_username’ IDENTIFIED BY ‘mssql_password’ USING ‘MSCIM’
4.) Data dictionary translation support
Oracle has also supplied a script in $ORACLE_HOME/ dg4msql/admin/ called dg4msql_cvw.sql that must be run on the SQL Server side. The script creates views on SQL Server for usage by the Oracle Data Dictionary. 4 views called ALL_IND_COLUMNS, USER_IND_COLUMNS, ALL_CONS_COLUMNS, and USER_CONS_COLUMNS will be created on the SQL Server db making it easier for someone familiar with Oracle Data Dictionary views to query the SQL Server database.

If you want to sleep well …

… and you are a DBA and you use ASM and you happen to run 11.2 ( but not yet  11.2.0.3 ) … then, you probably want to apply patch 10422126  ( see http://sve.to/2011/12/22/database-11-2-bug-causes-huge-number-of-alert-log-entries/ and MOS Doc ID 1274852.1 ) I ( and our storage admin ) didn’t sleep well last night The huge number of logging entries Svetoslav is […]

Resumes & Job Objectives

I’ve been reviewing a lot of resume’s lately.  Please tell me, what is the purpose stating your "Job Objective"?  Isn’t it implied that your objective is to find a new job, specifically my job? I assume you’re dynamic and technical and your vast expertise will help my company conquer the world.

Also, what is the purpose of summarizing your experience on the first page and then giving me eight

TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569