Skip to content

Conversation

amotl
Copy link
Member

@amotl amotl commented Aug 17, 2025

About

There was no section about how to import data from Oracle Database yet.

Details

The goal is to present concise walkthroughs without many bells and
whistles, which get to the point of getting you started quickly.

Use the canonical template to present another data nozzle based on
the CTK Ingestr I/O subsystem.

Preview

https://cratedb-guide--261.org.readthedocs.build/integrate/oracle/

@amotl amotl added sanding-1200 Fine sanding. new content New content being added. labels Aug 17, 2025
Copy link

coderabbitai bot commented Aug 17, 2025

Walkthrough

Adds Oracle Database references in ETL docs, inserts Oracle into the integrations index, and adds a new Oracle integration landing page plus an end-to-end tutorial showing how to load data from Oracle into CrateDB using the CrateDB Toolkit. No code or API changes.

Changes

Cohort / File(s) Summary
ETL docs update (Oracle reference)
docs/ingest/etl/index.md
Inserts an {ref} for oracle and a descriptive paragraph for Oracle Database in the database references list and the Databases grid card under Storage.
Integrations index updates
docs/integrate/index.md
Adds oracle/index to the inline integrations list and the toctree, placed after node-red/index.
Oracle integration docs (new)
docs/integrate/oracle/index.md, docs/integrate/oracle/tutorial.md
Adds a new Oracle integration landing page (logo, About, Synopsis with ctk-ingest example, Learn card) and a tutorial with Docker/OS instructions and ctk-ingest examples to load Oracle data into CrateDB.

Sequence Diagram(s)

sequenceDiagram
  actor User
  participant Toolkit as CrateDB Toolkit (ctk-ingest)
  participant Oracle as Oracle Database
  participant CrateDB as CrateDB Cluster

  User->>Toolkit: Run "ctk-ingest load table" with Oracle DSN and CrateDB URL
  Toolkit->>Oracle: Connect and read table data
  Toolkit->>CrateDB: Write data into target schema/table
  User->>CrateDB: Query to verify loaded data
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

Suggested labels

guidance

Suggested reviewers

  • bmunkholm
  • kneth

Poem

I twitch my nose and hop with glee,
Oracle hops into our tree.
Containers hum and shells align,
Rows skip ponds and cross the line.
Data hops home — hooray! 🐇✨

Tip

🔌 Remote MCP (Model Context Protocol) integration is now available!

Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats.

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch oracle

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

‼️ IMPORTANT
Auto-reply has been disabled for this repository in the CodeRabbit settings. The CodeRabbit bot will not respond to your replies unless it is explicitly tagged.

  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (3)
docs/integrate/oracle/tutorial.md (2)

27-33: Optional: Add readiness check for Oracle before connecting.

Oracle startup can take a while; without a wait, sqlplus/ingest may fail intermittently.

Add this snippet after starting Oracle and before running sqlplus/ingest:

# Wait for Oracle listener to accept connections
until docker exec oracle /bin/bash -lc 'echo | sqlplus -L -s / as sysdba' 2>/dev/null | grep -q 'Connected to'; do
  echo "Waiting for Oracle to become ready..."
  sleep 3
done

20-25: Optional: Make network creation idempotent.

Re-running the tutorial currently errors if the network exists.

Use a tolerant create:

docker network create cratedb-demo >/dev/null 2>&1 || true
docs/integrate/oracle/index.md (1)

4-6: Optional: Avoid hotlinking external logos.

Hotlinking to Wikipedia can break or change without notice; consider vendoring the logo into the docs’ assets with proper attribution.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 97bb858 and 52b6d03.

