Saturday, February 28, 2026

Transaction priority in oracle database 23 ai

 This has been tested in Oracle Database 23ai Free Release 23.0.0.0.0 using sample hr schema.

Problem statement:Suppose management decided to increase salary of job clerk whose joining date is less then 01-JAN-2019.Now one of the HR was trying to update through an application but mistakenly chosen wrong year as 2020 but she did not commit by pressing confirmation button. Now the rows are locked as commit is not performed.Same has been tried from a new session but that hangs forever as previous session was not commited. At this stage DBA can be involved and previous session can be killed so that new session can commit.

This problem can be easily solved in 23ai if we set parameter txn_priority and priority_txns_medium_wait_target in session and pdb level

connect to hr schema and pdb.Issue below command which says medium transaction will wait for 180 seconds in case any low priority transaction blocks medium transaction.

alter system set priority_txns_medium_wait_target=180;

From session 1 set transaction priority as below

alter session set txn_priority='LOW';

--Issue below command to increase salary of those employees whose hire date is less then 1st Jan 2020 and belongs to JOB clerk

update employees set salary=salary*1.2 where job_id='ST_CLERK' and hire_date<to_date('01-JAN-2020','DD-MON-YYYY');

--Do not commit here

Lets say someone from another session realized hire date should be less than 01-JAN-2019.So he execute below statement with medium priority

--Session 2 starts here

alter session set txn_priority='MEDIUM';

update employees set salary=salary*1.2 where job_id='ST_CLERK' and hire_date<to_date('01-JAN-2019','DD-MON-YYYY');

--Now session 2 will wait until it reaches180 seconds

After wait of 180 seconds low transaction will be rolled back automatically


During this time open 3rd session and execute below query

select sid,event,seconds_in_wait,blocking_session from v$session where event like '%enq%';


      SID EVENT     SECONDS_IN_WAIT BLOCKING_SESSION

---------- ---------------------------------------------------------------- --------------- ----------------

49 enq: TX - row lock (MEDIUM priority) 78   35


Once 180 second is past go to session 1 and try to commit.You will see following error

SQL> commit;

commit

*

ERROR at line 1:

ORA-63302: Transaction must roll back

ORA-63300: Transaction is automatically rolled back since it is blocking a higher priority transaction from another session.

Help: https://docs.oracle.com/error-help/db/ora-63302/


This proves that since medium transaction has high priority it has rolled back after wait of 180 seconds.

Now you can issue commit in 2nd session to make that change permanently.


I hope you have learned something useful which can be used in your application logic


Saturday, February 7, 2026

OEM 13.5 installation using silent mode

 

1.     Satisfy pre-requisites for installing OMS

Make sure following packages  exist

To check whether any package exist use below command from root user

rpm -qa <package name>

Platform

64-Bit Packages for 64-Bit Platform

Oracle Linux 9

Red Hat Linux 9

·        binutils-2.35.2-17.0.1.el9

·        gcc-11.2.1-9.4.0.2.el9

·        gcc-c++-11.2.1-9.4.0.2.el9

·        glibc-2.34-28.0.1.el9_0.2.x86_64

·        glibc-devel-2.34-28.0.1.el9_0.2.x86_64

·        libaio-0.3.111-13.el9.x86_64

·        libgcc-11.2.1-9.4.0.2.el9.x86_64

·        libnsl-2.34-83.0.2.el9.x86_64

·        libstdc++-11.2.1-9.4.0.2.el9.x86_64

·        libstdc++-devel-11.2.1-9.4.0.2.el9.x86_64

·        make-4.3-8.el9

·        motif-2.3.4-25.el9.x86_64

·        motif-devel-2.3.4-25.el9.x86_64

·        openssl-3.0.1-41.0.1.el9_0

·        sysstat-12.5.4-3.el9

 

Kernel parameter ip_local_port_range should be set as 11000 - 65000

Make this change in /etc/sysctl.conf and use syctl -a command to check whether it reflects the change.

If it does not shows the change you may need to bounce the server

Set below database process parameter

alter system set processes=600 scope=spfile;

alter system set session_cached_cursors=300 scope=spfile;

Set parameter _allow_insert_with_update_check is TRUE and validate like below

alter system set "_allow_insert_with_update_check"=TRUE scope=spfile;

SELECT  name,value FROM   v$parameter WHERE  name LIKE '/_%' ESCAPE '/'   AND isdefault = 'FALSE' ORDER BY   name;

Create a blank file called /etc/oraInst.loc and change ownership to oracle:dba

 

2.     Download OEM 13c release 5 for Linux from below link and stage it in a shared directory

Oracle Enterprise Manager Downloads for Linux x86-64

 

 

 

3.     Invoke the installer and generate the response file you need to use for performing a silent installation.

./em13500_linux64.bin -getResponseFileTemplates -outputLoc /mnt/oemcloud_1350

Launcher log file is /tmp/OraInstall2026-01-30_01-41-46PM/launcher2026-01-30_01-41-46PM.log.

Extracting the installer . . . . . . . . . . . . . . . . . . . . . . . . . . . Done

