SymmetricDS Pro 3.14 release includes 38 features, 132 improvements, and 195 bug fixes.

Security Fixes

Issue Summary Severity


Use PKCS12 for keystore by default



Parameter to disable logging of application data from a batch error



Apache commons-text version 1.9 security vulnerability



Downloading Incoming/Outgoing batches does not Decrypt (Pro)


Performance Fixes

Issue Summary Severity


Routing reader may use multiple queries for a large number of gaps


What’s New

Snowflake Change Data Capture

Snowflake support was expanded to include change data capture using Snowflake’s table streams. New configuration items were added for converting relational data into JSON documents suitable for Snowflake. Table groups identify which tables to send together in the JSON document, so that a change in one table will bring related rows into the document. Table group hierarchies arrange the tables into a parent-child hierarchy using relational join information.

SingleStore Replication

SingleStore database was added as a bi-directional replication platform. Change data capture is based on log mining of SingleStore’s audit log.

MySQL Log-based Replication

MySQL support was expanded to include log mining in additional to trigger-based change capture. It is based on parsing statements from the binlog provided by MySQL 5.0 and newer.

Amazon S3 Integration

Amazon S3 can now be used as a target endpoint for receiving change data as comma-separated value (CSV) files. Amazon Web Services (AWS), such as Relational Database Services (RDS), Lambda, and Cloud Watch have integration with S3 to use data for loading databases, driving business logic, and monitoring data events.

SQL Server BCP Bulk Loader

The bulk loader for SQL-Server is now based on the BCP (bulk copy program) command line utility. The BCP automatically handles transfer of data files to a remote server, which supports both SQL Server and Azure SQL Server.

UI Improvements

The web console was enhanced to improve the user’s flow of connecting to databases, enabling change capture, and sending initial loads. Notification messages for data replication events can be customized with a screen that edits a notification template. Screens now support renaming the ID of an item being edited or using a “Save As Copy” button to copy it as a new item. Screens for table triggers and table routing were modified to use JDBC batch mode for faster save performance. New user settings include display mode, preferred date and time format, and timezone.

Operational Improvements

For large deployments, new endpoints can be scheduled to register automatically. Registration works across push links, in addition to pull links. Initial loads can now be monitored at the endpoint with the same level of detail that was previously only available at the source. Creation of tables now includes fractional second precision of time and timestamp columns. Routing query performance was improved when a large number of gaps is present. SQL-Server and Sybase trigger procedures were optimized for the case of a primary key changing, and a parameter of trigger.use.insert.delete.for.primary.key.changes was added to revert to the old behavior.


New Features

3.14.0 (Pro)
5076 - S3 Dialect Implementation
5163 - Add Test Database button and Database Performance dialog to Manage Nodes screen
5172 - Add push registration screens
5174 - Add TLS certificate expiration reminder
5176 - Add monitor types for license expiration, certificate expiration and license usage
5188 - Settings button with display options
5197 - Add warning and dialog for tables that lack a primary key
5202 - Add Manage Incoming Loads screen
5206 - Add SQL Server bcp bulk loader
5212 - Improve how node setup wizard handles load only nodes and bulk loaders
5218 - Add console events for viewing batches
5229 - Log miner for MySQL database
5295 - Relational to JSON writer with nesting using group of tables
5338 - Flag for If Batch Was Bulk Loaded and Showing Percentage of Batches Bulk Loaded in a Load
5374 - Add more information and an option to take ownership when a node fails to claim exclusive ownership of a database

5178 - Push registration to nodes when group links indicate push
5180 - Schedule registration of a node for a window of time

3.14.1 (Pro)
5420 - In the Auto Create Transforms dialog, let the user choose whether all columns should be mapped for them

5389 - Implement conflict_win_count and conflict_lose_count columns in sym_outgoing_batch and sym_incoming_batch

3.14.2 (Pro)
5448 - Add Auto Create Group dialog
5478 - Add "Send → Send …​" option to Manage Nodes screen

5427 - Creating a Parameter That, Upon Registration, Will Automatically Create A Group Link Between Nodes if None Exist

3.14.3 (Pro)
3570 - Allow create of SymmetricDS console users through either symadmin or rest service
5516 - Add initial.load.reload.select.override parameter and add associated screen to Load Data Wizard
5538 - Integrity test that checks configuration and environment
5564 - Clustered custom job
5567 - Add Import URL button to the Authorities tab of the Manage Security screen

3313 - Propagate default GUID from MSSQL to SQLITE
5524 - Adding New Monitor Types For OS Load Average and OS Open File Handles
5551 - Add parameters that specify how to sync default values
5570 - Add engine name and server name variables to notification templates

5652 - Improve SQL Server DDL triggers and add DDL triggers for Oracle and Postgres

3.14.5 (Pro)
5643 - Requesting a full load in load wizard will not cancel existing loads to same target node if reload select is populated
5661 - Load Data Wizard default setting for send or receive check box
5694 - Pre-populate extension script based on interface name and extension type

3.14.6 (Pro)
5703 - Log based setups can now choose another platform for runtime tables other than H2
5704 - DB2 iSeries AS400 support for log / journal based capture
5726 - Add support for Progress OpenEdge databases


3.14.0 (Pro)
3805 - Allow Notification Email Template to be Modified Through User Interface
3946 - Update Load Data wizard to be like the Auto Create Table Triggers wizard
4795 - Improve router expression editor
5112 - Kafka Advanced Settings to include ability to specify kafkaclient properties
5142 - Delete router from Configure → Router screen is slow
5148 - Faster save performance for Configure → Table Triggers and Routing screens
5149 - Improve and add filters on Configure Table Triggers and Configure Table Routing screens
5161 - Labels on Health panel should link to the relevant screens
5182 - Improve grid on Manage Nodes screen
5183 - Improve node registration panel
5184 - Include tables in side-by-side documentation
5186 - Add Spotless plugin to SymmetricDS Pro
5187 - Add Overrides column to Configure Parameters grid
5189 - Improve TriggerRouterScreen in quick config wizard
5222 - Improve quick config wizard when opened from Configure Table Triggers screen
5226 - Improve how the router form handles Target Table, Target Catalog, and Target Schema fields
5228 - Make snapshot age more apparent on the Help Support screen
5241 - Log license validation error when license error occurs
5244 - Hide "Setup bulk loading" checkbox if not on registration server
5270 - Better descriptions of DB import options
5276 - Add option to Data Load Wizard to both create/alter tables and truncate tables
5281 - Snowflake Log Mining Functionality
5283 - Add tables from console-schema.xml to pro user guide
5284 - Check the hostname and the local_infile variable when setting up a MySQL node with bulk loading enabled
5288 - Make it possible to ignore a row from an outgoing batch that is part of a load
5292 - Make error messages more obvious on Manage Installed Triggers screen
5293 - Improve how metadata is fetched for engines that are on the same instance
5302 - Improve first-time setup experience
5307 - Add a warning to the Manage Outgoing Loads screen when a channel in use is disabled
5328 - Add filters to Auto Create Table Routing and Auto Create File Routing dialogs
5344 - Documentation for Bulk Loading
5363 - Database test runs on controller node instead of node selected
5369 - Make failure message easier to read on failed engines screen

2972 - Registration order of nodes should not matter
3941 - Data gap route reader could use multiple queries when exceeding max gaps
4723 - Send column with Oracle DATE type to PostgreSQL
4724 - Send column with timestamp datatype from PostgreSQL to PostgreSQL
5138 - Build a cache manager to centralize the handling of data caches
5157 - Sybase and SQL Server update trigger should be made more efficient generating sym_data records when primary keys are changed
5198 - Clean up the consistent use of table constants for registration, trigger installation, extract, and export
5203 - Sync incoming load details to target node (table_reload_status, extract_request)
5210 - Routing reader may use multiple queries for a large number of gaps
5238 - Bulk loaders should report missing table
5265 - Update drivers, modules, and libraries
5269 - Variables of source catalog/schema names for use in target catalog/schema fields in routing
5278 - Alphabetize list of tables in user guide
5280 - Table DDL with timestamp and fractional second precision
5309 - Prepare for Gradle upgrade to version 8
5351 - Use PKCS12 for keystore by default
5353 - Add gpg code signing to jar files
5364 - Always execute shutdown hooks, even for embedded and war deployments
5376 - Parameter to disable logging of application data from a batch error

3.14.1 (Pro)
3490 - Change sym_channel.reload_flag to 0/1 when its used by sym_trigger.channel_id/reload_channel_id
3554 - Postgres bulk loader throws error if more columns in source than target
4008 - Web console "signing out" forever when database not available
5377 - Manage Load Screens Show When Batch Is In Error and Ignoring A Row Directly From Manage Batch Screens
5402 - Improved support for MSSQL Azure Managed Instance
5426 - Allow multi-selection when editing transform columns
5428 - SQL Server Azure Managed Instance Detection while setting up bulk loading

140 - Check to see that the SymmetricDS tables are created to use the Innodb storage engine on MySQL.
5415 - Detection of MSSQL Azure Managed Instance
5416 - Allow users to disable spatial data type support functions

3.14.2 (Pro)
5451 - Always create a default router after creating a new group link
5454 - Connect Database Wizard Registration URL Screen Fixes
5458 - Router Expressions Now A Required Field for Routers That Won’t Work Without Them
5462 - Adding Command and Variable Dropdowns To "Enter SQL to Send" Screen and Parameter Editing Screens With SQL
5466 - Push registration, when sync URL is empty for registering node, should allow Pull registration to recover from empty sync URL
5467 - Failed login notifications should close by themselves
5469 - Adding Built-in Variables and Data Variables Dropdowns on "Enter BSH Script to Send" Screen
5473 - Wizard screens with TwinColSelect components should have scrollbars on the components instead of the window
5475 - Outgoing and incoming load screens are slow
5479 - Installer should make control center exit
5480 - If installer stops service, then installer should start service when done

5431 - Install triggers on registration server before configuration is complete
5433 - Sync triggers when parameters change that affect triggers
5440 - Change parameter treat.binary.as.lob.enabled to default to false
5449 - Add SOURCE_NODE_ID_FROM_DATA to VariableColumnTransform to allow using the source_node_id from the data
5450 - Routing default batch algorithm protection against large transactions
5453 - Backup keystore before saving it
5459 - Adding Log Info For Queries for Lookup Table Routers
5464 - Parameter to use old conflict pk detect and fallback
5476 - Ability to disable sync triggers when sync on incoming is enabled
5481 - Cast TEXT types in MS SQL to VARCHAR for SymmetricDS tables
5483 - Cast TEXT to VARCHAR for all tables
5486 - Ignore missing tables on config channel
5487 - Support snapshot fixes
5492 - Table reload request with "where" keyword gets error
5496 - Cast varchar to nvarchar
765 - dbexport / dbimport should support oracle virtual columns

3.14.3 (Pro)
3939 - During Uninstall add option to remove nodes in database
5482 - Adding Ability to Set Privileges To Determine Which Type of Roles Can Choose Specific Criteria in Data Load Wizard
5548 - Get rid of "<Not Specified>" option when selecting tables in the Load Data Wizard
5552 - Prevent adding same node multiple times locally hosted
5572 - Oracle Log Miner to omit changes for the 'APPLSYS' user
5576 - Clear grid selection when switching to a different Configure screen
5609 - Replace deprecated cacls command with icacls command

1960 - Service start script always waits for 5s
5515 - When installing service for systemd, make sure to specify absolute path to java executable when creating systemd control file
5519 - Updating KafkaDataWriter to work with Filters
5520 - Acknowledgement gets null SQL message
5526 - Default max batch to send as 10
5535 - Improve how default values are handled when syncing DDL cross-platform
5536 - Add support for Postgres' inet, cidr, macaddr and macaddr8 data types
5547 - Treat any default value that contains "()" as a function
5553 - Allow spaces in values within value map column transform expression
5558 - Create table without defaults if in error
5563 - Add functionality to symadmin export-sym-tables to export alters when upgrading
5583 - Service wrapper wait for "started" message instead of 5 second timeout
5604 - Check sync URL ends with engine name
5605 - Parameter that alters table case should be for cross platform only
5606 - CPU monitor top threads should ignore threads waiting on I/O

3.14.4 (Pro)
5620 - Warning from attempting to access user guide
5634 - Ensure that SQL Server log miner always captures deletes in foreign key order

4424 - Log monitor fails to insert because of duplicate key when logs are shared across instances of a node
5610 - SqlAnywhere support for v. 12 and higher
5630 - When deleting FK child rows during conflict resolution and old_data is null, query for the parent row on the target
5631 - Full load request does not support a reload select statement
5648 - Add "open registration" call to REST service
5650 - Problems replicating DDL to another node with the same database type but different database version

3.14.5 (Pro)
5666 - Azure Managed Instance Bulk Loading hash azure tokens for blob storage and credentials recreation
5684 - Allow interface name to be specified when creating/editing a Java extension

5636 - Only cancel a full load in progress if the reload select is empty
5662 - Snapshot util too slow for large multi-tenant deployment
5663 - Add table reload request to REST service
5671 - Bring back java routers
5673 - Sync triggers fails with deadlock on SQL-Server
5675 - Bidirectional sync causes need for trigger to be re-built on target side if table does not exist

3.14.6 (Pro)
5725 - SetupDatabaseScreen Database Type drop down sorting change

5720 - sym_node trigger should capture changes even if auto.sync.configuration is set to false
5728 - AbstractSymmetricEngine.isConfigured() should use the cache when querying for sym_node table
5742 - Table sorting does not need to include sym tables
5747 - Read max-size VARCHAR columns as LONGVARCHAR columns on H2

Bug Fixes

3.14.0 (Pro)
4665 - On configure screens, add "Save as Copy" button and allow editing of ID
5139 - Reconnecting node missing registration URL
5143 - On refresh of nodes panel, expand/collapse indicator is wrong
5237 - SQL Explorer queries on SQLite get IllegalStateException
5247 - SQL Server Date columns are being converted to DateTime
5311 - SingleStore Gives Trigger-Based as a Configuration Mode, But Does Not Currently Support Trigger-Based
5336 - Snowflake Databases Fail to Bulk Load
5348 - MySQL Fails to Bulk Load on Windows
5352 - collectionSchema cannot be null — while parsing sql insert Issue With Oracle Log Mining and Oracle Permissions
5365 - Trigger Router Screen in Add Table(s) Wizard Fallbacks to Default Node

2180 - H2 timestamp format creates conflict against ORACLE timestamp format
2261 - Schema from Postgres outputs TIMESTAMPTZ that is not compatible with other databases
3724 - Conflict detection with Timestamps between DB2 and Derby
3778 - Send table fails when sending H2 Timestamp to MySQL
3962 - Oracle’s TIMESTAMP with Time Zone doesn’t map to MariaDB
3963 - char(n) and nchar(n) where n>255 is valid in oracle but maps to invalid types in MariaDB
4298 - Sycing schemas from MSSQL with column type CHAR(400) to MySQL fails
4525 - Database name with special character like minus sign, fails to create trigger
5122 - Wrong conversion from mssql datetime(7) to mysql/mariadb
5239 - Conflict resolution doesn’t work if timestamp is in PK and different fractional second precision between databases
5243 - Change documentation on outgoing batch errors to set the status to 'IG' instead of 'OK' so target will get notified
5304 - Snapshot Fails to Find SingleStore Enum
5305 - SingleStore Snapshot: Failed to execute SQL Error
5306 - SingleStore Snapshot: 'Table 'sym_outgoing_batch' doesn’t exist'
5308 - Unable to Retrieve Database Time for Load-Only and Log-Based

3.14.1 (Pro)
3702 - Dashboard Setting’s Preview pane doesn’t correctly refresh when you add components that cause a new row
3947 - Dashboard configure is inaccurate for multiple views of same view
4406 - Logging in says "Logging Off" after selecting Clear Error then restarting instance
5391 - Settings missing from console-service-settings.json can cause NPEs
5396 - Postgres bulk loader skips SQL event if table is missing
5403 - Missing PK warning doesn’t go away if the related trigger is deleted
5407 - UniqueKeyException when bulk editing trigger routers
5408 - Interrupt button disables and selection doesn’t persist on Manage Processes screen
5409 - NPE on Bulk Loader screen of Connect Database Wizard when setting up a SQL Server node
5410 - Cancel load and some batches continue to load
5411 - After installing SwaggerUI, engine won’t start
5429 - Node registering over push is not sent config for professional tables

1282 - MySQL outputs schema with DEFAULT '0000-00-00' that is not compatible
1421 - DbFill error arithmetic overflow error with money data type
1453 - sym tables created in mysql should use innodb engine
2821 - dbcompare attempts to insert null into "not null default …​" field
3419 - MS SQL → SQLite, don’t translate "NEXT VALUE FOR" default value
3960 - NVARCHAR2() maps incorrectly to VARCHAR() when mapping from Oracle to MariaDB
3961 - Oracle XMLTYPE incorrectly mapped to invalid SQL Type SQLXML in MariaDB
3964 - Oracle’s REAL datatype should map to DOUBLE in MariaDB, not FLOAT
3965 - Oracle’s LONG type is incorrectly mapped to MariaDB’s MEDIUMTEXT. Should be LONGTEXT
3966 - Oracle’s CLOB (and NCLOB) type incorrectly maps to MariaDB’s MEDIUMTEXT
3999 - Unable to translate default column for (new sequentialid()) (very easy fix)
4001 - Default value being passed as string for MS Sql Server
4090 - Firebird ddl/schema problem when creating tables and deferring constraints
4134 - DB Compare does not handle Oracle Timestamp with LOCAL time zone columns properly
4191 - dbexport: MSSQL geometry → PGSQL varchar(2147483647); better would be TEXT
4217 - Does not replicate index with upper function on PostgreSQL
4359 - The handling of ''(empty string) default value of varchar columns of dbexport and dbimport is not correct for mssql server
4567 - sync.table.prefix parameter ignores for sequence in PostgreSQL
4667 - dbcompare prints each table multiple times
5106 - The PostgreSQL database cannot be synchronized under the USE_CHANGED_DATA and manual resolution strategy
5385 - Snapshots do not contain log files when the files are in a non-default location specified in log4j2.xml
5388 - Initial load delete or truncate with table transform
5393 - MySqlDdlReader.getTriggers() throws SQLException when MySQL database name contains special character
5395 - H2 database (or load only database) gets alter timestamp(0) every time starting
5406 - Deleting a trigger doesn’t inactivate its sym_trigger_hist entry when auto.sync.triggers.after.config.change=true
5413 - Bulk loaded flag is not being read from database for incoming and outgoing services
5414 - JDBC Bulk Transactions Fallback While Using PostgreSQL
5417 - Fix NPE for conflict detection when table does not have a PK and all columns used including those with null values
5421 - Initial load won’t start if registration_enabled is 1
5425 - Tables not created on reverse initial load