📒 Files selected for processing (4)
  • docs/ingest/etl/index.md (2 hunks)
  • docs/integrate/index.md (1 hunks)
  • docs/integrate/oracle/index.md (1 hunks)
  • docs/integrate/oracle/tutorial.md (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-08-09T16:19:43.966Z
Learnt from: amotl
PR: crate/cratedb-guide#238
File: docs/integrate/azure-functions/learn.rst:1-1
Timestamp: 2025-08-09T16:19:43.966Z
Learning: In the CrateDB Guide documentation, main integration anchors (e.g., `azure-functions`) are intentionally placed in the `index.md` files of their respective integration folders, while detailed tutorials use the `-learn` suffix (e.g., `azure-functions-learn`) in their `learn.rst` or `learn.md` files. This is a deliberate architectural pattern for the documentation restructuring.

Applied to files:

  • docs/integrate/oracle/tutorial.md
📚 Learning: 2025-08-15T18:56:11.233Z
Learnt from: amotl
PR: crate/cratedb-guide#255
File: docs/integrate/influxdb/tutorial.md:120-123
Timestamp: 2025-08-15T18:56:11.233Z
Learning: In CrateDB integration tutorials, when using `ctk load table` with `--cluster-url="crate://userhost:port/schema/table"`, the verification query should reference the target schema.table combination specified in the cluster URL, not derive it from the source system's naming. For example, if loading from InfluxDB bucket/measurement `testdrive/demo` to CrateDB `doc/testdrive`, the verification query should be `SELECT * FROM doc.testdrive`.

Applied to files:

  • docs/integrate/oracle/tutorial.md
🪛 LanguageTool
docs/integrate/oracle/index.md

[grammar] ~1-~1: There might be a mistake here.
Context: (oracle)= # Oracle ```{div} .float-right [![oracle-...

(QB_NEW_EN)


[grammar] ~10-~10: There might be a mistake here.
Context: ...``{div} .clearfix ``` :::{rubric} About ::: [Oracle Database] (Oracle DBMS, or ...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ... as Oracle) is a proprietary multi-model database management system produced and ...

(QB_NEW_EN)


[grammar] ~16-~16: There might be a mistake here.
Context: ...line transaction processing (OLTP), data warehousing (DW) and mixed (OLTP & DW) d...

(QB_NEW_EN)


[grammar] ~19-~19: There might be a mistake here.
Context: ...atabase workloads. :::{rubric} Synopsis ::: ```shell uvx 'cratedb-toolkit[io-in...

(QB_NEW_EN)


[grammar] ~28-~28: There might be a mistake here.
Context: .../doc/oracle_demo" ``` :::{rubric} Learn ::: ::::{grid} :::{grid-item-card} Tut...

(QB_NEW_EN)


[grammar] ~42-~42: There might be a mistake here.
Context: ...rateDB Toolkit. ::: :::: :::{toctree} :maxdepth: 1 :hidden: Tutorial <tutorial...

(QB_NEW_EN)


[grammar] ~43-~43: There might be a mistake here.
Context: ...t. ::: :::: :::{toctree} :maxdepth: 1 :hidden: Tutorial ::: [Orac...

(QB_NEW_EN)


[grammar] ~44-~44: There might be a mistake here.
Context: ...::: :::{toctree} :maxdepth: 1 :hidden: Tutorial ::: [Oracle Databa...

(QB_NEW_EN)


[grammar] ~45-~45: There might be a mistake here.
Context: ...maxdepth: 1 :hidden: Tutorial ::: [Oracle Database]: https://www.ora...

(QB_NEW_EN)

docs/integrate/oracle/tutorial.md

[grammar] ~1-~1: There might be a mistake here.
Context: (oracle-tutorial)= # Load data from Oracle into CrateDB The ...

(QB_NEW_EN)


[grammar] ~7-~7: There might be a mistake here.
Context: ...y. The data transfer is supported by the {ref}`CrateDB Toolkit Ingestr I/O <ctk:i...

(QB_NEW_EN)


[grammar] ~35-~35: There might be a mistake here.
Context: ..., CrateDB Toolkit, and the Oracle client programs. ::::{tab-set} :::{tab-item} ...

(QB_NEW_EN)


[grammar] ~40-~40: There might be a mistake here.
Context: ...{tab-set} :::{tab-item} Linux and macOS To make the settings persistent, add the...

(QB_NEW_EN)


[grammar] ~47-~47: There might be a mistake here.
Context: ...nzl/oracle-free:23-slim sqlplus" ``` ::: :::{tab-item} Windows PowerShell To make...

(QB_NEW_EN)


[grammar] ~48-~48: There might be a mistake here.
Context: ...``` ::: :::{tab-item} Windows PowerShell To make the settings persistent, add the...

(QB_NEW_EN)


[grammar] ~55-~55: There might be a mistake here.
Context: ...cle-free:23-slim sqlplus @Args } ::: :::{tab-item} Windows Commandshell d...

(QB_NEW_EN)

docs/ingest/etl/index.md

[grammar] ~249-~249: There might be a mistake here.
Context: ... - {ref}nifi - {ref}node-red - {ref}oracle - {ref}postgresql - {ref}risingwave - ...

(QB_NEW_EN)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Build docs
🔇 Additional comments (7)
docs/integrate/oracle/tutorial.md (2)

89-92: LGTM: Verification query matches the target schema.table.

This aligns with our tutorial convention: you set --cluster-url to doc/oracle_demo and verify via SELECT * FROM doc.oracle_demo.


79-80: Ensure Oracle EZCONNECT Specifies Service/SID

Most Oracle Docker images require an explicit service (PDB) or SID in the EZCONNECT URL; the gvenzl/oracle-free:23-slim default PDB is typically FREEPDB1. Omitting it may cause sqlplus to fail.

  • File: docs/integrate/oracle/tutorial.md (lines 79–80)

Apply this change:

- sqlplus sys/secret@oracle as sysdba @/demo/init.sql
+ sqlplus sys/secret@//oracle:1521/FREEPDB1 as sysdba @/demo/init.sql

If your image is configured with a different service/SID (e.g., FREE), replace FREEPDB1 accordingly.

docs/integrate/index.md (1)

54-54: Add Oracle to integrations: looks good.

Placement is alphabetically consistent and follows existing structure.

docs/ingest/etl/index.md (2)

124-128: Oracle entry added to Databases: looks good.

Text mirrors the About blurb on the integration page and uses the oracle anchor.


249-249: Alphabetical list update includes Oracle: looks good.

Anchor {ref}oracle resolves to the new integration page.

docs/integrate/oracle/index.md (2)

33-37: LGTM: Learn card links to oracle-tutorial anchor.

Anchor and caption are consistent with the tutorial page.


1-3: No changes needed for anchor naming

All integration index pages use (integration) and their tutorials use (integration-tutorial), and this pattern is consistent across every docs/integrate/* folder.

@amotl amotl requested review from bmunkholm and kneth August 17, 2025 14:03
@amotl amotl marked this pull request as ready for review August 17, 2025 14:03
@kneth
Copy link
Member

kneth commented Aug 18, 2025

From https://github.com/oracle/docker-images/tree/main/OracleDatabase/SingleInstance it looks like it is good to be complex to test this.

Base automatically changed from postgresql to main August 18, 2025 11:31
@amotl
Copy link
Member Author

amotl commented Aug 18, 2025

[...] it looks like it is good to be complex to test this.

We have been so happy to discover ready-made OCI images elsewhere ;], otherwise surfacing this guide would have been an unfeasible operation. Thank you so much, @gvenzl. 💯

-- https://hub.docker.com/r/gvenzl/oracle-free

OT: We see you are also working on MCP. Cheers!

The goal is to present concise walkthroughs without many bells and
whistles, which get to the point of getting you started quickly.

Use the canonical template to present another data nozzle based on
the CTK Ingestr I/O subsystem.
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (3)
docs/integrate/oracle/tutorial.md (2)

84-86: Include Oracle service/SID in URL and uppercase schema.table.

Most setups require a service (e.g., FREEPDB1). This has been raised earlier; mirroring here for consistency.

 ctk-ingest load table \
-  "oracle://sys:secret@oracle:1521/?table=sys.demo&mode=SYSDBA" \
+  "oracle://sys:secret@oracle:1521/FREEPDB1?table=SYS.DEMO&mode=SYSDBA" \
   --cluster-url="crate://crate:crate@cratedb:4200/doc/oracle_demo"

Replace FREEPDB1 with the actual service if different.


40-46: Fix sqlplus alias: use $PWD and set a concrete entrypoint.

Two issues:

  • Use $PWD (or $(pwd)) instead of $(PWD) to mount the current directory.
  • --entrypoint= is empty; set it to sqlplus to run the client reliably.
 alias crash="docker run --rm -it --network=cratedb-demo ghcr.io/crate/cratedb-toolkit crash"
 alias ctk-ingest="docker run --rm -i --network=cratedb-demo ghcr.io/crate/cratedb-toolkit-ingest ctk"
-alias sqlplus="docker run --rm -it --network=cratedb-demo --volume=$(PWD):/demo --env=ORACLE_PASSWORD=secret --entrypoint= docker.io/gvenzl/oracle-free:23-slim sqlplus"
+alias sqlplus="docker run --rm -it --network=cratedb-demo --volume=$PWD:/demo --env=ORACLE_PASSWORD=secret --entrypoint=sqlplus docker.io/gvenzl/oracle-free:23-slim"
docs/integrate/oracle/index.md (1)

22-26: Add service/SID to Oracle URL and uppercase schema.table.

For copy-paste reliability with PDBs, include the service/SID and use SYS.DEMO. This mirrors the tutorial note.

 uvx 'cratedb-toolkit[io-ingestr]' load table \
-  "oracle://sys:secret@localhost:1521/?table=sys.demo&mode=SYSDBA" \
+  "oracle://sys:secret@localhost:1521/FREEPDB1?table=SYS.DEMO&mode=SYSDBA" \
   --cluster-url="crate://crate:crate@localhost:4200/doc/oracle_demo"

Adjust FREEPDB1 as appropriate for your image.

🧹 Nitpick comments (2)
docs/ingest/etl/index.md (1)

124-128: Wording nit: “or simply as Oracle” → “or simply Oracle”.

Minor grammar polish for clarity/consistency with the index page.

-  Oracle Database (Oracle DBMS, or simply as Oracle) is a proprietary multi-model
+  Oracle Database (Oracle DBMS, or simply Oracle) is a proprietary multi-model
docs/integrate/oracle/index.md (1)

13-15: Wording nit: “or simply as Oracle” → “or simply Oracle”.

Minor grammar cleanup.

-[Oracle Database] (Oracle DBMS, or simply as Oracle) is a proprietary multi-model
+[Oracle Database] (Oracle DBMS, or simply Oracle) is a proprietary multi-model
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 52b6d03 and 50e86fa.

📒 Files selected for processing (4)
  • docs/ingest/etl/index.md (2 hunks)
  • docs/integrate/index.md (1 hunks)
  • docs/integrate/oracle/index.md (1 hunks)
  • docs/integrate/oracle/tutorial.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/integrate/index.md
🧰 Additional context used
🧠 Learnings (3)
📚 Learning: 2025-08-15T18:56:11.508Z
Learnt from: amotl
PR: crate/cratedb-guide#255
File: docs/integrate/influxdb/tutorial.md:120-123
Timestamp: 2025-08-15T18:56:11.508Z
Learning: In CrateDB integration tutorials, when using `ctk load table` with `--cluster-url="crate://userhost:port/schema/table"`, the verification query should reference the target schema.table combination specified in the cluster URL, not derive it from the source system's naming. For example, if loading from InfluxDB bucket/measurement `testdrive/demo` to CrateDB `doc/testdrive`, the verification query should be `SELECT * FROM doc.testdrive`.

Applied to files:

  • docs/integrate/oracle/index.md
  • docs/integrate/oracle/tutorial.md
📚 Learning: 2025-08-09T16:19:43.966Z
Learnt from: amotl
PR: crate/cratedb-guide#238
File: docs/integrate/azure-functions/learn.rst:1-1
Timestamp: 2025-08-09T16:19:43.966Z
Learning: In the CrateDB Guide documentation, main integration anchors (e.g., `azure-functions`) are intentionally placed in the `index.md` files of their respective integration folders, while detailed tutorials use the `-learn` suffix (e.g., `azure-functions-learn`) in their `learn.rst` or `learn.md` files. This is a deliberate architectural pattern for the documentation restructuring.

Applied to files:

  • docs/integrate/oracle/tutorial.md
📚 Learning: 2025-08-14T12:42:12.744Z
Learnt from: amotl
PR: crate/cratedb-guide#248
File: docs/integrate/amqp/tutorial.md:36-41
Timestamp: 2025-08-14T12:42:12.744Z
Learning: In the cratedb-guide repository, code examples and tutorials prioritize simplicity and ease of following over security hardening. Security recommendations should be more lenient in tutorial/demo contexts to avoid distracting from the main learning objectives.

Applied to files:

  • docs/integrate/oracle/tutorial.md
🪛 LanguageTool
docs/ingest/etl/index.md

[grammar] ~249-~249: There might be a mistake here.
Context: ... - {ref}nifi - {ref}node-red - {ref}oracle - {ref}postgresql - {ref}risingwave - ...

(QB_NEW_EN)

docs/integrate/oracle/index.md

[grammar] ~1-~1: There might be a mistake here.
Context: (oracle)= # Oracle ```{div} .float-right [![oracle-...

(QB_NEW_EN)


[grammar] ~10-~10: There might be a mistake here.
Context: ...``{div} .clearfix ``` :::{rubric} About ::: [Oracle Database] (Oracle DBMS, or ...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ... as Oracle) is a proprietary multi-model database management system produced and ...

(QB_NEW_EN)


[grammar] ~16-~16: There might be a mistake here.
Context: ...line transaction processing (OLTP), data warehousing (DW) and mixed (OLTP & DW) d...

(QB_NEW_EN)


[grammar] ~28-~28: There might be a mistake here.
Context: .../doc/oracle_demo" ``` :::{rubric} Learn ::: ::::{grid} :::{grid-item-card} Tut...

(QB_NEW_EN)


[grammar] ~42-~42: There might be a mistake here.
Context: ...rateDB Toolkit. ::: :::: :::{toctree} :maxdepth: 1 :hidden: Tutorial <tutorial...

(QB_NEW_EN)


[grammar] ~43-~43: There might be a mistake here.
Context: ...t. ::: :::: :::{toctree} :maxdepth: 1 :hidden: Tutorial ::: [Orac...

(QB_NEW_EN)


[grammar] ~44-~44: There might be a mistake here.
Context: ...::: :::{toctree} :maxdepth: 1 :hidden: Tutorial ::: [Oracle Databa...

(QB_NEW_EN)


[grammar] ~45-~45: There might be a mistake here.
Context: ...maxdepth: 1 :hidden: Tutorial ::: [Oracle Database]: https://www.ora...

(QB_NEW_EN)

docs/integrate/oracle/tutorial.md

[grammar] ~1-~1: There might be a mistake here.
Context: (oracle-tutorial)= # Load data from Oracle into CrateDB The ...

(QB_NEW_EN)


[grammar] ~7-~7: There might be a mistake here.
Context: ...y. The data transfer is supported by the {ref}`CrateDB Toolkit Ingestr I/O <ctk:i...

(QB_NEW_EN)


[grammar] ~35-~35: There might be a mistake here.
Context: ..., CrateDB Toolkit, and the Oracle client programs. ::::{tab-set} :::{tab-item} ...

(QB_NEW_EN)


[grammar] ~40-~40: There might be a mistake here.
Context: ...{tab-set} :::{tab-item} Linux and macOS To make the settings persistent, add the...

(QB_NEW_EN)


[grammar] ~47-~47: There might be a mistake here.
Context: ...nzl/oracle-free:23-slim sqlplus" ``` ::: :::{tab-item} Windows PowerShell To make...

(QB_NEW_EN)


[grammar] ~48-~48: There might be a mistake here.
Context: ...``` ::: :::{tab-item} Windows PowerShell To make the settings persistent, add the...

(QB_NEW_EN)


[grammar] ~55-~55: There might be a mistake here.
Context: ...cle-free:23-slim sqlplus @Args } ::: :::{tab-item} Windows Commandshell d...

(QB_NEW_EN)

🔇 Additional comments (3)
docs/ingest/etl/index.md (1)

249-249: LGTM: Alphabetical list entry is correctly placed.

The new {ref}oracle` entry is alphabetically positioned between node-red and postgresql.

docs/integrate/oracle/tutorial.md (2)

70-77: Starter DDL is acceptable for the tutorial’s simplicity goal.

Given the “quick start” intent, keeping the DDL minimal is fine.


91-92: LGTM: Verification query matches the target schema.table.

The SELECT aligns with the cluster URL (doc/oracle_demo), per prior tutorial conventions.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (3)
docs/integrate/oracle/index.md (1)

22-26: Include Oracle service/SID and uppercase schema.table in connection URL

Without the service/SID segment, connections to PDBs typically fail. Also align schema.table casing for consistency.

Apply this diff:

 uvx 'cratedb-toolkit[io-ingestr]' load table \
-  "oracle://sys:secret@localhost:1521/?table=sys.demo&mode=SYSDBA" \
+  "oracle://sys:secret@localhost:1521/<SERVICE_NAME>?table=SYS.DEMO&mode=SYSDBA" \
   --cluster-url="crate://crate:crate@localhost:4200/doc/oracle_demo"

Replace <SERVICE_NAME> with your PDB service (e.g., FREEPDB1).

docs/integrate/oracle/tutorial.md (2)

43-46: Fix Linux/macOS volume mount: use $PWD instead of $(PWD)

$(PWD) performs command substitution and will fail; use the env var.

Apply this diff:

-alias sqlplus="docker run --rm -it --network=cratedb-demo --volume=$(PWD):/demo --env=ORACLE_PASSWORD=secret --entrypoint=sqlplus docker.io/gvenzl/oracle-free:23-slim"
+alias sqlplus="docker run --rm -it --network=cratedb-demo --volume=$PWD:/demo --env=ORACLE_PASSWORD=secret --entrypoint=sqlplus docker.io/gvenzl/oracle-free:23-slim"

Note: This was discussed and tracked for broader follow-up; fixing here improves copy-paste UX.


84-87: Include Oracle service/SID and uppercase schema.table in ingest URL

Align with the SQL*Plus connection and ensure the connector reaches the intended PDB/schema.

Apply this diff:

 ctk-ingest load table \
-  "oracle://sys:secret@oracle:1521/?table=sys.demo&mode=SYSDBA" \
+  "oracle://sys:secret@oracle:1521/FREEPDB1?table=SYS.DEMO&mode=SYSDBA" \
   --cluster-url="crate://crate:crate@cratedb:4200/doc/oracle_demo"

Replace FREEPDB1 with the actual service name for your Oracle container.

🧹 Nitpick comments (1)
docs/integrate/oracle/tutorial.md (1)

70-77: Prefer NUMBER over LONG for id; optionally avoid 23c-specific IF NOT EXISTS

LONG is deprecated and awkward for ids; a simple swap to NUMBER keeps the snippet approachable. If you want idempotence across reruns, see alternative below.

Apply this minimal diff:

-cat >init.sql <<SQL
-CREATE TABLE IF NOT EXISTS demo (id LONG, temperature FLOAT, humidity FLOAT);
+cat >init.sql <<SQL
+CREATE TABLE IF NOT EXISTS demo (id NUMBER, temperature FLOAT, humidity FLOAT);
 INSERT INTO demo (id, temperature, humidity) VALUES (1, 42.84, 83.1);
 INSERT INTO demo (id, temperature, humidity) VALUES (2, 84.84, 56.99);
 SELECT * FROM demo;
 exit;
 SQL

Optional (more robust across Oracle versions): replace the CREATE with a small PL/SQL block to drop-if-exists before CREATE; happy to provide if you want it.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 50e86fa and d86035d.

📒 Files selected for processing (2)
  • docs/integrate/oracle/index.md (1 hunks)
  • docs/integrate/oracle/tutorial.md (1 hunks)
🧰 Additional context used
🧠 Learnings (3)
📚 Learning: 2025-08-15T18:56:11.508Z
Learnt from: amotl
PR: crate/cratedb-guide#255
File: docs/integrate/influxdb/tutorial.md:120-123
Timestamp: 2025-08-15T18:56:11.508Z
Learning: In CrateDB integration tutorials, when using `ctk load table` with `--cluster-url="crate://userhost:port/schema/table"`, the verification query should reference the target schema.table combination specified in the cluster URL, not derive it from the source system's naming. For example, if loading from InfluxDB bucket/measurement `testdrive/demo` to CrateDB `doc/testdrive`, the verification query should be `SELECT * FROM doc.testdrive`.

Applied to files:

  • docs/integrate/oracle/index.md
  • docs/integrate/oracle/tutorial.md
📚 Learning: 2025-08-09T16:19:43.966Z
Learnt from: amotl
PR: crate/cratedb-guide#238
File: docs/integrate/azure-functions/learn.rst:1-1
Timestamp: 2025-08-09T16:19:43.966Z
Learning: In the CrateDB Guide documentation, main integration anchors (e.g., `azure-functions`) are intentionally placed in the `index.md` files of their respective integration folders, while detailed tutorials use the `-learn` suffix (e.g., `azure-functions-learn`) in their `learn.rst` or `learn.md` files. This is a deliberate architectural pattern for the documentation restructuring.

Applied to files:

  • docs/integrate/oracle/tutorial.md
📚 Learning: 2025-08-14T12:42:12.744Z
Learnt from: amotl
PR: crate/cratedb-guide#248
File: docs/integrate/amqp/tutorial.md:36-41
Timestamp: 2025-08-14T12:42:12.744Z
Learning: In the cratedb-guide repository, code examples and tutorials prioritize simplicity and ease of following over security hardening. Security recommendations should be more lenient in tutorial/demo contexts to avoid distracting from the main learning objectives.

Applied to files:

  • docs/integrate/oracle/tutorial.md
🪛 LanguageTool
docs/integrate/oracle/index.md

[grammar] ~1-~1: There might be a mistake here.
Context: (oracle)= # Oracle ```{div} .float-right [![oracle-...

(QB_NEW_EN)


[grammar] ~10-~10: There might be a mistake here.
Context: ...``{div} .clearfix ``` :::{rubric} About ::: [Oracle Database] (Oracle DBMS, or ...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...ply Oracle) is a proprietary multi-model database management system produced and ...

(QB_NEW_EN)


[grammar] ~16-~16: There might be a mistake here.
Context: ...line transaction processing (OLTP), data warehousing (DW) and mixed (OLTP & DW) d...

(QB_NEW_EN)


[grammar] ~28-~28: There might be a mistake here.
Context: .../doc/oracle_demo" ``` :::{rubric} Learn ::: ::::{grid} :::{grid-item-card} Tut...

(QB_NEW_EN)


[grammar] ~42-~42: There might be a mistake here.
Context: ...rateDB Toolkit. ::: :::: :::{toctree} :maxdepth: 1 :hidden: Tutorial <tutorial...

(QB_NEW_EN)


[grammar] ~43-~43: There might be a mistake here.
Context: ...t. ::: :::: :::{toctree} :maxdepth: 1 :hidden: Tutorial ::: [Orac...

(QB_NEW_EN)


[grammar] ~44-~44: There might be a mistake here.
Context: ...::: :::{toctree} :maxdepth: 1 :hidden: Tutorial ::: [Oracle Databa...

(QB_NEW_EN)


[grammar] ~45-~45: There might be a mistake here.
Context: ...maxdepth: 1 :hidden: Tutorial ::: [Oracle Database]: https://www.ora...

(QB_NEW_EN)

docs/integrate/oracle/tutorial.md

[grammar] ~1-~1: There might be a mistake here.
Context: (oracle-tutorial)= # Load data from Oracle into CrateDB The ...

(QB_NEW_EN)


[grammar] ~7-~7: There might be a mistake here.
Context: ...y. The data transfer is supported by the {ref}`CrateDB Toolkit Ingestr I/O <ctk:i...

(QB_NEW_EN)


[grammar] ~35-~35: There might be a mistake here.
Context: ..., CrateDB Toolkit, and the Oracle client programs. ::::{tab-set} :::{tab-item} ...

(QB_NEW_EN)


[grammar] ~40-~40: There might be a mistake here.
Context: ...{tab-set} :::{tab-item} Linux and macOS To make the settings persistent, add the...

(QB_NEW_EN)


[grammar] ~47-~47: There might be a mistake here.
Context: ...r.io/gvenzl/oracle-free:23-slim" ``` ::: :::{tab-item} Windows PowerShell To make...

(QB_NEW_EN)


[grammar] ~48-~48: There might be a mistake here.
Context: ...``` ::: :::{tab-item} Windows PowerShell To make the settings persistent, add the...

(QB_NEW_EN)


[grammar] ~55-~55: There might be a mistake here.
Context: ...enzl/oracle-free:23-slim @Args } ::: :::{tab-item} Windows Commandshell d...

(QB_NEW_EN)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Build docs
🔇 Additional comments (3)
docs/integrate/oracle/tutorial.md (3)

51-54: LGTM: PowerShell helper correctly sets entrypoint and mounts working dir

Explicit --entrypoint=sqlplus and ${PWD} usage look correct.


58-61: LGTM: Windows Command helper sets entrypoint and mounts %cd%

Explicit --entrypoint=sqlplus and %cd% mapping are correct.


89-92: LGTM: Verification query matches target schema.table

SELECT from doc.oracle_demo correctly matches the cluster-url target.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (1)
docs/integrate/oracle/tutorial.md (1)

45-45: Fix Linux/macOS sqlplus alias: use $PWD (or $(pwd)) instead of $(PWD).

$(PWD) attempts command substitution and won’t mount your working dir, breaking @/demo/init.sql. Use the environment variable $PWD.

-alias sqlplus="docker run --rm -it --network=cratedb-demo --volume=$(PWD):/demo --env=ORACLE_PASSWORD=secret --entrypoint=sqlplus docker.io/gvenzl/oracle-free:23-slim"
+alias sqlplus="docker run --rm -it --network=cratedb-demo --volume=$PWD:/demo --env=ORACLE_PASSWORD=secret --entrypoint=sqlplus docker.io/gvenzl/oracle-free:23-slim"
🧹 Nitpick comments (3)
docs/integrate/oracle/tutorial.md (2)

70-77: Optional: Avoid Oracle-version-specific IF NOT EXISTS for broader portability.

CREATE TABLE … IF NOT EXISTS is 23c-specific. For wider compatibility, use an idempotent PL/SQL block to drop-if-exists, then CREATE. Keep it simple if you prefer, but here’s a portable alternative:

-cat >init.sql <<SQL
-CREATE TABLE IF NOT EXISTS demo (id NUMBER, temperature FLOAT, humidity FLOAT);
+cat >init.sql <<SQL
+BEGIN
+  EXECUTE IMMEDIATE 'DROP TABLE demo PURGE';
+EXCEPTION
+  WHEN OTHERS THEN
+    IF SQLCODE != -942 THEN RAISE; END IF;
+END;
+/
+CREATE TABLE demo (id NUMBER, temperature FLOAT, humidity FLOAT);
 INSERT INTO demo (id, temperature, humidity) VALUES (1, 42.84, 83.1);
 INSERT INTO demo (id, temperature, humidity) VALUES (2, 84.84, 56.99);
 SELECT * FROM demo;
 exit;
 SQL

84-86: Verify Oracle URL format accepted by the connector; consider path-style service.

You’re using service_name=freepdb1 as a query param. If the connector also supports Oracle’s path-style service, this form is often copy-paste friendly:

-  "oracle://sys:secret@oracle:1521/?service_name=freepdb1&table=sys.demo&mode=sysdba" \
+  "oracle://sys:secret@oracle:1521/freepdb1?table=SYS.DEMO&mode=SYSDBA" \

If service_name in the query is the recommended format for CTK Ingestr, keep as-is; otherwise, switch to the path form for consistency with common Oracle tooling.

docs/integrate/oracle/index.md (1)

22-26: Example is clear; consider aligning URL style with tutorial and/or Oracle path form.

Current example uses service_name=… in the query and lower-case sys.demo. If CTK prefers path-style services and uppercase identifiers, you could mirror this alt form:

-  "oracle://sys:secret@localhost:1521/?service_name=freepdb1&table=sys.demo&mode=sysdba" \
+  "oracle://sys:secret@localhost:1521/freepdb1?table=SYS.DEMO&mode=SYSDBA" \

If query-param service_name is the canonical CTK format, keep as-is but consider matching the tutorial exactly for consistency.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between d86035d and 63fa8fe.

📒 Files selected for processing (2)
  • docs/integrate/oracle/index.md (1 hunks)
  • docs/integrate/oracle/tutorial.md (1 hunks)
🧰 Additional context used
🧠 Learnings (3)
📚 Learning: 2025-08-15T18:56:11.508Z
Learnt from: amotl
PR: crate/cratedb-guide#255
File: docs/integrate/influxdb/tutorial.md:120-123
Timestamp: 2025-08-15T18:56:11.508Z
Learning: In CrateDB integration tutorials, when using `ctk load table` with `--cluster-url="crate://userhost:port/schema/table"`, the verification query should reference the target schema.table combination specified in the cluster URL, not derive it from the source system's naming. For example, if loading from InfluxDB bucket/measurement `testdrive/demo` to CrateDB `doc/testdrive`, the verification query should be `SELECT * FROM doc.testdrive`.

Applied to files:

  • docs/integrate/oracle/index.md
  • docs/integrate/oracle/tutorial.md
📚 Learning: 2025-08-09T16:19:43.966Z
Learnt from: amotl
PR: crate/cratedb-guide#238
File: docs/integrate/azure-functions/learn.rst:1-1
Timestamp: 2025-08-09T16:19:43.966Z
Learning: In the CrateDB Guide documentation, main integration anchors (e.g., `azure-functions`) are intentionally placed in the `index.md` files of their respective integration folders, while detailed tutorials use the `-learn` suffix (e.g., `azure-functions-learn`) in their `learn.rst` or `learn.md` files. This is a deliberate architectural pattern for the documentation restructuring.

Applied to files:

  • docs/integrate/oracle/tutorial.md
📚 Learning: 2025-08-14T12:42:12.744Z
Learnt from: amotl
PR: crate/cratedb-guide#248
File: docs/integrate/amqp/tutorial.md:36-41
Timestamp: 2025-08-14T12:42:12.744Z
Learning: In the cratedb-guide repository, code examples and tutorials prioritize simplicity and ease of following over security hardening. Security recommendations should be more lenient in tutorial/demo contexts to avoid distracting from the main learning objectives.

Applied to files:

  • docs/integrate/oracle/tutorial.md
🪛 LanguageTool
docs/integrate/oracle/index.md

[grammar] ~1-~1: There might be a mistake here.
Context: (oracle)= # Oracle ```{div} .float-right [![oracle-...

(QB_NEW_EN)


[grammar] ~10-~10: There might be a mistake here.
Context: ...``{div} .clearfix ``` :::{rubric} About ::: [Oracle Database] (Oracle DBMS, or ...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...ply Oracle) is a proprietary multi-model database management system produced and ...

(QB_NEW_EN)


[grammar] ~16-~16: There might be a mistake here.
Context: ...line transaction processing (OLTP), data warehousing (DW) and mixed (OLTP & DW) d...

(QB_NEW_EN)


[grammar] ~28-~28: There might be a mistake here.
Context: .../doc/oracle_demo" ``` :::{rubric} Learn ::: ::::{grid} :::{grid-item-card} Tut...

(QB_NEW_EN)


[grammar] ~42-~42: There might be a mistake here.
Context: ...rateDB Toolkit. ::: :::: :::{toctree} :maxdepth: 1 :hidden: Tutorial <tutorial...

(QB_NEW_EN)


[grammar] ~43-~43: There might be a mistake here.
Context: ...t. ::: :::: :::{toctree} :maxdepth: 1 :hidden: Tutorial ::: [Orac...

(QB_NEW_EN)


[grammar] ~44-~44: There might be a mistake here.
Context: ...::: :::{toctree} :maxdepth: 1 :hidden: Tutorial ::: [Oracle Databa...

(QB_NEW_EN)


[grammar] ~45-~45: There might be a mistake here.
Context: ...maxdepth: 1 :hidden: Tutorial ::: [Oracle Database]: https://www.ora...

(QB_NEW_EN)

docs/integrate/oracle/tutorial.md

[grammar] ~1-~1: There might be a mistake here.
Context: (oracle-tutorial)= # Load data from Oracle into CrateDB The ...

(QB_NEW_EN)


[grammar] ~7-~7: There might be a mistake here.
Context: ...y. The data transfer is supported by the {ref}`CrateDB Toolkit Ingestr I/O <ctk:i...

(QB_NEW_EN)


[grammar] ~35-~35: There might be a mistake here.
Context: ..., CrateDB Toolkit, and the Oracle client programs. ::::{tab-set} :::{tab-item} ...

(QB_NEW_EN)


[grammar] ~40-~40: There might be a mistake here.
Context: ...{tab-set} :::{tab-item} Linux and macOS To make the settings persistent, add the...

(QB_NEW_EN)


[grammar] ~47-~47: There might be a mistake here.
Context: ...r.io/gvenzl/oracle-free:23-slim" ``` ::: :::{tab-item} Windows PowerShell To make...

(QB_NEW_EN)


[grammar] ~48-~48: There might be a mistake here.
Context: ...``` ::: :::{tab-item} Windows PowerShell To make the settings persistent, add the...

(QB_NEW_EN)


[grammar] ~55-~55: There might be a mistake here.
Context: ...enzl/oracle-free:23-slim @Args } ::: :::{tab-item} Windows Commandshell d...

(QB_NEW_EN)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Build docs
🔇 Additional comments (5)
docs/integrate/oracle/tutorial.md (4)

51-54: PowerShell helper looks correct now (explicit entrypoint and volume mapping).

Entrypoint is set to sqlplus and ${PWD} resolves to the current directory in PowerShell contexts. Looks good.


57-61: Windows Command helper looks correct (explicit entrypoint and %cd% mapping).

Entrypoint set to sqlplus avoids invoking the image default. Correct use of %cd%.


79-80: Good: include service name in SQL*Plus connect string.

Specifying the PDB service avoids common connection pitfalls.


91-92: Verification query matches the target schema.table from cluster URL.

This aligns with the tutorial pattern used across integrations.

docs/integrate/oracle/index.md (1)

33-37: LGTM: Learn card correctly references the tutorial anchor.

Anchor usage and link text are consistent with the docs pattern.

@amotl amotl merged commit 4720c1a into main Aug 18, 2025
3 checks passed
@amotl amotl deleted the oracle branch August 18, 2025 20:00
@gvenzl
Copy link

gvenzl commented Aug 20, 2025

[...] it looks like it is good to be complex to test this.

We have been so happy to discover ready-made OCI images elsewhere ;], otherwise surfacing this guide would have been an unfeasible operation. Thank you so much, @gvenzl. 💯

-- https://hub.docker.com/r/gvenzl/oracle-free

OT: We see you are also working on MCP. Cheers!

You are very welcome, @amotl! :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new content New content being added. sanding-1200 Fine sanding.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants