Skip to main content

dbasim — learn to fix Oracle from real incidents

dbasim plants a "the database is broken" incident in Oracle Database Free on your own computer. A simulated app keeps using it the whole time. You find the cause, fix it, and dbasim checks whether your fix really worked.

⚠️ dbasim creates and drops users and tablespaces in the database it points at. Only use it with Oracle Free on your own machine. It refuses to run against anything that is not Free and never drops a SHOP user it did not create.

Requirements

  • Docker (on Windows: Docker Desktop + WSL2)
  • About 3GB free RAM and 10GB free disk
  • Python 3.9 or newer

1. Start Oracle Database Free

docker run -d --name dbasim-oracle -p 1521:1521 \
  -e ORACLE_PWD=ChangeMe123 \
  container-registry.oracle.com/database/free:latest

docker logs -f dbasim-oracle   # wait for DATABASE IS READY TO USE!

Downloading and using Oracle Database Free is governed by the Oracle Free Use Terms and Conditions, between you and Oracle.

2. Install dbasim

pip install dbasim

If dbasim is "not recognized" afterwards, your Python scripts folder is not on PATH. Either run every command as python -m dbasim ... instead of dbasim ..., or install with pipx (pipx install dbasim), which puts it on PATH for you.

3. Configure (once)

dbasim setup

It asks for the SYSTEM password you gave the container (ChangeMe123 above), saves it in ~/.dbasim/config.json, and checks the connection. From then on every command works in any terminal window with nothing to export first.

Options: dbasim setup --scale 0.3 makes the scenario data smaller for slow machines; --dsn host:port/service if Oracle is not on localhost:1521/FREEPDB1. The environment variables DBASIM_ADMIN_PASSWORD, DBASIM_DSN and DBASIM_SCALE still work and override the saved file (handy for scripts).

4. Play

Command What it does
dbasim setup Save the database password once (--scale, --dsn optional)
dbasim doctor Check Docker, the container, the database and the password
dbasim list List scenarios and your scores
dbasim start s01 Start a scenario (plants the problem + starts the simulated app)
dbasim logs Read the app's log, like when a ticket comes in
dbasim ticket Show the current ticket again
dbasim status Time spent, score, and the password of user SHOP
dbasim hint Get a hint (-15 points each)
dbasim check Check your fix; once solved you see a senior DBA's write-up
dbasim solution --yes Give up and see the solution (0 points)
dbasim reset Remove everything dbasim created and undo settings the scenarios invite you to change

Use any tool you like: SQL*Plus, SQLcl, SQL Developer, connected as SYSTEM to FREEPDB1. Every scenario can be solved with what Oracle Free ships (v$ views, DBMS_XPLAN, trace). No AWR/ASH needed.

When you're done

dbasim stop                  # or: dbasim reset   (clears the scenario)
docker stop dbasim-oracle    # gives the memory back; docker start dbasim-oracle next time

Quit Docker Desktop before shutting the computer down. Shutting down while it is still running is what causes its "An unexpected error occurred ... engine.sock" message on the next start.

Troubleshooting

dbasim doctor checks the whole chain (Docker, the container, the database, the password) and tells you which link is broken. The usual ones:

Symptom Fix
Docker Desktop (Windows/macOS) shows "An unexpected error occurred" mentioning engine.sock Click Quit, open Docker Desktop again; it normally starts on the second try. Do not choose "Reset to factory defaults": that deletes the Oracle container and you would download it again. To avoid it, quit Docker Desktop before shutting the computer down.
"Docker engine is not running" Open Docker Desktop and wait for "Engine running".
"container is stopped" (after a reboot) docker start dbasim-oracle, wait about 30 seconds.
"database is still starting" First start takes several minutes: docker logs -f dbasim-oracle until DATABASE IS READY TO USE.
dbasim is "not recognized" / "command not found" right after pip install The Python scripts folder is not on PATH. Use python -m dbasim ..., or pipx install dbasim.
"No database password saved yet" Run dbasim setup once.
"Oracle rejected the SYSTEM password" DBASIM_ADMIN_PASSWORD must be the ORACLE_PWD you gave docker run.
Everything is slow or the container restarts Give Docker at least 3GB of memory (Docker Desktop > Settings > Resources) or set DBASIM_SCALE=0.3.

Scenarios

ID Scenario Level Plan
s01 Order search page is slow Easy Free
s02 Month-end report slow after data migration Easy Free
s03 The nightly batch fails every night Easy Free
s04 Payment entry screen hangs Medium Pro (coming soon)
s05 CPU spikes after a new app release Medium Pro (coming soon)

The first three scenarios are free forever: no sign-up and no licence key. Pro scenarios are not on sale yet (coming soon). Watch this repository to hear when they launch.

Found a problem, or want to suggest a scenario? Open an issue at https://github.com/kulchartt/oracledbasim/issues

Metadata

Release files for dbasim 0.3.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dbasim 0.3.8
File Size Uploaded
dbasim-0.3.8.tar.gz 32.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dbasim 0.3.8
File Interpreter ABI Platform
dbasim-0.3.8-py3-none-any.whl Python 3 none any Details

Total release size: 69.8 kB

Release files / dbasim-0.3.8.tar.gz

Download URL dbasim-0.3.8.tar.gz
Size 32.6 kB
Tags Source
SHA-256 checksum
How to use checksums
3e06c046f6b5d9947142ef7156f6503a381fa28185cca448493eb5f5b299853c
BLAKE2b-256 checksum
How to use checksums
84309499a631991b2c870ca00a3946077098a53fa6e2526a794b9815c02c5aa0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.

Transparency log

Release files / dbasim-0.3.8-py3-none-any.whl

Download URL dbasim-0.3.8-py3-none-any.whl
Size 37.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8b03267eb87f5cc29edcc31c68f8c55824a495344085c35cc79e33f737374f8e
BLAKE2b-256 checksum
How to use checksums
865f44898b0843f3e82b0f6ab85fa3a0b1b9322b4a02818985580a826412d0d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.8 This release

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page