Many developers think, “Oracle Database is expensive—how can I use it while developing?” Good news: Oracle offers free ways to learn, build, and test apps. In this guide, we’ll bust myths, explain your free choices, and show step-by-step setup so you can start coding today.
- Myth: Oracle Database is always paid.
- Reality: Oracle provides free options for development and small workloads: Oracle Database Express Edition (XE) and Oracle Cloud Free Tier (Always Free). The desktop client Oracle SQL Developer is also free.
- Oracle Database Express Edition (XE)
- Free to use on your machine (Windows/Linux).
- Resource limits suitable for dev & learning (e.g., memory/storage caps).
- Perfect for local development, labs, and small demos.
- Oracle Cloud Free Tier (Always Free)
- Managed database options at no cost, including Autonomous Database (ATP/ADW) in the free tier.
- No local install; Oracle handles patches, backups, and scaling basics.
- Great for experimenting with modern Oracle features and serverless style access.
- Oracle SQL Developer (Client Tool)
- 100% free IDE for SQL, PL/SQL, data modeling, migrations.
- Connects to both XE and Cloud databases.
If your workload grows beyond XE limits, needs specific advanced features, or you’re deploying production at scale with enterprise SLAs, you’ll evaluate paid editions. For learning, prototyping, and most dev tasks, the free options are enough.
Windows (quick steps)
- Download Oracle Database XE for Windows (64-bit).
- Run the installer → accept defaults:
- Listener Port: 1521
- Service/SID: XE
- Set a strong password for
SYS
andSYSTEM
. - Verify service is running (Services → OracleServiceXE).
Linux (RPM example)
sudo rpm -ivh oracle-database-xe-21c-*.rpm
sudo /etc/init.d/oracle-xe-21c configure
# or on systemd:
sudo systemctl status oracle-xe-21c
Connect with SQL Developer
Connection Name: XE_local
Username : system
Password : <the one you set>
Hostname : localhost
Port : 1521
Service name : XE
Test → Connect. You’re in ✅
If you’re on macOS (no native XE) or want isolated environments, use Docker.
# Example (image/tag may vary by source)
docker pull gvenzl/oracle-xe
docker run -d --name oraclexe \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_PASSWORD=YourStrongP@ss \
gvenzl/oracle-xe
SQL Developer connection
Hostname : localhost
Port : 1521
Service name : XEPDB1 (or XE depending on image)
Username : system
Password : YourStrongP@ss
- Create an Oracle Cloud account (choose Free Tier).
- Provision an Autonomous Database (ATP/ADW) in Always Free.
- From the DB details page, download the Client Credentials (Wallet).
- In SQL Developer: New Connection → Use the Wallet (SSL) options and choose a TNS alias like
dbname_high
,_medium
, or_low
.
This gives you a managed, patch-free, and backup-handled database—still free.
- Memory and CPU caps suitable for learning/dev.
- Data size quotas (user data limit).
- One instance per host (intended for dev/test, not large prod).
These constraints keep XE light and free, but they rarely block day-to-day development.
-- Connect as SYSTEM in SQL Developer
CREATE USER app_user IDENTIFIED BY StrongP@ss123
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON USERS;
GRANT CONNECT, RESOURCE TO app_user; -- For dev use
-- (On newer versions, grant specific privileges instead of RESOURCE in production.)
-- Test:
CONNECT app_user/StrongP@ss123@localhost:1521/XE;
CREATE TABLE todos (
id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
title VARCHAR2(200) NOT NULL,
done CHAR(1) DEFAULT 'N' CHECK (done IN ('Y','N')),
created_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
INSERT INTO todos (title) VALUES ('Ship first feature');
COMMIT;
SELECT * FROM todos;
Java (JDBC)
String url = "jdbc:oracle:thin:@//localhost:1521/XE";
String user = "app_user";
String pass = "StrongP@ss123";
try (Connection con = DriverManager.getConnection(url, user, pass)) {
// Use con...
}
Node.js (oracledb)
const oracledb = require('oracledb');
(async () => {
const conn = await oracledb.getConnection({
user: 'app_user',
password: 'StrongP@ss123',
connectString: 'localhost:1521/XE'
});
const res = await conn.execute('SELECT * FROM todos');
console.log(res.rows);
await conn.close();
})();
- ORA-01017 (Invalid username/password): Check credentials, lock status, and case sensitivity.
- ORA-12541 (TNS: no listener): Ensure the listener/service is running (Windows Services or
systemctl
). - Port 1521 busy: Change the port in listener config or stop conflicting service.
- Wallet issues (Cloud): Unzip wallet to a secure folder; in SQL Developer, point to that folder and choose the correct TNS alias.
- Use XE for local, offline development and quick prototypes.
- Use Cloud Free Tier when you want managed DB and easy sharing with teammates.
- Version control your
DDL
/DML
scripts and seed data. - Create separate schemas for each project to keep things clean.
- Practice least-privilege grants; avoid using
SYS
for app access.
Is SQL Developer free? Yes.
Can I deploy production on XE? It’s intended for dev/test and small workloads. For serious prod, consider paid editions or Cloud managed options.
Is Oracle Cloud Free Tier really free? Yes—Always Free resources remain free within limits.
I’m on macOS—how do I use XE? Use Docker, or use Oracle Cloud Free Tier.
You don’t need to pay to start building with Oracle. Use Oracle XE for local dev or Oracle Cloud Free Tier for a managed experience—both pair perfectly with the free Oracle SQL Developer client. Start small, learn fast, and expand only when your project demands it.