Complete Guide: Installing Oracle Database 21c XE on Debian with Docker

Struggling to install Oracle Database on Debian? Skip the complex manual installation and use Docker! This step-by-step guide walks you through installing Oracle Database 21c XE on Debian in under 5 minutes. Perfect for developers who need a local Oracle environment for testing, learning, or development. Includes troubleshooting tips, SQL*Plus commands, and a complete cheat sheet for daily use.

📋 Detailed Blog Post Summary

🎯 Article Title

“How to Install Oracle Database 21c XE on Debian Using Docker (Complete Guide)”

📂 Category

Database Administration | DevOps | Oracle

🏷️ Tags

Oracle DatabaseDockerDebianLinuxSQLDatabase InstallationSQL*PlusDevelopment EnvironmentOracle XEContainerization


📖 Article Structure

1. Introduction

  • Problem: Oracle installation on Debian is complex
  • Solution: Docker simplifies everything
  • What you’ll learn
  • Prerequisites

2. Why Use Docker for Oracle?

  • Quick setup (5 minutes vs hours)
  • No dependency issues
  • Easy cleanup and version management
  • Isolation from host system

3. Step-by-Step Installation

3.1 Install Docker

bash

sudo apt update
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
newgrp docker

3.2 Run Oracle Container

bash

docker run -d --name oracle-xe \
  -p 1521:1521 \
  -e ORACLE_PASSWORD=oracle \
  -e APP_USER=myuser \
  -e APP_USER_PASSWORD=mypass \
  --shm-size=1g \
  gvenzl/oracle-xe:21-slim

3.3 Wait for Initialization

  • First startup takes 2-3 minutes
  • Monitor with: docker logs -f oracle-xe
  • Wait for: “Pluggable database XEPDB1 opened read write”

4. Connecting to Oracle

4.1 Connect as SYSTEM User

bash

docker exec -it oracle-xe sqlplus system/oracle

4.2 Connect as App User

bash

docker exec -it oracle-xe sqlplus myuser/mypass@XEPDB1

5. Verification

sql

SELECT * FROM v$version;

Expected Output:

text

Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0

6. Working with SQL*Plus

6.1 Basic SQL Operations

sql

-- Create table
CREATE TABLE employees (
    id NUMBER PRIMARY KEY,
    name VARCHAR2(100),
    salary NUMBER
);

-- Insert data
INSERT INTO employees VALUES (1, 'John Doe', 50000);
INSERT INTO employees VALUES (2, 'Jane Smith', 60000);

-- Query
SELECT * FROM employees;

-- Commit changes
COMMIT;

6.2 Handling Duplicates

sql

-- Remove duplicates
DELETE FROM employees 
WHERE ROWID NOT IN (
    SELECT MIN(ROWID) 
    FROM employees 
    GROUP BY id, name, salary
);

7. Useful SQL*Plus Commands

CommandPurpose
EXIT;Exit SQL*Plus
SHOW USER;Show current user
DESC tablename;Describe table structure
SELECT * FROM tab;List all tables
CLEAR SCREEN;Clear screen
/ (slash)Re-run last command

8. Database Management

8.1 Start/Stop Database

bash

docker start oracle-xe    # Start container
docker stop oracle-xe     # Stop container
docker ps                 # Check status

8.2 Connection Details

ItemValue
Database NameXE
PDB NameXEPDB1
SYSTEM Passwordoracle
App Usermyuser
App Passwordmypass
Port1521
Connection String//localhost:1521/XEPDB1

9. Quick Query Methods

Interactive:

bash

docker exec -it oracle-xe sqlplus myuser/mypass@XEPDB1

One-Liner:

bash

docker exec oracle-xe sqlplus -s myuser/mypass@XEPDB1 <<< "SELECT * FROM employees;"

Multi-Command Script:

bash

docker exec -i oracle-xe sqlplus myuser/mypass@XEPDB1 << 'EOF'
SELECT * FROM employees;
INSERT INTO employees VALUES (3, 'Bob Johnson', 55000);
COMMIT;
SELECT * FROM employees;
EXIT;
EOF

10. Troubleshooting

Issue 1: ORA-01034 / ORA-27101

  • Cause: Database still starting up
  • Solution: Wait 60-90 seconds, check logs

Issue 2: “SP2-0734: unknown command”

  • Cause: Copy-pasting prompts into SQL*Plus
  • Solution: Type commands one at a time or use script files

Issue 3: Duplicate Data

  • Cause: Running INSERT multiple times
  • Solution: Use DELETE with ROWID or recreate table with constraints

Issue 4: “bash: command not found: sqlplus”

  • Cause: Oracle not installed locally
  • Solution: Use docker exec to run commands inside container

11. Advanced Topics (Optional)

11.1 Data Persistence

bash

docker run -d --name oracle-xe \
  -v oracle_data:/opt/oracle/oradata \
  -p 1521:1521 \
  -e ORACLE_PASSWORD=oracle \
  gvenzl/oracle-xe:21-slim

11.2 Resource Limits

bash

docker run -d --name oracle-xe \
  --memory=2g \
  --cpus=2 \
  -p 1521:1521 \
  -e ORACLE_PASSWORD=oracle \
  gvenzl/oracle-xe:21-slim

12. Conclusion

  • Summary of what was accomplished
  • Benefits of this approach
  • Next steps for learning

13. References


🎨 Blog Meta Data

Meta Title:

text

Install Oracle Database 21c XE on Debian with Docker - Complete Guide

Meta Description:

text

Learn how to install Oracle Database 21c Express Edition on Debian using Docker. Complete step-by-step guide with SQL*Plus tips, troubleshooting, and cheat sheet for developers.

URL Slug:

text

/install-oracle-database-debian-docker-guide

Canonical URL:

text

https://yourblog.com/install-oracle-database-debian-docker-guide

📊 SEO Keywords

Primary Keywords:

  • Oracle Database Debian install
  • Install Oracle 21c Docker
  • Oracle Docker Debian
  • SQL*Plus Debian

Secondary Keywords:

  • Oracle container Debian
  • Oracle XE Docker
  • SQL development environment
  • Database containerization
  • Oracle Linux Debian Docker

📅 Blog Settings

SettingValue
CategoryDatabase / DevOps
TagsOracle, Docker, Debian, SQL, Database
Reading Time10-12 minutes
Difficulty LevelIntermediate
Publish DateSeptember 9, 2026

💾 Save This File

I recommend saving this entire summary as a markdown file for future reference:

bash

# Save as: oracle-debian-docker-guide.md

🚀 Quick Commands Reference Card

bash

# Install Docker
sudo apt update && sudo apt install -y docker.io

# Run Oracle
docker run -d --name oracle-xe -p 1521:1521 -e ORACLE_PASSWORD=oracle --shm-size=1g gvenzl/oracle-xe:21-slim

# Connect
docker exec -it oracle-xe sqlplus system/oracle

# Stop/Start
docker stop oracle-xe && docker start oracle-xe

# Verify
docker exec oracle-xe sqlplus -s system/oracle <<< "SELECT * FROM v$version;"

# Remove
docker stop oracle-xe && docker rm oracle-xe

Oracle Database Quick Start

Oracle Software Delivery Cloud