Monday, August 17, 2026

How To Avoid ORA-39405 During a Data Pump Import


If you have worked on Oracle database migrations using Data Pump, you may have come across this error during an import:

ORA-39405: Oracle Data Pump does not support importing from a source database with TSTZ version <source_version> into a target database with TSTZ version <target_version>

I recently came across this issue while looking at Data Pump migration scenarios, and the important thing to understand is that this error is related to the Time Zone File version of the source and target databases.

It can be easy to miss because we normally check the Oracle Database version first. But having the same database version on both sides doesn't necessarily mean the Time Zone File versions are the same.

First thing I check

Before starting any Data Pump migration, I recommend checking the Time Zone File version on both databases.

Run this on the source:

SELECT version FROM v$timezone_file;

And run the same command on the target.

For example:

Source Database
TSTZ Version: 43

Target Database
TSTZ Version: 32

Here we have a mismatch.

The source is using Time Zone File version 43, while the target is still using version 32. If the dump contains data that requires the newer Time Zone File information, the import can fail with ORA-39405.

Why does this happen?

Oracle uses Time Zone File information for data types such as:

  • TIMESTAMP WITH TIME ZONE

  • TIMESTAMP WITH LOCAL TIME ZONE

During the Data Pump import, Oracle needs to make sure the target database can correctly understand the time zone information coming from the source.

If the target is running with an older Time Zone File version, Oracle can stop the import rather than risk incorrect time zone data.

That's why this check is important, especially for production migrations.

Don't confuse Data Pump VERSION with TSTZ version

This is another area where I have seen confusion.

You might be using:

expdp system/password \
directory=DP_DIR \
dumpfile=prod.dmp \
logfile=prod_exp.log \
schemas=APP \
version=19.0

The VERSION parameter in Data Pump is related to database and metadata compatibility.

It is not the same thing as the Time Zone File version.

So changing:

VERSION=19.0

doesn't automatically fix ORA-39405.

For this particular error, check:

SELECT version FROM v$timezone_file;

on both sides.

What should we do if the versions are different?

If the target database has an older Time Zone File version, the normal approach is to bring the target to the required Time Zone File version before performing the import.

Before making any change, I would strongly recommend checking the Oracle documentation and the supported procedure for the specific Oracle Database release and patch level.

Also check which Time Zone Files are available in the Oracle Home:

$ORACLE_HOME/oracore/zoneinfo/

You may find files such as:

timezlrg_32.dat
timezlrg_43.dat

The exact versions available will depend on your Oracle Home and patch level.

I would not recommend manually replacing Time Zone Files in a production Oracle Home just to get around the error. Treat the Time Zone File upgrade as a proper database maintenance activity and test it first.

My recommendation for migration projects

One small change in the migration checklist can save a lot of troubleshooting later.

Before starting expdp/impdp, I normally verify things like:

Oracle Database Version
Time Zone File Version
Character Set
NLS Settings
Tablespaces
Users and Roles
Storage Availability
Data Pump Version
Database Links

But the Time Zone File check is particularly easy to forget.

Just run:

SELECT version FROM v$timezone_file;

on both source and target.

If you find:

Source  : 43
Target  : 32

don't wait until the import fails.

Address it during the migration planning stage.

One more practical tip

If you are migrating a large production database, don't discover ORA-39405 after spending hours exporting the database, copying the dump files, and preparing the target.

Do the compatibility checks before the migration window.

I've always found that a few minutes spent on pre-checks can save hours during a migration.

So, whenever you're planning an Oracle Data Pump migration, add this simple command to your checklist:

SELECT version FROM v$timezone_file;

Check it on both sides.

It takes only a few seconds—and it can save you from a very frustrating Data Pump import failure.

#Oracle #OracleDatabase #OracleDBA #DataPump #EXPDP #IMPDP #ORA39405 #DatabaseMigration #Oracle19c #DBA #DatabaseAdministration

