Friday, November 21, 2008

R12 install and post install Issues in 64 Bit Solaris

Recently, I installed R12 on Sun SPARC Solaris 64 Bit and I faced a few issues that I have listed below.



Issue 1

Installation errors with the below error in .log.

Statusstring Configuring Database
..
Log file located at ../ApplyDatabase_.log
..
RC-50004: Fatal: Error occurred in ApplyDatabase:
Control file creation failed
Cannot execute configure of database using RapidClone
RW-50010: Error: - script has returned an error: 1
RW-50004: Error code received when running external process.

Error in ApplyDatabase_.log


WARNING: Default Temporary Tablespace not specified in CREATE DATABASE command
Default Temporary Tablespace will be necessary for a locally managed database in future release
Mon Nov 17 01:05:46 2008
Errors in file /opt/apps/Release12/db/tech_st/10.2.0/admin/R12VIS_suomt06k/udump/r12vis_ora_3206.trc:
ORA-01565: error in identifying file '/opt/apps/Release12/db/apps_st/data/sys5.dbf'
ORA-27037: unable to obtain file status
SVR4 Error: 25: Inappropriate ioctl for device

Cause
ST Patch 5752399 was not included in 12.0.4 media as it was not detected before the media was cut. Likelyhood of occurance is limited to specific hardware setup.

Solution
Apply Patch 5752399 while installation is underway.
1. Wipe out the failed installation and restart a new one.
2. Closely monitor the progress to catch the time it starts copying the datafiles.
3. While datafiles are being copied go ahead and apply patch 5752399 with following steps before rapidinstall calls the adcrdb.sh.
1. cd /rdbms/lib
2. mv config.s config.s.before5752399
3. cp config.s.ouibak.3 config.s
4. Apply the patch 5752399
5. Try SQL*Plus and make sure it doesn't fail with ORA-3113
4. If above steps are completed before adcrdb.sh, install will continue successfully, otherwise repeat the steps but faster.

References: NOTE:565966.1


Issue 2

Unzip of appltop failed during install with the below error.

Unzip Failed:
Cannot execute install of appltop

Cause

APPL_TOP zip files were not unzipped correctly.

Solution

Unzip all the APPL_TOP zip files once more. That did not work unfortunately. Then, I downloaded the zip file which has an issue once more from edelivery and proceeded with the installation.

References: NA


Issue 3

HTTP services weren't started after install. Output of opmn log file (/opt/apps/Release12/inst/apps/R12VIS_suomt06k/logs/appl/admin/log/adopmnctl.txt) as below.

11/17/08-07:18:57 :: adopmnctl.sh: Starting Oracle Process Manager (OPMN)
libopmnoraclenls.so: unable to load ÿ¿òPÿ¿ò\206ÿ¿ò\211ÿ¿ò\214
main: NLS initialization failed!!
libopmnoraclenls.so: unable to load ÿ¿òHÿ¿ò~
main: NLS initialization failed!!
libopmnoraclenls.so: unable to load ÿ¿ñÈÿ¿ñþÿ¿ò^Aÿ¿ò^D
main: NLS initialization failed!!
opmnctl: opmn start failed.
11/17/08-07:18:58 :: adopmnctl.sh: exiting with status 2

Cause

This issue is due to the libclntsh.so.10.1 library not being present under the lib32 folder.

Solution

1) Simply copy the file libclntsh.so.10.1 file from a working
environment to non-working environment into the lib32 directory.
But, this is applicable only to the same version of OS.
OR
2) You can generate libclntsh.so.10.1 by executing the following command
$10.1.3_OH/bin/genclntsh -32
3) Setting the correct oracle home to 10.1.3 then running that ./bin/genclntsh helps:

If you run with the -32 option it updates the ./lib32 version of libclntsh.so.10.1
If you run without the -32 option it updates the ./lib version of libclntsh.so.10.1
( and similarly if it was set to 10.1.2, libclntsh.so.10.1 will be created in 10.1.2/lib )
So it is very important to set OH to 10.1.3.

References: NOTE:413109.1


Issue 4

When attempting to open any forms, the following error occurs:

ERROR
FRM-40833: Could not completely load the dynamic user exit libraries.
User exit FND did not execute.

Cause

Relink generated a corrupted $FND_TOP/bin/fndfmxit.so due to missing $GMA_TOP/lib/libgma.a.

Solution

1. Copy the library libgma.a from a backup taken after installation of RUP3 patch to $GMA_TOP/lib
2. Relink fndfmxit.so by running:
adrelink.sh force=y "fnd fndfmxit.so"

References: NOTE:554927.1


Issue 5

Concurrent Managers weren't coming up. The error in the ICM log file ($APPLCSF/$APPLLOG/_.mgr)

ld.so.1: FNDLIBR: fatal: /opt/apps/Release12/apps/tech_st/10.1.2/lib/libclntsh.so.10.1: wrong ELF class: ELFCLASS64
Killed
The R12VIS_1117@R12VIS internal concurrent manager has terminated with status 137 - giving up.

Cause

Using a 64 bit executable and trying to link to 32 bit libraries.

Solution

1) You can generate libclntsh.so.10.1 under $10.1.2_ORACLE_HOME/lib32 by executing the following command
$10.1.2_OH/bin/genclntsh -32

References: NOTE:604084.1, NOTE:413109.1

Thursday, November 6, 2008

Check JDBC Connection String using java

Sometimes, I have faced a situation wherein the tnsping to the database is working but the JDBC connection fails. So, in order to check the JDBC connection string, one has to use a java program, which unfortunately isn't my forte.

Thankfully, my friend, Padmaraj, who is a SME on java gave me a small piece of code which works wonderfully well.

Note: Save the below java program as ReadCharacter.java, else the program won't work.


// Program to check the JDBC Connection string.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class ReadCharacter {
public static void main(String[] args) {
Connection dbConnection;
Statement stmt;
String sqlStmt;

// For Oracle 9.2
String thin = "jdbc:oracle:thin:@[db_host]:[db_port]:[oracle_sid]";
String name = "[username]";
String pass = "[password]";
String table = "V$INSTANCE";
try{
pt("Getting Connection....");
Class.forName("oracle.jdbc.driver.OracleDriver");
dbConnection = DriverManager.getConnection(thin, name, pass);
pl(" Got");
pt("Creating statment....");
sqlStmt = "SELECT instance_name, host_name from " + table;
stmt = dbConnection.createStatement();
pl(" Got");
pt("Excuting statment (" + sqlStmt + ")....");
ResultSet rs = stmt.executeQuery(sqlStmt);
pl(" Excuted");
while(rs.next()) {
String n = rs.getString("instance_name");
String a = rs.getString(2);
pl("Instance_Name = " + n + ", Host_Name = " + a );
}
pt("Closing Result set...");
rs.close();
pl(" Closed");
pt("Closed statment....");
stmt.close();
pl(" Closed");
pt("Closing Connection....");
dbConnection.close();
pl(" Closed");
} catch (Exception e) {
e.printStackTrace();
}
}
static void pt(String s) {
System.out.print(s);
}
static void pl(String s) {
System.out.println(s);

}
}