3.14.2 (Pro)
5434 - Users with Read-Only Role Getting Exception When Logging In and Table Triggers Editable
5442 - Unexpected behavior in Auto Create Table Triggers dialog
5445 - Routers unexpectedly pre-selected in Auto Create Table Routing dialog
5447 - Pressing the escape key to exit a form while a select box is open results in the options remaining focused on the screen
5465 - UI can become unstable when viewing batch screens
5471 - Images fail to load on the Design tab for some database types
5474 - Load filters do not work when using bcp bulk loader
5498 - UI detached error during registration

1753 - Default values that are functions do not work while creating tables in MySQL
3251 - Mysql BIGINT UNSIGNED processed as signed and gives error on larger than 63 bits numbers.
3845 - Primary key constraint violation while replicating single table from MSSQL 2017 into PostgreSQL 9.6
4116 - Syncing from Time to Timestamp (or vice versa) in Postgres produced inaccurate values
4295 - Detect when the order of a primary key changes in order to regenerate it
4335 - Multiple transform_table rows per source table cause multiplication of rows in outgoing batch
4514 - DbCompare: The output script to fix issues on the target does not support null values.
5392 - Unable to write to sym_outgoing_batch when using Postgres
5430 - Android not implemented exception when sym_monitor syncs
5435 - NumberFormatException when querying for an integer greater than Long.MAX_VALUE in SQL Explorer
5436 - Sybase ASE issues when upgrading SymmetricDS from an older version to 3.14.*
5439 - Conflict resolver fails if there are no primary keys on the target and it is set to not use primary keys from source
5441 - Windows service won’t start if tmp dir has trailing slash
5460 - Cannot write to more than one Kafka instance in a single instance of SymmetricDS
5472 - When a load filter changes catalog or schema the DML statement is not recreated with the updated values
5477 - Some default values do not sync correctly from Oracle to Oracle
5495 - Batch error missing method sendMissingForeignKeyRowsForLoad
5497 - NPE when running DbFill on a table with a foreign key that references a table in another catalog or schema
5501 - Registration left pending when client is 3.12 or newer and server is 3.11 or older
5502 - Fix json deserialization issue with log summary object
5503 - New config tables are being routed to old nodes
5504 - Oracle DATE type should not have its size specified
5505 - Oracle TO_TIMESTAMP() function gets surrounded by quotes when imported as a default value
922 - Float used on table without primary causes update to not capture

3.14.3 (Pro)
5534 - Sync Errors table in Active Errors dialog contains incorrect data when node IDs contain hyphens
5537 - Checkbox on Configure Parameters screen hides parameters that aren’t set at the selected level
5550 - Leaving where clause screen of Load Data Wizard while editing a where clause causes unexpected behavior
5561 - IndexOutOfBoundsException when opening missing primary key dialog
5562 - MsSQL BCP fails if the target node is Load-Only
5566 - Default template does not appear in email notification template editor
5568 - Azure BCP Bulk Loading Fails
5569 - Filter dropdowns on Configure Table Triggers screen can be blank
5575 - Various bugs with editing and deleting jobs on the Configure Jobs screen
5590 - Cannot change a built-in cron job into a periodic job via the Configure Jobs screen
5601 - Upgrade Jetty, PostgreSQL driver, Vaadin

