Overview

SymmetricDS Pro 3.14 release includes 58 features, 228 improvements, and 333 bug fixes.

Security Fixes

Issue Summary Severity

5351

Use PKCS12 for keystore by default

Medium

5376

Parameter to disable logging of application data from a batch error

Medium

5542

Apache commons-text version 1.9 security vulnerability

Medium

5730

Downloading Incoming/Outgoing batches does not Decrypt (Pro)

Medium

6034

Use the value of javax.net.ssl.trustStoreType as the truststore type if specified

Medium

6175

Upgrade Jetty

Medium

6282

Spring Framework URL Parsing with Host Validation

Medium

6298

Upgrade mysql, postgres libraries

Medium

Performance Fixes

Issue Summary Severity

5210

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

Medium

6299

Hot spot removing old node sessions in mixed environment with versions < 3.11

Medium

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.

Issues

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

3.14.0
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

3.14.1
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

3.14.2
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
5555 - Adding Console Event for Ignoring Incoming/Outgoing Rows in Batch
5564 - Clustered custom job
5567 - Add Import URL button to the Authorities tab of the Manage Security screen

3.14.3
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

3.14.4
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.7 (Pro)
5763 - Add license and load subcommands to symconsole command
5771 - Add File Sync Activity panel to Dashboard
5776 - DB2 iSeries AS400 support for RRN (row identifier column) to be captured and sent during CDC and initial load.
5777 - Outgoing and incoming batch screens to show file names for summary on file sync channels
5797 - Make it possible to view the details of a registration request by double-clicking it on the Manage Nodes screen

3.14.7
5757 - Add server parameter for setting a server’s cookie name
5774 - Support for capturing the row identifier on various platforms if available (default is false)
5775 - File sync batches to provide file name as the summary in outgoing and incoming batch.
5800 - Add a gradle task that generates javadoc and publishes it to the website

3.14.8 (Pro)
5872 - Add integrity checks for configuration, heartbeat, and user data loops
5876 - Manage Jobs screen with run history and error status
5910 - Add option for the web console to display dates and times in the browser’s timezone

3.14.8
5863 - Add option to send additional batch error notifications when the number of batches in error increases
5884 - Add job monitor
5885 - MSSQL support for hierarchyid data types

3.14.9
1180 - Add option to symadmin --send-sql to specify a file containing the sql to send.

3.14.10 (Pro)
5999 - Add import-cert subcommand to symadmin

3.14.10
6013 - Add :SOURCE_NODE_ID, :SOURCE_EXTERNAL_ID, and :SOURCE_NODE_GROUP_ID variables to column match routers

3.14.11
6153 - Add parameters that can disable specific types of conflict resolution

Improvements

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

3.14.0
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

3.14.1
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

3.14.2
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

3.14.3
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

3.14.4
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

3.14.5
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

3.14.6
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

3.14.7 (Pro)
5741 - Java router code assistance
5748 - License check should use cached call for find all nodes
5755 - Next button on Connect Database Wizard’s Registration URL screen should always be enabled
5760 - Conflict screen current detection should be based on conflict.default.pk.with.fallback parameter
5764 - Manage Outgoing/Incoming Loads screens should not query sym_table_reload_request once per load
5768 - Add schema names to where clause of Oracle log miner query
5772 - Add cluster information to info URI
5798 - Order the batches on the Manage Outgoing Batches screen by both batch ID and node ID
5816 - Control setting snapshot isolation on MSSQL through a parameter
5819 - OutgoingBatchService loadPendingBatches should use read uncommitted to minimize deadlocking possibilities

