View Issue Details

IDProjectCategoryView StatusLast Update
0005736SymmetricDSBugpublic2024-12-31 18:15
Reporterqii Assigned Topmarzullo  
Prioritynormal 
Status closedResolutionno change required 
Product Version3.12.12 
Summary0005736: the outgoing batch sync 001 -443873 faild [PROTOCOL ,-888]
Descriptionsymmertic version :3.12
database version : oracle 11.2

CREATE TABLE MYCLOB(
    ID NUMBER(38) NOT NULL PRIMARY KEY,
    DESCRIPTION navchar2(4000),
    CONTENT navchar2(500),
);

vi Test.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class Test {
    public static void main(String[] args) throws Exception {
        int count = 0;
        Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection c = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe", "elong", "secret");
        PreparedStatement s = c.prepareStatement("insert into myclob values (?, ?)");
        s.setInt(1, 2);
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 3980; i++) {
            sb.append("a");
        }
        s.setString(2, sb.toString());
        StringBuilder sb2 = new StringBuilder();
        for (int i = 0; i < 50; i++) {
            sb2.append("a");
        }
        s.setString(3, sb2.toString());
        count = s.executeUpdate();
        System.out.println("Updated " + count + " rows");
        s.close();
        c.close();
    }
}

sync to target database error:faild [PROTOCOL ,-888] and retry is faild.
I found in sym_data.row_data.length>4000 and run sql:
"select dbms_lob.substr(d.row_data, 4000, 1 ) from sym_data where data_id = id" is successed. write in temp file outgoingbatchId.DONE error.
I changed OracleSymmetricDialect.massageDataExtractionSql():
sql = sql.replace("d.row_data", "dbms_lob.substr(d.row_data,4000, 1 )") replaced by :
sql = sql.replace("d.row_data", "dbms_lob.substr(d.row_data, length(d.row_data), 1 )") , it cause ORA-06502 and retry sync data success
TagsNo tags attached.

Activities

cquamme

2023-03-15 17:18

developer   ~0002294

You will need to set contains_big_lob = 1 on the channel.

qii

2023-03-16 08:49

reporter   ~0002299

contains_big_lob = 1 Spend a lot of time, and most time row_data <4000, I want to dbms_lob.substr(d.row_data,4000, 1 ) in most time ,and when row_data >4000 used d.row_data

pmarzullo

2023-03-22 17:25

developer   ~0002300

Can you set the contains_big_lob back to 0, cause the Protocol error again, and attach the log?

qii

2023-03-29 07:38

reporter   ~0002301

sorry. log is in another machine. I can not get it. u can use method to reappear error.

Issue History

Date Modified Username Field Change
2023-03-14 03:37 qii New Issue
2023-03-15 17:18 cquamme Note Added: 0002294
2023-03-15 17:19 cquamme Status new => feedback
2023-03-16 08:49 qii Note Added: 0002299
2023-03-16 08:49 qii Status feedback => new
2023-03-22 17:25 pmarzullo Note Added: 0002300
2023-03-22 17:26 pmarzullo Assigned To => pmarzullo
2023-03-22 17:26 pmarzullo Status new => feedback
2023-03-29 07:38 qii Note Added: 0002301
2023-03-29 07:38 qii Status feedback => assigned
2024-12-31 18:15 emiller Status assigned => closed
2024-12-31 18:15 emiller Resolution open => no change required