Overview
SymmetricDS Pro 3.17 release includes 23 features, 30 improvements, and 37 bug fixes.
What’s New
Redesigned Dashboard: Network and Pipeline Views
The SymmetricDS Pro Dashboard has been rebuilt with two purpose-built views that give you instant visibility into replication health — no matter how your topology is structured.
The Network View is built for deployments where the central node actively participates in replication. A new Activity panel breaks down replication health across five pipeline stages — Route, Extract, Transfer, Load Out, and Load In — with backlog counts, timing, node coverage, and historical graphs for each stage. Filter by All, Online, or Offline nodes to pinpoint exactly where work is piling up. A companion Throughput panel provides a real-time pulse on data movement across your entire network.
The Pipeline View is purpose-built for hub-and-spoke deployments where the central node acts as a relay. Each endpoint pair is displayed as an individual pipeline with its own status indicator, giving operators an at-a-glance operational board. Common actions like triggering an initial load or pausing replication are available directly from the pipeline grid — no menu hunting required.
Redesigned Configure Diagram with Pipeline Support
The Configure Canvas has been renamed to the Configure Diagram and now supports both network and pipeline layouts. During initial deployment, the Deploy Wizard asks which mode fits your topology. In pipeline mode, the hub node is minimized in the diagram to reduce visual clutter and keep the focus on the endpoint pairs that matter most to your day-to-day operations.
Databricks Platform Support
SymmetricDS Pro now supports Databricks as a replication target, providing a direct path from your operational databases to your data lakehouse. The Databricks endpoint operates as write-only, with SymmetricDS runtime metadata stored in a separate H2 database.
Job Schedule Frequency Controls
The Job Schedule Manager now supports fine-grained scheduling for Push, Pull, and custom jobs (SQL, BeanShell, Java, and more), with minimum intervals tied to your license tier. Standard Pro Edition supports intervals as low as every 1 minute, while Enterprise Pro Edition removes the lower limit entirely — enabling near-real-time push and pull cycles for the most latency-sensitive deployments.
Microsoft SQL Server and Oracle: Now Pro Platform Features
Starting with SymmetricDS 3.17, support for Microsoft SQL Server and Oracle database platforms has moved to SymmetricDS Pro. Organizations using these enterprise databases will benefit from Pro-exclusive capabilities including enhanced monitoring, the redesigned Dashboard, and priority support. Existing open source deployments using these platforms should plan to upgrade to Pro to continue receiving updates and support for these platforms.
Capture Changes Only Per Trigger
Fine-tune how SymmetricDS captures update data on a per-trigger basis. Previously, capturing only changed columns on updates was an all-or-nothing setting at the node level (trigger.update.capture.changed.data.only.enabled). Version 3.17 introduces a capture_changes_only column on sym_trigger, giving you precise control over which tables use change-only capture and which require full row capture — without blanket node-level overrides.
DDL Replication Loop Prevention
Multi-master and bidirectional deployments with DDL capture enabled no longer need custom workarounds to prevent schema changes from looping back to the originating node. SymmetricDS 3.17 includes built-in DDL loop detection and prevention, ensuring schema changes replicate to their intended targets and stop — making DDL replication production-ready out of the box.
Enhanced Replication Statistics
SymmetricDS 3.17 significantly expands the statistics available for monitoring and diagnostics, giving operations teams and monitoring integrations deeper visibility into replication health:
-
sym_node_host_channel_statsnow tracksdata_received,data_bytes_received,data_min_create_time, anddata_max_create_time— enabling inbound throughput measurement and data latency tracking per channel. -
sym_outgoing_batchnow recordsdata_min_create_timeanddata_max_create_time, so you can calculate true end-to-end replication lag from data capture to batch delivery. -
sym_node_host_statsnow records gap counts and unrouted row counts, providing early warning signals for routing backlogs before they become problems.
Node Channel Control Improvements
The node_channel_control table now includes a target_node_id column, making it possible to suspend or ignore synchronization between two specific nodes in an individual direction. For ease of use and increased visibility, SymmetricDS now synchronizes this table between nodes via the config channel. In addition, the behavior of this table is more consistent and no longer affected by the group link’s data event action. When upgrading to 3.17, all rows will be deleted from the node_channel_control table.
Issues
New Features
3.17.0 (Pro)
SYM-7006 - Implementing syncing for google sheets or drive
SYM-7017 - Add a pipeline view to the Configure Canvas and rename it to the Configure Diagram
SYM-7032 - Add an Activity panel to the Dashboard
SYM-7067 - Add Loaded Time and Bytes columns to the Load Details screen
SYM-7071 - Add a pipelines view to the Dashboard
SYM-7076 - Add a console user privilege for changing the dashboard layout
SYM-7082 - Add a table and a service for console user preferences
SYM-7117 - Finalize the Dashboard’s network view
SYM-7137 - Streamline the Load Data Wizard
SYM-7158 - Make it possible to activate mirror mode via the Configure Diagram
3.17.0
SYM-7044 - Add data_received and data_bytes_received columns to sym_node_host_channel_stats
SYM-7056 - Add data_min_create_time and data_max_create_time columns to sym_node_host_channel_stats
SYM-7058 - Add data_min_create_time and data_max_create_time columns to sym_outgoing_batch
SYM-7070 - Record the number of gaps and unrouted rows to sym_node_host_stats
SYM-7092 - Add a target_node_id column to sym_node_channel_ctl
SYM-7108 - Add a capture_changes_only column to sym_trigger
SYM-7150 - Prevent DDL replication loops
SYM-7154 - Prototype RestWriter extending IDatabaseWriterFilter for POC
SYM-7246 - Multi-homed nodes should communicate internally instead of using the network
SYM-7296 - Add a description column to sym_node_group_link
SYM-7307 - Redact the smtp.password parameter in snapshot export
3.17.1 (Pro)
SYM-7459 - Support for Amazon SQS (load-only endpoint)
3.17.1
SYM-7015 - DDL capture support for cross platform
Improvements
3.17.0 (Pro)
SYM-6935 - Display a badge next to the table on the Load Details screen when the default loader runs an insert that goes into conflict
SYM-7075 - Disable the registration.require.initial.load parameter by default when using the pipelines view
SYM-7148 - Make the StatisticManager keep track of the most recent ProcessInfo that did work on non-system data for each ProcessType
SYM-7190 - Improve the behavior of the tabs in the top bar when using the pipelines view
SYM-7202 - Improve the Configure Diagram’s Define Endpoint screen
SYM-7216 - Exclude the hub node from the Nodes Dashboard panel
SYM-7233 - On the Manage Outgoing/Incoming Batch screens, clear the node ID filter when switching engines
SYM-7244 - When deploying with no tables, the dialog that pops up should be styled more like a warning
SYM-7282 - Re-label Environment Setup Wizard "Finish" button
SYM-7286 - Pipeline Dashboard: resolve confusion around use the "?" icon
SYM-7357 - Align oracle.* and tibero.* parameters with the PRO edition
SYM-7364 - Align mssql.* parameters with the PRO edition
SYM-7369 - Remove obsolete jTDS driver from documentation and add comments for MS SQL Server dialects
3.17.0
SYM-7078 - Update the reload channel’s Data Loader Type to bulk on an upgrade
SYM-7118 - Upgrade H2 library to 2.4.240
SYM-7124 - Switch to JSON for SQL-Explorer settings
SYM-7155 - REST endpoint support (load-only)
SYM-7214 - Remove the symadmin remove-node subcommand’s -n option and use an argument instead
SYM-7330 - Add Documentation For the Rest Endpoint
3.17.1
SYM-7099 - Optimize Full Load by sending index definitions before the Finalize batch is sent
SYM-7376 - Document HybridTransportManager feature in advanced topics
SYM-7407 - Finalize batches should create indexes in parallel
SYM-7418 - Support SET column type on MySQL
SYM-7420 - Emphasize Group ID in the Configuration Export section of docs
SYM-7437 - Support for File Sync on MSSQL to support ntypes for file names
SYM-7503 - Add a new Custom Options parameter to append to the OAuth2 request URL
SYM-7506 - Allow routers that only handle DML to handle the "R" reload event type
Bug Fixes
3.17.0 (Pro)
SYM-6633 - Bulk Load percentage shows greater than 100% when bulk load fails and it falls back to default loading
SYM-7140 - Monitor attempts to decrypt mail server password when smtp.auth=false
SYM-7306 - Canvas shows deleted pipelines
SYM-7313 - 3.17 deploy of nodes with error causes user to be stuck
SYM-7345 - Deploy Wizard UI: selecting "Next" button does nothing when missing source tables
SYM-7355 - MinIO library update (CVE-2025-59952)
SYM-7356 - MS SQL Server driver 12.10.2.jre8 library update (CVE-2025-59250)
SYM-7371 - Second deployment of Pipeline-based environement does not clear out HUB runtime tables
SYM-7374 - Transform set up on Canvas saves incorrect target table
SYM-7392 - SQL Server: BCP parameter documentation refers to ASE parameters
SYM-7395 - Gradle exec changes
3.17.0
SYM-7258 - Prevent DDL loop back to the source node
SYM-7268 - Setting sym_node_group_link.sync_sql_enabled=0 doesn’t prevent captured DDL from synchronizing if the DDL affected a table with an active trigger history
SYM-7270 - Integration test fails for PostgreSQL - wildcard table trigger
SYM-7324 - Open source messaging for MS SQL Server and Oracle platforms
SYM-7329 - License limit violation (false-positive) for node count
SYM-7354 - The Routing Process not displayed under "Source Activity" column on a pipeline dashboard
SYM-7359 - Format error in Oracle appendix for 3.17
SYM-7373 - Demo tutorial claims initial load is automatic after registration, but auto.reload is not set
SYM-7391 - Parameter oracle.use.hints needs to be put into symmetric-console-default.properties
3.17.1 (Pro)
SYM-7255 - Transform Configuration UI fails for cross-schema configurations - incorrect metadata lookups
SYM-7310 - The Configure Diagram’s Add Tables dialog asks if tables should be configured bidirectionally across a multi-primary link
SYM-7334 - When editing a transform column, selecting a bsh transform type and switching to a different transform type makes it impossible to type a period into the expression field
SYM-7390 - SQL Explorer: result tab incorrectly labeled
SYM-7409 - TransformDataScreen: Map Columns shows '(no source column\!)' for all columns when source schema differs from target routing schema (DB2)
SYM-7432 - NPE in ProExtractDataReader.nextBatch() when Table Group Hierarchy is configured
SYM-7438 - Table Group Hierarchy ignores included_column_names, causing column count mismatch on load
SYM-7447 - A NotJdbcDriverException occurs when creating a Kafka node via the Connect Database Wizard
SYM-7474 - The same table name can be recorded to sym_console_table_stats in both lowercase and uppercase
SYM-7498 - An IndexOutOfBoundsException can occur on one of the batch screens
3.17.1
SYM-7022 - Deployed WAR file to application server (Tomcat) does not handle single engine deployment
SYM-7317 - An incomplete message is logged when registering using internal communication
SYM-7398 - Cross-platform DDL capture for SQL Server incorrectly captures a DROP TABLE statement as a create event
SYM-7412 - A UniqueKeyException can occur during routing after correcting overlapping gaps
SYM-7430 - The internal transport manager can process the same batch multiple times on different threads during a pull
SYM-7467 - A SqlException can occur during routing or purge when a trigger is configured with a wildcarded source catalog name
SYM-7495 - MySQL create table with auto increment and composite key
Tables
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 |
|---|---|
|
New Columns
| Column Name | Description |
|---|---|
|
The number of bytes that were transferred to the target for this table |
|
The rows in this table that went into conflict when loaded to the target |
| Column Name | Description |
|---|---|
|
A field that can be populated for use by routing. |
| Column Name | Description |
|---|---|
|
Unique identifier for a target node for which this channel will be suspended and/or ignored. |
| Column Name | Description |
|---|---|
|
An optional description of this link. |
| Column Name | Description |
|---|---|
|
The number of rows that were received during this time period. |
|
The number of bytes that were received during this time period. |
|
The minimum create time of a data row that was routed during this time period. |
|
The maximum create time of a data row that was routed during this time period. |
| Column Name | Description |
|---|---|
|
Number of non-expired data gaps during this period. |
|
Estimated number of unrouted data rows during this period. |
| Column Name | Description |
|---|---|
|
The minimum create time of a data row contained within this batch. |
|
The maximum create time of a data row contained within this batch. |
| Column Name | Description |
|---|---|
|
Set this to 1 to force a compare of old and new data. If old=new, then don’t record the change in the data capture table. This is currently supported by the following dialects: MySQL, Oracle, DB2, PostgreSQL, SQL Server. |
Modified Tables
-
Added primary keys:
target_node_id
-
Added index
idx_tbl_rld_sts(target_node_id,source_node_id,completed,cancelled)
Parameters
The following changes were made to add new parameters, modify their default value, modify their description, or remove them from use.
New Parameters
Specifies the charset to be used while writing bulk files to staging for import via BCP utility. The default will be the operating system. This parameter only applies to the BCP process for ASE. (Default: )
Your AWS Access Key ID. (Default: )
Specify the output message format. Possible values are { JSON | XML | CSV } (Default: )
The following property determines how messages will be sent. Possible values are { BATCH | ROW } (Default: )
The following property determines what queues will be used to load data to. Possible values are { TABLE | CHANNEL | USER } (Default: )
The queue name you wish to configure with SymmetricDS. If you enter a value for this field, it will override the "Queue By" selection. If you leave this field blank, queue(s) will be created based on the "Queue By" field. (Default: )
The AWS region your queue is located in. (Default: )
Your AWS Secret Access Key. (Default: )
Your AWS SQS session token. (optional) (Default: )
The URL of the AWS queue you want to load data to (optional). (Default: )
Additional query parameters to append to the OAuth2 authorization request URL (e.g., prompt=consent&access_type=offline). (Default: )
Display a list of pipelines on the Configure Diagram instead of a network of endpoints. (Default: false)
The number of milliseconds console user preferences will be cached by the ConsoleUserPreferenceService before they are reread from the database. (Default: 600000)
MinIO access key (Default: )
MinIO secret key (Default: )
MinIO endpoint url (Default: )
S3 Url to be used. Could be set when using LocalStack as s3 container and not AWS. (Default: )
VFS password for file sync (supports URLs with ftp:// and sftp://) (Default: )
VFS user for file sync (supports URLs with ftp:// and sftp://) (Default: )
Controls the behavior of the "clear" options in the Load Data Wizard. Possible values are "truncate" and "delete". A value of "truncate" will truncate the target table, while a value of "delete" will run the initial.load.delete.first.sql. (Default: truncate)
Automatically update data, data_event and outgoing_batch tables to allow only row level locking. (Default: true)
Specifies the charset to be used while writing bulk files to staging for import via BCP utility. The default will be the operating system. This parameter only applies to the BCP process for MS SQL Server. (Default: )
Includes the catalog/database name within generated triggers (catalog.schema.table). May need turned off to support backup processes such as creating a bacpac file (Default: true)
Disables lock escalation and turns off page level locking. May need turned off to support backup processes such as creating a bacpac file (Default: true)
Query for compression on tables and indexes, filtered indexes, and include columns. If you don’t have compressed tables or indexes, or filtered indexes, or include columns, or you are not sending table schema to nodes running SQL Server, set this parameter to false to speed up the reading of metadata. (Default: true)
Specify the user the SymmetricDS triggers should execute as. Possible values are { CALLER | SELF | OWNER | 'user_name' } (Default: caller)
Set the order of triggers to 'First' using sp_settriggerorder after creating triggers. This is needed when the user has existing custom triggers that modify data. The SymmetricDS triggers need to fire first and capture the first change so that order of changes is preserved. If the user has a trigger set as 'First', it will be changed to 'None'. (Default: false)
Use ntext for the data capture columns and cast to nvarchar(max) in the trigger text so that nvarchar, ntext and nchar double byte data isn’t lost when the database collation for char types isn’t compatible with n char types. (Default: false)
Specifies if snapshot isolation should be automatically turned on. (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)
This indicates how to process LOB values. "plain" is the default, which uses the JDBC interface directly. "createtemporarylob" uses the creation of CLOB/BLOB temporary objects to process the data. "streamlob" uses the stream interface of the JDBC interface (part of JDBC 4.0). (Default: plain)
For initial load extracting data to specify the number of parallel processes to use while selecting data from a table (Default: 1)
On Oracle RAC, an ordered sequence for sym_data must be coordinated across RAC nodes, which has wait overhead. By setting this to true, a no-order sequence is used instead, which performs better for high throughput. Because the sequence is no longer ordered, sym_data is queried using an order by of create_time and data_id. You will need to restart after changing this parameter to get DDL applied to the sequence and sym_data. (Default: false)
For Oracle RAC in no-order mode, this parameter provides two methods for managing data gaps across multiple nodes in the cluster. When left blank, routing will use gv$_sequences to manage gaps. Or, use this parameter to specify a comma-separated list of database URLs to connect to during the heartbeat, which ensures each RAC node has periodic activity within its gap to prevent the gap from expiring. (Default: )
This is the precision that is used in the number template for oracle triggers (Default: *,38)
Use the text minimum format model for capturing changes to number data types. When enabled, numbers are converted with to_char('TM'), which can capture up to 40 digits. When disabled, numbers are converted with cast to number(*,38), which can capture up to 38 digits. (Default: false)
On Oracle, enables an index hint when selecting from sym_data using data gaps. (Default: true)
Use nclob for the data capture columns and use to_nclob() in the trigger text so that double byte data isn’t lost when the database collation for char types isn’t compatible with n char types. (Default: false)
On Oracle, enables a full table scan hint when selecting from sym_data using the start data_id. (Default: false)
Optional API key for sending data to a rest service. (Default: )
The output format for data sent by the rest writer. Available options: JSON, XML (Default: JSON)
Determines whether delimited identifiers are used (as opposite to normal SQL92 identifiers) on target database connection. Note: SQL92 identifiers may only contain alphanumerical characters and the underscore, must start with a letter and cannot be a reserved keyword. DatabaseOverrideable: false (Default: true)
Determines if the DDL captured will be the actual ddl run against the source or if a Create table event will be captured for the changed table. This allows cross compatibility where an add columnn syntax may vary from one dialect to another. By sending a full create or alter table it will naturally apply the proper alters to match the target. Currently implemented for Microsoft SQL Server only. See: trigger.capture.ddl.changes (Default: false)
Modified Parameters
The cloud based character used in bulk loading to be used when quoting fields (Old Default: �) (New Default: ¿)
When using the earliest transaction time to expire gaps (routing.gaps.use.transaction.view=true), subtract the given number of milliseconds from the transaction time. This may be needed in a clustered environment where the time on each database master is not perfectly in sync. (Old Default: 10000) (New Default: 60000)
Specify the transport type. Supported values currently include: hybrid, http, internal, file. Set to "hybrid" to use internal communication for multi-homed nodes and network communication for remote nodes. Set to "http" to use network communication for all nodes. Set to "internal" to use internal communication for all nodes. Set to "file" to use offline file-based communication for all nodes. (Old Default: http) (New Default: hybrid)
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}