Overview
SymmetricDS Pro 3.15 release includes 47 features, 209 improvements, and 342 bug fixes.
Security Fixes
| Issue | Summary | Severity |
|---|---|---|
Add break glass users (Pro) |
Medium |
|
Allow console users to login using SAML authentication (Pro) |
Medium |
|
Security Vulnerability in Spring Framework and h2 database |
High |
|
Enhance User Roles with Hierarchy (Pro) |
Low |
|
Use the value of javax.net.ssl.trustStoreType as the truststore type if specified |
Medium |
|
CVE-2016-1000027 - /opt/symmetric-server/web/WEB-INF/lib/spring-web-5.3.27.jar |
Highest |
|
Add Unknown Certificate Authority insight (Pro) |
Medium |
|
Upgrade Jetty |
Medium |
|
Spring Framework URL Parsing with Host Validation |
Medium |
|
Upgrade mysql, postgres, vaadin, jetty libraries |
Medium |
|
Spring Framework URL Parsing with Host Validation (part 2) |
Medium |
|
SQL Explorer privileges for read-only queries (Pro) |
Medium |
|
Disallow HTTP methods not needed for data sync |
Medium |
|
Upgrade Spring libraries |
Medium |
|
Update jetty server dependency to 11.0.24 |
Medium |
|
Add functionality to read the SAML IdP certificate from the IdP metadata URL (Pro) |
Medium |
|
Sign SAML requests with SHA-256 instead of SHA-1 (Pro) |
Medium |
|
Add a parameter to allow specification of OneLogin SAML properties via a properties file (Pro) |
Medium |
|
Add functionality to have the purge job automatically rotate the SAML SP x509 certificate when it’s near expiration (Pro) |
Medium |
|
Disallow access to WEB-INF (Pro) |
Medium |
|
Upgrade chartjs and remove momentjs (Pro) |
Medium |
|
Upgrade commons-vfs (Pro) |
Medium |
Performance Fixes
| Issue | Summary | Severity |
|---|---|---|
Have file sync make better use of staging |
Medium |
|
Cache list of enabled nodes used by routing |
Medium |
|
Purge should use "exists" clause instead of "in" clause for performance |
Medium |
|
Hot spot removing old node sessions in mixed environment with versions < 3.11 |
Medium |
|
Deadlocks on Sybase due to default table locking scheme being overly restrictive |
Medium |
|
The database performance test dialog initially displays a rating of 0.0, causing confusion (Pro) |
Medium |
|
Limit number of changes requested by the Log Miner from PostgreSQL (Pro) |
Medium |
What’s New
DB2 for i Log-based Replication
DB2 for i replication (on IBM iSeries AS/400 platform) was expanded to include log mining of journals, in addition to trigger-based change capture.
MariaDB Log-based Replication
MariaDB support was expanded to include log mining of the binary log, in addition to trigger-based change capture.
Progress OpenEdge Replication
Replicate changes from Progress OpenEdge database or load data from other databases into it. OpenEdge is a relational database management system with a 4GL programming language for building business applications. This dialect has bi-directional support that includes change data capture, sub-setting, transformations, and initial loads.
Compare and Repair
Compare and Repair feature allows comparison of data between a source database and one or more target databases. The user has options of all or specific tables, level of comparison, immediate or scheduled, and whether to report or repair data. Comparison can use checksums at a table or chunk level to minimize use of the network. Parallel threads are used on each database per comparison request (compare.queue.per.request.count) with a maximum number of threads available on each server (compare.thread.per.server.count). A report of matching, different, missing, and extra rows can be kept, including a SQL file of changes that can be viewed or applied automatically to the target database.
Insight Manager
The Insights Manager is a sliding panel on the left side of the Dashboard that presents the user with proactive AI-generated recommendations that can help optimize and enhance the system. The user can choose to approve actions, schedule reminders for a later time, or dismiss altogether. Insights are collected across all nodes in the system and use pattern matching and rules collected from support cases.
UI Improvements
Screens now use lazy initialization to reduce the time it takes to login and navigate. The Manage → Jobs screen has a new history icon that opens a listing of job runs from the past 30 days along with a graph of job statistics.
Security Improvements
Web console users can be put into a hierarchy of roles, giving them permission to create or modify users at or below their current role. Web console users can be given a "break glass" indicator that prevents login unless another user breaks the glass for a temporary, time-based password to the account. Web console users can now authenticate with single sign-on (SSO) using the SAML security standard with a third party identity provider.
Performance Improvements
Purge now uses "exists" clause instead of "in" clause for correlated deletes if the database supports it. File sync now stages file changes to improve response time for pull sync requests, which also helps with network timeouts. Routing now uses a cached list of enabled nodes it can route changes to for each batch it creates. The default push and pull intervals were changed to 10 seconds to reduce the sync time experienced by new users.
Operational Improvements
Old data gaps are marked as expired by routing for performance, but left in the system for purge service to track and remove after a longer time period (purge.expired.data.gap.retention.minutes). If purge service finds data in an expired gap, it will repair the data by queuing reloads of the rows by primary key values. The sym_outgoing_error table was added to mirror sym_incoming_error and allow users to provide resolution for data conflicts on the outgoing side. All HTTP error codes now use 600 series to distinguish from any network devices that use standard 500 series. In some cases, more specific HTTP error codes are now used that may cause older clients to log only a general error message with the error code, which include 601 bad request, 602 engine not found, and 605 client already connected.
The symconsole command line utility can now perform operations with the license key.
Technology Upgrades
H2 database version 2 is now included. Users with existing H2 1.x databases may need to add ";MODE=LEGACY" to the end of db.url or "set MODE LEGACY" to db.init.sql (the Pro installer will do this automatically). Spring framework libraries were updated to version 6. Spring Boot 3 is now used to run the Jetty web server in standalone mode. Java 17 or later is now required.
Issues
New Features
3.15.0 (Pro)
SYM-1613 - Add the ability to resend a batch by reload that has been ignored or has had a row ignored
SYM-5591 - Add symconsole subcommands to REST API
SYM-5758 - Add break glass users
SYM-5830 - Allow console users to login using SAML authentication
SYM-5838 - Log miner for MariaDB database
SYM-5917 - Add insight manager to dashboard and replace integrity checks with insights
SYM-5945 - Compare and repair with remote nodes
SYM-5952 - Add job trending insight
SYM-5953 - Replace unsent batch monitor with one for online nodes and another for offline nodes
3.15.1 (Pro)
SYM-6000 - Add import-cert subcommand to symadmin
SYM-6031 - Add connection reset insight
SYM-6037 - Add LOB insight
SYM-6042 - Add Registration → Show Rejected menu option to Manage Nodes screen
SYM-6049 - Add connection pool insight
SYM-6056 - Add priority column and Control → Toggle Priority button to Manage Nodes screen
SYM-6075 - Add stranded data insight
3.15.2
SYM-6154 - Add parameters that can disable specific types of conflict resolution
3.15.3 (Pro)
SYM-6218 - Subselect router support for SOURCE_NODE_ID variable
3.15.3
SYM-6188 - Add boolean data type support for Oracle 23c
3.15.4 (Pro)
SYM-6231 - Time-Based Capture Feature
3.15.4
SYM-6243 - Support H2 version 2.2
3.15.7 (Pro)
SYM-6417 - Log miner support for update loop prevention and sync on incoming
3.15.9
SYM-6598 - IPurgeListener needs to have the capability to run functionality before the purge outgoing/incoming is run
3.15.11 (Pro)
SYM-6648 - Support to Pause/Resume Replication For a Given Node
3.15.11
SYM-6647 - Pause/Resume Nodes
3.15.13
SYM-6690 - Send Trigger DDL when sending table schema
3.15.15 (Pro)
SYM-6764 - Add functionality to read the SAML IdP certificate from the IdP metadata URL
SYM-6769 - Add a parameter to allow specification of OneLogin SAML properties via a properties file
SYM-6775 - Add functionality to have the purge job automatically rotate the SAML SP x509 certificate when it’s near expiration
Improvements
3.15.0 (Pro)
SYM-5137 - Upgrade to Vaadin 24
SYM-5589 - Move REST API to SymmetricDS Pro
SYM-5637 - Set SET MODE LEGACY in db.init.sql for H2 databases in engines, remove DB_CLOSE_ON_EXIT from db URL if AUTO_SERVER also set
SYM-5769 - Optimize startup of all screens by waiting until they’re opened to query and populate data
SYM-5789 - Move and enhance monitors and notifications for SymmetricDS Pro
SYM-5796 - MongoDB bidirectional nested data sync
SYM-5861 - Improve accuracy of CPU monitor
SYM-5928 - Use sym_outgoing_error table to ignore a row in outgoing batch
SYM-5941 - Enhance User Roles with Hierarchy
SYM-5963 - License key command line operations
SYM-5972 - Unlock feature of Nodes Panel should be in Registration dropdown
3.15.0
SYM-1132 - Support Postgres Special Floating Point Values Infinity, -Infinity, NaN
SYM-5641 - Increase default db.pool.max.active connections to match what is needed for http.concurrent.workers.max
SYM-5740 - Have file sync make better use of staging
SYM-5770 - Use 600 series HTTP codes to distinguish from network devices
SYM-5778 - Change timestamp size on sym tables with a timestamp as a primary key
SYM-5784 - Cache list of enabled nodes used by routing
SYM-5792 - Better logging when ack fail
SYM-5827 - Track expired data gaps and repair any data missed by routing
SYM-5840 - Purge should use "exists" clause instead of "in" clause for performance
SYM-5842 - Purge retention for monitor events and console events
SYM-5843 - Change default push/pull to 10 seconds
SYM-5860 - Increase the statement query timeout
SYM-5927 - Use sym_outgoing_error table to ignore a row in outgoing batch
3.15.1 (Pro)
SYM-5882 - Postgres Log Mining Enhancements
SYM-5995 - Load screens should not reset their sort order on refresh
SYM-5997 - Selecting a multi-node row on the Manage Nodes screen should select all of the child rows
SYM-6009 - Connect Database Wizard should prevent the user from using the Microsoft driver for SQL Server 2005 or older
SYM-6022 - Oracle log miner should skip the SQL statement instead of throwing an exception when the SQL is empty or the schema is null
SYM-6038 - Upgrade to Vaadin 24.2 and use the new SvgIcon class
SYM-6045 - Improve details of CPU and memory monitor events
SYM-6054 - Move Unlock feature of Manage Nodes screen back to the Control dropdown
SYM-6058 - Dashboard Health panel should have a separate message for system batches
SYM-6061 - Add Table(s) Wizard should not query for metadata when filtering table names
SYM-6066 - "Open Web Console" button in SymmetricDS Pro Control Center should get the hostname from the host.bind.name property
SYM-6068 - Windows service fails to start when desktop is slow to initialize
SYM-6102 - Add more details to the Rest Keys section of the User Guide
3.15.1
SYM-6003 - Upgrade Gradle Docker Plugin to latest version and get it working
SYM-6007 - Prevent node from starting up if the sync.url is invalid
SYM-6017 - DDL Create Table Oracle with varchar columns that have a size > 4000
SYM-6035 - Use the value of javax.net.ssl.trustStoreType as the truststore type if specified
SYM-6041 - Reject node registration request
SYM-6057 - Multi-threaded routing by channel
SYM-6069 - Slow extract and load when using $(targetExternalId) variable
SYM-6081 - Improve name and documentation for DBExport’s --symmetric option
SYM-6083 - SQLite nodes do not insert into sym_context correctly when disabling sync triggers
SYM-6086 - Improve watchdog job and enable it by default
SYM-6096 - Contains big LOB check can be fooled by commas in data
SYM-6097 - Cache trigger template hashcode
SYM-6104 - Add indexes to sym_outgoing_batch
3.15.2 (Pro)
SYM-6114 - Add process info to support snapshot
SYM-6125 - Ensure subset data wizard does not create a router id that exceeds max length of table
SYM-6126 - Prevent users from creating triggers for a load-only node group via the Add Tables Wizard
SYM-6149 - Set query time out for log based support to match trigger based
3.15.2
SYM-6106 - Some Bulk loaders don’t process before filters
SYM-6132 - Too many "Expected but did not receive an ack for batch"
SYM-6146 - Additional trigger template variable to suppor primary key joins without an alias
SYM-6148 - Remove individual jobs stats for push and pull and uri handlers
3.15.3 (Pro)
SYM-6136 - Look into using Launch4j to start java on Windows
SYM-6169 - Improving and Re-evaluating the Email Verification Process
SYM-6172 - Windows service executable that launches Java
SYM-6191 - SQL-Server log mining should not require snapshot isolation
SYM-6200 - Remove securityToken parameter from /outgoingBatchSummary REST API call
SYM-6202 - Make "Active Errors" dialog display all severe monitor events
SYM-6225 - Compare and repair subsets, also fixes for scale, sort column names, viewing scripts
3.15.3
SYM-6165 - During an upgrade, log DDL before executing it instead of afterwards
SYM-6174 - Could not find trigger history, causes error of had X columns but expected Y
SYM-6178 - Snapshot util timeout for taking too long on table definitions
SYM-6184 - Multi-threaded routing and gap detection
SYM-6185 - Unnecessary unrouted batch appears along with routed batch
SYM-6189 - Issue with syncing BIGINT, INT, TINYINT, SMALLINT, and BIT data types to Oracle and Tibero databases
SYM-6198 - Record failed sync trigger attempts to database in trigger history and stats
SYM-6206 - Add LOB Mapping for SQL Server 2005 and later
SYM-6210 - "Node failed to authenticate" in server logs after server restarts or client session expires
3.15.4 (Pro)
SYM-6228 - Prevent empty identifier on configure screens
SYM-6236 - Add logging for if the Bulk Loader Screen has a failure
SYM-6239 - Deleting items on a Configure screen should not create the UI for the form
SYM-6242 - Improve performance of table selection in Add Tables Wizard
SYM-6247 - Unknown monitor type with older nodes causes excessive logging
SYM-6249 - CPU monitor should use Java routine if native command not available
SYM-6254 - Blocked transaction monitor continuously logs error if missing permissions
SYM-6255 - Snowflake default connection to continue to use JSON instead of Apache Arrow
SYM-6290 - MSSQL Bulk Loader (BCP) parameter to allow the instance value to be omitted from the command
SYM-6293 - Compare repair UI improvements
SYM-6294 - Compare repair allow tables without PK if user sets sync key names
SYM-6304 - Progress OpenEdge platform should have a dirty SQL template
SYM-6305 - Compare repair snapshot and logging
3.15.4
SYM-6201 - Add support for NTypes in XML
SYM-6240 - Failed to update a table_reload_request as processed for loadId
SYM-6256 - Add virtual column to sym_file_snapshot for easier routing by column match and bean shell routers
SYM-6272 - Startup logging for specific node securities that can’t decrypt
SYM-6278 - Change file sync processing to make immediate request when batches are received or sent
SYM-6279 - Make File Sync Tracker transactions smaller to minimize locking collision problems
SYM-6292 - File sync BeanShell script should place files in a separate error directory if they are not writable
SYM-6301 - Update Rest Keys docs to reflect correct error code
3.15.5 (Pro)
SYM-6261 - Table group support with log based and time based captures
SYM-6287 - Add table wizard checks configured tables based on trigger id rather than table name
SYM-6291 - Enhance logging surrounding a failure to decrypt node password
SYM-6319 - Replace deprecated vaadin.whitelisted-packages property
SYM-6322 - Console event for cancelling a load request
SYM-6345 - Update user guide to explain how to capture old data for updates when using DB2 for IBM i journaling
SYM-6349 - Log when refresh of screen runs longer than a threshold
SYM-6354 - Reduce time to login to web console and access important screens
3.15.5
SYM-6320 - Parameter for file sync compression of ZIP archive
SYM-6332 - Allow specification of initial load select for initial load of filesync channel
SYM-6333 - File sync BeanShell script should place files in a separate error directory if any error occurs when they are copied
SYM-6346 - Use read uncommitted for checking heartbeats and offline nodes
SYM-6352 - Improve logging when a problem occurs during repair of unrouted data
3.15.6 (Pro)
SYM-6376 - Added functionality to support Elasticsearch 8
3.15.7 (Pro)
SYM-6392 - Add parameter to allow null values to remain null when loading into columns with default values using SQL Server bcp bulk loader
SYM-6396 - Move bulk loader parameters from symmetric-ds to symmetric-pro
SYM-6398 - Allow multi-line editing of delete first parameter
SYM-6399 - Auto Create Transforms dialog should notify the user if it fails to auto create column mappings
SYM-6405 - On the Manage Nodes screen, move the Sync URL column’s copy button to the left of the text
SYM-6418 - SQL Server bcp trust server certificate parameter
SYM-6421 - Added auto selection for load data if only one node exists
SYM-6425 - If a user ignores a row via the "Resolve Data" panel, no console event is logged
SYM-6426 - The batch window should ignore a row in the same way the batch panel ignores a row
SYM-6427 - User feedback on Comparison panel when request is cancelled
SYM-6431 - Allow disabling the ordering of SQL Server log mining output by transaction ID, allowing ordering by foreign key constraints
SYM-6432 - Fixed issue causing auto refresh to uncheck on scroll
SYM-6437 - Batch Panels in the UI should show when a batch has rows that were ignored
SYM-6439 - Add -b option to SQL Server bcp bulk loader
SYM-6440 - Repair script that handles different table case by using batch CSV
SYM-6455 - Conflict detection newer wins for log miners
SYM-6463 - RabbitMQ support for username and password
SYM-6472 - Move REST API parameters to Pro
3.15.7
SYM-6413 - DBImport should have option to adjust create.index.convert.unique.to.nonunique.when.columns.not.required param
SYM-6434 - Logging of mismatch primary key that causes auto resolver action
SYM-6435 - Avoid checking newer capture time if table isn’t being captured
SYM-6448 - Provide the ability to specify a no lock hint when reading DDL
SYM-6449 - Add a "Show Triggers" option to SQL Explorer
SYM-6465 - Prevent sync triggers from running the trigger DDL when it’s called to export a SQL script
SYM-6469 - Add a section to the user guide that explains how to add a new node without having SymmetricDS run any DDL
SYM-6478 - Column match router expression for has, starts with, and ends with
3.15.8 (Pro)
SYM-6491 - Compare support excluded/included column names
SYM-6493 - RabbitMQ add content type to header for JSON XML etc
SYM-6495 - Added on click icon in Node status when node registration is in error
SYM-6498 - Data refresh job defer constraints on table
SYM-6499 - Enhance REST API to allow users to select xml or json for the return type
SYM-6519 - Split violation screen into tabs. Added ability to delete groups in group violation screen
SYM-6527 - Added File Sync to Azure Blob Storage
SYM-6542 - Removed parameter changes associated with Dashboard Layout changes
SYM-6546 - The add table wizard will not refresh the table list if the database does not support schemas
SYM-6548 - Enhancing REST API logging and tracking
SYM-6550 - File Sync to and from S3 bucket storage
SYM-6553 - SQL Explorer privileges for read-only queries
3.15.8
SYM-6219 - Make Sybase ASE triggers use an "insert … select" statement instead of a cursor
SYM-6516 - Routing process status and lock improvements
SYM-6521 - Initial load request should cancel outstanding load requests
SYM-6528 - Upgrade sybase JDBC driver to jconn4 version 16.0 build 27538
SYM-6529 - Do not data load columns that are generated (computed)
SYM-6535 - Support for MySQL 5.1 with latest 3.15.x versions
SYM-6545 - MSSQL create table support for user defined types
SYM-6557 - Filter extension point during extraction
3.15.9 (Pro)
SYM-6558 - Add IExtractDataFilter interface to Extension Form screen
SYM-6564 - Various improvements to load detail and loads panel
SYM-6570 - Display max memory on control center
SYM-6573 - SQL Server bulk loader should fail on first error
SYM-6574 - SQL Server bulk loader better row and field terminators
SYM-6587 - SQL Server bulk loader bcp use quoted identifiers
SYM-6591 - Load Detail, Load Panel, and Load Detail Pop up
SYM-6596 - Compare default to chunking for remote and without for local
SYM-6599 - IPurgeListener needs to have the capability to run functionality before the purge outgoing/incoming is run
3.15.9
SYM-6559 - Purge and recapture can cause exception in routing
SYM-6569 - Symadmin option to drop SymmetricDS triggers
SYM-6575 - Service wrapper should warn if incompatible Java version
SYM-6576 - Disallow HTTP methods not needed for data sync
SYM-6578 - SQL Server support for datetime and datetime2 column types when the paramter db.treat.date.time.as.varchar.enabled is true
SYM-6592 - Added currentRowCount to process info. Updated DataService
SYM-6594 - Support DDL for automatic update of timestamp by database
3.15.10
SYM-6608 - Performance bottleneck in file change detection for >1M files
SYM-6610 - Move Tibero support to Pro
SYM-6624 - Faster snapshot exports and more checkpoint progression
SYM-6631 - Deployment of WAR on Tomcat 10
SYM-6641 - BasicDataSourceFactory should not set user and password if they are empty
SYM-6645 - Update jetty server dependency to 11.0.24
3.15.12 (Pro)
SYM-6667 - Add logging and user notification when exceptions occur on saving the Console User Form
3.15.12
SYM-6671 - When SymmetricDS has to add a new column to a sym_ table in a Sybase ASE database, it can recreate the table unnecessarily
SYM-6676 - Preserve comments on stored procedures when loading DDL changes (new parameter dataloader.sql.event.strip.comments)
SYM-6684 - Switch recapture transaction ID to ISO timestamp to help diagnose stranded data issues
3.15.13
SYM-6637 - Add support for Derby boolean data types
SYM-6677 - Support include column for SQL Server indexes (covering index)
SYM-6709 - Support UUID column types (including DDL) directly for MySQL and MariaDB
SYM-6710 - Create parameter to keep bulk load files (for testing and development)
SYM-6716 - Deadlocks on Sybase due to default table locking scheme being overly restrictive
SYM-6717 - Improve logging of batch without batch ID
SYM-6725 - Allow IClientReloadListener to be used on H2 and SQLite
3.15.14 (Pro)
SYM-6743 - Add SymmetricDS label as a Client Provided Name for new RabbitMQ connections
3.15.15 (Pro)
SYM-6766 - Sign SAML requests with SHA-256 instead of SHA-1
3.15.16 (Pro)
SYM-6821 - Batch fails with BadPaddingException and keeps retrying
3.15.18
SYM-6965 - Update Spring and Jetty libraries
3.15.19 (Pro)
SYM-6989 - Limit number of changes requested by the Log Miner from PostgreSQL
3.17.0
SYM-7152 - Limit amount of time the purge job spends on stranded data
Bug Fixes
3.15.0 (Pro)
SYM-4968 - Oracle log miner SQL parser exception from backslash value
SYM-5868 - Ignore Row Count not getting updated in outgoing batch table when a row is ignored
SYM-5936 - Before selection on Manage Nodes screen you can select Test Connection or Test Database
SYM-6235 - Linking table is failing to replicate with error "There is 1 table without a primary key, which can cause slow replication."
3.15.0
SYM-2530 - postgresql infinity timestamp
SYM-2826 - Monitor event duplicate key when syncing
SYM-3505 - SYM_TABLE_RELOAD_REQUEST is updated via DateTime which sometimes fails due to precision mismatch
SYM-5835 - column name containing a "/" causes error
SYM-5857 - Security Vulnerability in Spring Framework and h2 database
SYM-5925 - Ignore Row Count not getting updated in outgoing batch table when a row is ignored
SYM-6039 - CVE-2016-1000027 - /opt/symmetric-server/web/WEB-INF/lib/spring-web-5.3.27.jar
3.15.1 (Pro)
SYM-5998 - Error viewing job history on Manage → Jobs screen
SYM-6020 - Oracle log miner stuck on resetting SCN number ORA-01281
SYM-6024 - JsonSyntaxException when deserializing monitor event details
SYM-6027 - SQL Server Bulk issue when batch column count is different than target table column count
SYM-6029 - LogMinerService debug log issue when logging close of miner and start and end SCN ids
SYM-6048 - Oracle statement parser does not handle the case when the column names in the where clause are prefixed with the table name
SYM-6053 - List of table names in Add Table(s) Wizard can extend below the bottom edge of the layout
SYM-6060 - Sybase ASE generated column query fails on versions older than 16
SYM-6070 - Compare and repair table using Sybase reserved keyword
SYM-6077 - Protect against exceptions in CPU monitor
SYM-6078 - db.init.sql parsing needs to allow values to contain semicolons, specified as 2 semicolons in the value
SYM-6085 - ElasticSearch Data Writer should use upsert functionality when updating records
SYM-6088 - Spring Boot builds unnecessary ElasticsearchRestClientAutoConfiguration bean when elastic search module jars are installed
SYM-6089 - Elastic Search module needs httpclient from apache to be installed
SYM-6090 - Log off not closing session
SYM-6093 - Add Table(s) Wizard should not specify the catalog/schema name for a new trigger if it is the default catalog/schema
SYM-6105 - Setting up a new log based or extract only node via the Add Database Wizard causes a JdbcSQLFeatureNotSupportedException
3.15.1
SYM-6004 - SQL Explorer grid editor causes error in browser and "Edit" button is initially invisible
SYM-6012 - Do not attempt to "create or alter" triggers on SQL Server 2016 RTM
SYM-6016 - Missing Kafka dependencies when installing Kafka module
SYM-6023 - SQLException when updating a non-OK outgoing batch on some database platforms
SYM-6040 - maxFormContentSize and maxFormKeys are no longer used
SYM-6044 - ConcurrentConnectionManager expects nodeId-channel in the white list, but only the nodeId is put in the white list
SYM-6046 - The watchdog job should not allow a node to detect itself as offline
SYM-6052 - Sybase ASE result set has already been closed during trigger exists check
SYM-6072 - sym_node gets updated unnecessarily when heartbeat.update.node.with.batch.status parameter is disabled
SYM-6074 - Sync triggers fails when checking for multiple active trigger histories if Sybase ASE page size is 2K
SYM-6087 - Upgrade from pre-3.15 to 3.15 loses H2 databases
SYM-6099 - Many router types attempt to handle non-DML data event types when they do not support them
SYM-6100 - Engine "filesync" not found
3.15.2 (Pro)
SYM-6109 - Web console is unresponsive after logging in via SAML
SYM-6110 - Logging in via SAML results in the web console repeatedly reloading itself
SYM-6120 - JsonIOException fails to deserialize log summary event
SYM-6121 - Save As Copy in GUI always keeps saved object as selected
SYM-6138 - Refresh loop after hitting refresh button in browser
SYM-6142 - Postgres log miner parsing exception with NULL value
SYM-6147 - SQL-Server bulk load bcp integrated security
SYM-6157 - Getting logged out after returning to SymmetricDS with 'Session Limit Exceeded'
SYM-6158 - Upgrade of module can fail on Windows because files are locked
3.15.2
SYM-6115 - Cancel of load at target does not clean up everything at the source and still shows active at target
SYM-6128 - Dbfill of nchar/nvarchar and avoid timestamp/rowversion
SYM-6139 - Jtds driver does not work with Sybase ASE
SYM-6140 - DB compare was incorrectly hex-encoding Unitype columns
SYM-6144 - Postgres timestamp with time zone columns get their values formatted incorrectly when extracted for a load
SYM-6145 - Purge fails with incorrect syntax near 'd' on SQL Server
SYM-6152 - DDL replication errors on SQL-Server with renaming columns and deadlocks
SYM-6155 - Conflict resolver does not handle unique index violations correctly when a unique index ignores null values
SYM-6156 - Repair of unrouted data should go through routing
SYM-6159 - Firebird sym_hex UDF can cause an access violation
3.15.3 (Pro)
SYM-6005 - "Enter" keyboard shortcut in wizards does not consistently work when using Chrome or Edge
SYM-6033 - Work queued via BackgroundRefresherService sometimes does not get done
SYM-6161 - Mail Server checked wrong class for encryption type and password
SYM-6167 - Checking for root user during installation fails even when user is root
SYM-6180 - "Allow changes from SQL to be captured" checkbox doesn’t work when sending SQL
SYM-6182 - Table name filter in Load Data Wizard doesn’t work
SYM-6186 - Configure → Table Routing screen stuck in bulk edit mode
SYM-6187 - Enabling change tracking on MSSQL should not use brackets
SYM-6197 - Failed to queue work because the background refresher service has been shut down
SYM-6204 - Selection on Manage Installed Triggers screen does not behave correctly when filtering the grid
SYM-6213 - Encrypted parameter values need to be decrypted before saving into the batch file when synchronizing
SYM-6215 - Violation Edit Panel throws exceptions when parsing JSON text for reset of statistics dates and when generating JSON strings
SYM-6216 - MySQL Bulk Loading documentation in appendix missing images
SYM-6220 - Incoming Panel on dashboard does not show bulk loading correctly
3.15.3
SYM-4617 - Corrupted row data during extract
SYM-6163 - Snapshot error from database time on Sybase ASE/ASA
SYM-6168 - File sync push is rejected because of a lack of a reservation
SYM-6171 - Cookies required error when both http and https enabled
SYM-6176 - Upgrade Jetty
SYM-6193 - Adjusting unique indexes to non-unique when columns can be null should be able to be turned off by parameter
SYM-6194 - Postgres XML incorrectly identifies "BOOLEAN" as "BIT"
SYM-6195 - symadmin module error when file exists without a dot
SYM-6205 - Syncing a NCLOB from Oracle to Postgres results in an error
SYM-6207 - Reverse initial load sometimes doesn’t start when also using forward initial load
SYM-6212 - Registration error: sym_parameter changes causing sync triggers need to be limited to DML changes
SYM-6214 - SQLite sync error on sym_table_reload_request when db.treat.date.time.as.varchar.enabled
SYM-6224 - Imported configuration sometimes gets deleted from sym_data
3.15.4 (Pro)
SYM-6137 - take snapshot from license violation screen does not show the snapshots to download them
SYM-6183 - Terminal on Manage Nodes screen does not work
SYM-6227 - If import config during first setup contains license, don’t prompt for license
SYM-6230 - DB2 AS400 iSeries failed to mine log for numeric data types that had a scale.
SYM-6232 - Node group summary database icons sometimes broken
SYM-6233 - SAML authentication does not work with a load balancer
SYM-6237 - Health panel should not count insights
SYM-6238 - When the Process Builder returns non-zero for the Bulk Loader Screen, an UnknownFormatException can occur
SYM-6241 - Switching engine not taking effect on Manage Comparison panel
SYM-6250 - Registration failing when registering node is remote and SMTP Mail Server authentication is configured
SYM-6257 - Design wizard creates lookup table router with unknown type
SYM-6258 - Lookup table router with log mining
SYM-6260 - Comparison screen views repair script as garbage binary when encrypted staging is enabled
SYM-6268 - Registration failing when registering node is remote and SMTP password is set to null in sym_parameter
SYM-6284 - Remote status with websockets broken after Spring Boot transition
SYM-6286 - IndexOutOfBoundsException occurs when trying to access incoming batch data in error via the UI
SYM-6289 - Compare request can’t update status, loops creating new request IDs
SYM-6295 - Compare repair table request gets stuck in inconsistent state
SYM-6307 - Syntax error when updating sym_table_reload_status using a Progress OpenEdge database
SYM-6309 - LOBs should not be included in where clauses when using a Progress OpenEdge database
3.15.4
SYM-6170 - DB Compare incorrectly comparing values
SYM-6217 - Schema information missing from drop index query generated by DDL on PostgreSQL
SYM-6226 - H2 DDL Builder incorrectly adds size information to "UUID" data type
SYM-6229 - Old stage files used after node is rebuilt
SYM-6246 - Cancel Load needs to make sure processes threads shut down before updating outstanding load request records
SYM-6251 - BSH column transform column names can conflict with built-in variable names
SYM-6252 - ASE large column types for primary keys need to limit max size based on page size
SYM-6253 - Issue with Initial loads when using Sybase ASE Unitypes while using JTDS driver
SYM-6259 - Sync triggers is mis-detecting last update time on sym triggers
SYM-6264 - Include source_node_id in the where clause when updating or deleting from sym_table_reload_status
SYM-6267 - Prevent columns from being created with a size of 0
SYM-6270 - Prevent OracleSymmetricDialect from underestimating the current value of a sequence
SYM-6271 - Finding trigger histories should treat null or blank as default catalog/schema
SYM-6275 - FileSyncDataRouter gets FileTriggerRouters from database instead of cache
SYM-6283 - Spring Framework URL Parsing with Host Validation
SYM-6285 - Memory leak in MSSQL JDBC driver 10.2.0
SYM-6288 - Writing table definitions from xml for indexes that do not have a corresponding platform index
SYM-6296 - DefaultDatabaseWriter sql(…) method parsing sql statement during exception needs changed
SYM-6297 - Upgrade mysql, postgres, vaadin, jetty libraries
SYM-6300 - Hot spot removing old node sessions in mixed environment with versions < 3.11
SYM-6302 - Unable to set web context path with symmetric.server.web.home
3.15.5 (Pro)
SYM-6317 - Add Tables Wizard reads table from wrong database when opened from target node with *.auto.create.trigger.options enabled
SYM-6330 - When editing an email-type notification, the email address does not display
SYM-6338 - SQL Server bcp bulk loader can’t handle database URLs that specify the server name or port number via connection properties
SYM-6340 - Debug logging for Db2As400LogMiner doesn’t work
3.15.5
SYM-6310 - Sybase ASE 12 can only quote column names 28 characters or less
SYM-6312 - Failed to decrypt password counter measure if node registration is already open
SYM-6313 - Sync triggers for table should treat null or blank catalog/schema as default catalog/schema
SYM-6315 - MySQL and MariaDB create table support for UNSIGNED columns
SYM-6318 - NullPointerException while extracting data on SQLite as the typeName is not being set by driver
SYM-6321 - Issues using DB Compare with Unitypes
SYM-6324 - Routing file deletes causes null pointer exception when capturing statistics
SYM-6325 - Spring Framework URL Parsing with Host Validation (part 2)
SYM-6328 - Specifying a reload channel ID for the channel_id in sym_table_reload_request results in the load getting stuck
SYM-6335 - File sync batches get synchronized when there is an error during extraction
SYM-6342 - Index out of bounds routing change to sym_node_group_link
SYM-6343 - DbCompare on Postgres not using cursor with fetch size
SYM-6350 - H2 version 2 LONGVARCHAR implementation uses VARCHAR(1000000000)
SYM-6353 - Recapture data in purge service should not handle pre-routed data records
SYM-6355 - Support autosave=always mode on PostgreSQL
SYM-6356 - Creating a table in a load was not checking if platform column existed
3.15.6 (Pro)
SYM-6348 - Issue using DbCompare on SQLServer with table names using reserved keywords
SYM-6358 - Filter on Configure Table Triggers screen doesn’t work correctly
SYM-6368 - License validation fails when the registration server’s sym_node_host row is missing and there are unsent heartbeat batches
SYM-6372 - Source Table field can appear to be blank when editing an existing transform
SYM-6378 - NullPointerException in bcp bulk loader when a batch’s row count exceeds the mssql.bulk.load.max.rows.before.flush
SYM-6379 - Fixed Use Windows Authentication option not showing in the Runtime Database Settings screen
SYM-6382 - SQL Server log miner should use table cache
SYM-6388 - SQL Server bcp bulk loader converts zero-length binary values to null values
3.15.6
SYM-6277 - Startup of SymmetricDS does not fail when Jetty fails to access defined ports
SYM-6347 - Support SQLServer float positive negative infinity value
SYM-6357 - Initial load with overridden symmetric table trigger definition should skip symmetric tables when creating create table events
SYM-6359 - Purge of stranded data fails on Sybase ASE
SYM-6361 - NullPointerException when sending a load with file sync enabled and without a valid sym_trigger_hist row for sym_file_snapshot
SYM-6362 - Upgrade Jetty libraries
SYM-6363 - Auto resolve delete of blocking rows when binary type in primary key
SYM-6370 - MySQL 5.5 and earlier don’t allow timestamp precision
SYM-6373 - SQLite purge fails with unrecognized token: "{"
SYM-6383 - DB Compare fails to work bidirectionally when using Unitypes
SYM-6385 - Error on registration batch or import of config from newer 3.14 or 3.15
3.15.7 (Pro)
SYM-6390 - Bi-directional log-based intermittent unrouted batches that should have routed
SYM-6403 - Transform column editor on Configure Transforms screen can get into a state where a column cannot be deselected
SYM-6416 - MySQL log-based permission check failure can exhaust connection pool
SYM-6422 - Incorrect console event logging when ignoring a row from Outgoing Batch Panel
SYM-6423 - Send Table Schema does not list the tables correctly when trigger is defined with wildcard characters for the table name
SYM-6428 - Compare request may not complete when non-initiating node is the target
SYM-6443 - Control → Toggle Priority button on Manage Nodes screen is only enabled if the current node and selected node are multi-homed
SYM-6450 - Oracle log miner stuck on resetting SCN number ORA-01281
SYM-6451 - The logminer fails to serialize/deserialize timestamps
SYM-6464 - SQL-Server bcp error datetime fractional second precision exceeded
3.15.7
SYM-6394 - When building DDL for SQL Server, default values of 'true' or null for bit columns get changed to 0
SYM-6401 - Issue with file sync when successful, retry is tried even when bean shell script is successful
SYM-6406 - Trigger Sync do not capture updates on included_column_names or excluded_column_names
SYM-6414 - Stream Lobs setting does not work with Sybase ASE Unitypes
SYM-6415 - Recapture data for stranded data and for expired data gaps should keep the old data values to allow subselect routing to work
SYM-6419 - Stopping an engine from JMX sets the auto.start.engine false for ALL engines.
SYM-6420 - SQL Server money data type error with commas
SYM-6424 - Statistics for synchronization should not be saved when batch is in error
SYM-6433 - Exception when auto resolver tries to lock row in conflict
SYM-6442 - NullPointerException when searching for a matching trigger history and row_data or pk_data is null
SYM-6447 - Stack overflow when inserting last gap
SYM-6452 - Newer wins conflict detection table case when cross platform
SYM-6453 - SQL Explorer tree displays schemas incorrectly when using Postgres JDBC driver version 42.7.0 or later
SYM-6458 - DB Compare unable to process Unitypes in both directions.
SYM-6459 - Unitext Columns fail during initial load
SYM-6468 - Symadmin export-sym-tables subcommand doubles the table prefix when called without the --alters option
SYM-6476 - If auto resolve missing foreign key fails, try again
3.15.8 (Pro)
SYM-6457 - Configure → Table Triggers screen stuck in bulk edit mode
SYM-6479 - SQL Server log miner replicating bit as true/false instead of 1/0 causing it to load as false
SYM-6490 - Compare with level 2 statistics gets null pointer exception
SYM-6500 - Kafka throws "Could not find target table" error when "bulk" is used
SYM-6501 - Batch error monitor fails to convert batch details to JSON when they contain a java.sql.Timestamp
SYM-6504 - Compare with CHAR columns with databases using different padding
SYM-6518 - Compare missing t alias, cluster lock, support Boolean and LocalDateTime
SYM-6522 - Failed to compare request with IOException stream closed
SYM-6523 - Compare extract table query can fail if initial load select uses table alias
SYM-6525 - Creating an extension for IDatabaseWriterFilter prevents batches from loading
SYM-6536 - When importing configuration via the "Connect Database Wizard", sym_console_role does not get populated
SYM-6554 - Java validation pop-up on extensions screen
SYM-6556 - CPU monitor is inaccurate for systems with a Mac or Linux OS and more than 1 core
3.15.8
SYM-4000 - java.lang.NoClassDefFoundError: org.jumpmind.symmetric.io.stage.StagingManager$1, even though the class exists in the jar file
SYM-6475 - New "Initial Load" not cancelling previous initial loads
SYM-6482 - Could not find trigger history causes error of wrong number of columns data validation in wrong column
SYM-6485 - Do not issue foreign key correction for non-DML events
SYM-6487 - Wildcard trigger definitions do not remove existing triggers when adding a NOT table name to wild carded definition
SYM-6488 - org.hsqldb.HsqlException: length must be specified in type definition: VARCHAR
SYM-6503 - Sync on incoming batch setting does not get applied if a group link exists with the same source and target group ID
SYM-6505 - Service error and bad request are using same 601 http error code
SYM-6507 - Values can be matched with the wrong columns during extraction when using targetExternalId variable and table definitions differ
SYM-6508 - SQL-Server DDL table alterations when change not needed
SYM-6510 - SQLite with initial load in background can hang
SYM-6513 - File Sync Tracker changes to improve performance and to collect completely the set of files
SYM-6514 - H2 always reconfiguring sym_node table when schema XML changes most_recent_active_table column from varchar to varchar(255)
SYM-6515 - Incoming batch from reload missing table summary when 0 rows
SYM-6517 - Multi primary incorrectly detected when group link is routes only
SYM-6520 - Trigger template replacement for SQL Server and Sybase not replacing channel id variables correctlly
SYM-6524 - Symadmin sync-triggers command does not update triggers
SYM-6526 - Triggers aren’t synced after schema changes.
SYM-6531 - 0006530: Conflict resolution needs to set source node ID when executing conflict resolution for a SQL Server log mining node
SYM-6533 - mssql-jdbc 12.6.1 SocketTimeoutException
SYM-6539 - FileSyncDataRouter should handle initial load that uses an initialloadselect like other routers
SYM-6547 - Prevent registration of registration server or empty node group
SYM-6552 - SQL Anywhere fails to call DatabaseMetaData.getSchemas()
3.15.9 (Pro)
SYM-6563 - AS400 log miner support for negative numeric values
SYM-6568 - Summary 0006563: AS400 log miner support for null numeric values
SYM-6579 - Clustering does not enable after adding license key or changing from GUI
SYM-6581 - Java job validation behaves incorrectly
SYM-6583 - Clicking outside of job script editor causes unexpected behavior
SYM-6588 - Setup program warns of memory available on Linux
SYM-6589 - Restart needed after setup wizard downloads of driver
3.15.9
SYM-6562 - Stream LOB when row is deleted can get exception ColumnNotFoundException
SYM-6565 - Java Load Filter compilation error when some categories are blank.
SYM-6566 - Load cancellation not working from client node
SYM-6567 - Outgoing and incoming error tables sync to wrong targets
SYM-6571 - Database trigger is left on table after removing configuration for it
SYM-6572 - SQL Server updates create duplicate rows with datetime2 in primary key
SYM-6586 - StackOverflow on startup with DB2 LUW
SYM-6590 - Empty LOB loads as null on Oracle
SYM-6597 - Registration batch fails with foreign key error
SYM-6600 - DDL replication of create table with insert in same transaction
SYM-6602 - MySQL/MariaDB treat bit type with size greater than 1 as integer
SYM-6603 - NULL-able trait is not preserved, when column referenced by a unique index
SYM-6604 - Upgrade Spring libraries
3.15.10 (Pro)
SYM-6607 - Check processInfo.getCurrentTableName() is not null in Load Detail
SYM-6615 - Grid on Manage → Processes screen is not displayed because of IllegalArgumentException
SYM-6636 - Add Tables Wizard gets info from the wrong database when not using the source node group’s web console & metadata is unavailable
SYM-6638 - Panel on the Outgoing Loads screen (Workflow) has error indicator not cleared after an error was resolved.
SYM-6640 - Data refesh should exclude disabled trigger routers
3.15.10
SYM-6593 - DDL change cannot alter column to nullable on H2
SYM-6612 - MySQL 5.1 query error because generated columns not supported
SYM-6617 - Update trigger to accommodate NULLs for unique index with NULLable columns
SYM-6621 - NVARCHAR(MAX) and VARCHAR(MAX) columns get modified when another column is updated (SQLServer-specific)
SYM-6622 - Conflict detection for log miners need to use the correct database connection
SYM-6623 - The isNull transform converts an empty string to NULL
SYM-6627 - DDL replication stuck from reader on another connection
SYM-6630 - Initial load with delete first captures the deletes when source and target are log mining nodes
SYM-6646 - Setting node.offline parameter to true or false disables all communication
3.15.11 (Pro)
SYM-6656 - REST service NullPointerException when retrieving node with missing node security
SYM-6658 - Job and Log monitors need to only report from the Monitor job when new events occur after the last run of the Monitor job
SYM-6664 - DB2 AS400 log miner can lose precision when reading numeric values
3.15.11
SYM-2298 - DDL detection of a default value for real/float column type on the Interbase is wrong
SYM-6657 - Data reload events with reload where clause should not be routed in common mode
SYM-6659 - Custom data types causing sizing detection issues on table comparisons
SYM-6662 - Logging of exceptions on data load can show values used in the wrong order when conflict resolution is in play
3.15.12 (Pro)
SYM-6649 - Enabling or disabling extension resets the script to template
SYM-6669 - When resolving data by editing the values on the incoming side, null values are lost and replaced with empty strings
SYM-6673 - When saving extension as a copy the copy does not have the same extension script as the original
SYM-6674 - False conflict change detection on update of Null or Empty values in NVARCHAR(MAX) and VARCHAR(MAX) columns (SQLServer-specific)
SYM-6680 - Reopening registration for a node that handles registration can orphan nodes from replication
3.15.12
SYM-4317 - Mssql - On table with VARCHAR (MAX) column Insert trigget fails
SYM-6685 - Purge Service recaptures an Insert for stranded data after record had been deleted
SYM-6686 - AppUtils static initialization of symmetric-impl.properties needs to try a different way to find file when running in containers
SYM-6689 - Postgres negative default values always show as changed
3.15.13 (Pro)
SYM-6679 - Oracle bulk loader fails to parse database URLs that use TNS format and contain spaces before the equals signs
SYM-6694 - Insight count doesn’t update when approving or dismissing an insight and then collapsing the insight manager
SYM-6698 - Wizard automatically opens without verifying that the console user has write permission
SYM-6699 - Logging Set Levels Advanced throws exception when running in servlet container (not standalone)
SYM-6711 - MSSql bulk loader using bcp fails to load some special characters when bcp is running on Windows
SYM-6723 - The Add Tables Wizard allows duplicate triggers to be added when the source database doesn’t support both catalog and schema
SYM-6724 - SQL Server windows authentication is missing DLL
3.15.13
SYM-6700 - boolean constants in csv row data are not converted correctly on Postgres
SYM-6702 - Failed to update sym_table_reload_request
SYM-6706 - Error in DataService, not closing transaction object
SYM-6708 - DDL Builder always sees a size difference for columns that are types without size when platform column exists
SYM-6718 - Only default queue can push registration
SYM-6721 - Data loader incorrect SQL error when no columns on target table match
SYM-6722 - Purge of batches before data causes appearance of stranded data
SYM-6728 - NullPointerException in JdbcSqlTransaction attempting to remove markers from a bulk insert with an exception
3.15.14 (Pro)
SYM-6731 - Failed to capture change from binary DB2 log because of the 0x00 byte incompatible with runtime tables in Postgres
SYM-6732 - Snowflake support for variant data type
SYM-6733 - In the Connect Database Wizard, clicking the "Previous" button and switching from log-based capture causes unexpected behavior
SYM-6738 - Compare and Repair has issues requesting more than one node at a time to compare
SYM-6739 - Queries with lowercase column names for the CHANGETABLE fail when Case-Sensitive collation is in use (SQL Server)
SYM-6740 - Compare Repair status should indicate when repair is needed but not attempted
SYM-6746 - Compare request when load transform is using variable for target table
SYM-6747 - RabbitMQ Errors when "data_loader_type" is bulk
3.15.14
SYM-6729 - Sync triggers with $(targetExternalId) usage fails to avoid duplicate trigger names
SYM-6730 - Sync triggers with $(targetExternalId) usage fails to avoid duplicate trigger names
SYM-6735 - When cluster.lock.enabled is set to false, the unrouted data count is incorrect before the route job runs for the first time
SYM-6741 - Change log level to WARN in DefaultDatabaseWriter.logFailureDetails
3.15.15 (Pro)
SYM-6712 - The Manage Startup Parameters screen throws a NullPointerException when the engine.name contains a variable or BSH script
SYM-6713 - During an upgrade, new monitors and insights do not get inserted if sym_monitor already existed before the upgrade
SYM-6756 - Compare request keeps running after cancellation
SYM-6773 - RabbitMQ should make "username" and "password" required fields
3.15.17
SYM-6878 - Postgres Log Mining permissions should check creation/dropping of logical replication slots instead of querying for roles
SYM-6880 - Deadlock from updating common batch stats in clustered environment
SYM-6885 - Null pointer exception when cancelling all loads for node
SYM-6907 - Sybase ASE ERROR: value too long for type character varying(255). with rapid insert and delete with Latin-1 → UTF-8
3.15.18
SYM-6928 - Guard against nulll FileModifiedTime in FileSyncService.acknowledgeFiles
SYM-6946 - Add overrides for isBlob and isClob for AseDatabasePlatform
SYM-6954 - Missing maxFormKeys setting causes "form with too many fields" error
SYM-6960 - DBCompare throws a NullPointerException when one database is missing a row with a null value for a UNIVARCHAR column
SYM-6962 - DBCompare can throw a NullPointerException when the source table has unitypes and there are more source rows than target rows
SYM-6969 - Sybase runtime table locking not checked at startup
3.15.20 (Pro)
SYM-7045 - CVE-2025-55163 - io.netty:netty-codec-http2 Allocation of Resources Without Limits or Throttling
3.15.20
SYM-7033 - Leading ZWNBSP character gets lost when replicating Unicode data types from Sybase ASE
SYM-7041 - Detect German version of the ORA-00001 Unique Constraint error on Oracle
SYM-7046 - org.eclipse.jetty.http2:http2-common Eclipse Jetty affected by MadeYouReset HTTP/2 vulnerability
SYM-7048 - Initial load from H2 database gets SQL syntax error
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 |
|---|---|
|
The captured data change that is in error for a batch. The user can tell the system what to do by updating the resolve columns. Entries in data_error are created when an outgoing batch encounters an error. |
|
Compare one or more tables between source and target nodes with option to repair data |
|
Compare one or more tables between source and target nodes with option to repair data |
|
Status by table of a compare_request to compare one or more tables. |
New Columns
| Column Name | Description |
|---|---|
|
| Column Name | Description |
|---|---|
|
Indicates if a glass break is required to login as the user. |
|
Timestamp when the glass was last broken. |
|
Timestamp when the glass break expires. |
|
ID of the user who last broke the glass for this user. |
| Column Name | Description |
|---|---|
|
Routing will watch a gap for data to commit up until the time of routing.stale.dataid.gap.time.ms parameter is reached, then this flag is set to expire it. The purge job will see any data that commits after expiration as stranded data. |
| Column Name | Description |
|---|---|
|
Numerical ascending order of monitors to display to user. |
|
Insights are optional recommendations for changing the system settings, while other monitors are for errors that must be resolved. |
|
A pinned monitor will be displayed to the user even if there are no unresolved events for it. |
| Column Name | Description |
|---|---|
|
Insights are optional recommendations for changing the system settings, while other monitor events are for errors that must be resolved. |
|
Timestamp before which the recommendation should not be displayed in the web console. |
|
Identifier for the option that was selected when approving the recommendation. |
|
The user who approved the event. |
|
Whether the recommendation’s approval has been processed. |
| Column Name | Description |
|---|---|
|
Whether SQL/DDL events are routed and synced on this link. |
| Column Name | Description |
|---|---|
|
|
|
|
|
| Column Name | Description |
|---|---|
|
Only used for time-based capture nodes. This will be the column to use as part of the time-based capture mining. |
| Column Name | Description |
|---|---|
|
If this table should be refreshed when the refresh job runs. Usually for tables where typical trigger, log, or time-based capture is not available. Possible values are: 'auto' (attempts difference only refresh unless there are more than the threshold and will switch automatically to a full), 'differences' (Uses the compare feature to send only differences), and 'full' (remove all data at the target and fully load it again using a reload) |
Modified Tables
-
Added foreign key
fk_conrole_conrole(parent_role_id)
-
most_recent_active_tablesize changed fromnullto255
-
start_timesize changed fromnullto2 -
end_timesize changed fromnullto2
-
start_timesize changed fromnullto2 -
end_timesize changed fromnullto2
-
start_timesize changed fromnullto2 -
end_timesize changed fromnullto2
-
start_timesize changed fromnullto2 -
end_timesize changed fromnullto2
-
Modified columns on index
idx_ob_node_status:-
Old: (
node_id,status) -
New: (
node_id,channel_id,status)
-
-
create_timesize changed fromnullto2
-
create_timesize changed fromnullto2
Parameters
The following changes were made to add new parameters, modify their default value, modify their description, or remove them from use.
New Parameters
If this is true, when a delete affects zero rows, if the table is configured for sync on incoming, then the auto resolver will write the deletes into the capture log. (Default: false)
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)
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)
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. (Default: true)
If this is true, when a batch receives a unique index violation, the blocking rows for each unique index will be deleted. (Default: true)
This is the amount of time monitor entries will be cached before re-reading them from the database. (Default: 60000)
This is the amount of time notification entries will be cached before re-reading them from the database. (Default: 60000)
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 Azure storage account key (Default: )
The Azure storage account name (Default: )
The Azure storage account blob container name (Default: symmetricds)
The Azure storage account SAS Token (Shared Access Signature) (Default: )
Maximum number of bytes to write to file before copying to cloud storage (Default: -1)
Maximum number of rows to write to file before copying to cloud storage (Default: -1)
The AWS access key ID (aws_access_key_id) to use as credentials for uploading to S3 (Default: )
The S3 bucket where bulk load files will be uploaded (Default: )
The endpoint for the s3 bucket. If not set it will use the default endpoint. (Default: )
The AWS S3 region (Default: us-east-1)
The AWS secret access key (aws_secret_access_key) to use as credentials for uploading to S3 (Default: )
The cloud based terminator used in bulk loading to be used for a new row (Default: )
If true, the job will continue running as long as uncompleted requests exist. See compare.immediate.time.ms for the delay between checking and executing requests. (Default: true)
The delay between querying for uncompleted requests when compare.immediate.if.request.found is true. (Default: 2000)
The amount of time a single compare worker node_communication lock will timeout after. (Default: 7200000)
Maximum number of outstanding changes for a table that is allowed for comparison. When the maximum is exceeded, the table request will be ignored. (Default: 10000)
Number of threads to use for each compare request. See also compare.thread.per.server.count for overall thread pool. (Default: 4)
If true, the repair script will be batch CSV and use the default data loader. The data loader is tolerant of different case for catalog, schema, and table name. If false, the repair script will be SQL with unquoted table names that is run on the database. (Default: true)
The number of threads created that will be used to compare data concurrently on one node in the cluster. (Default: 10)
The password for the user specified by the console.auth.ldap.adminDN parameter. (Default: )
The DN of the user to log in as while determining whether a user belongs to one of the groups specified by the console.auth.ldap.role.group.map parameter. If blank, the credentials from the login screen will be used. (Default: )
The attribute of an LDAP group to check to determine whether or not a user is a member of the group. This only has an effect if the console.auth.ldap.role.group.map parameter is set and the console.auth.ldap.use.memberOf parameter is set to false. (Default: member)
Map of LDAP groups to console role IDs. Allows LDAP users to log in without having a corresponding console user if they are a member of one of the specified groups. (Default: )
Whether or not the LDAP server maintains a "memberOf" attribute. This only has an effect if the console.auth.ldap.role.group.map parameter is set. (Default: true)
The attribute of an SAML response to check to determine whether or not a user is a member of a SAML group. This only has an effect if the console.auth.saml.role.group.map parameter is set. (Default: group)
Path to the public x509 certificate of the SAML IdP. If the console.auth.saml.idp.metadata.url is not set, then this parameter must be set. (Default: )
Identifier of the SAML IdP entity (must be a URI). (Default: )
Metadata endpoint info of the SAML IdP. When set, SymmetricDS will obtain the public x509 certificate(s) from this URL. (Default: )
SSO endpoint info of the SAML IdP. URL target of the IdP where the SP will send the authentication request message. (Default: )
Display name of the organization within the SAML SP’s metadata (Default: )
Language of the organization within the SAML SP’s metadata (Default: )
Name of the organization within the SAML SP’s metadata (Default: )
URL of the organization within the SAML SP’s metadata (Default: )
Path to a file containing properties for the OneLogin SAML Java Toolkit that SymmetricDS uses behind the scenes. The values in this file will override any default values built into SymmetricDS or the Toolkit, but not any values set by parameters. (Default: )
Map of SAML groups to console role IDs. Allows SAML users to log in without having a corresponding console user if they are a member of one of the specified groups. (Default: )
Number of days that the SAML SP certificate will last before it expires. Values below 1 are invalid and will be changed to 25 years. (Default: 9125)
Maximum number of days before the SAML SP certificate expires when the Purge Incoming job will replace it with a new certificate. (Default: 30)
Specifies constraints on the name identifier to be used to represent the requested subject during SAML authentication. (Default: urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified)
The number of milliseconds before logging that the refresh of a screen is slow. (Default: 5000)
For queries related to the web console, defines the number of milliseconds before logging that a query is slow. (Default: 4000)
Setting that defines when a Node should be considered "offline." The offlineNodes, batchUnsent, and batchUnsentOffline monitors use this setting. (Default: 1440)
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)
If set to true, when a table’s schema is sent to the target database it will also send the DDL script that will create an application trigger at the target if the source and the target database types are the same. SymmetricDS trigger DDL statements will not be sent. (Default: false)
Whether or not to set create first flag on reload requests from the data refresh job. See also initial.load.defer.create.constraints which defaults to true. If setting both this and initial.load.defer.create.constraints to true, the reload request will remove constraints before loading the data, and add back the constraints afterwards. (Default: false)
Enables removal of block comments from script text by data loader processing DDLs. Applies to stores procedures and functions, when DDL replication is enabled. (Default: true)
Set the compression level this node will use when compressing file synchronization payloads. @see java.util.zip.Deflater NO_COMPRESSION = 0 BEST_SPEED = 1 BEST_COMPRESSION = 9 DEFAULT_COMPRESSION = -1 (Default: -1)
Azure Blob Storage Account Name for file sync (Default: )
Azure Blob Storage SAS token for file sync (Default: )
If set to true, this will delete the zip file from staging immediately after attempting to sync it to the target. If synchronization fails due to a timeout or an error, the zip file will have to be re-created during the next sync attempt. If set to false, this will leave the zip file in staging until it is purged by the Stage Management job. (Default: false)
How many times the file sync bean shell script will be attempted at the target node. The bean shell script will be attempted more than once if the exception java.nio.file.FileSystemException is thrown during the execution of the script. (Default: 2)
How long to pause in milliseconds between the attempts of the bean shell script that is run at the target node when the execution of the script fails. (Default: 5000)
S3 Access Key for Bucket Storage (Default: )
S3 Region for Bucket Storage (Default: )
S3 Secret Key for Bucket Storage (Default: )
Maximum number of rows to put into sym_file_snapshot in a single database transaction. This will help keep sym_data freed up for other processing to occur. (Default: 10000)
If tables are created as part of the initial load, it will defer setting up table-level logging to improve performance. Applies to loads only. After data is loaded, the table-level logging will be switched on. This parameter needs set for the node that will send the initial load, not the node receiving it. Support for table-level logging varies by database dialect and is ignored where not applicable. Currently this is only supported by the PostgreSQL UNLOGGED feature. Oracle’s NOLOGGING feature might be implemented in the future. (Default: true)
The maximum number of expired data gaps to check individually before using a single query to detect any expired data that was missed. The single query gets a range from sym_data before the starting gap that does not exist in sym_data_event, and then queries only the expired data gaps that are within that range. (Default: 100)
Controls section of the purge job responsible for combing through stranded data in attempt to salvage it. Recapturing stranded data involves queries against the original tables, thus increasing processing time significantly. Disable this feature temporarily only if there is a significant backlog to clear and a support engineer has recommended this action. (Default: true)
This limits processing time purge job spends cleaning up stranded data. The purge job will automatically move to the next processing step once specified time limit has been reached. If you see a log message to about this limit often, this indicates that the purge job is falling behind. It might indicate that the database server is not able to keep up with the workload or limit is too low. (Default: 900000)
How long in milliseconds to cache license key. Useful for re-reading license key that was just installed to a cluster. (Default: 60000)
Specifies the name and path for the directory that contains MariaDB’s binary log files. When blank, SymmetricDS will use each log file’s path as it appears in MariaDB’s binary log index file. (Default: )
Specifies the name and path for MariaDB’s binary log index file. When blank, SymmetricDS will use MariaDB’s log_bin_index system variable. (Default: )
Log miner upper target for number of change data capture rows to request from the source database (a guideline, not a hard limit). Zero value removes limitations. Currently, implemented for PostgreSQL log miner only. The PostgreSQL database is known to exceed this target in order to keep all changes from one transaction together and that is expected. (Default: 500000)
Specifies that the order of the SQL Server log mining output should be ordered by transaction ID. If set to false, then the output is ordered by foreign key constraints. (Default: true)
Use incoming batches to collect transaction IDs and their source node IDs. When mining changes, it will ignore these transactions to prevent update loops. If trigger.sync_on_incoming is enabled, it will mine the change but include the source node ID so routing won’t send a batch back to that node. Some miners have their own built-in loop prevention and don’t need this. Supported on the following platforms: PostgreSQL, Oracle, MySql, MariaDB. (Default: true)
Enable capturing of monitor events and syncing to other nodes. When disabled, monitor events are still generated, just not synced to other nodes. (Default: true)
Specifies the path to the SQL Server bulk copy program utility (bcp) executable. (Default: )
Specifies the code page to pass to the bcp process using the -C command line option. This parameter only applies to the bcp process running on Windows. (Default: )
Specifies if null values should remain null when using the SQL Server bcp bulk loader to load into nullable columns that have default values. (Default: false)
Specifies that identifiers like database, schema, and tables names need to be quoted because they may contain special characters like spaces or dashes. (Default: true)
Specifies if server cert should be trusted when connecting bcp bulk loader to SQL Server. (Default: false)
Specifies if the server instance should be used on the SQL Server bulk copy program utility (bcp) executable. (Default: true)
Specify the field terminator used by the SQL Server bulk loader. Pick something that does not exist in the data in your database. (Default: |})
Whether or not triggers should be allowed to fire when bulk loading data. (Default: false)
Maximum number of rows to write to file before running with "BULK INSERT" to SQL-Server (Default: 100000)
Specify the line terminator used by the SQL Server bulk loader. Pick something that does not exist in the data in your database. (Default: |>\n)
Specify a UNC network path to the tmp\bulkloaddir directory for SQL Server to access bulk load files. Use this property with bulk loader when SymmetricDS is on a separate server from SQL Server. (Default: )
Enables the use of the SQL Server bulk copy program utility (bcp) as the bulk loader. (Default: false)
Whether or not files are local to client only, so we must send the file to MySQL to load. If client is running on same server as MySQL, then this can be set to false to have MySQL read file directly. (Default: true)
Maximum number of bytes to write to file before running with 'LOAD DATA INFILE' to MySQL (Default: 1000000000)
Maximum number of rows to write to file before running with 'LOAD DATA INFILE' to MySQL (Default: 100000)
Whether or not to replace rows that already exist, based on primary key or unique key. If set to false, duplicates will be skipped. (Default: true)
For bulk loading with SQL*Loader, specify how to connect to the database with an ezconnect name. If blank, the connection is determined using the db.url parameter. (Default: )
Specify the field terminator used by the Oracler SQL*Loader. Pick something that does not exist in the data in your database. (Default: |})
Specify the line terminator used by the Oracler SQL*Loader. Pick something that does not exist in the data in your database. (Default: |>)
Path to the sqlldr executable for running Oracle SQL*Loader. If blank, it will check for ORACLE_HOME environment variable and find sqlldr there. Otherwise, it will run "sqlldr" and expect the operating system to find it. (Default: )
For bulk loading with SQL*Loader, specify input file character set when needed to support characters other than US-ASCII characters. For example: oracle.bulk.load.sqlldr.infile.charset=UTF8 LENGTH SEMANTICS CHAR This will generate the following string in the control file after the LOAD DATA line: CHARACTERSET UTF8 LENGTH SEMANTICS CHAR If blank, this line will not show up. (Default: )
Options passed to Oracle SQL*Loader. (Default: silent=(header,discards) direct=false readsize=4096000 bindsize=4096000 rows=2000 errors=0)
Enable this parameter to convert infinite (positive or negative) values of date and timestamp (with/without time zones) types to null. DatabaseOverrideable: false (Default: true)
This is the retention time for how long a compare request will be retained (Default: 14400)
This is the retention time for how long an expired data gap will be retained. The purge job will watch for data to commit inside of expired data gaps, and try to resend the data. Knowing about expired data gaps lets the purge use a fast range-based delete but avoid purging any ranges that could include expired data gaps. (Checking for stranded data before running a purge isn’t sufficient because it leaves open a race condition of the data arriving during the deletes.) (Default: 1440)
This is the retention time for how long to keep monitor events before purging them. (Default: 43200)
The value of this property will be appended to the end of the copy command when the redshift data loader is enabled. (Default: )
Maximum number of bytes to write to file before copying to S3 and running with COPY statement (Default: 1000000000)
Maximum number of rows to write to file before copying to S3 and running with COPY statement (Default: 100000)
The AWS access key ID (aws_access_key_id) to use as credentials for uploading to S3 (Default: )
The S3 bucket where bulk load files will be uploaded to before bulk loading into Redshift (Default: )
The endpoint for the s3 bucket. If not set it will use the default endpoint. (Default: )
The AWS secret access key (aws_secret_access_key) to use as credentials for uploading to S3 (Default: )
Enables the REST API (Default: false)
Enables the REST API to update the heartbeat when pulling data (Default: false)
The amount of time a single routing worker node_communication lock will timeout after. (Default: 7200000)
The number of threads created that will be used to route channels concurrently on one server in the cluster. (Default: 5)
When enabled, use a thread per channel for parallel routing. (Default: false)
Whether or not to accept an untrusted certificate for SSL/TLS when connecting to the mail server. (Default: false)
Whether or not to authenticate with the mail server. (Default: false)
The email address to use in the "from" header when sending email. (Default: symmetricds@localhost)
The hostname of the mail server (Default: localhost)
When authenticating with the mail server, the password to use. (Default: )
The port number of the mail server (Default: 25)
Whether or not to use TLS after connecting to the mail server. (Default: false)
The transport type to use when connecting to mail server, either smtp or smtps. (Default: smtp)
When authenticating with the mail server, the username to use. (Default: )
Whether the compare job is started. (Default: true)
Whether the data refresh job is started. (Default: false)
Whether the monitor job is started. (Default: true)
Controls whether statistics are recorded to the sym_node_host_job_stats table. Statistics will only be recorded if the number of items that were processed exceeds this threshold. A value of -1 (or any negative value) disables these statistics. (Default: 0)
For bulk loading with tbLoader, specify the database name. If blank, the database name is determined using the db.url parameter. (Default: )
Specify the field terminator used by the Tibero tbLoader. Pick something that does not exist in the data in your database. (Default: |})
Specify the line terminator used by the Tibero tbLoader. Pick something that does not exist in the data in your database. (Default: |>)
Path to the tbloader executable for running Tibero tbLoader. If blank, it will check for TB_HOME environment variable and find tbLoader there. Otherwise, it will run "tbloader" and expect the operating system to find it. (Default: )
Options passed to Tibero tbLoader (Default: direct=N dpl_parallel=1 disable_idx=N readsize=2097152 bindsize=2097152 rows=2000 errors=0)
Enables time based capture miner when the log miner job is running to select changes out of tables based on a date time column or numeric primary key (Default: false)
Modified Parameters
This is the retention time for the number of minutes that a console event will be retained. (Old Default: 20160) (New Default: 43200)
The maximum number of connections that will be allocated in the pool The http.concurrent.workers.max value should be less than half of this value. (Old Default: 40) (New Default: 50)
Number of seconds a query can execute before being interrupted using the statement query timeout. The timeout can avoid hanging if a query is slow to return because of an un-optimized plan or if the system is overloaded. Set to zero for no limit. (Make sure socket/read timeout in db.url is set higher than query timeout.) (Old Default: 300) (New Default: 3600)
This is how often the pull job will be run to schedule pulls of nodes. (Old Default: 60000) (New Default: 10000)
This is how often the push job will be run to schedule pushes to nodes. (Old Default: 60000) (New Default: 10000)
This is the number of minutes that a node has been offline before taking action A value of -1 (or any negative value) disables the feature. (Old Default: -1) (New Default: 86400)
This is the retention time for how long an inactive trigger history will be retained (Old Default: 43200) (New Default: 86400)
Number of seconds a query can execute before being interrupted using the statement query timeout. The timeout can avoid hanging if a query is slow to return because of an un-optimized plan or if the system is overloaded. Set to zero for no limit. (Make sure socket/read timeout in db.url is set higher than query timeout.) (Old Default: ) (New Default: 3600)
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}
{REMOVED}