Copying response file template(s)

to /mnt/oemcloud_1350

  Copying response file template softwareOnlyWithPlugins_install.rsp

  Copying response file template emprereqkit_upgrade.rsp

  Copying response file template upgrade.rsp

  Copying response file template new_install.rsp

  Copying response file template emprereqkit_install.rsp

  Copying response file template softwareOnlyWithPlugins_upgrade.rsp

Finished copying response file template(s)

The log(s) can be found here: /tmp/OraInstall2026-01-30_01-41-46PM.

4.     Edit the new_install.rsp file and enter appropriate values for the parameters described below

UNIX_GROUP_NAME=dba

INVENTORY_LOCATION=/u01/app/oraInventory

INSTALL_UPDATES_SELECTION=skip

STAGE_LOCATION=<string>                               ---Not required as we have skipped install_updates_selection to be skipped

ORACLE_MIDDLEWARE_HOME_LOCATION=/u01/app/oracle/middleware

ORACLE_HOSTNAME=<OMS server fully qualified hostname>

AGENT_BASE_DIR=/u01/app/oracle

WLS_ADMIN_SERVER_USERNAME=weblogic

WLS_ADMIN_SERVER_PASSWORD=<Admin server password>

WLS_ADMIN_SERVER_CONFIRM_PASSWORD=<Admin server password>

NODE_MANAGER_PASSWORD=<Node manager password>

NODE_MANAGER_CONFIRM_PASSWORD=<Node manager password>

ORACLE_INSTANCE_HOME_LOCATION=/u01/app/oracle/gc_inst

CONFIGURE_ORACLE_SOFTWARE_LIBRARY=true

SOFTWARE_LIBRARY_LOCATION=/u01/app/oracle/swlib

DATABASE_HOSTNAME=<Hostname for management repository>

LISTENER_PORT=1521

SERVICENAME_OR_SID=<SID of repository database>

SYS_PASSWORD=

SYSMAN_PASSWORD=

SYSMAN_CONFIRM_PASSWORD=

DEPLOYMENT_SIZE=MEDIUM

MANAGEMENT_TABLESPACE_LOCATION=+DATA

CONFIGURATION_DATA_TABLESPACE_LOCATION=+DATA

JVM_DIAGNOSTICS_TABLESPACE_LOCATION=+DATA

EMPREREQ_AUTO_CORRECTION=false

AGENT_REGISTRATION_PASSWORD=

AGENT_REGISTRATION_CONFIRM_PASSWORD=

STATIC_PORTS_FILE=  (keep it blank to use default port)

PLUGIN_SELECTION={}

b_upgrade=false

EM_INSTALL_TYPE=NOSEED

CONFIGURATION_TYPE=ADVANCED

 

5.       Run the installer like below

./em13500_linux64.bin -J-Djava.io.tmpdir=/mnt/oemcloud_1350 -silent -responseFile /mnt/oemcloud_1350/new_install.rsp -invPtrLoc /etc

 

            Install log finished with below messages

            Starting of OMS failed.

Starting export oms config...

Executing command: /u01/app/oracle/middleware/bin/emctl exportconfig oms -dir  /u01/app/oracle/gc_inst/em/EMGC_OMS1/sysman/backup

 

Export config of OMS is successful.

 

*** The installation was Successful, but some configuration assistants were failed or cancelled or skipped. ***

Tried to start OMS stack using emctl start oms command but Web tier failed to start

This is a known issue described in below MOS article and actual error can be found in node manager log like below

/u01/app/oracle/middleware/ohs/bin/httpd: error while loading shared libraries: libclntshcore.so.12.1: cannot open shared object file: No such file or directory>

It is trying to find that file under $ORACLE_HOME/lib

EM 13.5 : OMS Startup Failure During Installation on OL/RHEL9

KB502768

Download the patch  35775632: PLACEHOLDER FOR STUBS.TAR PATCH FOR OL9 THAT FIXES BUG 33794281 and copy in /mnt/oemcloud_1350

Unzip the zip file p35775632_190000_Linux-x86-64.zip and it will creates stubs.tar

Copy stubs.tar into $OMS_HOME/lib/stubs and extract (cmd: $ tar -xf stubs.tar)

cp -r /mnt/oemcloud_1350/stubs.tar $ORACLE_HOME/lib/stubs

cd $ORACLE_HOME/lib/stubs

tar -xvf stubs.tar

libc-2.17.0-stub.so

libc_nonshared_stat.a

libc.so

libc.so.6

libm-2.17.0-stub.so

libm.so

libm.so.6

libpthread-2.17.0-stub.so

libpthread.so

libpthread.so.0

libpthread_stubs.a

            Once the files are extracted, run the following command:

$ORACLE_HOME/bin/genclntsh

This command reads libraries we just extracted from previous step and generates file under $ORACLE_HOME/lib/ libclntshcore.so.12.1

Resume the Install from OUI or execute the runConfig.sh command to resume.

cd $ORACLE_HOME/oui/bin

