diff --git a/debezium-connector-jdbc/src/main/java/io/debezium/connector/jdbc/JdbcChangeEventSink.java b/debezium-connector-jdbc/src/main/java/io/debezium/connector/jdbc/JdbcChangeEventSink.java index d1b09a108..42258ceb4 100644 --- a/debezium-connector-jdbc/src/main/java/io/debezium/connector/jdbc/JdbcChangeEventSink.java +++ b/debezium-connector-jdbc/src/main/java/io/debezium/connector/jdbc/JdbcChangeEventSink.java @@ -326,7 +326,7 @@ private void writeTruncate(String sql, SinkRecordDescriptor record) throws SQLEx final Transaction transaction = session.beginTransaction(); try { LOGGER.trace("SQL: {}", sql); - final NativeQuery query = session.createNativeQuery(sql); + final NativeQuery query = session.createNativeQuery(sql, Object.class); query.executeUpdate(); transaction.commit(); diff --git a/debezium-connector-jdbc/src/main/java/io/debezium/connector/jdbc/dialect/db2/Db2DatabaseDialect.java b/debezium-connector-jdbc/src/main/java/io/debezium/connector/jdbc/dialect/db2/Db2DatabaseDialect.java index 010c317dc..d7b5d4a11 100644 --- a/debezium-connector-jdbc/src/main/java/io/debezium/connector/jdbc/dialect/db2/Db2DatabaseDialect.java +++ b/debezium-connector-jdbc/src/main/java/io/debezium/connector/jdbc/dialect/db2/Db2DatabaseDialect.java @@ -190,11 +190,13 @@ protected String resolveColumnNameFromField(String fieldName) { @Override public String getTruncateStatement(TableDescriptor table) { - String truncateStatement = super.getTruncateStatement(table); + // For some reason the TRUNCATE statement doesn't work for DB2 even if it is supported from 9.7 https://www.ibm.com/support/pages/apar/JR37942 + // The problem verifies with Hibernate, plain JDBC works good. + // Qlik uses the below approach https://community.qlik.com/t5/Qlik-Replicate/Using-Qlik-for-DB2-TRUNCATE-option/td-p/1989498 final SqlStatementBuilder builder = new SqlStatementBuilder(); - builder.append(truncateStatement); - builder.append(" IMMEDIATE"); - + builder.append("ALTER TABLE "); + builder.append(getQualifiedTableName(table.getId())); + builder.append(" ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE"); return builder.build(); } }