Oracle Applications R12 | error while loading shared libraries: libig.so.0…

December 11, 2016

 

applprod@erp-prodbak.my.home:/u01/applprod/PROD/apps/apps_st/appl/au/12.0.0/forms/US>frmcmp_batch module=$AU_TOP/forms/US/XXITMDTLS.fmb userid=apps/apps output_file=$ONT_TOP/forms/US/XXITMDTLS.fmx Module_Type=FORM compile_all=Special
frmcmp_batch: error while loading shared libraries: libig.so.0: cannot open shared object file: No such file or directory
applprod@erp-prodbak.my.home:/u01/applprod/PROD/apps/apps_st/appl/au/12.0.0/forms/US>

Recently I cloned our Production instance to check the feasibility of OEL 6.7 & as usual securely copied most of the bash profile for the Oracle and Application manager users from the production server.

I came across the “cannot open shared object file: No such file or directory” error while trying to compile an old form module & hadn’t have a clue for how to deal with this error, that happened to me first time in last 8 years with Oracle applications.

I crosschecked the folder permissions against production instance and everything was fine. All I could remember which could have gone wrong was narrowed down to the bash profile for the application user and after validating I realized that I was sourcing a wrong environment file!

Instead of sourcing the “/apps/apps_st/appl/APPSPRODBAK_hostname.env” file, I was sourcing “/apps/apps_st/appl/PRODBAK_hostname.env”. I realized it while trying to echo the $ORACLE_HOME variable as application manager user.

So, if you come across “error while loading shared libraries” error while trying to compile, before start dismantling your instance, try to see whether you have sourced the environment variables correctly.

regards,

rajesh

Advertisements

Oracle Weblogic | Reports 11g | cgicmd.dat | Key mapping issues

January 16, 2016

 

Hi guys

I’ve been installing and configuring Weblogic 10.3.6 & 12c (recently) and came across a peculiar issue, where the reports server failing to map the keys I’ve specified with cgicmd.dat file.

The best I could recollect from my memories was, I only added the keys to a single instance of cgicmd.dat file, as there are many instances of the same file once after classic domains are created.

Under linux installations you will find the file in 3 different locations once after the domain created and WLS_REPORTS server started.

 

[root@wls Middleware]# find /u01/Oracle/Middleware/ -name cgicmd.dat
/u01/Oracle/Middleware/user_projects/domains/ClassicDomain/servers/WLS_REPORTS/tmp/_WL_user/reports_11.1.2/uxabaw/configuration/cgicmd.dat
/u01/Oracle/Middleware/user_projects/domains/ClassicDomain/config/fmwconfig/servers/WLS_REPORTS/applications/reports_11.1.2/configuration/cgicmd.dat
/u01/Oracle/Middleware/Oracle_FRHome1/reports/conf/cgicmd.dat

[root@wls Middleware]#

image

Under usual scenarios you need to add the keys ONLY to the cgicmd.dat file present in

/u01/Oracle/Middleware/user_projects/domains/ClassicDomain/config/fmwconfig/servers/WLS_REPORTS/applications/reports_11.1.2/configuration/

folder.

With my latest installations of 12c & 11g, I had issue getting the keys mapped properly & after loads and loads of googling I decided to add the same key to all available instances of cgicmd.dat one after another.

So I started with the first instance of cgicmd.dat file, that was found under

/u01/Oracle/Middleware/user_projects/domains/ClassicDomain/servers/WLS_REPORTS/tmp/_WL_user/reports_11.1.2/uxabaw/configuration/cgicmd.dat

which is WLS_REPORTS temporary folder. I added the key, restarted the WLS_REPORTS server & the key was mapped as required!

This could be a nasty bug because I don’t remember adding the keys to multiple files while I tried out forms and reports 11g Release 2 almost 2 years back!

The most interesting part of the entire exercise is, once the key mapping happens successfully, you can remove the keys from cgicmd.dat file that in the temporary location and everything works! Could be the magic of cache Winking smile

So if you come across key mapping issues, you know where to look at for a quick fix.

for Windows7bugs

rajesh


R12 | Clone response file | adcfgclone automation

December 8, 2015

Hi guys

If you are familiar with R12 cloning, the entire process requires loads of input from a DBA before the cloning really starts kicking in. Now, there could be hundreds of reasons for the cloning process to fail and keeping on entering the responses for the cloning prompts are NOT at all fun, minimum for me.

So I started searching for “R12 clone response file” & google landed me in this post

https://community.oracle.com/thread/2142127?start=0&tstart=0

Excellent way Hussein Sawwan-Oracle has explained how to create the response files for both db, apps tier.

 

clone