$ OMS_HOME/oui/bin> ./runConfig.sh ORACLE_HOME=$ORACLE_HOME MODE=perform ACTION=configure COMPONENT_XML={encap_oms.1_0_0_0_0.xml}

            Setting the invPtrLoc to /u01/app/oracle/middleware/oraInst.loc

 

perform - mode is starting for action: configure

 

log4j:ERROR No appenders could be found for category (oracle.sysman.oms.StartOMS).

log4j:ERROR Please initialize the log4j system properly.

The AgentFreshInstaller is starting now

Oraclehome : ../u01/app/oracle/agent_13.5.0.0.0

InstanceHome : /u01/app/oracle/agent_inst

Agent Base Directory : /u01/app/oracle

The oraclehome /u01/app/oracle/agent_13.5.0.0.0

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: /u01/app/oracle/agent_13.5.0.0.0

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: /u01/app/oracle/agent_inst

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: /u01/app/oracle

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: RESPONSE_FILE=/u01/app/oracle/agentInstall.rsp

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: ORACLE_HOME=/u01/app/oracle/agent_13.5.0.0.0

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: AGENT_PORT=

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: ORACLE_HOSTNAME=tusldoem01.unisource.corp

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: b_doDiscovery=true

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: AGENT_BASE_DIR=/u01/app/oracle

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: AGENT_INSTANCE_HOME=/u01/app/oracle/agent_inst

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: s_hostname=tusldoem01.unisource.corp

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: OMS_HOST=tusldoem01.unisource.corp

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: START_AGENT=true

startAgent is:true

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: b_secureAgent=true

seci is :true

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: b_chainedInstall=true

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: b_forceConfigure=false

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: EM_UPLOAD_PORT=4903

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: b_forceAgentDefaultPort=false

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: s_staticPorts=

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: PROPERTIES_FILE=

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: b_skipValidation=false

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: ORACLE_HOME=/u01/app/oracle/agent_13.5.0.0.0

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: AGENT_PORT=

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: ORACLE_HOSTNAME=tusldoem01.unisource.corp

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: b_doDiscovery=true

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: AGENT_BASE_DIR=/u01/app/oracle

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: AGENT_INSTANCE_HOME=/u01/app/oracle/agent_inst

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: s_hostname=tusldoem01.unisource.corp

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: OMS_HOST=tusldoem01.unisource.corp

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: START_AGENT=true

startAgent is:true

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: b_secureAgent=true

seci is :true

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: b_chainedInstall=true

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: b_forceConfigure=false

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: EM_UPLOAD_PORT=4903

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: b_forceAgentDefaultPort=false

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: s_staticPorts=

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: PROPERTIES_FILE=

Feb 06, 2026 5:59:36 AM oracle.sysman.agent.installer.AgentInstaller parseResponseFile

INFO: b_skipValidation=false

log loction is setlog

Creating log directoyr :/u01/app/oracle/agent_13.5.0.0.0/cfgtoollogs/agentDeploy

Writing the following contents into /u01/app/oracle/agent_13.5.0.0.0/install/oragchomelist

/u01/app/oracle/agent_13.5.0.0.0:/u01/app/oracle/agent_inst

Creating directory /u01/app/oracle/agent_13.5.0.0.0/install/tmp completed successfully.

File /etc/oragchomelist exists.

File /etc/oragchomelist is writable.

Index :-1 for line : /u01/app/oracle/middleware

Index :0 for line : /u01/app/oracle/agent_13.5.0.0.0

Overwriting the contents since oracle home:/u01/app/oracle/agent_13.5.0.0.0 entry already exists.

Agent Home is : {0}

The value of chainInstall : true forceConfigure : false skipValidation : false

Validated the oms host and port :- XXXXXX----4903

Logs Location is : {0}

Getting Inet Addresses for host XXXXX

** Agent Port Check completed successfully.**

Validated the agent port :- ----3872

Executing command: {0}

shared agent value is :false

 

Setting system property CUSTOM_INVENTORY to {0}

chain install is :true

 

Cloning of agent home completed successfully

Agent Configuration completed successfully

The following configuration scripts need to be executed as the "root" user. Root script to run : /u01/app/oracle/agent_13.5.0.0.0/root.sh

 

perform - mode finished for action: configure

 

You can see the log file: /u01/app/oracle/middleware/cfgtoollogs/oui/configActions2026-02-06_05-56-28AM.log

            Now we can see that OMS stack came up with webtier and missing library file is also created

            ls -ltr $ORACLE_HOME/lib/libclntshcore.so.12.1

-rwxr-xr-x. 1 oracle oinstall 6993800 Feb  6 05:52 /u01/app/oracle/middleware/lib/libclntshcore.so.12.1

            emctl status oms

Oracle Enterprise Manager Cloud Control 13c Release 5

Copyright (c) 1996, 2021 Oracle Corporation.  All rights reserved.

WebTier is Up

Oracle Management Server is Up

JVMD Engine is Up

Hope you have learnt something useful.

Easy peasy non-cdb migration to cdb

Problem statement :Lets assume you want to migrate your existing non-cdb database and plug into a cdb running in same database server and st...