3.14.7
5752 - Add support for H2 2.x
5753 - Reopening registration should reset the failed login count
5765 - Add quotation marks around values in threads-stats.csv file in support snapshot
5779 - Improve docs on db.init.sql property
5780 - Slow routing when using $(targetExternalId) variable
5782 - Unique Index with Multiple Nulls not Properly Handled for Certain Databases
5783 - SymmetricDS seems to require Postgres 11, but the docs don’t reflect that
5790 - Failed to decrypt node password from lost secret key in keystore
5805 - Allow specification of database platform of symmetric when DbDxport execution with load only/extract only/log miner
5810 - Redshift Bulk Loader increased versioning and dependencies
5815 - DDL Capture Changes - Three enhancements to DDL trigger capture
5817 - Snapshot util not returning
5823 - Capture timings when running Sync Triggers
5831 - Sync triggers by $(targetExternalId) and call after registration

3.14.8 (Pro)
5841 - Adding "Wizards" Tab in Console Role Edit Panel
5844 - Vaadin warning in logs about vaadin license checking and live reload not being enabled
5856 - "Ignore Row" in Outgoing and Incoming Batch Panels should have an associated permission
5864 - Make it possible to set a monitor’s expression via the Configure Monitors screen
5875 - Shutdown Hook is causing OutOfMemoryError for some users
5878 - Integrity check for high number of unique channel queue names
5879 - Email validation when configuring new notifications
5887 - Monitor enhancements for centralized support
5890 - Automatically install azurekv module when adding a new SQL Server Azure node with authentication=ActiveDirectoryPassword
5891 - Adding "Date Time Format" Option for DbCompare in the UI
5900 - Upgrade BigQuery functionality to work with current BigQuery version
5905 - Oracle log miner should reset the SCN when it encounters error ORA-01281
5908 - Improve debug logging for Oracle log miner
5911 - Add documentation for web console timezone setting

3.14.8
2260 - Also sync the stored procedures with the schema
3476 - When a node is unregistered cancel all jobs / threads that are actively doing work for that node
5565 - Adding Character Set to Snapshot
5812 - MathColumnTransform uses Evaluator that is not thread-safe
5836 - Specify jaxb api and implementation so that libraries will be available when running in Java 8 through 17
5847 - Try again when foreign key correction fails
5853 - sym_monitor_event trigger should capture changes when monitor.events.capture.enabled=true even if auto.sync.configuration=false
5869 - Improve documentation of sym_node_group_link.sync_config_enabled
5873 - Open Registration in Rest API doesn’t allow user to specify node if 2 nodes have the same external ID
5886 - Monitor enhancements for centralized support
5893 - DbCompare should write to standard error and not continue with an invalid date-time format
5907 - Postgres support for ddl table creations with a default function on a GUID from MSSQL
5909 - Some methods are synchronized unnecessarily in AbstractParameterService
5922 - Added debug logging to File Sync Trigger Tracker
706 - Make sleep time between registration retries configurable

3.14.9 (Pro)
5920 - Snowflake Reload Duplicate Prevention
5929 - Remove use of javax.xml.bind.DatatypeConverter in ConsoleUser.java
5939 - Upgrade S3 functionality and add JSON output

3.14.9
1063 - Add export-config and import-config command line options to symadmin
5921 - Adding Uni* type support to Sybase ASE
5932 - Update docs on using environment variables in engines properties (modified summary)
5937 - SymmetricDS User Guide Incorrectly Referencing Table Column Name Which Dropped From 3.14 Release Already
5944 - Adding log info for subselect routers
5960 - Add support for NTEXT to SQLAnywhere dialect

3.14.10 (Pro)
5978 - Console event for cancel load include load ID
5987 - Enhance logging for JSQLParserException in OracleStatementParser
5990 - Silent uninstall
5993 - Make columns on Manage Nodes screen sortable
5994 - Load screens should not reset their sort order on refresh
5996 - Selecting a multi-node row on the Manage Nodes screen should select all of the child rows
6008 - Connect Database Wizard should prevent the user from using the Microsoft driver for SQL Server 2005 or older
6018 - Oracle log miner should skip the SQL statement instead of throwing an exception when the SQL is empty or the schema is null

3.14.10
5966 - SQLAnywhere support for stream row
5980 - MonitorService should use the dirty SQL template when selecting from sym_monitor_event
5983 - Improve accuracy of CPU monitor
6006 - Prevent node from starting up if the sync.url is invalid
6010 - Add exception message to logging when bulk loader fails and falls back to default loading
6034 - Use the value of javax.net.ssl.trustStoreType as the truststore type if specified
6055 - Multi-threaded routing by channel

3.14.11 (Pro)
6062 - Add Table(s) Wizard should not query for metadata when filtering table names
6065 - "Open Web Console" button in SymmetricDS Pro Control Center should get the hostname from the host.bind.name property
6067 - Windows service fails to start when desktop is slow to initialize
6101 - Add more details to the Rest Keys section of the User Guide
6113 - Add process info to support snapshot

3.14.11
6064 - Slow extract and load when using $(targetExternalId) variable
6080 - Improve name and documentation for DBExport’s --symmetric option
6082 - SQLite nodes do not insert into sym_context correctly when disabling sync triggers
6095 - Contains big LOB check can be fooled by commas in data
6124 - Add documentation for PostGIS data types for Postgres
6131 - Too many "Expected but did not receive an ack for batch"

3.14.12 (Pro)
6190 - SQL-Server log mining should not require snapshot isolation

3.14.12
6164 - During an upgrade, log DDL before executing it instead of afterwards
6173 - Could not find trigger history, causes error of had X columns but expected Y
6177 - Snapshot util timeout for taking too long on table definitions
6199 - Remove securityToken parameter from /outgoingBatchSummary REST API call
6209 - "Node failed to authenticate" in server logs after server restarts or client session expires

3.14.13 (Pro)
6303 - Progress OpenEdge platform should have a dirty SQL template

3.14.13
6273 - Startup logging for specific node securities that can’t decrypt

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

3.14.0
2180 - H2 timestamp format creates conflict against ORACLE timestamp format
2254 - sym_outgoing_batch and sym_incoming_batch should both use the same time for last_update_time and create_time
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

3.14.1
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

3.14.2
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

3.14.3
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

3.14.4
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

3.14.5
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

3.14.6
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

3.14.7 (Pro)
4179 - After cancelling an initial load in Interbase received a Data Type Unknown exception.
5735 - Some Downloads Not Working on Firefox Browser
5756 - Snowflake Bulk Loader fails to load values with special characters
5759 - Oracle Log Mining should consume unknown DML type when reading transaction log
5761 - Validation fails for valid users on Windows when you try to setup "Install service to run automatically"
5773 - Login dialog should check if engine is initialized
5785 - DBCompare fixes
5786 - Grid on Manage Nodes screen is empty when viewing the web console on a 3rd-tier (or lower) node
5795 - SQL Server log miner skips over changes on a busy system
5806 - Cloud bulk load fails when source and target table columns do not match
5808 - SQL Explorer DB Compare does not refresh schemas when changing catalog selection
5813 - DB Compare dialog lists tables from the wrong database on a log-based node
5821 - DB Compare "use config" option not working as expected
5829 - When connecting to Redshift a "Driver Not Found" popup will occur even when the driver is available

3.14.7
4310 - Replicating to postgres to postgres timestamp with default
5706 - "Data type unknown" error when updating sym_extract_request on Interbase
5766 - NPE when inserting into sym_incoming_batch on some platforms
5781 - DBCompare --use-sym-config true
5791 - Allow registration of other nodes after registration and initial load is complete
5799 - 3 tier deployment, 3rd tier does not get top level tier sym_node* tables
5802 - SQL Server and Sybase stream row on updates trigger syntax issue
5803 - Interbase fixes: failing to have prepared statement indicators in set and select portion of SQL statements
5807 - Sybase ASE gets Misinterpreted as Sybase SQL Anywhere
5809 - NullPointerException when writing a delete to Kafka when old data has not been captured
5811 - When Capture of Old Data is disabled, Deletes get an Index Out Of Bounds Error with Kafka
5822 - SQL Server create or alter trigger fails when table is not in default schema (dbo)
5826 - Data can become misaligned with column names during extraction after a column gets renamed
5828 - Class Not Found Exception when connecting to Redshift

