AE86 5 yıl önce
ebeveyn
işleme
65ac2b93fd

+ 1 - 1
dbsyncer-connector/pom.xml

@@ -44,7 +44,7 @@
         <!-- oracle-driver -->
         <dependency>
             <groupId>com.oracle</groupId>
-            <artifactId>ojdbc14</artifactId>
+            <artifactId>ojdbc6</artifactId>
         </dependency>
 
         <!-- sqlserver-driver -->

+ 32 - 0
dbsyncer-listener/src/main/java/org/dbsyncer/listener/oracle/OracleExtractor.java

@@ -0,0 +1,32 @@
+package org.dbsyncer.listener.oracle;
+
+import org.dbsyncer.connector.config.DatabaseConfig;
+import org.dbsyncer.listener.AbstractExtractor;
+import org.dbsyncer.listener.ListenerException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @version 1.0.0
+ * @Author AE86
+ * @Date 2020-05-12 21:14
+ */
+public class OracleExtractor extends AbstractExtractor {
+
+    private final Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Override
+    public void start() {
+        try {
+            final DatabaseConfig config = (DatabaseConfig) connectorConfig;
+        } catch (Exception e) {
+            logger.error("启动失败:{}", e.getMessage());
+            throw new ListenerException(e);
+        }
+    }
+
+    @Override
+    public void close() {
+    }
+
+}

+ 75 - 0
dbsyncer-listener/src/main/java/org/dbsyncer/listener/oracle/dcn/OracleRemoteClient.java

@@ -0,0 +1,75 @@
+package org.dbsyncer.listener.oracle.dcn;
+
+import oracle.jdbc.OracleStatement;
+import oracle.jdbc.dcn.*;
+import oracle.jdbc.driver.OracleConnection;
+import oracle.jdbc.pool.OracleDataSource;
+import oracle.sql.ROWID;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.sql.SQLException;
+import java.util.Properties;
+
+/**
+ * @version 1.0.0
+ * @Author AE86
+ * @Date 2020-06-08 21:53
+ */
+public class OracleRemoteClient {
+
+    private final Logger logger = LoggerFactory.getLogger(getClass());
+
+    public void init() throws SQLException {
+        OracleDataSource dataSource = new OracleDataSource();
+        dataSource.setUser("admin");
+        dataSource.setPassword("admin");
+        dataSource.setURL("jdbc:oracle:thin:@127.0.0.1:1521:orcl");
+        final OracleConnection conn = (OracleConnection) dataSource.getConnection();
+        Properties prop = new Properties();
+        prop.setProperty(OracleConnection.DCN_NOTIFY_ROWIDS, "true");
+        DatabaseChangeRegistration dcn = conn.registerDatabaseChangeNotification(prop);
+
+        dcn.addListener(new DataBaseChangeListener());
+
+        // 模拟请求
+        OracleStatement statement = (OracleStatement) conn.createStatement();
+        statement.setDatabaseChangeRegistration(dcn);
+        statement.executeQuery("select * from USER t where 1=2");
+        statement.close();
+        conn.close();
+
+        logger.info("数据库更改通知开启");
+    }
+
+    final class DataBaseChangeListener implements DatabaseChangeListener {
+
+        @Override
+        public void onDatabaseChangeNotification(DatabaseChangeEvent event) {
+            TableChangeDescription[] tds = event.getTableChangeDescription();
+            logger.info("=============================");
+
+            logger.info("'TableChangeDescription'(数据表的变化次数):{}", tds.length);
+            for (TableChangeDescription td : tds) {
+                logger.info("数据库表id:{}", td.getObjectNumber());
+                logger.info("数据表名称:{}", td.getTableName());
+
+                // 获得返回的行级变化描述通知 行id、影响这一行的DML操作(行是插入、更新或删除的一种)
+                RowChangeDescription[] rds = td.getRowChangeDescription();
+                for (RowChangeDescription rd : rds) {
+                    RowChangeDescription.RowOperation rowOperation = rd.getRowOperation();
+                    logger.info("数据库表行级变化:", rowOperation.toString());
+
+                    ROWID rowid = rd.getRowid();
+                    logger.info(rowid.stringValue());
+                }
+            }
+        }
+    }
+
+    public static void main(String[] args) throws SQLException {
+        OracleRemoteClient client = new OracleRemoteClient();
+        client.init();
+    }
+
+}

+ 8 - 10
pom.xml

@@ -44,7 +44,7 @@
         <commons-dbcp.version>1.4</commons-dbcp.version>
         <commons-pool.version>1.6</commons-pool.version>
         <lucene.version>7.6.0</lucene.version>
-        <oracle.version>10.2.0.4.0</oracle.version>
+        <ojdbc6.version>11.2.0.4.0-atlassian-hosted</ojdbc6.version>
         <mysql.version>5.1.40</mysql.version>
         <sqljdbc.version>1.2</sqljdbc.version>
         <json.version>20090211</json.version>
@@ -147,6 +147,13 @@
                 <version>${mysql.version}</version>
             </dependency>
 
+            <!-- oracle-driver -->
+            <dependency>
+                <groupId>com.oracle</groupId>
+                <artifactId>ojdbc6</artifactId>
+                <version>${ojdbc6.version}</version>
+            </dependency>
+
             <!-- mvn install:install-file -DgroupId=microsoft -DartifactId=sqljdbc
                 -Dversion=1.2 -Dpackaging=jar -Dfile=D:\sqljdbc-1.2.jar -->
             <!-- sqlserver-driver -->
@@ -156,15 +163,6 @@
                 <version>${sqljdbc.version}</version>
             </dependency>
 
-            <!-- mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14
-                -Dversion=10.2.0.4.0 -Dpackaging=jar -Dfile=D:\ojdbc14-10.2.0.4.0.jar -->
-            <!-- oracle-driver -->
-            <dependency>
-                <groupId>com.oracle</groupId>
-                <artifactId>ojdbc14</artifactId>
-                <version>${oracle.version}</version>
-            </dependency>
-
             <dependency>
                 <groupId>junit</groupId>
                 <artifactId>junit</artifactId>