First of all, context file to response file creation has a validation flag, which confirms the responses provided are valid throughout the response collection. This validate has a downside with the port pool selection. You will receive a port is not free error while the Oracle application is online, for which a system reboot is most recommended (rather than selecting “No” for the validation process”) after graceful shutdown of both application and database tiers.

I’m using .bash_profile files to source the environment for both my Oracle (oraprod) and Application Manager (applprod) accounts, hence I was able to shorten the efforts like following

As Oracle user (oraprod)

# cd $ORACLE_HOME/appsutil/clone/bin
# perl adclonectx.pl contextfile=$CONTEXT_FILE outfile=/u02/db.xml

Provided the responses and the db.xml was successfully created under /u02 and the context file creation log was created under /u02/log folder.

Please make sure you do “echo $CONTEXT_FILE” to check whether you $CONTEXT_FILE returns a meaningful file name!

As Application Manager user (applprod)

# cd $COMMON_TOP/clone/bin
# perl adclonectx.pl contextfile=$CONTEXT_FILE outfile=/u02/appl.xml

Now you should able to run the cloning processes using the newly cloned context files, for example

# perl adcfgclone.pl dbTier /u02/db.xml
# perl adcfgclone.pl appsTier /u02/appl.xml

That’s all folks, it works like a charm & you are NOT anymore typing in whole those lengthy paths and other variables :)

regards,

rajesh


RC-50004, AC-00005: No write permissions for creating the Context file – /tmp/temp.xml

December 8, 2015

Hi guys

Linux file/folder permissions could be very confusing for a beginner, minimum for me! After these many years of interacting with Linux I still get confused deciding what rights should be given to users or groups on certain folders :)

I came across a situation where the application tier cloning was continuously failing with the title error

RC-50004, AC-00005: No write permissions for creating the Context file – /tmp/temp.xml ?

I checked the for the /tmp folder permissions and realized the application user (applmgr/appltest) had proper right permissions on /tmp folder, yet the adcfgclone will not proceed after


Do you want to preserve the Display [erp-prod:0.0] (y/n) ? : n

Target System Display [erp-prodbak:0.0] :
RC-50004: Error occurred in CloneContext:
AC-00005: No write permissions for creating the Context file - /tmp/temp.xml
Raised by oracle.apps.ad.context.AppsContext
Check Clone Context logfile /u01/applprod/PROD/apps/apps_st/comn/clone/bin/CloneContext_1208121418.log for details.

After few attempts I came against another blog, that was explaining the situation in a different way. http://newgendba.blogspot.com/2009/08/how-to-quick-solve-this-post-clone.html

Blogger has suggested to check whether temp.xml created by another user exist in the /tmp folder, which was the actual reason in my case. I found temp.xml file created by “root” and deleted the same and cloning process just went all the way fine.

 

Hope this info helps few of those once in a bluemoon DBAs out there :)

 

regards,

rajesh

 


VirtualBox | SATA vs SCSI

July 14, 2015

Recently I tried to build a cloned instance of our production instance over VirtualBox for some emergency issues faced by our inventory module. As this instance was supposed to be only accessed by me, I opted to use my desktop machine for the same. Throughout the last many years I built my own machines, choosing the best available hardware at the time of building them. My current desktop configuration is like following

i7 processor, 16GB memory, 2x1TB 7200 RPM HDD, 2x2TB 5200 RPM HDD, 1x500GB HDD for the OS (Windows 8.1 64Bit)

and throughout the years I built dozens of Virtual Machines using Oracle VirtualBox, mainly for testing un-certified Oracle & other products in a sand-boxed environment, against the crippled VMplayer, VirtualBox’s unrestricted interface supported almost everything I needed from a virtual environment.

So I built my R12 instance, that is around 600GB roughly in size with almost 4.5-5 years of business data, media etc. The following resources were dedicated for the fresh VM

  • 4 processors
  • 10GB memory
  • 40GB fixed size SATA VDI for the Operating System (I used both OEL 5 & OEL 7 64bit)
  • 1.2TB fixed size SATA VDI for the instance files
  • A dedicated D-Link 10/100MB NIC

Once the instance came online, I removed, cancelled all the scheduled concurrent programs, changed the database level parameters like job_queue_processes etc, however the lag experienced throughout the access attempts remained the same. Sometimes the HTML pages took 5-6 minutes to open, forms based modules took 8-10 minutes to open and timeouts were happening, frustrating me to the most possible levels

That is when I decided to give VMPlayer a try, I converted the existing VDI for the OS as vmdk and created a fresh 850 fixed size vmdk for the instance files and attached the same as SCSI to the VM. Did the complete clone process and to my utter surprise, the login page loaded within a minutes once after the instance was started!