3109 - File replication routing job fails with error message when channel is not a file sync channel - needs better error message
3545 - Mapped default values lead to always detecting a model change
5456 - ORA-24816 when sync varchar2(4000) and long in same table
5463 - Initial load of a table with a self referencing FK will not load if out of order
5507 - Postgres LOCALTIMESTAMP function gets surrounded by quotes when imported as a default value
5510 - Multiple active trigger history for same table
5511 - Error request path not supported for /server/config
5512 - Default values for Oracle RAW columns get surrounded by quotes when exported
5513 - SQL Server GETDATE() and GETUTCDATE() functions get surrounded by quotes when imported as default values
5514 - SQL Server sysname type should not have its size specified
5523 - Create trigger hist if routing can’t find it
5529 - Cannot set up SQL Server log-based replication without "ALTER ANY DATABASE" permission
5531 - Multi-homed clustered nodes stuck in loop of retry and resend of batches
5542 - Apache commons-text version 1.9 security vulnerability
5544 - Initial load error on MySQL with parameter db.treat.date.time.as.varchar.enabled=true
5554 - Example 25 in User Guide is missing permissions
5557 - SQL-Server capture rows that exceed 4000 characters
5560 - ORA-06502: PL/SQL: numeric or value error: character string buffer too small
5571 - Unique index on function causes error when resolving a conflict
5580 - Script error from newer wins conflict resolution with old nodes
5582 - Database Platforms That Don’t Support SQL Queries Throw Error with SQL Explorer
5586 - Trigger creation fails when 2 new triggers have trigger IDs that are identical when shortened
5596 - Failure to Flush when using ConvertToReload router.
5603 - Parse exception of batch should remove it from staging

3.14.4 (Pro)
5614 - Router Form issue with router expression validator
5616 - Pro Docker image contains unwanted files in tmp and logs directories
5618 - Allow user to unlock locked out remote node
5626 - Editing transform columns (add/edit/delete) does not specify the column transform order
5639 - Background refresher threads left behind on logout
5642 - Console Table Stats inserts do not take into account a clustered environment
5647 - Appearance setting (light/dark mode) does not get correctly applied when page is refreshed

5597 - SymDS is not syncing specific record during initial load
5611 - Check sync URL ends with engine name or "sync"
5619 - Insert statements generated by DBExport contain question marks when there are null values
5624 - Deletes get ignored when foreign key children exist but cannot be found
5625 - Stack overflow while extracting batch containing a table removed from replication
5635 - Single Store extends MySQL dialect but does not need to check for an "innodb" engine
5638 - Flush cache of routers when a router is changed
5640 - Filtering transactions for snapshot gets stack overflow error and never finishes creating snapshot
5645 - Registration redirect URL does not have query parameters for older versions of SymmetricDS clients
5646 - DBExport incorrectly formats time data
5655 - sym_node_host trigger should capture changes even if auto.sync.configuration is set to false

3.14.5 (Pro)
5660 - On prem to cloud profile not correct
5665 - Cloud bulk loader fails when create tables are requested
5668 - Prevent Add Tables Wizard from asking the user if triggers should be bidirectional when the source & target groups are the same
5669 - A trigger’s sync on insert/update/delete conditions can get set to "1=1" when editing table routing
5670 - Incorrect logic in MongoDB DDL Reader causes alter SQL to try and drop primary key
5674 - MongoDB fixes for bidirectional sync
5681 - Edit Script button on Configure Extensions screen gets disabled unnecessarily
5683 - Script editor doesn’t always show error message when validation fails for Java code
5689 - Logging out of UI after running a job like sync triggers can interrupt job

5593 - Incorrect Logic in various DDLBuilders for Processing Changes
5598 - Sql Anywhere Drop Trigger
5664 - Tables are altered incorrectly on some platforms when their columns need to be made required or non-required
5679 - Extract fails with durationMillis must not be negative
5686 - MariaDB JDBC Driver version 3 does not support a negative fetch size to indicate the use of streaming
5692 - Pulling corrupted batch gets null pointer in loop
5693 - Fix multiple active trigger histories before sync triggers is run

3.14.6 (Pro)
5701 - Processing of all event types except insert, update and delete are skipped in cloud bulk database writer
5713 - Outgoing/Incoming Batch Panels fail when sorting grid by Bulk Loader Flag
5715 - IllegalArgumentException when editing a custom transform column
5727 - IllegalArgumentException on Manage Incoming/Outgoing Loads screens
5730 - Downloading Incoming/Outgoing batches does not Decrypt
5732 - Images do not show up when deploying SymmetricDS Pro to Tomcat as a WAR file
5734 - Load Data Wizard prevents the user from continuing when file triggers are configured but no table triggers are configured
5738 - OracleStatementParser fails to parse lob write when lob contains semicolon newline
5743 - Edit Script button on Configure Extensions screen has confusing behavior when multiple extensions are selected
5749 - Conflict Strategy column on Configure File Routing screen shows incorrect value for OLDER_WINS and NEWER_WINS

3952 - Order table creation by foreign key dependency
5657 - SQLAnywhere CHAR is really a VARCHAR and should be mapped to VARCHAR for other dialects
5698 - Data truncation error when inserting/updating log event in sym_monitor_event on Interbase
5699 - Missing image in Manage Nodes Load Data Where Clauses
5700 - Grammar error (double word) in Manage Logging documentation
5702 - Missing image in Manage Incoming Loads
5708 - Sync table struct to target node report an error
5711 - When connecting to Azure, set platform version to SQL Server 2016
5718 - SQL Server DDL Builder needs to handle objects in different databases
5721 - Query tries to address mixed-case column without quotes (Postgres)
5722 - Tries to create foreign key before creating the referenced table
5723 - The schema of the table that is being created is used instead of correct one when creating a foreign key
5724 - SQL Server timestamp (rowversion) data type can not specify column size
5729 - DBImport- Allow the UI specification of the catalog and schema to override the catalog and schema specs in XML imported file
5731 - Functional indexes are only supported by Oracle
5737 - Serve Time Offsets Causing an Error in Determining if a Node is Offline
5746 - When upgrading from a varchar(xxx) to longvarchar the change isn’t detected on H2


The following changes were made to the definition of configuration and runtime tables. Table changes are applied to the database automatically using data definition language (DDL) during startup.

New Tables

Table Name Description

sym_table_group (Pro)

Group of tables to sync together as a dependent unit

sym_table_group_hier (Pro)

Relationships between tables for finding dependent data

New Columns

Column Name Description


Unique identifier for the node that will be the source of the extract.

Column Name Description


A flag that indicates that this batch did or did not use the bulk loader.

Column Name Description


Whether to acquire a cluster lock or not.

Column Name Description


Allow registration beginning at this timestamp.


Allow registration until this timestamp.

Column Name Description


A flag that indicates that this batch did or did not use the bulk loader.

Column Name Description


The batch ID that is in error when the error_flag is 1.


The number of batches that were loaded with the bulk loader.

Column Name Description


Indicates whether the source table is missing a primary key.

Modified Tables

  • event_code size changed from 25 to 50

  • privilege_name size changed from 50 to 80

  • Added primary keys: source_node_id

  • Added index idx_er_ld_src_nd (load_id, source_node_id)

  • Added index idx_er_src_nd_st (source_node_id, status)


The following changes were made to add new parameters, modify their default value, modify their description, or remove them from use.

New Parameters

as400.journal.library (Pro)

The library that contains the journal for log based capture on the AS400 (Default: SYM)

as400.journal.name (Pro)

The journal that will be used for log based capture on the AS400 (Default: QSQJRN)


The cloud based codepage to use for bulk insert if supported by vendor and version (Default: )


The cloud based character used in bulk loading to be used when quoting fields (Default: �)


The cloud based terminator used in bulk loading to separate each field (Default: |)


The cloud based terminator used in bulk loading to be used for a new row (Default: )


When enabled, the default conflict detection uses the primary key and the resolution uses fallback, which was the original default in version 3.11 and older. This is a convenient way to go back to the old default without having to configure a conflict on each group link. (Default: false)

console.auto.create.table.group.hiers.depth.limit (Pro)

The maximum depth that the Auto Create Table Group Hierarchies dialog will go to when searching for child tables. (Default: 5)

console.auto.create.table.group.hiers.table.limit (Pro)

The maximum number of child tables that the Auto Create Table Group Hierarchies dialog will search for. (Default: 25)

data.create_time.timezone (Pro)

The timezone to use for create_time in the data table, e.g. +00:00. By default, when this is not set, trigger templates will normally call a now() type function. (Default: )


Flush size for JDBC batch mode used by services to save configuration. (Default: 10000)


If set to true, when a table creation fails on a database platform that is different than the source database, try to create the table without default values. (Default: true)


Indicate that the data loader should ignore errors while loading a SQL event and the execution of the statement fails. (Default: false)


Indicate that the data loader should log SQL parameter values when a batch fails, which can be helpful for debugging. Since SQL parameters will contain application data, some sites may need to turn this off for policy compliance. (Default: true)


