options) {
+ return FactoryUtil.createTableSource(
+ null,
+ ObjectIdentifier.of("default", "default", "t1"),
+ new CatalogTableImpl(SCHEMA, options, "mock source"),
+ new Configuration(),
+ OracleTableSourceFactoryTest.class.getClassLoader(),
+ false);
+ }
+}
diff --git a/flink-connector-oracle-cdc/src/test/java/com/alibaba/ververica/cdc/connectors/oracle/utils/UniqueDatabase.java b/flink-connector-oracle-cdc/src/test/java/com/alibaba/ververica/cdc/connectors/oracle/utils/UniqueDatabase.java
new file mode 100644
index 000000000..0b7f27392
--- /dev/null
+++ b/flink-connector-oracle-cdc/src/test/java/com/alibaba/ververica/cdc/connectors/oracle/utils/UniqueDatabase.java
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.alibaba.ververica.cdc.connectors.oracle.utils;
+
+import org.testcontainers.containers.OracleContainer;
+
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Random;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+import static org.junit.Assert.assertNotNull;
+
+/**
+ * Create and populate a unique instance of a Oracle database for each run of JUnit test. A user of
+ * class needs to provide a logical name for Debezium and database name. It is expected that there
+ * is a init file in src/test/resources/ddl/<database_name>.sql
. The database
+ * name is enriched with a unique suffix that guarantees complete isolation between runs
+ * <database_name>_<suffix>
+ *
+ * This class is inspired from Debezium project.
+ */
+public class UniqueDatabase {
+
+ private static final String[] CREATE_DATABASE_DDL =
+ new String[] {"CREATE DATABASE $DBNAME$;", "USE $DBNAME$;"};
+ private static final Pattern COMMENT_PATTERN = Pattern.compile("^(.*)--.*$");
+
+ private final OracleContainer container;
+ private final String databaseName;
+ private final String templateName;
+ private final String username;
+ private final String password;
+ private final String schemaName = "debezium";
+
+ public UniqueDatabase(
+ OracleContainer container,
+ String databaseName,
+ String username,
+ String password,
+ String sqlName) {
+ this(
+ container,
+ databaseName,
+ Integer.toUnsignedString(new Random().nextInt(), 36),
+ username,
+ password,
+ sqlName);
+ }
+
+ private UniqueDatabase(
+ OracleContainer container,
+ String databaseName,
+ final String identifier,
+ String username,
+ String password,
+ String sqlName) {
+ this.container = container;
+ this.databaseName = databaseName; // + "_" + identifier;
+ this.templateName = sqlName;
+ this.username = username;
+ this.password = password;
+ }
+
+ public String getDatabaseName() {
+ return databaseName;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ /** @return Fully qualified table name <databaseName>.<tableName>
*/
+ public String qualifiedTableName(final String tableName) {
+ return String.format("%s.%s", databaseName, tableName);
+ }
+
+ /** Creates the database and populates it with initialization SQL script. */
+ public void createAndInitialize() {
+ final String ddlFile = String.format("ddl/%s.sql", templateName);
+ final URL ddlTestFile = UniqueDatabase.class.getClassLoader().getResource(ddlFile);
+ assertNotNull("Cannot locate " + ddlFile, ddlTestFile);
+ try {
+ try (Connection connection =
+ DriverManager.getConnection(
+ container.getJdbcUrl(), username, password);
+ Statement statement = connection.createStatement()) {
+ final List statements =
+ Arrays.stream(
+ Files.readAllLines(Paths.get(ddlTestFile.toURI())).stream()
+ .map(String::trim)
+ .filter(x -> !x.startsWith("--") && !x.isEmpty())
+ .map(
+ x -> {
+ final Matcher m =
+ COMMENT_PATTERN.matcher(x);
+ return m.matches() ? m.group(1) : x;
+ })
+ .map(this::convertSQL)
+ .collect(Collectors.joining("\n"))
+ .split(";"))
+ .map(x -> x.replace("$$", ";"))
+ .collect(Collectors.toList());
+ for (String stmt : statements) {
+ statement.execute(stmt);
+ }
+ }
+ } catch (final Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
+ public Connection getJdbcConnection() throws SQLException {
+ return DriverManager.getConnection(container.getJdbcUrl(), username, password);
+ }
+
+ private String convertSQL(final String sql) {
+ return sql.replace("$DBNAME$", databaseName);
+ }
+}
diff --git a/flink-connector-oracle-cdc/src/test/resources/ddl/column_type_test.sql b/flink-connector-oracle-cdc/src/test/resources/ddl/column_type_test.sql
new file mode 100644
index 000000000..be59d79d8
--- /dev/null
+++ b/flink-connector-oracle-cdc/src/test/resources/ddl/column_type_test.sql
@@ -0,0 +1,50 @@
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership. The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License. You may obtain a copy of the License at
+-- http://www.apache.org/licenses/LICENSE-2.0
+-- Unless required by applicable law or agreed to in writing,
+-- software distributed under the License is distributed on an
+-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+-- KIND, either express or implied. See the License for the
+-- specific language governing permissions and limitations
+-- under the License.
+
+-- ----------------------------------------------------------------------------------------------------------------
+-- DATABASE: column_type_test
+-- ----------------------------------------------------------------------------------------------------------------
+
+CREATE TABLE full_types (
+ id INT AUTO_INCREMENT NOT NULL,
+ tiny_c TINYINT,
+ tiny_un_c TINYINT UNSIGNED,
+ small_c SMALLINT,
+ small_un_c SMALLINT UNSIGNED,
+ int_c INTEGER ,
+ int_un_c INTEGER UNSIGNED,
+ big_c BIGINT,
+ varchar_c VARCHAR(255),
+ char_c CHAR(3),
+ float_c FLOAT,
+ double_c DOUBLE,
+ decimal_c DECIMAL(8, 4),
+ numeric_c NUMERIC(6, 0),
+ boolean_c BOOLEAN,
+ date_c DATE,
+ time_c TIME(0),
+ datetime3_c DATETIME(3),
+ datetime6_c DATETIME(6),
+ timestamp_c TIMESTAMP,
+ file_uuid BINARY(16),
+ PRIMARY KEY (id)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO full_types VALUES (
+ DEFAULT, 127, 255, 32767, 65535, 2147483647, 4294967295, 9223372036854775807,
+ 'Hello World', 'abc', 123.102, 404.4443, 123.4567, 345.6, true,
+ '2020-07-17', '18:00:22', '2020-07-17 18:00:22.123', '2020-07-17 18:00:22.123456', '2020-07-17 18:00:22',
+ unhex(replace('651aed08-390f-4893-b2f1-36923e7b7400','-',''))
+);
\ No newline at end of file
diff --git a/flink-connector-oracle-cdc/src/test/resources/ddl/inventory.sql b/flink-connector-oracle-cdc/src/test/resources/ddl/inventory.sql
new file mode 100644
index 000000000..2f1ff32ad
--- /dev/null
+++ b/flink-connector-oracle-cdc/src/test/resources/ddl/inventory.sql
@@ -0,0 +1,93 @@
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership. The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License. You may obtain a copy of the License at
+-- http://www.apache.org/licenses/LICENSE-2.0
+-- Unless required by applicable law or agreed to in writing,
+-- software distributed under the License is distributed on an
+-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+-- KIND, either express or implied. See the License for the
+-- specific language governing permissions and limitations
+-- under the License.
+
+-- ----------------------------------------------------------------------------------------------------------------
+-- DATABASE: inventory
+-- ----------------------------------------------------------------------------------------------------------------
+
+-- Create and populate our products using a single insert with many rows
+CREATE TABLE HR.products (
+ id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ name VARCHAR(255) NOT NULL,
+ description VARCHAR(512),
+ weight FLOAT
+);
+ALTER TABLE HR.products AUTO_INCREMENT = 101;
+
+INSERT INTO HR.products
+VALUES (default,"scooter","Small 2-wheel scooter",3.14),
+ (default,"car battery","12V car battery",8.1),
+ (default,"12-pack drill bits","12-pack of drill bits with sizes ranging from #40 to #3",0.8),
+ (default,"hammer","12oz carpenter's hammer",0.75),
+ (default,"hammer","14oz carpenter's hammer",0.875),
+ (default,"hammer","16oz carpenter's hammer",1.0),
+ (default,"rocks","box of assorted rocks",5.3),
+ (default,"jacket","water resistent black wind breaker",0.1),
+ (default,"spare tire","24 inch spare tire",22.2);
+
+-- Create and populate the products on hand using multiple inserts
+CREATE TABLE HR.products_on_hand (
+ product_id INTEGER NOT NULL PRIMARY KEY,
+ quantity INTEGER NOT NULL,
+ FOREIGN KEY (product_id) REFERENCES products(id)
+);
+
+INSERT INTO products_on_hand VALUES (101,3);
+INSERT INTO products_on_hand VALUES (102,8);
+INSERT INTO products_on_hand VALUES (103,18);
+INSERT INTO products_on_hand VALUES (104,4);
+INSERT INTO products_on_hand VALUES (105,5);
+INSERT INTO products_on_hand VALUES (106,0);
+INSERT INTO products_on_hand VALUES (107,44);
+INSERT INTO products_on_hand VALUES (108,2);
+INSERT INTO products_on_hand VALUES (109,5);
+
+-- Create some customers ...
+CREATE TABLE HR.customers (
+ id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ first_name VARCHAR(255) NOT NULL,
+ last_name VARCHAR(255) NOT NULL,
+ email VARCHAR(255) NOT NULL UNIQUE KEY
+) AUTO_INCREMENT=1001;
+
+
+INSERT INTO HR.customers
+VALUES (default,"Sally","Thomas","sally.thomas@acme.com"),
+ (default,"George","Bailey","gbailey@foobar.com"),
+ (default,"Edward","Walker","ed@walker.com"),
+ (default,"Anne","Kretchmar","annek@noanswer.org");
+
+-- Create some very simple orders
+CREATE TABLE HR.orders (
+ order_number INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ order_date DATE NOT NULL,
+ purchaser INTEGER NOT NULL,
+ quantity INTEGER NOT NULL,
+ product_id INTEGER NOT NULL,
+ FOREIGN KEY order_customer (purchaser) REFERENCES customers(id),
+ FOREIGN KEY ordered_product (product_id) REFERENCES products(id)
+) AUTO_INCREMENT = 10001;
+
+INSERT INTO HR.orders
+VALUES (default, '2016-01-16', 1001, 1, 102),
+ (default, '2016-01-17', 1002, 2, 105),
+ (default, '2016-02-18', 1004, 3, 109),
+ (default, '2016-02-19', 1002, 2, 106),
+ (default, '16-02-21', 1003, 1, 107);
+
+CREATE TABLE HR.category (
+ id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ category_name VARCHAR(255)
+);
\ No newline at end of file
diff --git a/flink-connector-oracle-cdc/src/test/resources/ddl/inventory_1.sql b/flink-connector-oracle-cdc/src/test/resources/ddl/inventory_1.sql
new file mode 100644
index 000000000..3578a942c
--- /dev/null
+++ b/flink-connector-oracle-cdc/src/test/resources/ddl/inventory_1.sql
@@ -0,0 +1,48 @@
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership. The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License. You may obtain a copy of the License at
+-- http://www.apache.org/licenses/LICENSE-2.0
+-- Unless required by applicable law or agreed to in writing,
+-- software distributed under the License is distributed on an
+-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+-- KIND, either express or implied. See the License for the
+-- specific language governing permissions and limitations
+-- under the License.
+
+-- ----------------------------------------------------------------------------------------------------------------
+-- DATABASE: inventory
+-- ----------------------------------------------------------------------------------------------------------------
+
+-- Create and populate our products using a single insert with many rows
+CREATE TABLE HR.products (
+ id INTEGER NOT NULL,
+ name VARCHAR(255) NOT NULL,
+ description VARCHAR(512),
+ weight FLOAT,
+ PRIMARY KEY(id)
+);
+ALTER TABLE HR.products ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
+-- Auto-generated SQL script #202106141039
+
+INSERT INTO HR.PRODUCTS (ID,NAME,DESCRIPTION,WEIGHT)
+ VALUES (101,'scooter','Small 2-wheel scooter',3.14);
+INSERT INTO HR.PRODUCTS (ID,NAME,DESCRIPTION,WEIGHT)
+ VALUES (102,'car battery','12V car battery',8.1);
+INSERT INTO HR.PRODUCTS (ID,NAME,DESCRIPTION,WEIGHT)
+ VALUES (103,'12-pack drill bits','12-pack of drill bits with sizes ranging from #40 to #3',0.8);
+INSERT INTO HR.PRODUCTS (ID,NAME,DESCRIPTION,WEIGHT)
+ VALUES (104,'hammer','12oz carpenters hammer',0.75);
+INSERT INTO HR.PRODUCTS (ID,NAME,DESCRIPTION,WEIGHT)
+ VALUES (105,'hammer','14oz carpenters hammer',0.875);
+INSERT INTO HR.PRODUCTS (ID,NAME,DESCRIPTION,WEIGHT)
+ VALUES (106,'hammer','16oz carpenters hammer',1.0);
+INSERT INTO HR.PRODUCTS (ID,NAME,DESCRIPTION,WEIGHT)
+ VALUES (107,'rocks','box of assorted rocks',5.3);
+INSERT INTO HR.PRODUCTS (ID,NAME,DESCRIPTION,WEIGHT)
+ VALUES (108,'jacket','water resistent black wind breaker',0.1);
+INSERT INTO HR.PRODUCTS (ID,NAME,DESCRIPTION,WEIGHT)
+ VALUES (109,'spare tire','24 inch spare tire',22.2);
\ No newline at end of file
diff --git a/flink-connector-oracle-cdc/src/test/resources/docker/setup.sh b/flink-connector-oracle-cdc/src/test/resources/docker/setup.sh
new file mode 100644
index 000000000..144e25fab
--- /dev/null
+++ b/flink-connector-oracle-cdc/src/test/resources/docker/setup.sh
@@ -0,0 +1,114 @@
+################################################################################
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+################################################################################
+
+#!/bin/sh
+
+mkdir /u01/app/oracle/oradata/recovery_area
+
+# Set archive log mode and enable GG replication
+ORACLE_SID=XE
+export ORACLE_SID
+#echo 'export PATH=$ORACLE_HOME/bin:$PATH' >> /etc/bash.bashrc
+export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
+
+
+# Create Log Miner Tablespace and User
+/u01/app/oracle/product/11.2.0/xe/bin/sqlplus sys/oracle@//localhost:1521/XE as sysdba <<- EOF
+ CREATE TABLESPACE LOGMINER_TBS DATAFILE '/u01/app/oracle/oradata/XE/logminer_tbs.dbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
+ exit;
+EOF
+
+/u01/app/oracle/product/11.2.0/xe/bin/sqlplus sys/oracle@//localhost:1521/XE as sysdba <<- EOF
+ CREATE USER dbzuser IDENTIFIED BY dbz DEFAULT TABLESPACE LOGMINER_TBS QUOTA UNLIMITED ON LOGMINER_TBS;
+
+
+ GRANT CREATE SESSION TO dbzuser;
+ GRANT SELECT ON V_$DATABASE TO dbzuser;
+ GRANT FLASHBACK ANY TABLE TO dbzuser;
+ GRANT SELECT ANY TABLE TO dbzuser;
+ GRANT SELECT_CATALOG_ROLE TO dbzuser;
+ GRANT EXECUTE_CATALOG_ROLE TO dbzuser;
+ GRANT SELECT ANY TRANSACTION TO dbzuser;
+ GRANT SELECT ANY DICTIONARY TO dbzuser;
+
+ GRANT CREATE TABLE TO dbzuser;
+ GRANT ALTER ANY TABLE TO dbzuser;
+ GRANT LOCK ANY TABLE TO dbzuser;
+ GRANT CREATE SEQUENCE TO dbzuser;
+
+ GRANT EXECUTE ON DBMS_LOGMNR TO dbzuser;
+ GRANT EXECUTE ON DBMS_LOGMNR_D TO dbzuser;
+ GRANT SELECT ON V_$LOGMNR_LOGS to dbzuser;
+ GRANT SELECT ON V_$LOGMNR_CONTENTS TO dbzuser;
+ GRANT SELECT ON V_$LOGFILE TO dbzuser;
+ GRANT SELECT ON V_$ARCHIVED_LOG TO dbzuser;
+ GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO dbzuser;
+ GRANT SELECT ON V_$LOGMNR_PARAMETERS TO dbzuser;
+ GRANT SELECT ON V_$LOG TO dbzuser;
+ GRANT SELECT ON V_$LOG_HISTORY TO dbzuser;
+
+ exit;
+EOF
+
+/u01/app/oracle/product/11.2.0/xe/bin/sqlplus sys/oracle@//localhost:1521/XE as sysdba <<- EOF
+ CREATE USER debezium IDENTIFIED BY dbz DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;
+ GRANT CONNECT TO debezium;
+ GRANT CREATE SESSION TO debezium;
+ GRANT CREATE TABLE TO debezium;
+ GRANT CREATE SEQUENCE to debezium;
+ ALTER USER debezium QUOTA 100M on users;
+ exit;
+EOF
+
+/u01/app/oracle/product/11.2.0/xe/bin/sqlplus sys/oracle@//localhost:1521/XE as sysdba <<- EOF
+
+ CREATE TABLE debezium.products (
+ ID INTEGER NOT NULL,
+ NAME VARCHAR(255) NOT NULL,
+ DESCRIPTION VARCHAR(512),
+ WEIGHT FLOAT,
+ PRIMARY KEY(ID)
+ );
+ CREATE TABLE debezium.category (
+ ID INTEGER NOT NULL,
+ CATEGORY_NAME VARCHAR(255),
+ PRIMARY KEY(ID)
+ );
+ ALTER TABLE debezium.products ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
+ ALTER TABLE debezium.category ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
+
+ INSERT INTO debezium.PRODUCTS (ID,NAME,DESCRIPTION,WEIGHT)
+ VALUES (101,'scooter','Small 2-wheel scooter',3.14);
+ INSERT INTO debezium.PRODUCTS (ID,NAME,DESCRIPTION,WEIGHT)
+ VALUES (102,'car battery','12V car battery',8.1);
+ INSERT INTO debezium.PRODUCTS (ID,NAME,DESCRIPTION,WEIGHT)
+ VALUES (103,'12-pack drill bits','12-pack of drill bits with sizes ranging from #40 to #3',0.8);
+ INSERT INTO debezium.PRODUCTS (ID,NAME,DESCRIPTION,WEIGHT)
+ VALUES (104,'hammer','12oz carpenters hammer',0.75);
+ INSERT INTO debezium.PRODUCTS (ID,NAME,DESCRIPTION,WEIGHT)
+ VALUES (105,'hammer','14oz carpenters hammer',0.875);
+ INSERT INTO debezium.PRODUCTS (ID,NAME,DESCRIPTION,WEIGHT)
+ VALUES (106,'hammer','16oz carpenters hammer',1.0);
+ INSERT INTO debezium.PRODUCTS (ID,NAME,DESCRIPTION,WEIGHT)
+ VALUES (107,'rocks','box of assorted rocks',5.3);
+ INSERT INTO debezium.PRODUCTS (ID,NAME,DESCRIPTION,WEIGHT)
+ VALUES (108,'jacket','water resistent black wind breaker',0.1);
+ INSERT INTO debezium.PRODUCTS (ID,NAME,DESCRIPTION,WEIGHT)
+ VALUES (109,'spare tire','24 inch spare tire',22.2);
+ exit;
+EOF
diff --git a/flink-connector-oracle-cdc/src/test/resources/log4j2-test.properties b/flink-connector-oracle-cdc/src/test/resources/log4j2-test.properties
new file mode 100644
index 000000000..b82a9606d
--- /dev/null
+++ b/flink-connector-oracle-cdc/src/test/resources/log4j2-test.properties
@@ -0,0 +1,28 @@
+################################################################################
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+################################################################################
+
+# Set root logger level to OFF to not flood build logs
+# set manually to INFO for debugging purposes
+rootLogger.level=INFO
+rootLogger.appenderRef.test.ref = TestLogger
+
+appender.testlogger.name = TestLogger
+appender.testlogger.type = CONSOLE
+appender.testlogger.target = SYSTEM_ERR
+appender.testlogger.layout.type = PatternLayout
+appender.testlogger.layout.pattern = %-4r [%t] %-5p %c - %m%n
diff --git a/flink-sql-connector-oracle-cdc/pom.xml b/flink-sql-connector-oracle-cdc/pom.xml
new file mode 100644
index 000000000..2b0c8700c
--- /dev/null
+++ b/flink-sql-connector-oracle-cdc/pom.xml
@@ -0,0 +1,78 @@
+
+
+
+
+ flink-cdc-connectors
+ com.alibaba.ververica
+ 1.3-SNAPSHOT
+
+ 4.0.0
+
+ flink-sql-connector-oracle-cdc
+
+
+
+ com.alibaba.ververica
+ flink-connector-oracle-cdc
+ ${project.version}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.1.1
+
+
+ shade-flink
+ package
+
+ shade
+
+
+ false
+
+
+ *:*
+
+
+
+
+ org.apache.kafka:*
+
+ kafka/kafka-version.properties
+ LICENSE
+
+ NOTICE
+ common/**
+
+
+
+
+
+
+
+
+
+
diff --git a/flink-sql-connector-oracle-cdc/src/main/java/com/alibaba/ververica/cdc/connectors/oracle/DummyDocs.java b/flink-sql-connector-oracle-cdc/src/main/java/com/alibaba/ververica/cdc/connectors/oracle/DummyDocs.java
new file mode 100644
index 000000000..9d15a4cd3
--- /dev/null
+++ b/flink-sql-connector-oracle-cdc/src/main/java/com/alibaba/ververica/cdc/connectors/oracle/DummyDocs.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.alibaba.ververica.cdc.connectors.oracle;
+
+/** This is used to generate a dummy docs jar for this module to pass OSS repository rule. */
+public class DummyDocs {}
diff --git a/flink-sql-connector-oracle-cdc/src/main/resources/META-INF/NOTICE b/flink-sql-connector-oracle-cdc/src/main/resources/META-INF/NOTICE
new file mode 100644
index 000000000..420bf5931
--- /dev/null
+++ b/flink-sql-connector-oracle-cdc/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,6 @@
+flink-sql-connector-oracle-cdc
+Copyright 2020 Ververica Inc.
+
+This project bundles the following dependencies under the Apache Software License 2.0. (http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+- org.apache.kafka:kafka-clients:2.5.0
diff --git a/pom.xml b/pom.xml
index c5ae2d12a..bc290947f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,10 +37,13 @@ under the License.
flink-connector-test-util
flink-connector-mysql-cdc
flink-connector-postgres-cdc
+ flink-connector-oracle-cdc
flink-connector-mongodb-cdc
flink-sql-connector-mysql-cdc
flink-sql-connector-postgres-cdc
flink-sql-connector-mongodb-cdc
+ flink-sql-connector-postgres-cdc
+ flink-sql-connector-oracle-cdc
flink-format-changelog-json
@@ -508,4 +511,4 @@ under the License.
-
\ No newline at end of file
+