This guide explains how to fix the ORA-01882: timezone region not found error that breaks Oracle APEX connection pools in ORDS + Tomcat environments.
🧠Problem Summary
When starting Oracle APEX via ORDS/Tomcat, you may see:
503 Service Unavailable
Connection pool named: |apex|| is not correctly configured
ORA-00604: error occurred at recursive SQL level 1
ORA-01882: timezone region not found
This usually happens due to a mismatch between:
Java/Tomcat timezone settings
Oracle Database timezone version
JDBC timezone handling
📊 Your Environment Insight
Check timezone file version in Oracle:
SELECT * FROM v$timezone_file;
Example output:
FILENAME VERSION
timezlrg_14.dat 14
This means your database is using timezone version 14 (old).
🚀 Root Cause
Oracle Database tries to resolve timezone regions (like Asia/Dhaka) during ORDS connection initialization.
If Java or JDBC sends modern timezone formats that DB cannot understand → connection pool fails.
🛠️ Solution Overview
We will fix this in 3 layers:
Tomcat JVM timezone fix
JDBC timezone configuration fix
Database session timezone alignment
✅ Step 1: Locate Tomcat Installation
Run:
cd /usr/local/tomcat/bin
ls -l
You should see:
catalina.sh
startup.sh
shutdown.sh
If not found, locate it:
find / -name catalina.sh 2>/dev/null
✏️ Step 2: Edit catalina.sh
Open file:
vi catalina.sh
🔧 Step 3: Add JVM Timezone Fix
Add this line anywhere near environment variables:
export CATALINA_OPTS="$CATALINA_OPTS -Duser.timezone=UTC -Doracle.jdbc.timezoneAsRegion=false"
Why this is important:
Forces Java to use UTC timezone
Prevents region-based timezone parsing issues
🔄 Step 4: Restart Tomcat
Run:
cd /usr/local/tomcat/bin
./shutdown.sh
./startup.sh
OR:
systemctl restart tomcat
🧩 Step 5: Optional Database Fix
Inside SQL*Plus:
ALTER SESSION SET TIME_ZONE = '+00:00';
Check again:
SELECT dbtimezone, sessiontimezone FROM dual;
⚙️ Step 6: ORDS Configuration Fix (Optional but Recommended)
If ORDS is used, add:
<entry key="oracle.jdbc.timezoneAsRegion">false</entry>
This prevents Oracle JDBC from using region-based timezones.
🧪 Step 7: Verify Fix
Check logs:
tail -f /usr/local/tomcat/logs/catalina.out
Expected result:
No ORA-01882 error
No connection pool failure
APEX loads successfully
🎯 Final Outcome
After applying fixes:
✔ Oracle APEX starts normally
✔ ORDS connection pool works
✔ No timezone-related recursive SQL errors
⚡ Best Practice Configuration
Always use this combination for stable production:
-Duser.timezone=UTC
-Doracle.jdbc.timezoneAsRegion=false
DB TIMEZONE = +00:00
🧠Summary
This issue is not an APEX bug — it is a timezone mismatch between Java, JDBC, and Oracle Database version 14 timezone files.
Fixing JVM + JDBC settings resolves it permanently in most environments.
If you want, I can also help you:
Upgrade Oracle timezone version safely
Optimize ORDS for production
Harden Tomcat + APEX performance setup