Sunday, August 16, 2026

Why APEX 26.1?

 

Why APEX 26.1? 🚀

Oracle APEX 26.1 is all about building better applications faster—with less code and more intelligence.

In this session, we’ll take a quick look at what’s new in APEX 26.1 and, wherever possible, demonstrate these capabilities in action.

🔹 Build applications faster
Speed up application development with new capabilities designed to reduce development effort.

🤖 Leverage AI to accelerate development
Explore how AI can help developers move faster, generate solutions, and focus more on business value.

Increase productivity with App Builder enhancements
New improvements make the development experience smoother and more productive.

🤝 Simplify collaboration with APEXlang
Discover how APEXlang can make it easier for teams to work together and communicate around application development.

🧩 Write less code with declarative features
Do more through APEX’s low-code, declarative approach—reducing the need for custom code.

🌍 90+ community-driven improvements
APEX 26.1 also brings a wide range of improvements inspired by the Oracle APEX community and real-world developer feedback.

🎯 Why should you care?
Because APEX continues to evolve beyond just being a low-code platform—it is becoming a powerful environment for building modern, intelligent, and enterprise-ready applications faster.

Join us to explore “Why APEX 26.1?” with a practical look at the latest features and improvements.

#OracleAPEX #APEX261 #Oracle #LowCode #AI #ApplicationDevelopment #OracleDatabase #Cloud #Developers #APEXCommunity #EnterpriseApplications #LowCodeDevelopment

🚀 LIVE ONLINE WEBINAR | Enterprise Manager 24ai — Is It the BIG SHOT?



Oracle Enterprise Manager has been a trusted companion for DBAs for years. But with Enterprise Manager 24ai, things are getting even more interesting. 🤖🚀

So, the big question is:

🔥 Enterprise Manager 24ai — Is It Really the BIG SHOT?

Join me for an interactive session where we’ll go beyond the feature list and explore what EM 24ai actually brings to the table for DBAs, Cloud DBAs, and IT Operations teams.

🎯 What we’ll explore:

  • What’s new in Enterprise Manager 24ai?
  • AI-driven monitoring and intelligent insights
  • Database monitoring & performance management
  • Automation and day-to-day DBA operations
  • Hybrid & Cloud database management
  • Real-world use cases from 10+ years of OEM experience
  • How EM can make a DBA’s life easier
  • And the big question — Is EM 24ai really the BIG SHOT? 😎

🎙️ Speaker:
Shashi Ranjan Singh
Lead Cloud DBA | 10+ Years of Oracle Enterprise Manager Experience
🏆 Oracle ACE Pro Member
☁️ Lead Cloud DBA
💡 Oracle DBA & Automation Enthusiast

📅 Date: Sunday, 18th September 2026
Time: 11:00 AM IST
💻 Mode: Online Webinar

📩 To Register:
shashidba1208@gmail.com

Whether you are an Oracle DBA, Cloud DBA, IT Operations professional, or simply curious about where Enterprise Manager is heading — this session is for you!

👉 Come with your questions. Leave with practical insights.

Enterprise Manager 24ai — Is it the BIG SHOT?
Let’s find out together! 🚀

#Oracle #OracleEnterpriseManager #OEM24ai #EnterpriseManager #OracleDBA #CloudDBA #DatabaseAdministration #OracleACE #OracleACEPro #DBACommunity #AIOUG #Webinar #OracleDatabase #Automation #AI #CloudComputing

Friday, August 14, 2026

The Migration Project That Changed My Career


After almost 5 years of my Oracle journey, I joined HCL and got the opportunity to work on a Database Migration Project.

At that time, I didn't realize how important this project would become in my career.

Looking back now, I can confidently say — this project was one of the biggest turning points in my Oracle journey.

It was not just about migrating databases from one place to another. It was where I got the chance to learn the complete lifecycle of an Oracle database.

