Wednesday, 10 June 2026

Windows Subsystem for Linux (WSL)

Windows Subsystem for Linux (WSL) is a feature of Windows that allows you to run a Linux environment directly on Windows without installing a separate virtual machine or dual-booting your computer.

WSL enables developers, system administrators, and DBAs to use Linux command-line tools, scripts, and applications alongside Windows.

Why Use WSL?

WSL allows you to:

  • Run Linux distributions such as Ubuntu, Debian, and Oracle Linux.
  • Use Linux commands and shell scripting.
  • Install development tools (Git, Python, Java, Node.js).
  • Manage databases such as PostgreSQL and MySQL.
  • Run automation scripts.
  • Access Windows files from Linux and vice versa.

For Oracle DBAs and EBS administrators, WSL is useful for learning Linux administration, shell scripting, automation, Ansible, Git, and database tools without needing a dedicated Linux server.

WSL Architecture

WSL 1

  • Translates Linux system calls into Windows system calls.
  • Lower resource consumption.
  • Faster access to Windows files.
  • Limited compatibility.

WSL 2

  • Uses a real Linux kernel.
  • Better performance and compatibility.
  • Supports Docker and containerized applications.
  • Recommended for most users.

Prerequisites

  • Windows 10 (Version 2004+) or Windows 11
  • Administrator privileges
  • Virtualization enabled in BIOS

Check virtualization: Open Windows PowerShell

Windows PowerShell

Copyright (C) Microsoft Corporation. All rights reserved.

Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows

PS C:\Users\USER>systeminfo

Install WSL2 (Windows Subsystem for Linux) - Recommended

Open PowerShell as Administrator and run:

PS C:\Users\USER> wsl Windows Subsystem for Linux must be updated to the latest version to proceed. You can update by running 'wsl.exe --update'. For more information please visit https://aka.ms/wslinstall Press any key to install Windows Subsystem for Linux. Press CTRL-C or close this window to cancel. This prompt will time out in 60 seconds. The requested operation requires elevation. Downloading: Windows Subsystem for Linux 2.7.3 Installing: Windows Subsystem for Linux 2.7.3 Windows Subsystem for Linux 2.7.3 has been installed. The operation completed successfully. Windows Subsystem for Linux has no installed distributions. You can resolve this by installing a distribution with the instructions below: Use 'wsl.exe --list --online' to list available distributions and 'wsl.exe --install <Distro>' to install.

PS C:\Users\USER> wsl.exe --list --online The following is a list of valid distributions that can be installed. Install using 'wsl.exe --install <Distro>'. NAME FRIENDLY NAME Ubuntu Ubuntu Ubuntu-26.04 Ubuntu 26.04 LTS Ubuntu-24.04 Ubuntu 24.04 LTS Ubuntu-22.04 Ubuntu 22.04 LTS openSUSE-Tumbleweed openSUSE Tumbleweed openSUSE-Leap-16.0 openSUSE Leap 16.0 SUSE-Linux-Enterprise-15-SP7 SUSE Linux Enterprise 15 SP7 SUSE-Linux-Enterprise-16.0 SUSE Linux Enterprise 16.0 kali-linux Kali Linux Rolling Debian Debian GNU/Linux AlmaLinux-8 AlmaLinux OS 8 AlmaLinux-9 AlmaLinux OS 9 AlmaLinux-Kitten-10 AlmaLinux OS Kitten 10 AlmaLinux-10 AlmaLinux OS 10 archlinux Arch Linux FedoraLinux-44 Fedora Linux 44 FedoraLinux-43 Fedora Linux 43 eLxr eLxr 12.12.0.0 GNU/Linux OracleLinux_7_9 Oracle Linux 7.9 OracleLinux_8_10 Oracle Linux 8.10 OracleLinux_9_5 Oracle Linux 9.5 SUSE-Linux-Enterprise-15-SP6 SUSE Linux Enterprise 15 SP6

PS C:\Users\USER> wsl.exe --install Ubuntu-26.04 Downloading: Ubuntu 26.04 LTS Installing: Ubuntu 26.04 LTS Distribution successfully installed. It can be launched via 'wsl.exe -d Ubuntu-26.04' Launching Ubuntu-26.04... Provisioning the new WSL instance Ubuntu-26.04 This might take a while... Create a default Unix user account: ubuntu New password: Retype new password: passwd: password updated successfully usermod: no changes Help improve Ubuntu! Help us improve Ubuntu features and compatibility by sharing system reports with Canonical. Reports are sent anonymously and do not contain any personal data. For legal details, please visit: https://ubuntu.com/legal/systems-information-notice We will save your answer to Windows and will only ask you once. Would you like to opt-in to platform metrics collection (Y/n)? To see an example of the data collected, enter 'e'. [Y/n/e]: n

Verify Installation

After reboot:

PS C:\Users\USER> wsl --version WSL version: 2.7.3.0 Kernel version: 6.6.114.1-1 WSLg version: 1.0.73 MSRDC version: 1.2.6676 Direct3D version: 1.611.1-81528511 DXCore version: 10.0.26100.1-240331-1435.ge-release Windows version: 10.0.26200.8457

PS C:\Users\USER> wsl --status

Default Distribution: Ubuntu-26.04 Default Version: 2

Check installed distributions:

PS C:\Users\USER> wsl -l -v NAME STATE VERSION * Ubuntu-26.04 Running 2

Start Linux

PS C:\Users\USER> wsl