A list of default values in CSV format that should not be quoted when synchronized from another node. (Default: )


A list of pairs of default values in CSV format that tells SymmetricDS to translate the first value to the second value when synchronized from another node. (Default: )

initial.load.reload.select.override (Pro)

If set overrides the reload_select of the row in sym_table_reload_request when sending a load via the Load Data Wizard. (Default: )

log.miner.mysql.directory (Pro)

Specifies the name and path for the directory that contains MySQL’s binary log files. When blank, SymmetricDS will use each log file’s path as it appears in MySQL’s binary log index file. (Default: )

log.miner.mysql.index (Pro)

Specifies the name and path for MySQL’s binary log index file. When blank, SymmetricDS will use MySQL’s log_bin_index system variable. (Default: )

mssql.auto.create.trigger.options (Pro)

When auto-creating table triggers, some options will be detected and applied for the user, such as excluding ROWVERSION columns. (Default: true)


Specifies the path to the SQL Server bulk copy program utility (bcp) executable. (Default: )


Enables the use of the SQL Server bulk copy program utility (bcp) as the bulk loader. (Default: false)


Use varchar(max) or nvarchar(max) when a column in SymmetricDS tables is set to long or nlong. This is for example necessary when using a _UTF8 of _SC collation. (Default: false)


The AWS secret access key (aws_secret_access_key) to use as credentials for uploading to S3 (Default: )


The AWS secret access key (aws_secret_access_key) to use as credentials for uploading to S3 (Default: )

purge.snapshot.file.retention.minutes (Pro)

This is the retention time for how long support snapshot files will be retained (Default: 14400)


When this is set to true a group link will be created by default between two groups even if the user does not explicitly set one up. (Default: true)


When group link is configured to push to clients, allow registration to work over push. Useful when client cannot reach server, so server pushes registration to client. (Default: true)


Routing reader may run multiple queries for data, with each query including the maximum number of data gaps as specified by the routing.max.gaps.to.qualify.in.sql parameter. This method attempts to use the table’s index for quick results and avoid wasting time on filtering rows that were already routed (as used by the greater.than.query method). (Default: true)


The percentage of the channel’s max batch size that a batch can exceed when seeking a transaction boundary using the default batch algorithm. Use zero to indicate that the batch size can grow as large as needed to include the complete transaction. For example, a setting of 100 percent with a channel’s max batch size of 1000 allows a batch size of 2000 to be routed before it will be forced as complete. This setting protects from a large transaction that causes batch sizes that far exceed the channel’s max size and have trouble loading on the target database. (Default: 100)

single.store.audit.log.dir (Pro)

The path to the auditlogs dir for SingleStore (Default: /var/lib/memsql/{cluster-id}/auditlogs)


Max number of batches to write to statistics listing for support snapshot. (Default: 10000)


Max number of files to write in directory listing for support snapshot. (Default: 50000)


Max number of nodes and channels for batch statistics, after which it will group by node only. (Default: 5000)


Max time for a snapshot operation to complete, such as gathering table definitions, before it will be interrupted so the snapshot completes in a reasonable amount of time. (Default: 30000)


Determines if spatial data type functions will be installed. By default they will be installed but can be set to false to not install the additional spatial functions if they are not needed. (Default: true)


Whether or not duplicate active trigger histories will be detected and fixed so that the most recent will end up being the only active trigger history. (Default: true)


Whether or not sync triggers job will install triggers on a registration server before configuration is created. When true, triggers are installed as soon as possible, right after configuration tables are created. When false, triggers are installed when the configuration includes one or more group links where this node is the source. A default of true avoids race conditions associated with registering nodes and performing operations before configuration is complete and triggers are installed. (Default: true)


Disable this property to capture all DDL changes regardless of whether the associated table has a corresponding row in sym_trigger_hist. MS SQL-Server, Oracle and Postgres only. See: trigger.capture.ddl.changes (Default: true)


For Sybase and SQL Server, if a primary key is changed, this parameter determines if a delete followed by an insert is captured for the row change instead of an update. When set to true, an update will be created if no primary keys are changed or if only one row is changed when a primary key change occurs, otherwise a delete followed by an insert is created for each row updated when a primary key change occurs and more than one row is updated by the SQL statement. If set to false, it will always create an update. This parameter, when changed, requires a restart of the SymmetricDS instance, followed by a rebuild of the triggers. (Default: true)

Modified Parameters


Whether binary fields should be treated as lobs (Old Default: true) (New Default: false)