This lead me to do various attempts with the fresh instance, I was able to shutdown the instance much faster, forms were opening faster, though LOVs having more than thousands of items were taking more time than anticipated

Once again, I created another fresh VM with VirtualBox and attached the disks created for VMplayer with it and repeated the tests. Well, I got the same performances from the new VM and somehow I came to a conclusion that, both VirtualBox and VMPlayer provide better I/O for SCSI interfaces compared to plain SATA emulators, ironically, the disks were created over SATA drives!

This difference you may not experience with VMs those are not hosting resource hungry applications like Oracle E-Business Suite. So, if you are attempting what I had described above and notice the differences, please update me with comments section.

 

regards,

 

rajesh

 

 


Oracle Payroll | R12 | Simple view for employee paid salaries

June 19, 2014

 

Recently I were requested to build a report by the HR/Payroll team, running which they can generate the salary paid details for employees. Ie, a tabular listing with paid month, and total salary earned, grouped by year factor

0046

I found the request being one of the toughest, as my exposure to Payroll module and base tables was limited almost none, other than knowing the person and assignment tables and views!

Gradually I started going through the custom reports developed by our implementer and restructured few of their custom functions into a best possible view what meets our current requirements. As we are not using customized packages for the salary calculations, you should able to alter the below SQL and create your own with almost no efforts. We hope you will enjoy the solution!

Script for view

CREATE OR REPLACE VIEW XXEMPLOYEE_SALARIES_MONTHLY
AS
SELECT pap.person_id, pap.employee_number,to_char(ppa.date_earned,'Mon-YYYY') earned_month,
TO_NUMBER(to_char(ppa.date_earned,'MM')) MONTH_NUMBER,
TO_NUMBER(to_char(ppa.date_earned,'YYYY')) YEAR_FACTOR,
 sum(to_number(prrv.result_value)) PAID_AMOUNT
 FROM PAY_ELEMENT_TYPES_F petf
   ,PAY_INPUT_VALUES_F pivf
   ,PAY_PAYROLL_ACTIONS ppa
   ,PAY_ASSIGNMENT_ACTIONS paa
   ,PAY_RUN_RESULTS prr
   ,PAY_RUN_RESULT_VALUES prrv
   ,PER_ALL_ASSIGNMENTS_F paaf
   ,PER_ALL_PEOPLE_F pap
   ,PAY_ELEMENT_CLASSIFICATIONS pec
WHERE 1=1
  AND pec.classification_id = petf.classification_id
 and prrv.input_value_id = pivf.input_value_id
AND CLASSIFICATION_NAME IN ('Earnings','Supplemental Earnings')--Add in more based on your setup
  and pivf.name in ('Pay Value')
  AND petf.element_type_id = prr.element_type_id
  AND paa.assignment_action_id = prr.assignment_action_id
  AND prr.run_result_id = prrv.run_result_id
  AND petf.business_group_id = 81
  AND ppa.business_group_id = pap.business_group_id
  AND ppa.payroll_action_id = paa.payroll_action_id
  AND SYSDATE BETWEEN TRUNC(petf.effective_start_date) AND TRUNC(petf.effective_end_date)
  AND last_day(ppa.date_earned) BETWEEN TRUNC(pap.effective_start_date) AND TRUNC(pap.effective_end_date)
  AND last_day(ppa.date_earned) BETWEEN TRUNC(paaf.effective_start_date) AND TRUNC(paaf.effective_end_date)
  AND paaf.assignment_id = paa.assignment_id
  AND paaf.person_id = pap.person_id
 --and prrv.result_value > '0'
  AND paaf.business_group_id = pap.business_group_id
 AND pap.business_group_id = 81--double check
 GROUP BY pap.person_id,pap.employee_number, to_char(ppa.date_earned,'Mon-YYYY'),to_char(ppa.date_earned,'MM'),to_char(ppa.date_earned,'YYYY')
UNION ALL
SELECT  pap.person_id, pap.employee_number,to_char(ppa.date_earned,'Mon-YYYY') earned_month,
TO_NUMBER(to_char(ppa.date_earned,'MM')) MONTH_NUMBER,
TO_NUMBER(to_char(ppa.date_earned,'YYYY')) YEAR_FACTOR,
nvl(sum(to_number(prrv.result_value)),0)*-1  PAID_AMOUNT
                     FROM PAY_ELEMENT_TYPES_F petf
                                                 ,PAY_INPUT_VALUES_F pivf
                           ,PAY_PAYROLL_ACTIONS ppa
                            ,PAY_ASSIGNMENT_ACTIONS paa
                            ,PAY_RUN_RESULTS prr
                           ,PAY_RUN_RESULT_VALUES prrv
                           ,PER_ALL_ASSIGNMENTS_F paaf
                           ,PER_ALL_PEOPLE_F pap
                           ,PAY_ELEMENT_CLASSIFICATIONS pec
                    WHERE 1=1
                                    AND pec.classification_id = petf.classification_id
                  and prrv.input_value_id = pivf.input_value_id
                  AND CLASSIFICATION_NAME IN ('Voluntary Deductions','Involuntary Deductions','Social Insurance')--Add in more based on your setup
                  and pivf.name in ('Pay Value')
                               AND petf.element_type_id = prr.element_type_id
                  AND paa.assignment_action_id = prr.assignment_action_id
                  AND prr.run_result_id = prrv.run_result_id
                               AND ppa.business_group_id = pap.business_group_id
                  AND ppa.payroll_action_id = paa.payroll_action_id
                AND SYSDATE BETWEEN TRUNC(petf.effective_start_date) AND TRUNC(petf.effective_end_date)
  AND last_day(ppa.date_earned) BETWEEN TRUNC(pap.effective_start_date) AND TRUNC(pap.effective_end_date)
  AND last_day(ppa.date_earned) BETWEEN TRUNC(paaf.effective_start_date) AND TRUNC(paaf.effective_end_date)
                AND paaf.assignment_id = paa.assignment_id
                  AND paaf.person_id = pap.person_id
    --              and prrv.result_value > '0.00'
                    AND paaf.business_group_id = pap.business_group_id
                    AND pap.business_group_id = 81--double check
                  GROUP BY pap.person_id,pap.employee_number, to_char(ppa.date_earned,'Mon-YYYY'),to_char(ppa.date_earned,'MM'),to_char(ppa.date_earned,'YYYY')
 order by 2,5,4;

Sample Query

SELECT PERSON_ID, EMPLOYEE_NUMBER,earned_month,year_factor,
 SUM(PAID_AMOUNT) PAID_SALARY
 FROM XXEMPLOYEE_SALARIES_MONTHLY
 WHERE
 1=1
 AND EMPLOYEE_NUMBER =:P_EMPLOYEE_NUMBER
 AND YEAR_FACTOR BETWEEN NVL(:P_START_YEAR,YEAR_FACTOR) AND NVL(:P_END_YEAR,YEAR_FACTOR)
 GROUP BY PERSON_ID,EMPLOYEE_NUMBER,earned_month,YEAR_FACTOR, MONTH_NUMBER
 ORDER BY YEAR_FACTOR, MONTH_NUMBER

Enjoy another quality post from us guys :)

for Windows7bugs

rajesh


Linux shell script file for Start/Stop Weblogic Services

April 23, 2014

 

This time we are sharing a shell script for starting/stopping Weblogic services. This shell script can

  1. Start Weblogic Admin Server (after starting Node Manager)
  2. Once the Admin server started, you can start the forms and reports services using the Admin Console
  3. Unless conflicts, you should able to access the Oracle enterprise manager console as well

Copy the content below in plain text file first, change the extension to .sh and set the execute permissions

 

 

 

 

#!/bin/sh

if [ -z "$1" ]; then
echo "You must supply either start or stop command while calling this script! correct usage: weblogic_start_stop.sh start|stop"
exit
fi

bold=`tput bold`
normal=`tput sgr0`

case "$1" in
        'start')
        echo "Starting Management Node & Weblogic Server 10.3.6"

echo "Starting NodeManager"

nohup $WLS_HOME/server/bin/startNodeManager.sh > /dev/null 2>&1 &

sleep 10

output=`ps -ef | grep -i nodemanager.javahome | grep -v grep | awk {'print $2'} | head -1`

set $output

pid=$1

echo "Weblogic NodeManager Service was started with process id : ${bold}$pid${normal}"

echo "Starting WebLogic Domain"

nohup $MW_HOME/user_projects/domains/ClassicDomain/bin/startWebLogic.sh > /dev/null 2>&1 &

# Sleep until exiting
sleep 60
echo "All done, exiting"
exit
esac

################################Stopping the services##################################

case "$1" in
        'stop')
echo "Stopping Weblogic Server & Node Manager"

nohup $MW_HOME/user_projects/domains/ClassicDomain/bin/stopWebLogic.sh > /dev/null 2>&1 &

sleep 30

# echo "Killing Nodemanager process now"

output=`ps -ef | grep -i nodemanager.javahome | grep -v grep | awk {'print $2'} | head -1`
set $output
pid=$1
echo "Killing Weblogic NodeManager Service Process : ${bold}$pid${normal}"

kill -9 `ps -ef | grep -i nodemanager.javahome | grep -v grep | awk {'print $2'} | head -1`

echo "All done, exiting"
exit
esac

 

 

 

 

If you have queries, please ask them using comments section.

for Windows7bugs

rajesh