From 5d91d35eac2849634c5b2c25890c0a413436a97d Mon Sep 17 00:00:00 2001 From: Andy Stark Date: Thu, 29 May 2025 14:11:17 +0100 Subject: [PATCH 1/2] DOC-5281 added Oracle XMLTYPE config section --- .../data-pipelines/prepare-dbs/oracle.md | 119 +++++++++++++++++- static/images/rdi/ingest/xmltype-example.webp | Bin 0 -> 10704 bytes 2 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 static/images/rdi/ingest/xmltype-example.webp diff --git a/content/integrate/redis-data-integration/data-pipelines/prepare-dbs/oracle.md b/content/integrate/redis-data-integration/data-pipelines/prepare-dbs/oracle.md index 29f0d1c2bf..e37819ce28 100644 --- a/content/integrate/redis-data-integration/data-pipelines/prepare-dbs/oracle.md +++ b/content/integrate/redis-data-integration/data-pipelines/prepare-dbs/oracle.md @@ -288,7 +288,124 @@ you should also revoke `LOCK` on all tables: REVOKE LOCK ANY TABLE FROM c##dbzuser container=all; ``` -## 6. Configuration is complete +## 6. Support for Oracle XMLTYPE columns (optional) + +If your Oracle database contains tables with columns of type +[`XMLTYPE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/arpls/XMLTYPE.html), +you must configure additional libraries for Debezium Server to process these columns correctly. + +### Create a custom Debezium Server image + +To support `XMLTYPE` columns, you must create a custom [Docker](https://www.docker.com/) image +that includes the required Oracle XML libraries. + +1. Download the required libraries from Maven Central: + + ```bash + mkdir xml + cd xml + wget https://repo.maven.apache.org/maven2/com/oracle/database/xml/xdb/19.27.0.0/xdb-19.27.0.0.jar + wget https://repo.maven.apache.org/maven2/com/oracle/database/xml/xmlparserv2/19.27.0.0/xmlparserv2-19.27.0.0.jar + mv xdb-19.27.0.0.jar xdb.jar + mv xmlparserv2-19.27.0.0.jar xmlparserv2.jar + ``` + +2. Create a `Dockerfile` in the same directory: + + ```dockerfile + FROM quay.io/debezium/server:3.0.8.Final + + USER root + + COPY xdb.jar /debezium/lib + COPY xmlparserv2.jar /debezium/lib + ``` + +3. Build the custom image: + + ```bash + cd .. + docker build -t dbz-xml xml + docker tag dbz-xml quay.io/debezium/server:3.0.8.Final + docker image save quay.io/debezium/server:3.0.8.Final -o dbz3.0.8-xml-linux-amd.tar + ``` + +4. Add the image to your k3s image repository: + + ```bash + sudo k3s ctr images import dbz3.0.8-xml-linux-amd.tar all + ``` + +### Configure RDI for XMLTYPE support + +In your RDI configuration file, set the `lob.enabled` property to `true` in the +`advanced.source` section: + +```yaml +sources: + oracle: + type: cdc + logging: + level: info + connection: + type: oracle + host: oracle + port: 1521 + user: ${SOURCE_DB_USERNAME} + password: ${SOURCE_DB_PASSWORD} + database: ORCLCDB + advanced: + source: + database.pdb.name: ORCLPDB1 + lob.enabled: true +``` + +### Test XMLTYPE support + +You can create a test table to verify that `XMLTYPE` columns work correctly +(using the +[`CHINOOK`](https://github.com/Redislabs-Solution-Architects/rdi-quickstart-postgres/tree/main) +schema as an example): + +```sql +CREATE TABLE tab1 ( + xmlid INT NOT NULL, + col1 SYS.XMLTYPE, + CONSTRAINT PK_tab1 PRIMARY KEY (xmlid) +); + +DECLARE + v_xml SYS.XMLTYPE; + v_doc CLOB; +BEGIN + -- XMLTYPE created from a CLOB + v_doc := '' || Chr(10) || ' MY_TABLE'; + v_xml := SYS.XMLTYPE.createXML(v_doc); + + INSERT INTO tab1 (xmlid, col1) VALUES (1, v_xml); + + -- XMLTYPE created from a query + SELECT SYS_XMLGEN(table_name) + INTO v_xml + FROM user_tables + WHERE rownum = 1; + + INSERT INTO tab1 (xmlid, col1) VALUES (2, v_xml); + + COMMIT; +END; +/ + +ALTER TABLE CHINOOK.TAB1 ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; +``` + +After you run an initial +[snapshot]({{< relref "/integrate/redis-data-integration/data-pipelines/data-pipelines#pipeline-lifecycle" >}}), +the XML data appears in your Redis target database: + +{{< image filename="/images/rdi/ingest/xmltype-example.webp" >}} + +## 7. Configuration is complete Once you have followed the steps above, your Oracle database is ready for Debezium to use. diff --git a/static/images/rdi/ingest/xmltype-example.webp b/static/images/rdi/ingest/xmltype-example.webp new file mode 100644 index 0000000000000000000000000000000000000000..1c021a872a86f28e8e0d932461a93abf7e9ae082 GIT binary patch literal 10704 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 literal 0 HcmV?d00001 From 613dc043acb4763e57329c0506a125ff277c5700 Mon Sep 17 00:00:00 2001 From: andy-stark-redis <164213578+andy-stark-redis@users.noreply.github.com> Date: Thu, 29 May 2025 14:43:14 +0100 Subject: [PATCH 2/2] Update content/integrate/redis-data-integration/data-pipelines/prepare-dbs/oracle.md Co-authored-by: David Dougherty --- .../redis-data-integration/data-pipelines/prepare-dbs/oracle.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/integrate/redis-data-integration/data-pipelines/prepare-dbs/oracle.md b/content/integrate/redis-data-integration/data-pipelines/prepare-dbs/oracle.md index e37819ce28..c5024c9304 100644 --- a/content/integrate/redis-data-integration/data-pipelines/prepare-dbs/oracle.md +++ b/content/integrate/redis-data-integration/data-pipelines/prepare-dbs/oracle.md @@ -330,7 +330,7 @@ that includes the required Oracle XML libraries. docker image save quay.io/debezium/server:3.0.8.Final -o dbz3.0.8-xml-linux-amd.tar ``` -4. Add the image to your k3s image repository: +4. Add the image to your K3s image repository: ```bash sudo k3s ctr images import dbz3.0.8-xml-linux-amd.tar all