Monday, 22 June 2026

Setup ora2pg for Oracle to Postgres Migration

An important part of performing a migration from Oracle to PostgreSQL is selecting the right tool for helping with the conversion between systems. ora2pg a powerful open source utility.

ora2pg is a tool that migrates Oracle or MySQL databases to PostgreSQL by generating compatible SQL files As the documentation states, ora2pg “connects your Oracle database, scans it automatically and extracts its structure or data, it then generates SQL scripts that you can load into your PostgreSQL database.”

Below Steps Required for Setup ora2pg and Configuration:
  1. Install necessary prerequisites
  2. Build and install DBD::Oracle
  3. Build and install ora2pg
  4. Install the Oracle Instant Client SDK
  5. Configure ora2pg
  6. Test and use ora2pg
Prerequisite
  1. Install wget, perl, DBI (database interface module), DBD::Oracle and DBD::Pg
  2. Download the latest version of ora2pg
Step 1: Install Required Package and it's dependency

# yum install -y wget perl perl-DBI perl-DBD-Pg perl-Time-HiRes make gcc 
# yum install -y perl-core perl-devel

Step 2: Download the ora2pg

# wget https://github.com/darold/ora2pg/archive/refs/tags/v24.3.tar.gz

--2026-03-31 15:31:03--  https://github.com/darold/ora2pg/archive/refs/tags/v24.3.tar.gz
Resolving github.com (github.com)... 20.207.73.82
Connecting to github.com (github.com)|20.207.73.82|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/darold/ora2pg/tar.gz/refs/tags/v24.3 [following]
--2026-03-31 15:31:09--  https://codeload.github.com/darold/ora2pg/tar.gz/refs/tags/v24.3
Resolving codeload.github.com (codeload.github.com)... 20.207.73.88
Connecting to codeload.github.com (codeload.github.com)|20.207.73.88|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/x-gzip]
Saving to: ‘v24.3.tar.gz’
[ <=> ] 576,965 1.34MB/s   in 0.4s

2026-03-31 15:31:10 (1.34 MB/s) - ‘v24.3.tar.gz’ saved [576965]

Step 3: Check file Downloaded or not and after that untar 

# ll
total 7408
-rwxrwxrwx 1 oracle oracle   12668 Jun 28  2025 crontabs-1.11-6.20121102git.el7.noarch.rpm
-rwxrwxrwx 1 oracle oracle    3169 Sep  8  2025 RPM-GPG-KEY-oracle-ol8
-rwxrwxrwx 1 oracle oracle  576965 Mar 31 15:31 v24.3.tar.gz

# tar -xvf v24.3.tar.gz

Step 4: Install Postgres Software

# cd ora2pg-24.3/

# ll
total 644
-rwxrwxrwx 1 oracle oracle 374342 Mar 29  2024 changelog
drwxrwxrwx 1 oracle oracle    512 Mar 29  2024 doc
-rwxrwxrwx 1 oracle oracle     21 Mar 29  2024 INSTALL
drwxrwxrwx 1 oracle oracle    512 Mar 29  2024 lib
-rwxrwxrwx 1 oracle oracle  32472 Mar 29  2024 LICENSE
-rwxrwxrwx 1 oracle oracle  75191 Mar 29  2024 Makefile.PL
-rwxrwxrwx 1 oracle oracle    180 Mar 29  2024 MANIFEST
drwxrwxrwx 1 oracle oracle    512 Mar 29  2024 packaging
-rwxrwxrwx 1 oracle oracle 171271 Mar 29  2024 README
drwxrwxrwx 1 oracle oracle    512 Mar 29  2024 scripts

# perl Makefile.PL
which: no bzip2 in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:..........)
Checking if your kit is complete...
Looks good
Writing Makefile for Ora2Pg
Writing MYMETA.yml and MYMETA.json

Done...
------------------------------------------------------------------------------
Please read documentation at http://ora2pg.darold.net/ before asking for help
------------------------------------------------------------------------------
Now type: make && make install

# make && make install
# make install
                                    OR
# make && make install

Step 5: Check Postgres Software version

# ora2pg -v
Ora2Pg v24.3

Step 6: Download & Install Oracle Instant Client SDK

# yum install -y /path/to/oracle-instantclient*.rpm

You will need to include the below in your ~/.bash_profile:

$ vi ~/.bash_profile:
# InstantClient
export ORACLE_HOME=/opt/oracle/instantclient_23_26
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PAT
export PATH=$ORACLE_HOME/bin:$PATH
Then source the new env vars by running

$ source ~/.bash_profile

You will then test the connection to your Oracle server (if you've installed the sqlplus instantclient package simply run the below):

$ sqlplus user/pwd@//IP:1521/ORCLPDB1
 
Configure ora2pg

After you have ora2pg built and installed you can now configure the ora2pg.conf to work with your Oracle server. The settings that you see below are the settings in my environment. The ora2pg.conf file has many configuration settings that you can change. Below are the configuration changes that you will need to apply to your ora2pg.conf in order to be able to use ora2pg. Please keep in mind that you will need to change the settings to match your environment.

Edit config:

$vi /etc/ora2pg/ora2pg.conf

# Set the Oracle home directory
ORACLE_HOME     /opt/oracle/instantclient_23_26

#Connection Details (Oracle Source)
ORACLE_DSN      dbi:Oracle:host=hostname;port=1521;sid=ORCL
ORACLE_USER     user
ORACLE_PWD      password

#Migration Scope
#Oracle schema/owner to use
SCHEMA          APPS

#EXPORT SECTION (Export type and filters)
TYPE            TABLE
ALLOW           XX_.*

#Performance Settings
PARALLEL_TABLES 2
JOBS            2
ROWS            50000
PREFETCH        10000
CASE_SENSITIVE  0
USE_DBA         0
DATA_LIMIT 1
FILE_PER_TABLE 1
SPLIT_LIMIT 10M

# Export Oracle schema to PostgreSQL schema
EXPORT_SCHEMA   1
EXPORT_TABLES   1
EXPORT_INDEXES  0
EXPORT_CONSTRAINTS 0
EXPORT_TRIGGERS 0

#Data Type Handling
#TYPE SECTION (Control type behaviors and redefinitions)
PG_VERSION      11
PG_NUMERIC_TYPE 1
DEFAULT_NUMERIC numeric

#Disabled Objects
#OBJECT MODIFICATION SECTION (Control objects structure or name modifications)
DISABLE_PARTITION 1
DISABLE_TRIGGERS 1
DISABLE_SEQUENCE 1
DISABLE_PACKAGE   1
DISABLE_FUNCTION  1
DISABLE_PROCEDURE 1

#Parsing & Metadata
PLSQL_PARSING   0
ORACLE_METADATA 0

#Other Flags
DIRECT          1
LOOK_FORWARD_FUNCTION 0
NO_FULL_SCHEMA  1

Testing ora2pg

Now that ora2pg has been configured you can finally test connectivity. By testing the connectivity you will see that you have configured ora2pg correctly, if you didn’t you will receive errors. You can test by running the below command:

$ ora2pg -t SHOW_VERSION -c config/ora2pg.conf

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0
  
Note: Here we used 'estimate_cost' is to activate the migration cost evaluation with SHOW_REPORT
 
$ ora2pg -t show_report  --estimate_cost -c config/ora2pg.conf --dump_as_html > /tmp/ora2pg/ora2pgtestreport.html
 
-------------------------------------------------------------------------------
Ora2Pg v24.3 - Database Migration Report
-------------------------------------------------------------------------------
Version  Oracle Database 19c Enterprise Edition Release 19.0.0.0.0
Schema   APPS
Size     90.36 MB

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.