ubuntu@Amit-Gupta:/mnt/c/Users/USER$ sudo apt update [sudo: authenticate] Password: Get:1 http://security.ubuntu.com/ubuntu resolute-security InRelease [137 kB] Get:2 http://archive.ubuntu.com/ubuntu resolute InRelease [136 kB] Get:3 http://security.ubuntu.com/ubuntu resolute-security/main amd64 Packages [201 kB] Get:4 http://security.ubuntu.com/ubuntu resolute-security/main Translation-en [54.0 kB] Get:5 http://security.ubuntu.com/ubuntu resolute-security/main amd64 Components [31.1 kB] Get:6 http://security.ubuntu.com/ubuntu resolute-security/main amd64 c-n-f Metadata [3312 B] Get:7 http://security.ubuntu.com/ubuntu resolute-security/universe amd64 Packages [103 kB] Get:8 http://security.ubuntu.com/ubuntu resolute-security/universe Translation-en [32.1 kB] Get:9 http://security.ubuntu.com/ubuntu resolute-security/universe amd64 Components [42.8 kB] Get:10 http://security.ubuntu.com/ubuntu resolute-security/universe amd64 c-n-f Metadata [2788 B] Get:11 http://security.ubuntu.com/ubuntu resolute-security/restricted amd64 Packages [201 kB] Get:12 http://security.ubuntu.com/ubuntu resolute-security/restricted Translation-en [35.1 kB] Get:13 http://security.ubuntu.com/ubuntu resolute-security/restricted amd64 c-n-f Metadata [396 B] Get:14 http://security.ubuntu.com/ubuntu resolute-security/multiverse amd64 Components [212 B] Get:15 http://security.ubuntu.com/ubuntu resolute-security/multiverse amd64 c-n-f Metadata [120 B] Get:16 http://archive.ubuntu.com/ubuntu resolute-updates InRelease [137 kB] Get:17 http://archive.ubuntu.com/ubuntu resolute-backports InRelease [136 kB] Get:18 http://archive.ubuntu.com/ubuntu resolute/main amd64 Packages [1480 kB] Get:19 http://archive.ubuntu.com/ubuntu resolute/main Translation-en [524 kB] Get:20 http://archive.ubuntu.com/ubuntu resolute/main amd64 Components [395 kB] Get:21 http://archive.ubuntu.com/ubuntu resolute/main amd64 c-n-f Metadata [32.4 kB] Get:22 http://archive.ubuntu.com/ubuntu resolute/universe amd64 Packages [16.0 MB] Get:23 http://archive.ubuntu.com/ubuntu resolute/universe Translation-en [6329 kB] Get:24 http://archive.ubuntu.com/ubuntu resolute/universe amd64 Components [4556 kB] Get:25 http://archive.ubuntu.com/ubuntu resolute/universe amd64 c-n-f Metadata [313 kB] Get:26 http://archive.ubuntu.com/ubuntu resolute/restricted amd64 Packages [152 kB] Get:27 http://archive.ubuntu.com/ubuntu resolute/restricted Translation-en [25.8 kB] Get:28 http://archive.ubuntu.com/ubuntu resolute/restricted amd64 Components [556 B] Get:29 http://archive.ubuntu.com/ubuntu resolute/multiverse amd64 Packages [290 kB] Get:30 http://archive.ubuntu.com/ubuntu resolute/multiverse Translation-en [127 kB] Get:31 http://archive.ubuntu.com/ubuntu resolute/multiverse amd64 Components [50.0 kB] Get:32 http://archive.ubuntu.com/ubuntu resolute/multiverse amd64 c-n-f Metadata [8276 B] Get:33 http://archive.ubuntu.com/ubuntu resolute-updates/main amd64 Packages [208 kB] Get:34 http://archive.ubuntu.com/ubuntu resolute-updates/main Translation-en [55.8 kB] Get:35 http://archive.ubuntu.com/ubuntu resolute-updates/main amd64 Components [37.2 kB] Get:36 http://archive.ubuntu.com/ubuntu resolute-updates/main amd64 c-n-f Metadata [3428 B] Get:37 http://archive.ubuntu.com/ubuntu resolute-updates/universe amd64 Packages [107 kB] Get:38 http://archive.ubuntu.com/ubuntu resolute-updates/universe Translation-en [33.4 kB] Get:39 http://archive.ubuntu.com/ubuntu resolute-updates/universe amd64 Components [49.0 kB] Get:40 http://archive.ubuntu.com/ubuntu resolute-updates/universe amd64 c-n-f Metadata [2676 B] Get:41 http://archive.ubuntu.com/ubuntu resolute-updates/restricted amd64 Packages [201 kB] Get:42 http://archive.ubuntu.com/ubuntu resolute-updates/restricted Translation-en [35.1 kB] Get:43 http://archive.ubuntu.com/ubuntu resolute-updates/restricted amd64 c-n-f Metadata [392 B] Get:44 http://archive.ubuntu.com/ubuntu resolute-updates/multiverse amd64 Packages [3328 B] Get:45 http://archive.ubuntu.com/ubuntu resolute-updates/multiverse Translation-en [772 B] Get:46 http://archive.ubuntu.com/ubuntu resolute-updates/multiverse amd64 Components [216 B] Get:47 http://archive.ubuntu.com/ubuntu resolute-updates/multiverse amd64 c-n-f Metadata [256 B] Get:48 http://archive.ubuntu.com/ubuntu resolute-backports/main amd64 Components [212 B] Get:49 http://archive.ubuntu.com/ubuntu resolute-backports/main amd64 c-n-f Metadata [112 B] Get:50 http://archive.ubuntu.com/ubuntu resolute-backports/universe amd64 Components [216 B] Get:51 http://archive.ubuntu.com/ubuntu resolute-backports/universe amd64 c-n-f Metadata [116 B] Get:52 http://archive.ubuntu.com/ubuntu resolute-backports/restricted amd64 Components [216 B] Get:53 http://archive.ubuntu.com/ubuntu resolute-backports/restricted amd64 c-n-f Metadata [120 B] Get:54 http://archive.ubuntu.com/ubuntu resolute-backports/multiverse amd64 Components [216 B] Get:55 http://archive.ubuntu.com/ubuntu resolute-backports/multiverse amd64 c-n-f Metadata [120 B] Fetched 32.2 MB in 6s (5033 kB/s) 34 packages can be upgraded. Run 'apt list --upgradable' to see them.

ubuntu@Amit-Gupta:/mnt/c/Users/NICSI$ cd

ubuntu@Amit-Gupta:~$ sudo su -

                                    OR

ubuntu@Amit-Gupta:/mnt/c/Users/USER$ sudo su - (Switch to root User) Welcome to Ubuntu 26.04 LTS (GNU/Linux 6.6.114.1-microsoft-standard-WSL2 x86_64) * Documentation: https://docs.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/pro System information as of Tue Jun 9 10:27:27 UTC 2026 System load: 0.06 Processes: 37 Usage of /: 0.1% of 1006.85GB Users logged in: 0 Memory usage: 6% IPv4 address for eth0: 172.29.53.113 Swap usage: 0% This message is shown once a day. To disable it please create the /root/.hushlogin file. root@Amit-Gupta:~#

Access Windows Files from Linux

Windows C: drive appears as:

root@Amit-Gupta:~# cd /mnt/c

root@Amit-Gupta:~# cd /mnt/c/Users
root@Amit-Gupta:~# ls

Access Linux Files from Windows

Linux files are stored under:

\\wsl$\

Open File Explorer(Win + E) and enter:

\\wsl$\

PostgreSQL Installation on Ubuntu

PostgreSQL is a powerful open-source relational database management system (RDBMS) known for its reliability, extensibility, and compliance with SQL standards. It is widely used in enterprise applications, data warehousing, web applications, and cloud environments.

This document describes the steps required to install and configure PostgreSQL on an Ubuntu Linux server.

Prerequisites

Before starting the installation, ensure the following:

  • Ubuntu Server (20.04, 22.04, or later)
  • Root or sudo privileges
  • Internet connectivity for package download
  • Minimum 2 GB RAM and adequate disk space

Step 1: Update System Packages

Update the package repository to ensure the latest package information is available.

root@Amit-Gupta:~# sudo apt update
root@Amit-Gupta:~# sudo apt upgrade -y
root@Amit-Gupta:~# apt install sysstat* -y
root@Amit-Gupta:~# apt install net-tool* -y
root@Amit-Gupta:~# sudo apt install -y wget gnupg2 lsb-release

Download the PostgreSQL GPG Key
wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc
  • wget downloads files from the internet.
  • -q runs wget in quiet mode (suppresses output).
  • -O - sends the downloaded content to standard output (stdout) instead of saving it to a file.
  • https://www.postgresql.org/media/keys/ACCC4CF8.asc is the official PostgreSQL public signing key.

The pipe (|) sends the downloaded key directly to the next command.

Convert the Key to Binary Format
sudo gpg --dearmor -o /usr/share/keyrings/postgresql.gpg
  • gpg is the GNU Privacy Guard utility.
  • --dearmor converts the ASCII-armored key (.asc) into a binary GPG keyring format.
  • -o /usr/share/keyrings/postgresql.gpg saves the converted key to the specified location.
  • sudo is required because writing to /usr/share/keyrings requires root privileges.

Result

After execution, the file:

/usr/share/keyrings/postgresql.gpg

is created and contains the PostgreSQL repository's trusted signing key.

Why This Is Required

When you add the PostgreSQL APT repository, Ubuntu uses this key to:

  • Verify package authenticity.
  • Ensure packages have not been tampered with.
  • Establish trust between your server and the PostgreSQL package repository.
root@Amit-Gupta:~# wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /usr/share/keyrings/postgresql.gpg

Next Step

Add the PostgreSQL repository:

root@Amit-Gupta:~# echo "deb [signed-by=/usr/share/keyrings/postgresql.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list

Step 2: Install PostgreSQL

Install PostgreSQL and additional contributed modules.

root@Amit-Gupta:~# sudo apt install -y postgresql-17

                                                            OR

root@Amit-Gupta:~#  sudo apt install postgresql postgresql-contrib -y

root@Amit-Gupta:~# sudo apt install -y postgresql-client-17 postgresql-contrib-17

The installation process automatically creates a PostgreSQL service and initializes a default database cluster.

Step 3: Verify Installation

Verify that the PostgreSQL service is running:

root@Amit-Gupta:~# sudo systemctl status postgresql

Check the PostgreSQL version:

root@Amit-Gupta:~# psql --version

psql (PostgreSQL) 17.10 (Ubuntu 17.10-1.pgdg26.04+1)

Step 4: Start and Enable PostgreSQL Service

If the service is not running, start it manually:

root@Amit-Gupta:~# sudo systemctl start postgresql

Enable automatic startup during system boot:

root@Amit-Gupta:~# sudo systemctl enable postgresql

root@Amit-Gupta:~# sudo systemctl status postgresql@17-main.service