3.14.8 (Pro)
5804 - Deactivated table (dropped trigger) is allowed to be requested for a partial load
5859 - Some privileges not getting hidden from UI even when set as "Hidden"
5862 - File Sync Activity Dashboard panel displays activity for all channels when file sync is disabled
5866 - Batch ID in Sync Errors section of Active Errors dialog links to incorrect batch screen
5874 - Updated Snowflake Builder to handle Bit Type
5881 - Snowflake DML Statement does not get the column name before trying to convert.
5888 - MSSQL log based support for wildcard triggers
5889 - NullPointerException when saving a new load profile for the first time
5899 - FileSync tries to process a file change if the Source Directory doesn’t exist on a node in a cluster
5902 - The BCP writer for MsSql is not able to parse db urls with backslashes
5918 - Cannot rebuild multiple missing triggers via the Rebuild button on the Manage Installed Triggers screen
5923 - Grid on Manage Nodes screen has no items selected but its select all checkbox is not unchecked
5924 - When you select "Sent Data" for an ignored batch it incorrectly says it "Failed to Parse Batch"

3.14.8
4151 - MSSQL DDL ERROR: View / function / stored procedure
4952 - Cannot resolve monitors of type log
5314 - Infinite synchronization loop when 3 nodes are connected to each other and sync_on_incoming_batch = 1
5834 - Unnamed constraint causes alter table error
5848 - Security Vulnerbility in Spring Framework
5865 - Estimated count from initial load does not work with SqlServer when using different schema than dbo
5867 - Prevent file sync from syncing all files when first scanning a directory when initial load is enabled
5880 - Transform documentation missing Java Column Transform Type
5892 - DbCompare fails to write comparison SQL for timestamp with timezone values
5894 - NotificationTypeEmail’s deserializeOfflineNodes method always returns empty collection
5897 - ValidatorException while validating self-signed X509 certificate
5901 - DBCompare produces output SQL with invalid syntax
5903 - Failing to create trigger on table
5904 - LOB data does not sync when sending a load with use_stream_lobs=1
5906 - Non transactional initial load setup can cause load events to be missed ini table_reload_status
5913 - Update postgres documentation on how to give access to schemas for a SymmetricDS user
5915 - Cannot Install swaggerui module by using symadmin ModuleManager

3.14.9 (Pro)
5947 - Onprem to cloud infrastructure script makes routers in same direction
5951 - "Edit privileges" button in web console’s Configure→Roles tab grayed out at wrong times
5956 - Displays "logging off" forever if an engine doesn’t start
5958 - SQLServerException when using the SQL Server Azure bulk loader with Azure cloud storage
5959 - Error when replicating DDL for table with SQL Server smallmoney column
5962 - Manage→Outgoing Batches, selecting channel, moving away from screen and coming back loses previous selection

3.14.9
5931 - log.slow.sql.threshold.millis and log.sql.parameters.inline parameters do not work and are not documented
5934 - Getting null pointer from Column.java in new method anyPlatformColumnTypeContains on platformColumns
5935 - Failed to execute IHeartbeatListener PushHeartbeatListener java.lang.NullPointerException When Starting up SymmetricDS
5942 - SQLAnywhere DDL problems with dropping indexes and triggers, and trigger syntax issue for version 11 and earlier
5948 - KafkaDataWriter by ROW method has a trailing comma
5955 - Sybase Anywhere - channel_id size Problem on auto-create triggers
5961 - SQL Anywhere long varbit values are inconsistent between change data capture and initial load

