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$\