Step 5: Connect to PostgreSQL

Switch to the PostgreSQL operating system user:

root@Amit-Gupta:~# sudo -i -u postgres

Access the PostgreSQL command-line interface:

postgres@Amit-Gupta:~$ psql psql (17.10 (Ubuntu 17.10-1.pgdg26.04+1)) Type "help" for help. postgres=# \q

Step 6: Create a Database User

Login to PostgreSQL:

root@Amit-Gupta:~# sudo -u postgres psql

Create a new database user:

postgres=# CREATE USER postgres WITH PASSWORD 'postgres';

                        OR

postgres=# ALTER USER postgres PASSWORD 'postgres'; ALTER ROLE

Step 7: Create a Database

Create a new database:

postgres=# CREATE DATABASE appdb OWNER postgres;

Grant privileges:

postgres=# GRANT ALL PRIVILEGES ON DATABASE appdb TO postgres;

Verify database creation:

postgres=# \l

Verify users:

postgres=# \du

postgres=# \q

Step 8: Configure Remote Connections (Optional)

Modify postgresql.conf

Edit the PostgreSQL configuration file:

root@Amit-Gupta:~# sudo vi /etc/postgresql/17/main/postgresql.conf

Locate:

#listen_addresses = 'localhost'

Change to:

listen_addresses = '*'

Modify pg_hba.conf

Edit client authentication settings:

root@Amit-Gupta:~# sudo vi /etc/postgresql/17/main/pg_hba.conf

Add the following entry:

host    all    all    0.0.0.0/0    md5

                    OR

host all all 0.0.0.0/0 scram-sha-256

Restart PostgreSQL

root@Amit-Gupta:~# sudo systemctl restart postgresql

Step 9: Configure Firewall

Allow PostgreSQL default port 5432:

root@Amit-Gupta:~# sudo ufw allow 5432/tcp

Verify firewall rules:

root@Amit-Gupta:~# sudo ufw status
root@Amit-Gupta:~# sudo netstat -tulpn | grep 5432

Useful PostgreSQL Commands

Check database list:

postgres=# \l

Connect to a database:

postgres=# \c appdb

Display tables:

postgres=# \dt

Display users:

postgres=# \du

Exit PostgreSQL:

postgres=# \q

PostgreSQL has been successfully installed and configured on Ubuntu.
The database service is running, users and databases can be created,
and remote access can be enabled when required. PostgreSQL provides
a robust platform for enterprise applications, data analytics, and mission-critical
database workloads.

Tuesday, 9 June 2026

Implementing Corporate Branding and Custom Logo Configuration in Oracle EBS 12.2.x

Corporate Branding in Oracle E-Business Suite (EBS) enables organizations to customize the application's visual appearance by displaying company logos, banners, and brand-specific images. This customization enhances the user experience, strengthens corporate identity, and provides a consistent look and feel across Oracle Applications. In Oracle EBS 12.2.x, branding images are typically configured through profile options and stored in the OA Framework media repository, allowing organizations to replace default Oracle branding with their own corporate identity.

Purpose

  • Display company logo in Oracle EBS pages.
  • Provide a customized look and feel.
  • Improve user recognition and corporate identity.
  • Commonly used after Oracle EBS upgrades, clones, or new implementations.

Where It Appears

Typically in:

  • Login page
  • Home page
  • Navigator page
  • Self-Service (OA Framework) pages
  • Application headers

Example Steps

1. Create a logo image (PNG/JPG/GIF).

2. Upload it to the EBS web server under: $OA_MEDIA
Action is performed on the Application server:
i. Open a telnet/PuTTY session to the Application server and source Applications environment.
ii. Navigate to the $OA_MEDIA directory.
iii. Copy the custom image file to this directory and make sure the image size is 155*20 pixels and permissions are set properly.

3. Set the profile option: 
Change profile option:
i. Login to Applications as System Administrator.
ii. Select: System Administrator > Profile - System.
iii. Query profile "Corporate Branding Image for Oracle Applications".
iv. Change the SITE level value to "(OA_MEDIA_PATH)/Company_Name_logo.gif"
v. Save the change.

4. Clear cache:
Functional Administrator -> Core Services -> Caching Framework -> Clear All Cache

5. Restart Apache if necessary.

Friday, 5 June 2026

Compilation of Invalid APPS Schema Objects After Oracle EBS 12.2.x Upgrade

In Oracle EBS 12.2.x upgrades, compiling invalid objects in the APPS schema is a critical post-upgrade activity. You can use the following notes in your upgrade documentation or interview discussions.

Why APPS Invalid Objects Occur

Invalid objects in the APPS schema may occur due to:

  • Database upgrade (11g → 19c)
  • Oracle EBS upgrade (12.1.x → 12.2.x / 12.2.14)
  • Failed ADOP patching cycle
  • Missing grants or synonyms
  • Dependency changes in packages, views, and materialized views
  • Custom objects referencing obsolete Oracle objects
Check Invalid Objects

SELECT object_name, object_type FROM dba_objects WHERE owner='APPS' AND status='INVALID';

Compile invalid object whole APPS Schema:

$ . /apps/EBS122/EBSapps.env run

[applmgr@proderpappl ~]$ sqlplus apps/apps_pwd
SQL*Plus: Release 10.1.0.5.0 - Production on Thu Jan 15 10:42:43 2026
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

SQL>@$AD_TOP/sql/adutlrcmp.sql 
Session Information:

INSTANCE_NAME    SCHEMA_NAME     EDITION_NAME    SYSDATE
---------------- --------------- --------------- ----------------
PRODCDB          APPS            ORA$BASE        2026-01-15 10:42

Invalid Objects per Owner (before compile):

OWNER                              ACTUAL       STUB      TOTAL
------------------------------ ---------- ---------- ----------
APPS                                   26          0         26

Compiling Objects...

PL/SQL procedure successfully completed.

Elapsed: 00:00:08.58

Invalid Objects per Owner (after compile):

OWNER                              ACTUAL       STUB      TOTAL
------------------------------ ---------- ---------- ----------
APPS                                   26          0         26

Commit complete.

Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Parallel recompilation:

SQL>EXEC UTL_RECOMP.RECOMP_PARALLEL(); 
                                        OR
SQL>EXEC UTL_RECOMP.RECOMP_PARALLEL(8);

Run AD Administration

[applmgr@proderpappl ~]$ adadmin

Navigate to:

            AD Administration Main Menu
   --------------------------------------------------
   1.    Generate Applications Files menu
   2.    Maintain Applications Files menu
   3.    Compile/Reload Applications Database Entities menu
   4.    Maintain Applications Database Entities menu
   5.    Change Maintenance Mode
   6.    Exit AD Administration

Enter your choice [6] : 3

        Compile/Reload Applications Database Entities
   ---------------------------------------------------
   1.    Compile APPS schema
   2.    Compile menu information
   3.    Compile flexfields
   4.    Reload JAR files to database
   5.    Return to Main Menu

Enter your choice [5] : 1

One by one compile invalid object:

[applmgr@proderpappl ~]$ sqlplus apps/apps_pwd
SQL*Plus: Release 10.1.0.5.0 - Production on Thu Jan 15 13:53:42 2026
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

SQL> ALTER PACKAGE APPS.xx_package COMPILE;
SQL> ALTER PACKAGE APPS.xx_package COMPILE BODY;
SQL> ALTER VIEW APPS.xx_view COMPILE;
SQL> ALTER SYNONYM APPS.xx_synonym COMPILE;

Oracle Recommended Script

Run Oracle's recompilation utility:

Connect as SYSDBA and run the script through SQL*Plus:

$sqlplus "/ as sysdba"

SQL> @?/rdbms/admin/utlrp.sql

Enable Archive Mode and Archive Log Destination Change During Database Upgrade

During the Oracle Database upgrade for the Oracle EBS 12.2.x environment, the archive log destination was relocated to a new filesystem to ensure adequate storage capacity for the increased archive log generation that occurs during upgrade activities. This preventive measure helps avoid archive destination space issues, which could interrupt the upgrade process and potentially cause database downtime.

During an Oracle Database upgrade (especially for Oracle EBS 12.2.x upgrades), it is recommended to:

  1. Enable ARCHIVELOG mode (if not already enabled).
  2. Configure a dedicated archive log destination with sufficient free space.
  3. Prevent upgrade failures caused by archive destination space exhaustion.
  4. Facilitate database recovery in case of upgrade rollback requirements.

Pre-Upgrade Validation

  • Verified current archive log configuration.
  • Checked available filesystem space for existing archive destinations.
  • Confirmed archive log generation rate during upgrade windows.
  • Created and validated the new archive log directory with appropriate ownership and permissions.

Why This Step Is Required

Database upgrade operations generate a large volume of redo logs due to:

  • Data dictionary upgrades
  • Invalid object recompilations
  • AD/TXK patches
  • Statistics gathering
  • Online patching synchronization activities

Implementation


Create New Archive Log Directory

[root@proderpdb ~]# mkdir -p /oradata/prod/db/data/archive
[root@proderpdb ~]# chown oracle:dba /oradata/prod/db/data/archive
[root@proderpdb ~]# chmod 775 /oradata/prod/db/data/archive

Reviewed the existing archive log destination:

[oracle@proderpdb ~]$ . PRODCDB_proderpdb.env

