Browse Source

优化逻辑

穿云 3 months ago
parent
commit
bfff6fb39b

+ 25 - 10
dbsyncer-connector/dbsyncer-connector-oracle/src/main/java/org/dbsyncer/connector/oracle/logminer/LogMinerHelper.java

@@ -59,19 +59,14 @@ public class LogMinerHelper {
 
     public static List<LogFile> getOnlineLogFilesForOffsetScn(Connection connection, BigInteger offsetScn) throws SQLException {
         List<LogFile> redoLogFiles = new ArrayList<>();
-
-        String onlineLogQuery = "SELECT MIN(F.MEMBER) AS FILE_NAME, L.NEXT_CHANGE# AS NEXT_CHANGE, F.GROUP#, L.FIRST_CHANGE# AS FIRST_CHANGE, L.STATUS " +
-                " FROM V$LOG L, V$LOGFILE F " +
-                " WHERE F.GROUP# = L.GROUP# AND L.NEXT_CHANGE# > 0 " +
-                " GROUP BY F.GROUP#, L.NEXT_CHANGE#, L.FIRST_CHANGE#, L.STATUS ORDER BY 3";
-
+        String onlineLogQuery = "SELECT MIN(F.MEMBER) AS FILE_NAME, L.STATUS, L.FIRST_CHANGE# AS FIRST_CHANGE, L.NEXT_CHANGE# AS NEXT_CHANGE FROM V$LOG L, V$LOGFILE F WHERE F.GROUP# = L.GROUP# AND L.NEXT_CHANGE# > 0 GROUP BY F.GROUP#, L.NEXT_CHANGE#, L.FIRST_CHANGE#, L.STATUS";
         try (PreparedStatement s = connection.prepareStatement(onlineLogQuery)) {
             try (ResultSet rs = s.executeQuery()) {
                 while (rs.next()) {
-                    String fileName = rs.getString(1);
-                    BigInteger nextChangeNumber = new BigInteger(rs.getString(2));
-                    BigInteger firstChangeNumber = new BigInteger(rs.getString(4));
-                    String status = rs.getString(5);
+                    String fileName = rs.getString(1);// FILE_NAME
+                    String status = rs.getString(2); // STATUS
+                    BigInteger firstChangeNumber = new BigInteger(rs.getString(3));//FIRST_CHANGE
+                    BigInteger nextChangeNumber = new BigInteger(rs.getString(4));//NEXT_CHANGE
                     LogFile logFile = new LogFile(fileName, firstChangeNumber, nextChangeNumber, "CURRENT".equalsIgnoreCase(status));
                     // 添加Current Redo || scn 范围符合的
                     if (logFile.isCurrent() || logFile.getNextScn().compareTo(offsetScn) >= 0) {
@@ -83,6 +78,26 @@ public class LogMinerHelper {
         return redoLogFiles;
     }
 
+    public static List<LogFile> get10GOnlineLogFilesForOffsetScn(Connection connection, BigInteger offsetScn) throws SQLException {
+        List<LogFile> redoLogFiles = new ArrayList<>();
+        String onlineLogQuery = "SELECT MIN(F.MEMBER) AS FILE_NAME, L.STATUS, L.FIRST_CHANGE# AS FIRST_CHANGE FROM V$LOG L, V$LOGFILE F WHERE F.GROUP# = L.GROUP# GROUP BY F.GROUP#, L.FIRST_CHANGE#, L.STATUS";
+        try (PreparedStatement s = connection.prepareStatement(onlineLogQuery)) {
+            try (ResultSet rs = s.executeQuery()) {
+                while (rs.next()) {
+                    String fileName = rs.getString(1);// FILE_NAME
+                    String status = rs.getString(2); // STATUS
+                    BigInteger firstChangeNumber = new BigInteger(rs.getString(3));//FIRST_CHANGE
+                    LogFile logFile = new LogFile(fileName, firstChangeNumber, null, "CURRENT".equalsIgnoreCase(status));
+                    // 添加Current Redo || scn 范围符合的
+                    if (logFile.isCurrent() || logFile.getFirstScn().compareTo(offsetScn) >= 0) {
+                        redoLogFiles.add(logFile);
+                    }
+                }
+            }
+        }
+        return redoLogFiles;
+    }
+
     public static List<LogFile> getArchivedLogFilesForOffsetScn(Connection connection, BigInteger offsetScn) throws SQLException {
         String archiveLogsQuery = String.format("SELECT NAME AS FILE_NAME, NEXT_CHANGE# AS NEXT_CHANGE, FIRST_CHANGE# AS FIRST_CHANGE FROM V$ARCHIVED_LOG " +
                 "WHERE NAME IS NOT NULL AND ARCHIVED = 'YES' " +

+ 1 - 1
dbsyncer-parser/src/main/java/org/dbsyncer/parser/model/SystemConfig.java

@@ -72,7 +72,7 @@ public class SystemConfig extends ConfigModel {
     /**
      * 是否启用字段解析器
      */
-    private boolean enableSchemaResolver = true;
+    private boolean enableSchemaResolver;
 
     public int getExpireDataDays() {
         return expireDataDays;