3.14.10 (Pro)
5967 - Unable to select a different runtime database than the same one used for application tables (log based setups)
5968 - Microsoft MsSQL jdbc driver does not handle synchronization of uniqueidentifiers correctly.
5973 - DB2 iSeries journal based capture support when old data is not present on updates
5974 - DB2 iSeries log miner connection leak
5975 - Upgrading from open source to pro is missing pro tables
5977 - Database performance test broken on SQL-Server and others
5979 - Load Data Wizard doesn’t show multiple different table routers as options.
5988 - OracleStatementParser should not throw exception for empty sql or sql that is a comment
5989 - Details in Load Screen can contain information for the incorrect load
6019 - Oracle log miner stuck on resetting SCN number ORA-01281
6026 - SQL Server Bulk issue when batch column count is different than target table column count
6028 - LogMinerService debug log issue when logging close of miner and start and end SCN ids
6047 - Oracle statement parser does not handle the case when the column names in the where clause are prefixed with the table name
6059 - Sybase ASE generated column query fails on versions older than 16

3.14.10
5788 - The source_table_name wildcard behavior does not match the documentation on the website
5965 - Conflict Detection Fixes for Unique Keys
5971 - Loads fail when they include a table with a SQL Server uniqueidentifier column
5976 - User is incorrectly warned that table is missing primary key
5984 - Fixed compatibility for other databases to insert/update into Sybase ASE Unitypes
5986 - Method that selects from sym_node_security is not synchronized
5992 - Conflict resolver does not handle unique index violations correctly when a unique index ignores null values
6011 - Do not attempt to "create or alter" triggers on SQL Server 2016 RTM
6021 - SQLException when updating a non-OK outgoing batch on some database platforms
6043 - ConcurrentConnectionManager expects nodeId-channel in the white list, but only the nodeId is put in the white list
6051 - Sybase ASE result set has already been closed during trigger exists check

3.14.11 (Pro)
6084 - ElasticSearch Data Writer should use upsert functionality when updating records
6092 - Add Table(s) Wizard should not specify the catalog/schema name for a new trigger if it is the default catalog/schema
6117 - Save As Copy in GUI always keeps saved object as selected
6118 - The logminer fails to serialize/deserialize timestamps
6119 - JsonIOException fails to deserialize log summary event
6141 - Postgres log miner parsing exception with NULL value
6151 - StringIndexOutOfBoundsException when switching screens when the web console’s URL doesn’t end with "/app"

3.14.11
6032 - Multiple queues can cause contention when trying to register a node.
6071 - sym_node gets updated unnecessarily when heartbeat.update.node.with.batch.status parameter is disabled
6073 - Sync triggers fails when checking for multiple active trigger histories if Sybase ASE page size is 2K
6076 - Protect against exceptions in CPU monitor
6098 - Many router types attempt to handle non-DML data event types when they do not support them
6112 - Cancel of load at target does not clean up everything at the source and still shows active at target
6127 - Dbfill of nchar/nvarchar and avoid timestamp/rowversion
6133 - DB compare was incorrectly hex-encoding Unitype columns
6143 - Postgres timestamp with time zone columns get their values formatted incorrectly when extracted for a load
6150 - Firebird sym_hex UDF can cause an access violation

3.14.12 (Pro)
6030 - Work queued via BackgroundRefresherService sometimes does not get done
6179 - "Allow changes from SQL to be captured" checkbox doesn’t work when sending SQL
6181 - Table name filter in Load Data Wizard doesn’t work
6196 - Failed to queue work because the background refresher service has been shut down
6203 - Selection on Manage Installed Triggers screen does not behave correctly when filtering the grid
6208 - Encrypted parameter values need to be decrypted before saving into the batch file when synchronizing
6221 - Incoming Panel on dashboard does not show bulk loading correctly

3.14.12
6162 - Snapshot error from database time on Sybase ASE/ASA
6175 - Upgrade Jetty
6192 - Adjusting unique indexes to non-unique when columns can be null should be able to be turned off by parameter
6211 - Registration error: sym_parameter changes causing sync triggers need to be limited to DML changes
6223 - Imported configuration sometimes gets deleted from sym_data

3.14.13 (Pro)
6265 - Registration failing when registering node is remote and SMTP password is set to null in sym_parameter
6306 - Syntax error when updating sym_table_reload_status using a Progress OpenEdge database
6308 - LOBs should not be included in where clauses when using a Progress OpenEdge database

3.14.13
6245 - Cancel Load needs to make sure processes threads shut down before updating outstanding load request records
6263 - Include source_node_id in the where clause when updating or deleting from sym_table_reload_status
6266 - Prevent columns from being created with a size of 0
6269 - Prevent OracleSymmetricDialect from underestimating the current value of a sequence
6274 - FileSyncDataRouter gets FileTriggerRouters from database instead of cache
6282 - Spring Framework URL Parsing with Host Validation
6298 - Upgrade mysql, postgres libraries
6299 - Hot spot removing old node sessions in mixed environment with versions < 3.11

3.14.14 (Pro)
5969 - When using SQL Server Log based, you cannot select two different SQL Server Database instances

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

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

SYM_EXTRACT_REQUEST
Column Name Description

source_node_id

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

SYM_INCOMING_BATCH
Column Name Description

bulk_loader_flag

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

SYM_JOB
Column Name Description

is_clustered

Whether to acquire a cluster lock or not.

SYM_NODE
Column Name Description

batch_last_successful

The last incoming or outgoing batch that was marked OK that is not on the config, heartbeat, or monitor channels.

data_rows_to_send_count

The number of of rows to replicated in batches. This field is updated as part of the heartbeat job if the heartbeat.update.node.with.batch.status property is set to true.

data_rows_loaded_count

The number of rows that has been successfully replicated since last purge. This field is updated as part of the heartbeat job if the heartbeat.update.node.with.batch.status property is set to true.

oldest_load_time

The oldest recorded sync time since the last purge.

most_recent_active_table

The most active table to sync recently (time based on last 5 minutes and doubles until a match is found or until 80 min.))

purge_outgoing_last_run_ms

The number of milliseconds that the purge job took on the last run. This field is updated as part of the heartbeat job if the heartbeat.update.node.with.batch.status property is set to true.

purge_outgoing_last_finish

The time the purge outgoing last finished succesfully. This field is updated as part of the heartbeat job if the heartbeat.update.node.with.batch.status property is set to true.

purge_outgoing_average_ms

The average time the purge outgoing has been run. This field is updated as part of the heartbeat job if the heartbeat.update.node.with.batch.status property is set to true.

routing_last_run_ms

The time it took for the the last routing job to finish succesfully. This field is updated as part of the heartbeat job if the heartbeat.update.node.with.batch.status property is set to true.

routing_last_finish

The time the routing job last finished succesfully. This field is updated as part of the heartbeat job if the heartbeat.update.node.with.batch.status property is set to true.

routing_average_run_ms

The number of milliseconds that the routing job averages. This field is updated as part of the heartbeat job if the heartbeat.update.node.with.batch.status property is set to true.

sym_data_size

The current size of the sym_data table. This field is updated as part of the heartbeat job if the heartbeat.update.node.with.batch.status property is set to true.

SYM_NODE_HOST_JOB_STATS
Column Name Description

error_flag

A flag that indicates that this job was in error.

error_message

The error message that occurred.

SYM_NODE_SECURITY
Column Name Description

registration_not_before

Allow registration beginning at this timestamp.

registration_not_after

Allow registration until this timestamp.

SYM_OUTGOING_BATCH
Column Name Description

bulk_loader_flag

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

SYM_TABLE_RELOAD_STATUS
Column Name Description