[oracle@proderpdb ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Dec 18 13:53:15 2025
Version 19.28.0.0.0
Copyright (c) 1982, 2025, Oracle.  All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.28.0.0.0
SQL>

SQL> show parameter recovery
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string
db_recovery_file_dest_size           big integer 20G
recovery_parallelism                 integer     0
remote_recovery_file_dest            string

SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /oradata/prod/app/oracle/product/19.3.0/dbs/arch
Oldest online log sequence     9
Current log sequence           11

SQL> shutdown immediate
Database dismounted.
ORACLE instance shut down.
Database closed.

SQL> startup mount
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.
Total System Global Area 1.6106E+10 bytes
Fixed Size                 18662888 bytes
Variable Size            1946157056 bytes
Database Buffers         1.4126E+10 bytes
Redo Buffers               14888960 bytes
Database mounted.


SQL> ALTER DATABASE ARCHIVELOG;
Database altered.

SQL> alter system set log_archive_dest_1= 'LOCATION=/oradata/prod/db/data/archive' scope=both;
System altered.

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /oradata/prod/db/data/archive
Oldest online log sequence     9
Next log sequence to archive   11
Current log sequence           11

SQL> alter database open;
Database altered.

SQL> select destination,STATUS from v$archive_dest where status='VALID';
DESTINATION
--------------------------------------------------------------------------------
STATUS
---------
/oradata/prod/db/data/archive
VALID

SQL> alter system switch logfile;
System altered.

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /oradata/prod/db/data/archive
Oldest online log sequence     10
Next log sequence to archive   12
Current log sequence           12
SQL>

Thursday, 4 June 2026

Oracle Central Inventory (oraInventory) Not Found / Missing oraInst.loc Configuration

This error occurs when Oracle Universal Installer (OUI) or RapidWiz cannot find the Oracle Central Inventory (oraInventory).

Central Inventory does not exist. Skipping central inventory check...
    Trying local inventory in Oracle Home...
    Cannot find oraInventory
    Please create oraInst.loc in the proper directory for your operating system.
    The contents should look like this:
    inventory_loc=/oracle/oraInventory
    where "/oracle/oraInventory" is the direcotry where the central inventory is to be located.

1. Check if oraInst.loc exists

On Linux:

# cat /etc/oraInst.loc

If the file does not exist, create it.

2. Create Oracle Inventory Directory

As root: DB Side

# mkdir -p /oradata/prod/app/oraInventory
# chown -R oracle:dba/oradata/prod/app/oraInventory
# chmod -R 775 /oradata/prod/app/oraInventory

As root: Application Side

# mkdir -p /apps/EBS122/oraInventory
# chown -R applmgr:dba/apps/EBS122/oraInventory
# chmod -R 775
/apps/EBS122/oraInventory
Adjust ownership & directory according to your installation user and group.

3. Create /etc/oraInst.loc

As root:

#vi /etc/oraInst.loc

Contents: DB Side

inventory_loc=/oradata/prod/app/oraInventory
inst_group=dba

Contents: Application Side
inventory_loc=/apps/EBS122/oraInventory inst_group=dba

Set permissions:

chmod 664 /etc/oraInst.loc

4. Verify

As root:
#cat /etc/oraInst.loc

While launching R12.2.x installer in RHEL/OEL encountered issue

Error

This is a very common issue when running Oracle EBS 12.2.x Rapid Install (RapidWiz) on newer Linux servers.

[applmgr@proderpappl rapidwiz]$ Exception in thread "main" java.lang.UnsatisfiedLinkError: 
/apps/stage122/startCD/Disk1/rapidwiz/jre/Linux_x64/1.6.0/lib/i386/xawt/libmawt.so: libXtst.so.6: cannot open shared object file: No such file or directory
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.load0(Unknown Source)
at java.lang.System.load(Unknown Source)
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at sun.security.action.LoadLibraryAction.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.awt.NativeLibLoader.loadLibraries(Unknown Source)
at sun.awt.DebugHelper.<clinit>(Unknown Source)
at java.awt.Component.<clinit>(Unknown Source)
Could not find the main class: oracle.apps.ad.rapidwiz.RIWizard.  Program will exit.


Root Cause

RapidWiz is trying to load the X11 library libXtst.so.6, but the package is not installed on the OS:

libXtst.so.6: cannot open shared object file: No such file or directory

Because the Java GUI libraries cannot load, RapidWiz fails to start:

Could not find the main class: oracle.apps.ad.rapidwiz.RIWizard


Solution

RapidWiz is trying to load a 32-bit library.

If using OL7/OL8 x86_64, install 32-bit compatibility packages:

Step 1: Verify Missing Library
$ locate libXtst.so.6

or

$ find /usr -name "libXtst.so*"

If nothing is returned, install the package.

Step 2: Install Required Package

RHEL/OEL 7

Install below missing two rpms in the same order. [root@proderpappl ~]# rpm -ivh libXi-1.3-3.el6.i686.rpm warning: libXi-1.3-3.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY Preparing... ########################################### [100%] 1:libXi ########################################### [100%] [root@proderpappl ~]# rpm -ivh libXtst-1.0.99.2-3.el6.i686.rpm warning: libXtst-1.0.99.2-3.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY Preparing... ########################################### [100%] 1:libXtst ########################################### [100%]

Verify:

[root@proderpappl ~]# rpm -qa | grep Xtst

[root@proderpappl ~]# ln -s /usr/lib64/libXtst.so.6 /usr/lib/libXtst.so.6

Flexfield View Generation Failure during Oracle EBS Upgradation

In Oracle E-Business Suite, the view MTL_SYSTEM_ITEMS_B_KFV is normally a Key Flexfield View generated automatically by the Application Object Library (FND).

When Oracle cannot generate the actual KFV view successfully, it creates this dummy view instead. This indicates:

  • Key Flexfield compilation failed.
  • One or more dependent objects are invalid.
  • Flexfield definition is corrupted or incomplete.
  • APPS schema compilation encountered errors.

Common causes in Oracle EBS

For MTL_SYSTEM_ITEMS_B_KFV, the object is the Inventory Item Key Flexfield (System Items KFF). The upgrade worker or post-upgrade compilation typically fails because of one of the following:

  • Invalid Item Flexfield definition.
  • Invalid Item Flexfield (MSTK) metadata
  • Missing grants/synonyms on underlying tables.
  • Invalid APPS packages or dependent objects.
  • Failed execution of Flexfield View Generator.
  • Incomplete post-upgrade compilation. 
  • Failed AutoConfig or AD utilities execution
  • During EBS upgrade, KFF views were not regenerated
  • Worker failure during the upgrade that was skipped and not fully resolved.
Usually indicates that the Inventory Item Key Flexfield (MSTK) failed to compile during the upgrade or post-upgrade object generation phase. Oracle EBS generates these KFV views automatically from the flexfield metadata; when generation fails, Oracle replaces the intended view with this placeholder.

Upgrade-specific logs to inspect

For 12.2.x, the actual ORA error is usually in:

  • adwork*.log
  • u*.log worker logs
  • adadmin compile logs
  • Flexfield generation logs (FNDFFMDC/FDFVGN related)

The placeholder view itself does not contain the root cause; the worker log contains the actual ORA- error.

Note: The relevant adworkxxx.log snippet, I can identify the exact root cause and tell you whether it is a flexfield metadata issue, invalid package issue, or a known 12.2.x upgrade problem like this.

CREATE OR REPLACE FORCE VIEW APPS.MTL_SYSTEM_ITEMS_B_KFV
(
VIEW_HAS_FAILED_CHECK_LOG_FILE
)
AS
SELECT 'View generation has failed. Check log file for error messages'
VIEW_HAS_FAILED_CHECK_LOG_FILE
FROM SYS.DUAL;

Verify the issue

Check the current view definition:

SELECT text
FROM dba_views
WHERE owner='APPS'
AND view_name='MTL_SYSTEM_ITEMS_B_KFV';

Check object status:

SELECT owner,
object_name,
object_type,
status
FROM dba_objects
WHERE object_name='MTL_SYSTEM_ITEMS_B_KFV';

Check errors

SELECT line,
position,
text
FROM dba_errors
WHERE owner='APPS'
AND name='MTL_SYSTEM_ITEMS_B_KFV'
ORDER BY sequence;

Find invalid flexfield views / Verify Item Flexfield (MSTK)

select application_table_name,
       id_flex_code,
       concatenated_segs_view_name
from applsys.fnd_id_flexs
where concatenated_segs_view_name is not null;

Regenerate the Key Flexfield View

From EBS responsibility:

System Administrator
→ Application
→ Flexfield
→ Key
→ Segments

Query:

Application : Inventory
Flexfield Title : System Items

Then:

Compile

or use concurrent program:

Compile Key Flexfield Segments

Recompile invalid objects / Mandatory post-upgrade checks for 12.2.x

EXEC UTL_RECOMP.RECOMP_SERIAL();

or

@?/rdbms/admin/utlrp.sql

For Oracle EBS 12.2.x

If this occurred after clone, patching, or upgrade:

  1. Run AutoConfig on both tiers.
  2. Run adadmin → Compile APPS schema.
  3. Run "Compile Key Flexfield Segments".
  4. Verify that MTL_SYSTEM_ITEMS_B_KFV gets recreated with the actual item flexfield columns rather than the single message column.
                                                                     OR
Create MTL_SYSTEM_ITEMS_B_KFV view from MTL_SYSTEM_ITEMS_B table.

How to Delete a Concurrent Program in Oracle EBS

In Oracle EBS, a Concurrent Program cannot normally be deleted from the front-end forms once it has been created and used. The recommended approach in Production is usually to disable the concurrent program rather than delete it. Oracle provides APIs in the FND_PROGRAM package for deleting custom concurrent programs and executables from the backend.

Option 1: Disable the Concurrent Program (Recommended)

Navigation:

System Administrator
→ Concurrent
→ Program
→ Define

Query the program and uncheck:

Enabled = No

A disabled program will no longer appear in the Submit Request form and cannot be submitted.

Option 2: Delete Concurrent Program from Backend

DECLARE
  P_PROG_SHORT_NAME VARCHAR2(240) := 'XXX_EMAIL_VENDOR';
  P_EXEC_SHORT_NAME VARCHAR2(240) := 'xxx_email_vendor';
  P_APPL_FULL_NAME VARCHAR2(240) := 'XXNICSI Custom';
  P_APPL_SHORT_NAME VARCHAR2(240) := 'XXNICSI';
  P_DEL_PROG_FLAG VARCHAR2(1) := 'Y';
  P_DEL_EXEC_FLAG VARCHAR2(1) := 'Y';
BEGIN
  --Check if it exists
  IF FND_PROGRAM.PROGRAM_EXISTS(P_PROG_SHORT_NAME, P_APPL_SHORT_NAME) AND
     FND_PROGRAM.EXECUTABLE_EXISTS(P_EXEC_SHORT_NAME, P_APPL_SHORT_NAME) THEN
      IF P_DEL_PROG_FLAG = 'Y' THEN
      FND_PROGRAM.DELETE_PROGRAM(P_PROG_SHORT_NAME, P_APPL_FULL_NAME);
    END IF;
    IF P_DEL_EXEC_FLAG = 'Y' THEN
      FND_PROGRAM.DELETE_EXECUTABLE(P_EXEC_SHORT_NAME, P_APPL_FULL_NAME);
    END IF;
    COMMIT;
    DBMS_OUTPUT.PUT_LINE('Deleted successfully');
  ELSE
    DBMS_OUTPUT.PUT_LINE('Delete failed');
  END IF;
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END;
/

How to Register a Concurrent Program from the backend in Oracle EBS Applicaton

If you want to register a Concurrent Program from the backend (without using the System Administrator forms), Oracle EBS provides APIs in the FND_PROGRAM package.

Backend Registration Steps

  1. Register Executable
  2. Register Concurrent Program
  3. Define Parameters
  4. Add Program to Request Group
  5. Compile Security Cache
Step 1: Create the Concurrent Program Executable
Use the FND_PROGRAM.executable procedure to register your source script or database procedure.

BEGIN
  FND_PROGRAM.executable(
    executable          => 'XXX_EMAIL_VENDOR',              -- Executable Name (User visible)
    application         => 'XXNICSI',                       -- Application Short Name
    short_name          => 'XXX_EMAIL_VENDOR',              -- Executable Short Name
    description         => '',                              -- Description
    execution_method    => 'PL/SQL Stored Procedure',       -- Execution Method (e.g., Host, SQL*Plus, PL/SQL Stored Procedure)
    execution_file_name => 'XXX_EMAIL_VENDOR',              -- Database Package.Procedure or physical filename
    subroutine_name     => NULL,
    icon_name           => NULL,
    language_code       => 'US'
  );
  COMMIT;
  DBMS_OUTPUT.put_line('Executable Created Successfully.');
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.put_line('Error creating executable: ' || SQLERRM);
    ROLLBACK;
END;
/

Note: Change execution_method according to your requirement, such as 'SQL*Plus', 'Host', or 'Oracle Reports'.

Step 2: Register the Concurrent Program
Link the executable you created in Step 1 to a newly defined concurrent program using FND_PROGRAM.register.

BEGIN
  FND_PROGRAM.register(
    program                  => 'NICSI EMAIL VENDOR',  -- Program User Name
    application              => 'XXNICSI',                   -- Application Short Name
    enabled                  => 'Y',                          -- Enabled status (Y/N)
    short_name               => 'XXX_EMAIL_VENDOR',       -- Program Short Name
    description              => 'Custom Program Registered from Backend',
    executable_short_name    => 'XXX_EMAIL_VENDOR',       -- Short name from Step 1
    executable_application   => 'XXNICSI',                   -- Executable Application Short Name
    execution_options        => NULL,
    priority                 => NULL,
    save_output              => 'Y',                          -- Save Output (Y/N)
    print                    => 'Y',                          -- Allow Printing (Y/N)
    cols                     => NULL,
    rows                     => NULL,
    style                    => NULL,
    style_required           => 'N',
    printer                  => NULL,
    request_type             => NULL,
    request_type_application => NULL,
    use_in_srs               => 'Y',                          -- Visible in Submit Request Screen (Y/N)
    allow_disabled_values    => 'N',
    run_alone                => 'N',
    output_type              => 'XML'                        -- Output format (TEXT, PDF, HTML, XML)
    
  );
  COMMIT;
  DBMS_OUTPUT.put_line('Concurrent Program Registered Successfully.');
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.put_line('Error registering program: ' || SQLERRM);
    ROLLBACK;
END;
/

Step 3: Adding Parameters from Backend (Optional)
If your concurrent program requires run-time input parameters, you can add them dynamically via FND_PROGRAM.parameter:

BEGIN
  FND_PROGRAM.parameter(
    program_short_name  => 'XXX_EMAIL_VENDOR',
    program_application => 'XXNICSI',
    sequence            => 10,                        -- Parameter Sequence Number
    parameter           => 'p_input_date',            -- Parameter Token Name
    description         => 'Reporting Date',          -- Parameter Description
    value_set           => 'Standard_Date',           -- Value Set Name
    default_type        => 'Current Date',            -- Default Type (Constant, Current Date, Profile, etc.)
    default_value       => NULL,
    required            => 'Y',                       -- Is Mandatory? (Y/N)
    enable              => 'Y',
    display             => 'Y'                        -- Visible to User? (Y/N)
  );
  COMMIT;
  DBMS_OUTPUT.put_line('Parameter added successfully.');
END;
/

Step 4: Add Concurrent Program to a Request Group
To make the concurrent program accessible via the front-end Oracle Standard Request Submission (SRS) window, assign it to a designated Request Group using FND_PROGRAM.add_to_group.

BEGIN
  FND_PROGRAM.add_to_group(
    program_short_name  => 'XXX_EMAIL_VENDOR', -- Program Short Name from Step 2
    program_application => 'XXNICSI',             -- Program Application Short Name
    request_group       => 'NICSI Reports',          -- Target Request Group Name
    group_application   => 'XXNICSI Custom'              -- Request Group Application Short Name
  );
  COMMIT;
  DBMS_OUTPUT.put_line('Program Successfully Added to Request Group.');
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.put_line('Error assigning to request group: ' || SQLERRM);
    ROLLBACK;
END;
/

Verification Query
Verify your backend registration details instantly by executing this SQL select statement:

select * from FND_APPLICATION_VL where APPLICATION_NAME='XXNICSI Custom';

SELECT fcp.user_concurrent_program_name, fcp.concurrent_program_name, fe.execution_file_name, fe.execution_method_code
FROM fnd_concurrent_programs_vl fcp, fnd_executables fe
WHERE fcp.executable_id = fe.executable_id
AND fcp.concurrent_program_name = 'XX_CUSTOM_PROG_SHORT';

Useful Backend Tables

ObjectTable
Executable                FND_EXECUTABLES
Concurrent Program                FND_CONCURRENT_PROGRAMS
Program Translation                FND_CONCURRENT_PROGRAMS_TL
Parameters                FND_DESCR_FLEX_COL_USAGE_VL
Request Groups                FND_REQUEST_GROUPS
Request Group Units                FND_REQUEST_GROUP_UNITS

Migration Script (Common in EBS)

Many Apps DBAs and Technical Consultants create deployment scripts like:

BEGIN
-- Register Executable
FND_PROGRAM.EXECUTABLE(...);

-- Register Concurrent Program
FND_PROGRAM.REGISTER(...);

-- Add Parameters
FND_PROGRAM.PARAMETER(...);

-- Add to Request Group
FND_PROGRAM.ADD_TO_GROUP(...);

COMMIT;
END;
/

This approach is commonly used during Oracle EBS R12.2.x migrations, cloning, and deployment of custom concurrent programs between DEV, TEST, and PROD environments.