DB Creation? ✅
Schema creation? ✅
Objects? ✅
Data Guard setup and troubleshooting? ✅
GoldenGate setup and maintenance? ✅
OEM setup and monitoring? ✅
RMAN backup and restore? ✅
ZDLRA? ✅
PSU patching? ✅
Database upgrades? ✅

Honestly, you name an Oracle technology or activity, and somehow it was part of that migration project! 😄

And that's what made the project so special for me.

I learned not only how to perform these activities, but also why they matter in a real production environment. I learned how to troubleshoot when things don't go as planned, how to handle critical databases, and most importantly, how to take ownership.

There were long days, challenging migrations, unexpected issues, troubleshooting calls and plenty of learning along the way.

But every challenge added something to my experience.

That project gave me a strong foundation, and many of the things I learned there are still helping me today.

Five years into my Oracle journey, I thought I was just joining another project.

I didn't know I was joining a project that would shape the next chapter of my career.

Even today, I am still counting the lessons from that project. ❤️

Sometimes, a project is more than just a project.
Sometimes, it becomes a part of your career story.

#OracleDBA #OracleDatabase #DatabaseMigration #HCL #DataGuard #GoldenGate #OEM #RMAN #ZDLRA #OracleCommunity #DBALife #CareerJourney #LearningNeverStops

Fun Fact: How My DBA Journey Started 😄

 


12 years ago, I started my journey as a DBA — with absolutely zero knowledge about Oracle. 😄

One of my old friends suggested my name for a DBA role and referred me for the opportunity. I still remember asking him:

“What exactly is a DBA?” 🤔

And his answer?

“Data Browse Associates.” 😂

I believed him!

It took me almost 2–3 months to finally realize that DBA actually meant Database Administrator. 🤣

What started as a referral, without even knowing what Oracle or DBA really meant, slowly turned into a journey of learning, troubleshooting, late-night production calls, database outages, Data Guard, RAC, GoldenGate, performance tuning, and countless “ORA-” errors. 😅

Looking back after 12 years, it’s amazing to think that a simple recommendation from an old friend completely changed my career.

Sometimes, the best journeys start when you don't even know where you're going. ❤️

And yes… I still remember “Data Browse Associates.” 😂

#OracleDBA #OracleDatabase #DBALife #12Years #CareerJourney #FunFact #DatabaseAdministrator #OracleCommunity

Thursday, July 30, 2026

ORA-19809: Limit Exceeded for Recovery Files

 

Error

ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim xx bytes disk space from xx limit

What does this error mean?

This error means the Fast Recovery Area (FRA) has become full.

Oracle stores the following files in the FRA:

  • Archive Logs
  • Flashback Logs
  • RMAN Backups
  • Control File Autobackups
  • Incremental Backups

When the FRA reaches its configured size (DB_RECOVERY_FILE_DEST_SIZE), Oracle cannot create new archive logs. As a result:

  • Database transactions may stop
  • Log switches fail
  • RMAN backups fail
  • Data Guard redo transport may stop

This is one of the most common production issues for Oracle DBAs.


Symptoms

You may see errors like:

ORA-19809: limit exceeded for recovery files

ORA-19804: cannot reclaim 104857600 bytes disk space

ORA-16038: log cannot be archived

ORA-00257: Archiver error. Connect AS SYSDBA only until resolved.

Users may report:

  • Application is hanging
  • Database is not responding
  • New transactions are failing

Step 1: Check FRA Usage

-- Size, usage, Reclaimable space used

SELECT

ROUND((A.SPACE_LIMIT / 1024 / 1024 / 1024), 2) AS FLASH_IN_GB,

ROUND((A.SPACE_USED / 1024 / 1024 / 1024), 2) AS FLASH_USED_IN_GB,

ROUND((A.SPACE_RECLAIMABLE / 1024 / 1024 / 1024), 2) AS FLASH_RECLAIMABLE_GB,