error_batch_id

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

batch_bulk_load_count

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

SYM_TRIGGER_HIST
Column Name Description

is_missing_pk

Indicates whether the source table is missing a primary key.

Modified Tables

SYM_CONSOLE_EVENT (Pro)
  • event_code size changed from 25 to 50

SYM_CONSOLE_ROLE_PRIVILEGE (Pro)
  • privilege_name size changed from 50 to 80

SYM_EXTRACT_REQUEST
  • 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)

Parameters

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)

auto.reload.use.config

If this is true, a reload will use configuration to determine which nodes to send a load to. Default will send to the load to the node it regiestered (Default: false)

auto.resolve.foreign.key.violation.delete

If this is true, when a batch receives a foreign key violation due to the parent row being updated or deleted, all existing child rows will be deleted. (Default: true)

auto.resolve.primary.key.violation

If this is true, when a batch receives a primary key violation during an update, the blocking row will be replaced with the updated row. (Default: true)

auto.resolve.unique.index.ignore.null.values

If this is true, when a batch receives a unique index violation, the blocking rows for each unique index will only be deleted if the unique index has a value that is not null. This only has an effect if the auto.resolve.unique.index.violation parameter is set to true. (Default: true)

auto.resolve.unique.index.violation

If this is true, when a batch receives a unique index violation, the blocking rows for each unique index will be deleted. (Default: true)

cloud.bulk.codepage

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

cloud.bulk.field.quote

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

cloud.bulk.field.terminator

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

cloud.bulk.row.terminator

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

conflict.default.pk.with.fallback

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)

create.index.convert.unique.to.nonunique.when.columns.not.required

If set to true, then convert unique indexes to non-unique when one of the columns is defined as not required (defined with the NOT NULL constraint). (Default: true)

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: )

data.flush.jdbc.batch.size

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

dataloader.create.table.without.defaults.on.error

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)

dataloader.ignore.sql.event.errors

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

dataloader.log.sql.params.on.error

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)

default.values.to.leave.unquoted

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

default.values.to.translate

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: )

log.slow.sql.threshold.millis

Defines the number of milliseconds before logging that a query is slow. (Default: 20000)

log.sql.parameters.inline

Defines whether the logging of SQL statements include the values inline or not. (Default: true)

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)

mssql.bulk.load.bcp.cmd

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

mssql.bulk.load.use.bcp

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

mssql.use.snapshot.isolation

Specifies if snapshot isolation should be automatically turned on. (Default: false)

mssql.use.varchar.for.lob.in.sync

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)

opensearch.load.aws.access.key

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

opensearch.load.aws.secret.key

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)

registration.auto.create.group.link

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)

registration.max.time.between.retries

The maximum time (in seconds) between node registration retries. (Default: 30)

registration.push.config.allowed

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.data.reader.use.multiple.queries

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)

routing.lock.timeout.ms

The amount of time a single routing worker node_communication lock will timeout after. (Default: 7200000)

routing.max.batch.size.exceed.percent

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)

routing.thread.per.server.count

The number of threads created that will be used to route channels concurrently on one server in the cluster. (Default: 5)

routing.use.channel.threads

When enabled, use a thread per channel for parallel routing. (Default: false)

s3.load.format (Pro)

The file format in which S3 output will be written (Default: csv)

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

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

snapshot.max.batches

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

snapshot.max.files

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

snapshot.max.node.channels

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

snapshot.operation.timeout.ms

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)

spatial.data.types.enabled

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)

sybase.ase.convert.unitypes.for.sync

Converts unitypes in Sybase ASE to the corresponding type in the target database. (Default: false)

sync.triggers.fix.duplicate.active.trigger.histories

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)

sync.triggers.reg.svr.install.without.config

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)

trigger.capture.ddl.check.trigger.hist

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)

trigger.use.insert.delete.for.primary.key.changes

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

treat.binary.as.lob.enabled

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