SUM(B.PERCENT_SPACE_USED) AS PERCENT_OF_SPACE_USED

FROM

V$RECOVERY_FILE_DEST A,

V$FLASH_RECOVERY_AREA_USAGE B

GROUP BY

SPACE_LIMIT,

SPACE_USED ,

SPACE_RECLAIMABLE ;

Example:

FLASH_IN_GB FLASH_USED_IN_GB FLASH_RECLAIMABLE_GB PERCENT_OF_SPACE_USED

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

       1024           351.01               339.91                 34.28

 



Step 2: Check Archive Destination

ARCHIVE LOG LIST;

or

show parameter db_recovery_file_dest SQL> SQL> SQL> NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string +RECO_FLEXSAND01 db_recovery_file_dest_size big integer 2T


Step 3: Check FRA File Usage

-- FRA Occupants
SELECT * FROM V$FLASH_RECOVERY_AREA_USAGE;
SQL> SQL> SQL>
FILE_TYPE               PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES     CON_ID
----------------------- ------------------ ------------------------- --------------- ----------
CONTROL FILE                             0                         0               1          0
REDO LOG                                 0                         0               0          0
ARCHIVED LOG                            .5                         0              64          0
BACKUP PIECE                           .02                       .02               7          0
IMAGE COPY                               0                         0               0          0
FLASHBACK LOG                        16.62                     16.58            1734          0
FOREIGN ARCHIVED LOG                     0                         0               0          0
AUXILIARY DATAFILE COPY                  0                         0               0          0
 
8 rows selected.



Solution 1: Increase FRA Size (Recommended)

If storage is available:

Check current value:

SHOW PARAMETER db_recovery_file_dest_size;
Increase FRA:
alter system set db_recovery_file_dest='+RECO_FLEXSAND01' scope=both sid='*';
alter system set db_recovery_file_dest_size=1536G scope=both sid='*';
Verify:
SHOW PARAMETER db_recovery_file_dest_size;

SQL> show parameter db_reco
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      +RECO_FLEXSAND01
db_recovery_file_dest_size           big integer 1536G
SQL>

Solution 2: Delete Old Archive Logs Using RMAN

Open RMAN:

rman target /

Delete expired archives:

DELETE EXPIRED ARCHIVELOG ALL;

Delete archives older than 7 days:

DELETE ARCHIVELOG UNTIL TIME 'SYSDATE-7';

Delete archives already backed up once:

DELETE ARCHIVELOG ALL BACKED UP 1 TIMES TO DISK;

Solution 3: Crosscheck RMAN Repository

Sometimes RMAN thinks files exist when they have already been deleted.

CROSSCHECK ARCHIVELOG ALL;

DELETE EXPIRED ARCHIVELOG ALL;

Solution 4: Remove Obsolete Backups

DELETE OBSOLETE;

This removes backups that are no longer required based on the RMAN retention policy.


Solution 5: Disable Flashback (If Not Required)

Check status:

SELECT FLASHBACK_ON FROM V$DATABASE;

Disable:

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE FLASHBACK OFF;
ALTER DATABASE OPEN;

Note: Disable Flashback only if your recovery strategy allows it.


Solution 6: Move FRA to a Larger Disk

alter system set db_recovery_file_dest='+FRA' scope=both sid='*';

Verify the Issue is Resolved

Check FRA usage again:

SELECT
SPACE_LIMIT/1024/1024 AS FRA_SIZE_MB,
SPACE_USED/1024/1024 AS USED_MB
FROM V$RECOVERY_FILE_DEST;

Force an archive log:

ALTER SYSTEM SWITCH LOGFILE;

If the command succeeds without errors, the issue is resolved.


Preventive Actions:

  • Monitor FRA usage in OEM or a monitoring tool.
  • Configure alerts when FRA usage exceeds 80%.
  • Schedule regular RMAN backup and archive log cleanup jobs.
  • Periodically review backup retention policies.
  • Ensure sufficient FRA capacity based on archive log generation.

Oracle Database: Convert Between ARCHIVELOG and NOARCHIVELOG Mode

 Step-by-Step Guide 


Purpose

This document explains how to convert an Oracle database:

  • From NOARCHIVELOG to ARCHIVELOG
  • From ARCHIVELOG to NOARCHIVELOG

The steps are written in simple language so beginners and production DBAs can easily understand the process.


What is ARCHIVELOG Mode?

When the database runs in ARCHIVELOG mode, Oracle saves a copy of every completed redo log before it is reused.

These archive logs are required for:

  • Database backup and recovery
  • Point-in-Time Recovery (PITR)
  • RMAN Online Backup
  • Oracle Data Guard
  • Flashback Database

Without archive logs, recovery options are very limited.


Step 1: Check the Current Database Mode

Connect to the database.

sqlplus / as sysdba

Run:

archive log list;
SELECT log_mode FROM v$database;



Scenario 1: Convert NOARCHIVELOG to ARCHIVELOG

Step 1: Configure Archive Log Location

Choose a location where archive logs will be stored.

Example:

ALTER SYSTEM SET log_archive_dest_1='LOCATION=/u01/app/oracle/archive'
SCOPE=SPFILE;

You can verify:

SHOW PARAMETER log_archive_dest;

Step 2: Shutdown the Database

SHUTDOWN IMMEDIATE;

For RAC
srvctl stop database -d <DBNAME>

Step 3: Start Database in Mount Mode

STARTUP MOUNT;
For RAC
srvctl start database -d <DBNAME> -o mount

Step 4: Enable ARCHIVELOG Mode

sqlplus / as sysdba
select name, open_mode from v$database;
ALTER
DATABASE ARCH0IVELOG;

Step 5: Open the Database

ALTER DATABASE OPEN;

For RAC
srvctl stop database -d <DBNAME>
srvctl start database -d <DBNAME>

Step 6: Verify ARCHIVELOG Mode

ARCHIVE LOG LIST;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/archive
SELECT log_mode FROM v$database;
ARCHIVELOG

Step 7: Test Archive Log Generation

Force a log switch.

ALTER SYSTEM SWITCH LOGFILE;

Check generated archive logs.

ARCHIVE LOG LIST;

Or at the OS level:

ls -ltr /u01/app/oracle/archive

You should see a new archive log file.


Scenario 2: Convert ARCHIVELOG to NOARCHIVELOG


Step 1: Shutdown Database

SHUTDOWN IMMEDIATE;

For RAC
srvctl status database -d <DBNAME>
srvctl stop database -d <DBNAME>

Step 2: Start Database in Mount Mode

STARTUP MOUNT;

For RAC
srvctl start database -d <DBNAME> -o mount

Step 3: Disable ARCHIVELOG

ALTER DATABASE NOARCHIVELOG;

Step 4: Open the Database

ALTER DATABASE OPEN;

For RAC
srvctl stop database -d <DBNAME>
srvctl start database -d <DBNAME>

Step 5: Verify Database Mode

ARCHIVE LOG LIST;
SELECT log_mode FROM v$database;

Estimate Archive Log Space Requirement

Use the following query to estimate daily archive log generation:

SELECT A.*,
ROUND(A.Count# * B.AVG# / 1024 / 1024 / 1024) AS Daily_Avg_GB
FROM
(
    SELECT
        TO_CHAR(first_time,'YYYY-MM-DD') DAY,
        COUNT(*) Count#,
        MIN(recid) Min#,
        MAX(recid) Max#
    FROM v$log_history
    GROUP BY TO_CHAR(first_time,'YYYY-MM-DD')
) A,
(
    SELECT
        AVG(bytes) AVG#
    FROM v$log
) B
ORDER BY DAY;



This helps estimate how much storage is needed for archive logs each day.