Home

SymmetricDS 2 User Guide

image

Contents

1. Database Versions Transaction Fallback Conditional Update Loop BLOB Sync supported Identifier Update Sync Prevention Oracle 8 1 7 and above Y Y Y Y MySQL 5 0 2 and above Y Y Y Y PostgreSQL 8 2 5 and above Y 8 3 and Y y Y Y above only SQL Server 2005 Y Y Y Y HSQLDB 1 8 Y Y Y Y Y HSQLDB 2 0 N Y Y Y Y H2 1 x Y Y Y Y Y Apache Derby 10 3 2 1 Y Y Y Y Y IBM DB2 9 5 N Y Y Y Y Firebird 2 0 Y Y Y Y Y Informix 11 N Y Y Y N Interbase 9 0 N Y Y Y Y C 1 Oracle On Oracle Real Application Clusters RAC sequences should be ordered so data is processed in the correct order To offset the performance cost of ordering the sequences should also be cached lter sequence lter sequence lter sequence lter sequence DU SEQ_SYM_DATA_DATA_ID cache 1000 order SEQ_SYM_OUTGOIN_BATCH_BATCH_ID cache 1000 order SEQ_SYM_TRIGGER_RIGGER_HIST_ID cache 1000 order SEQ_SYM_TRIGGER_TRIGGER_ID cache 1000 order While BLOBs are supported on Oracle the LONG data type is not LONG columns cannot be accessed from triggers Note that while Oracle supports multiple triggers of the same type to be defined the order in which the triggers occur appears to be arbitrary Symmetric DS v2 5 101 Database Notes The SymmetricDS user generally needs privileges for connecting and creating tables including indexes triggers sequences and procedures including packages and functions
2. Store Firewall Store 002 Server Figure 3 2 Three Tiered In Store Server Retail Store Deployment Example One final example show in Figure 3 3 again extending our original two tier retail use case would be to organize stores by region in the world This three tier architecture would introduce new regional servers and corresponding regional databases which would consolidate information specific to stores the regional server is responsible for The tiers in this case are therefore the central office server regional servers and individual store registers Symmetric DS v2 5 17 Planning an Implementation gt SIORE aos 5 OR Register 001 01 St 7 Register 001 02 Register 00201 Region 01 Database Region 01 Server s Stateless Load Balancer A a Store Corporale T Firewall Firewall a Stateless Register Load Balancer 00202 Stateless Load Balancer Centra Ofice CO Database Central Office Server s Region 02 Servers lg 9 Region 02 Register 1 Database 003 01 1 S x Store Firewall a Register 003 02 Figure 3 3 Three Tiered Regional Server Retail Store Deployment Example These are just three common examples of how one might organize nodes in SymmetricDS While the examples above were for the retail industry the organization they could apply to a variety of application domains 3 3 Defining Node
3. stream to file threshold bytes If stream to file enabled is true then the threshold number of bytes at which a file will be written is controlled by this property Note that for a synchronization the entire payload of the synchronization will be buffered in memory up to this number at which point it will be written and continue to stream to disk Default 32767 job random max start time ms When starting jobs symmetric attempts to randomize the start time to spread out load This is the maximum wait period before starting a job Default 10000 purge retention minutes This is the retention for how long synchronization data will be kept in the SymmetricDS synchronization tables Note that data will be purged only if the purge job is enabled Default 7200 Symmetric DS v2 5 99 Parameters statistic retention minutes This is the retention for how long statistic data will be kept in the SymmetricDS staistic table Note that data will be purged only if the purge job is enabled Default 7200 job route period time ms This is how often the route job will be run Default 10000 job push period time ms This is how often the push job will be run Default 60000 job pull period time ms This is how often the pull job will be run Default 60000 job synctriggers aftermidnight minutes If scheduled the sync triggers job will run nightly This is how long after midnight that job will run Default 15 sc
4. A lookup table may contain the id of the node where data needs to be routed This could be an existing table or an ancillary table that is added specifically for the purpose of routing data Lookup table routers are configured by setting the router_type column on the ROUTER table to 1ookuptable and setting a list of configuration parameters in the router_expression column Each of the following configuration parameters are required LOOKUP_TABLE This is the name of the lookup table KEY_COLUMN This is the name of the column on the table that is being routed It will be used as a key into the lookup table LOOKUP_KEY_COLUMN This is the name of the column that is the key on the lookup table EXTERNAL_ID_ COLUMN This is the name of the column that contains the external_id of the node to route to on the lookup table Note that the lookup table will be read into memory and cached for the duration of a routing pass for a single channel Consider a table that needs to be routed to a specific store but the data in the changing table only contains brand information In this case the STORE table may be used as a lookup table Symmetric DS v2 5 32 Configuration insert into SYM_ROUTER router_id source_node_group_id target_node_group_id router_type router_expression create_time last_update time values Georp 2 Store oki coma Ssuoms loskugeegls LOOKUP_TABLE STORE KEY_COLUMN BRAND_ID LOOKUP_KEY_COLUMN BRAND_I
5. Audits when a node registers or attempts to register Table A 18 REGISTRATION_REQUEST Symmetric DS v2 5 83 Data Model Name Type Size Default PK not Description FK null NODE_GROUP_ID VARCHAR The node group that this node belongs to such 50 as store EXTERNAL _ID VARCHAR A domain specific identifier for context within 50 the local system For example the retail store number STATUS CHAR 2 X The current status of the registration attempt Valid statuses are NR not registered IG ignored OK sucessful HOST_NAME VARCHAR X The host name of a workstation or server If 60 more than one instance of SymmetricDS runs on the same server then this value can be a server id specified by Druntime symmetric cluster server id IP_ADDRESS VARCHAR X The ip address for the host 21 ATTEMPT_COUNT INTEGER 0 The number of registration attempts REGISTERED_NODE_ID VARCHAR A unique identifier for a node 50 CREATE_TIME TIMESTAMP X Timestamp when this entry was created LAST_UPDATE_BY VARCHAR The user who last updated this entry 50 LAST_UPDATE_TIME TIMESTAMP X Timestamp when a user last updated this entry A 19 TRIGGER_HIST A history of a table s definition and the trigger used to capture data from the table When a database trigger captures a data change it references a trigger_hist entry so it is possible to know which columns the data
6. 5 3 JMS Publishing With the proper configuration SymmetricDS can publish XML messages of captured data changes to JMS during routing or transactionally while data loading synchronized data into a target database The following explains how to publish to JMS during synchronization to the target database The Xm IPublisherDataLoaderFilter is a DataLoaderFilter that may be configured to publish specific tables as an XML message to a JMS provider See Chapter 6 Extending SymmetricDS p 58 for information on how to configure an extension point If the publish to JMS fails the batch will be marked in error the loaded data for the batch will be rolled back and the batch will be retried during the next synchronization run The following is an example extension point configuration that will publish four tables in XML with a root tag of sale Each XML message will be grouped by the batch and the column names identified by the groupByColumnNames property which have the same values lt xml version 1 0 encoding UTF 8 gt lt beans xmlns http www springframework org schema beans xmlns xsi http www w3 org 2001 XMLSchema instance xmlns context http www springframework org schema context xsi schemaLocation http www springframework org schema beans http www springframework org schema beans spring beans 3 0 xsd http www springframework org schema context http www springframework org schema context spring context 3 0 xsd g
7. Sitowe wecilicacc coma score columa STORE_ID REDIRECT_NODE current_timestamp current_timestamp More than one column may be configured in a router_expression When more than one column is configured all matches are added to the list of nodes to route to The following is an example where the STORE_ID column may contain the STORE_ID to route to or the constant of ALL which indicates that all nodes should receive the update Symmetric DS v2 5 31 Configuration insert into SYM_ROUTER router_id source_node_group_id target_node_group_id router_type router_expression create_time last_update_ time values Georp A store milltipile matechesi corpi suome columa STORE_ID ALL or STORE_ID EXTERNAL_ID current_timestamp current_timestamp The NULL keyword may be used to check if a column is null If the column is null then data will be routed to all nodes who qualify for the update This following is an example where the STORE_ID column is used to route to a set of nodes who have a STORE_ID equal to their EXTERNAL_ID or to all nodes if the STORE_ID is null insert into SYM_ROUTER router_id source_node_group_id target_node_group_id router_type router_expression create_time last_update_ time values corp 2 store multiple matches corp store column STORE_ID NULL or STORE_ID EXTERNAL_ID current_timestamp current_timestamp 4 6 2 3 Lookup Table Router
8. lt data key STORE_ID gt 001 lt data gt lt data key BUSINESS_DAY gt 2010 01 22 lt data gt lt data key WORKSTATION_ID gt 003 lt data gt lt data key TRANSACTION_ID gt 1234 lt data gt lt data key AMOUNT gt 1 33 lt data gt lt row gt lt row entity SALE_TOTAL dml I gt lt data key STORE_ID gt 001 lt data gt lt data key BUSINESS_DAY gt 2010 01 22 lt data gt lt data key WORKSTATION_ID gt 003 lt data gt lt data key TRANSACTION_ID gt 1234 lt data gt lt data key AMOUNT gt 21 33 lt data gt lt row gt lt sale gt To publish JMS messages during routing the same pattern is valid with the exception that the extension point would be the Xm PublisherDataRouter and the router would be configured by setting the router_type Of a ROUTER to the Spring bean name of the registered extension point Of course the router would need to be linked through TRIGGER_ROUTERs to each TRIGGER table that needs published 5 4 Deployment Options An instance of SymmetricDS can be deployed in several ways e Web application archive WAR deployed to an application server This option means packaging a WAR file and deploying to your favorite web server like Apache Tomcat It s a little more work but you can configure the web server to do whatever you need SymmetricDS can also be embedded in an existing web application if desired e Standalone service that embeds Jetty web server This op
9. 7200 db jdbc streaming results fetch size This is the default fetch size for streaming result sets into memory from the database Default 1000 db default schema Symmetric DS v2 5 95 Parameters This is the schema that will be used for metadata lookup Some dialect automatically figure this out using database specific SQL to get the current schema Default db metadata ignore case Indicates that case should be ignored when looking up references to tables using the metadata api Default true auto config database If this is true the configuration and runtime tables used by SymmetricDS are automatically created during startup Default true auto upgrade If this is true when symmetric starts up it will try to upgrade tables to latest version Default true auto sync configuration If this is true create triggers for the SymmetricDS configuration table that will synchronize changes to node groups that pull from the node where this property is set Default true https allow self signed certs If this is true a Symmetric client node to accept self signed certificates Default true http basic auth username If specified a Symmetric client node will use basic authentication when communicating with its server node using the given user name Default http basic auth password If specified the password used for basic authentication Default embedded webserver basic auth username If sp
10. E Retail Store Central Office Central Office CO SymmetricDS Instance SymmetricDS Instance Database Client Root Figure 2 1 Simplified Two Tiered Retail Store Tutorial Example The root SymmetricDS instance sends changes to the client for item data such as item number description and price The client SymmetricDS sends changes to the root for sale transaction data such as time of sale and items sold The sample configuration specifies synchronization with a pull method for the client to receive data from root and a push method for the root to receive data from client This tutorial will walk you through 1 Installing instances of SymmetricDS for the tutorial 2 Creating separate databases for the root and client 3 Creating sample tables for client and root and sample data for the root Symmetric DS v2 5 7 Hands on Tutorial Starting SymmetricDS and registering the client with the root Sending an initial load to the client Causing a data push and data pull operation and Verifying information about the batches that were sent and received 2 1 Installing SymmetricDS First we will install the SymmetricDS software and configure 1t with your database connection information 1 Download the symmetric ds 2 x x server zip file from http www symmetricds org 2 Unzip the file in any directory you choose This will create a symmet ric ds 2 x x server subdirectory which corresponds to the version you down
11. RELOAD_EVENT_COUNT BIGINT 0 X The number of reload events that are part of this batch INSERT_EVENT_COUNT BIGINT 0 X The number of insert events that are part of this batch UPDATE_EVENT_COUNT BIGINT 0 X The number of update events that are part of this batch DELETE_EVENT_COUNT BIGINT 0 X The number of delete events that are part of this batch OTHER_EVENT_COUNT BIGINT 0 X The number of other event types that are part of this batch This includes any events types that are not a reload insert update or delete event type ROUTER_MILLIS BIGINT 0 X The number of milliseconds spent creating this batch NETWORK_MILLIS BIGINT 0 X The number of milliseconds spent transfering this batch across the network FILTER_MILLIS BIGINT 0 X The number of milliseconds spent in filters processing data LOAD_MILLIS BIGINT 0 X The number of milliseconds spent loading the data into the target database EXTRACT_MILLIS BIGINT 0 X The number of milliseconds spent extracting the data out of the source database SQL_STATE VARCHAR For a status of error ER this is the XOPEN or 10 SQL 99 SQL State SQL_CODE INTEGER 0 X For a status of error ER this is the error code from the database that is specific to the vendor SQL_MESSAGE LONGVARCHAR For a status of error ER this is the error message that describes the error FAILED_DATA_ID BIGINT 0 X For a status of error ER this is the data_id that was being processed when the batch failed LAST_U
12. This feature may be turned off by setting the stream to file enablea property to false Symmetric DS v2 5 68 Administration SymmetricDS creates these temporary files in the directory specified by the java io tmpair Java System property When SymmmetricDS starts up stranded temporary files are aways cleaned up Files will only be stranded if the SymmetricDS engine is force killed The location of the temporary directory may be changed by setting the Java System property passed into the Java program at startup For example Djava io tmpdir home symmetricds tmp 7 8 Database Purging Purging is the act of cleaning up captured data that is no longer needed in SymmetricDS s runtime tables Data is purged through delete statements by the Purge Job Only data that has been successfully synchronized will be purged Purged tables include e DATA DATA_EVENT e OUTGOING_BATCH e INCOMING_BATCH e DATA_GAP e NODE_HOST_STATS e NODE_HOST_CHANNEL_STATS e NODE_HOST_JOB_STATS The purge job is enabled by the start purge job SymmetricDS property The job runs periodically according to the job purge period time ms property The default period is to run every ten minutes Two retention period properties indicate how much history SymmetricDS will retain before purging The purge retention minutes property indicates the period of history to keep for synchronization tables The default value is 5 days The statistic retention minute
13. n the beginning index or a pair of comma separated integers n m the beginning and ending index The transform behaves as the Java substring function would using the specified values in transform_expression Multiplier Transform multiply This transformation allows for the creation of multiple rows in the target table based on the transform_expression This transform type can only be used on a primary key column The transform_expression is a SQL statement that returns the list to be used to create the multiple targets Shell Script Transform bsh This transformation allows you to provide a Bean Shell script in transform_expression and executes the script at the time of transformation Some variables are provided to the script coLumn_name is a variable for a source column in the row where the variable name is the column name in uppercase currentvalue is the value of the current source column oldvalue is the old value of the source column for an updated row jdbcTemplate is a Spring JdbcTemplate object for querying or updating the database Variable Transform variable This transformation allows you to place a dynamic variable such as the current database time into the target column The transform_expression s currently supported are system_timestamp Identity Transform identity This transformation allows you to insert into a identity column by computing a new identity not copying the actual identity value
14. router The router is configured to route based on the captured EXTERNAL_DATA to all nodes whose external_id matches Note that other supported node attribute tokens can also be used for routing insert into SYM _TRIGGER trigger_id source_table_name channel_id external_select last_update_time create_time values orclerclliineitcemm r ik Order mime Een oidclerllsineaheem y selec SORE STI from order where order_id curTriggerValue curColumnPrefix order_id current_timestamp current_timestamp insert into SYM _ROUTER router_id source_node_group_id target_node_group_id router_type router_expression create_time last_update_time values Yeoro 2 siore exc corsa score eollwima EXTERNAL DATA EXTERNAL _ID current_timestamp current_timestamp Note the syntax curTriggerValue curColumnPrefix This translates into OLD_ or NEW_ based on the DML type being run In the case of Insert or Update it s NEW_ For Delete it s OLD_ since there is no new data In this way you can access the DML appropriate value for your select statement 4 6 2 5 Scripted Router When more flexibility is needed in the logic to choose the nodes to route to then the a scripted router may be used The currently available scripting language is Bean Shell Bean Shell is a Java like scripting language Documentation for the Bean Shell scripting language can be found at http www beanshell org The r
15. 5 60 Extending SymmetricDS 6 8 ISyncUrlExtension This extension point is used to select an appropriate URL based on the URI provided in the sync_ur1 column of sym_node To use this extension point configure the sync_url for a node with the protocol of ext beanName The beanName is the name you give the extension point in the extension xml file 6 9 INodeldGenerator This extension point allows SymmetricDS users to implement their own algorithms for how node ids and passwords are generated or selected during the registration process There may be only one node generator per SymmetricDS instance 6 10 ITriggerCreationListener Implement this extension point to get status callbacks during trigger creation 6 11 IBatchAlgorithm Implement this extension point and set the name of the Spring bean on the batch_algorithm column of the Channel table to use This extension point gives fine grained control over how a channel is batched 6 12 IDataRouter Implement this extension point and set the name of the Spring bean on the router_type column of the Router table to use This extension point gives the ability to programatically decide which nodes data should be routed to 6 13 IHeartbeatListener Implement this extension point to get callbacks during the heartbeat job 6 14 lOfflineClientListener Implement this extension point to get callbacks for offline events on client nodes 6 15 lOfflineServerListener Symmet
16. Batches enn iria eins 13 3 Planning an Implementation nn ci ada ainia 15 SL Identifying Nodes iia aida 15 3 2 Orgattizing Nodes ii ii 15 3 3 Defining Node Groups ivan iio E RE u K E EE E UE a acess 18 3 4 Linking Nodes 0 A ar 19 Side Choosing Data Channels ansia iii 19 3 6 Defining Data Changes to be Captured and Routed coooococnncccconoccconaccnonancconnccnonnccnonnncnnnnos 20 3 0 1 Defining TSS ers uns dae 20 3 0 2 Defining ROUtETS ui iii 21 3 6 3 Mapping Triggers to Routers ssssesesssesesssesssressresseeeseesseetssressersseeeseeesseeesseesseesset 22 3 6 3 1 Planning Initial Loads siii isis 22 3 6 3 2 Circular References and Ping Back j cisscscsssscesdsccsssssea es sssecatasvetaceosnedeaveneces 22 3 6 4 Planning for Registering Nodes cooococonncccnnncccnoncnononcnononcncnnncncnnnononnncnonnnnnnnnnnnnonnnnnnn 22 3 7 Planning Data Transformations isscscaasitayocess seceadavans sae suaeae esse sonataowedae cpuvasaetassaoassecnecdecenet s 23 A Configuration sosca asine eneoti E o A E EEE abe AEE EEA E E EEKE a Ea a SEa 24 4 1 Node Properties airi nennir sage a AE E E E E E AE E E E R Ea 24 ARAN isi ces EEE E E EE 25 4 3 Node GLOUP na li a 26 A A Node Group Link srecen isre ora e p pa o A eaaa ATE aE A EEEE NEE 26 AS Channel siste iaa 27 Symmetric DS v2 5 SymmetricDS 2 User Guide ANG ine ES A a e dido aA A E neouiene IN A E 462l O ROULEE so ese esis ie O 4 6 2 2 Column Match Router NI
17. Groups Once the organization of your SymmetricDS nodes has been chosen you will need to group your nodes based on which nodes share common functionality This is accomplished in SymmetricDS through the concept of a Node Group Frequently an individual tier in your network will represent one Node Group Much of SymmetricDS functionality is specified by Node Group and not an individual node For Symmetric DS v2 5 18 Planning an Implementation example when it comes time to decide where to route data captured by SymmetricDS the routing is configured by Node Group For the examples above we might define Node Groups of e workstation to represent each point of sale workstation e corp or central office to represent the centralized node e store to represent the store server that interacts with store workstations and sends and receives data from a central office server e region to represent the a regional server that interacts with store workstations and sends and receives data from a central office server Considerable thought should be given to how you define the Node Groups Groups should be created for each set of nodes that synchronize common tables in a similar manner Also give your Node Groups meaningful names as they will appear in many many places in your implementation of SymmetricDS Note that there are other mechanisms in SymmetricDS to route to individual nodes or smaller subsets of nodes within a Node
18. Link Similarly Node Group links are established using a data event action of P for Push and W for Pull wait The following SQL statements links the corp and store node groups for synchronization It configures the store nodes to push their data changes to the corp nodes and the corp nodes to send changes to store nodes by waiting for a pull insert into SYM_NODE_GROUP_LINK source_node_group target_node_group data_event_action values sicore eo EMA insert into SYM_NODE_GROUP_LINK Symmetric DS v2 5 26 Configuration source_node_group target_node_group data_event_action values cora Stowe VW ep 4 5 Channel By categorizing data into channels and assigning them to TRIGGERs the user gains more control and visibility into the flow of data In addition SymmetricDS allows for synchronization to be enabled suspended or scheduled by channels as well The frequency of synchronization and order that data gets synchronized is also controlled at the channel level The following SQL statements setup channels for a retail store An item channel includes data for items and their prices while a sale_transaction channel includes data for ringing sales at a register insert into SYM CHANNEL channel_id processing_order max_batch_size max_batch_to_send extract_period_millis batch_algorithm enabled description values icem 10 1000 10 0 clereule i Vieem ane joie
19. Once the routing algorithms and batching are completed the batches are organized with their corresponding data ids and saved in DATA_EVENT Once DATA_EVENT is updated the rows in OUTGOING_BATCH are updated to a status of New NE 5 2 1 2 Data Gaps On the surface the first Route Job step of collecting unrouted data ids seems simple assign sequential data ids for each data row as it s inserted and keep track of which data id was last routed and start from there The difficulty arises however due to the fact that there can be multiple transactions inserting into DATA simultaneously As such a given section of rows in the DATA table may actually contain gaps in the data ids when the Route Job is executing Most of these gaps are only temporarily and fill in at some point after routing and need to be picked up with the next run of the Route Job Thus the Route Job needs to remember to route the filled in gaps Worse yet some of these gaps are actually permanent and result from a transaction that is rolled back for some reason In this case the Route Job must continue to watch for the gap to fill in and at some point eventually gives up and assumes the gap is permanent and can be skipped All of this must be done in some fashion that guarantees that gaps are routed when they fill in while also keeping routing as efficient as possible SymmetricDS handles the issue of data gaps by making use of a table DATA_GAP to record gaps found in the da
20. Redirect When deploying a multi tiered system it may be advantageous to have only one registration server even though the parent node of a registering node could be any of a number of nodes in the system In SymmetricDS the parent node is always the node that a child registers with The REGISTRATION_REDIRECT table allows a single node usually the root server in the network to redirect registering nodes to their true parents It does so based on a mapping found in the table of the external id registrant_external_id to the parent s node id registration_node_ia For example if it is desired to have a series of regional servers that workstations at retail stores get assigned to based on their externa1_ia the store number then you might insert into REGISTRATION_REDIRECT the store number as the registrant_external_id and the node_ia of the assigned region as the registration_node_id When a workstation at the store registers the root server send an HTTP redirect to the sync_ur1 of the node that matches the registration_node_id A Important Please see Section 4 6 3 1 Initial Load p 35 for important details around initial loads and registration when using registration redirect 5 2 Jobs The SymmetricDS software allows for outgoing and incoming changes to be synchronized to from other databases The node that initiates a synchronization connection is the client and the node receiving a connection is the host Because synchronization is c
21. are properly using indexes Symmetric DS v2 5 36 Configuration 4 6 3 2 Dead Triggers Occasionally the decision of what data to load initially results in additional triggers These triggers known as Dead Triggers are configured such that they do not capture any data changes A dead Trigger is one that does not capture data changes In other words the sync_on_insert sync_on_update and sync_on_delete properties for the Trigger are all set to false However since the Trigger is specified 1t will be included in the initial load of data for target Nodes Why might you need a Dead Trigger A dead Trigger might be used to load a read only lookup table for example It could also be used to load a table that needs populated with example or default data Another use is a recovery load of data for tables that have a single direction of synchronization For example a retail store records sales transaction that synchronize in one direction by trickling back to the central office If the retail store needs to recover all the sales transactions from the central office they can be sent are part of an initial load from the central office by setting up dead Triggers that sync in that direction The following SQL statement sets up a non syncing dead Trigger that sends the sale_transaction table to the store Node Group from the corp Node Group during an initial load insert into sym_trigger TRIGGER_ID SOURCE_CATALOG_NAME SOURCE_SCHEMA_N
22. be either embedded in another application run stand alone or even run in the background as a service If desired nodes can be clustered to help disperse load if they send and or receive large volumes of data to or from a large number of nodes Individual nodes are easy to identify when planning your implementation If a database exists in your domain that needs to send or receive data there needs to be a corresponding SymmetricDS instance a node responsible for managing the synchronization for that database 3 2 Organizing Nodes Nodes in SymmetricDS are organized into an overall node network with connections based on what data needs to be synchronized where The exact organization of your nodes will be very specific to your synchronization goals As a starting point lay out your nodes in diagram form and draw connections between nodes to represent cases in which data is to flow in some manner Think in terms of what data is needed at which node what data is in common to more than one node etc If it is helpful you could also show data flow into and out of external systems As you will discover later SymmetricDS can publish data changes from a node as well using JMS Symmetric DS v2 5 15 Planning an Implementation Our retail example as shown in Figure 3 1 represents a tree hierarchy with a single central office node connected by lines to one or more children nodes the POS workstations Information flows from the central off
23. dll C Program Files Firebird Firebird_2_0 UDF The following limitations currently exist for this dialect e The outgoing batch does not honor the channel size and all outstanding data events are included in a batch e Syncing of Binary Large Object BLOB is limited to 16K bytes per column e Syncing of character data is limited to 32K bytes per column C 10 Informix Symmetric DS v2 5 105 Database Notes The Informix Dialect was tested against Informix Dynamic Server 11 50 but older versions may also work You need to download the Informix JDBC Driver from the IBM Download Site and put the ifxjdbc jar and ifxlang jar files in the SymmetricDS 15 folder Make sure your database has logging enabled which enables transaction support Enable logging when creating the database like this CREATE DATABASE MYDB WITH LOG Or enable logging on an existing database like this ondblog mydb unbuf log ontape s L 0 The following features are not yet implemented e Syncing of Binary and Character Large Objects LOB is disabled e There is no transaction ID recorded on data captured so it is possible for data to be committed within different transactions on the target database If transaction synchronization is required either specify a custom transaction ID or configure the synchronization so data is always sent in a single batch A custom transaction ID can be specified with the tx_id_expression on TRIGGER The batch
24. double quotes Double quotes and backslashes used in a string field are escaped with a backslash Binary values are represented as a string with hex values in Oxab format The absence of any value in the field indicates a null value Extra spacing is ignored and lines starting with a hash are ignored The first field of each line gives the directive for the line The following directives are used nodeid node_id Identifies which node the data is coming from Occurs once in CSV file binary BASE64INONEIHEX Identifies the type of decoding the loader needs to use to decode binary data in the pay load This varies depending on what database is the source of the data channel channel_id Identifies which channel a batch belongs to The SymmetricDS data loader expects the channel to be specified before the batch batch batch_id Uniquely identifies a batch Used to track whether a batch has been loaded before A batch of 9999 is considered a virtual batch and will be loaded but will not be recorded in incoming_batch schema schema name The name of the schema that is being targeted catalog catalog name The name of the catalog that is being targeted table table name The name of the table that is being targeted keys column name Lists the column names that are used as the primary key for the table Only needs to occur after the first occurrence of the table columns column name Lists all the column na
25. filter data or route it somewhere else By default SymmetricDS provides a handler that transforms and streams data as CSV Optionally an alternate implementation may be provided to take some other action on the extracted data 1 3 6 HTTP S Transport By default SymmetricDS uses web based HTTP or HTTPS in a style called Representation State Transfer REST It is lightweight and easy to manage A series of filters are also provided to enforce authentication and to restrict the number of simultaneous synchronization streams The 1transportManager Symmetric DS v2 5 3 Introduction interface allows other transports to be implemented 1 3 7 Remote Management Administration functions are exposed through Java Management Extensions JMX and can be accessed from the Java JConsole or through an application server Functions include opening registration reloading data purging old data and viewing batches A number of configuration and runtime properties are available to be viewed as well SymmetricDS also provides functionality to send SQL events through the same synchronization mechanism that is used to send data The data payload can be any SQL statement The event is processed and acknowledged just like any other event type 1 4 System Requirements SymmetricDS is written in Java 5 and requires a Java SE Runtime Environment JRE or Java SE Development Kit JDK version 5 0 or above Any database with trigger technology and a
26. identified from a list of running processes The service configuration is found in conf sym_service conf Edit this file if you want to change the default port number 8080 initial memory size 256 MB log file size 10 MB or other settings An init script is provided to work with standard Unix run configuration levels The sym_service inita file follows the Linux Standard Base specification which should work on many systems including Fedora and Debian based distributions To install the script copy it into the system init directory cp bin sym_service initd etc init d sym_service Edit the init script to set the SYM_HOME variable to the directory where SymmetricDS is located The init script calls the sym_service executable To enable the service to run automatically when the system is started sbin chkconfig add sym_service To disable the service from running automatically sbin chkconfig del sym_service On Suse Linux install the service by calling usr lib 1sb install_initd sym_service Symmetric DS v2 5 52 Advanced Topics Remove the service by calling usr lib lsb remove_initd sym_service Use the service command to start stop and query the status of the service sbin service sym_service start sbin service sym_service stop sbin service sym_service status Alternatively call the init d script directly etc init d sym_service start etc init d sym_service stop etc init d sym_service
27. implements the tcolumntransform interface The pre defined transform types include the following the transform_type entry is shown in parentheses e Copy Column Transform copy This transformation type copies the source column value to the target column This is the default behavior e Constant Transform const This transformation type allows you to map a constant value to the given target column The constant itself is placed in transform_expression e Variable Transform variable This transformation type allows you to map a built in variable to the given target column The variable name is placed in transform_expression The following variables are available system_date is the current system date and system_timestamp is the current system date and time Symmetric DS v2 5 40 Configuration Additive Transform additive This transformation type is used for numeric data It computes the change between the old and new values on the source and then adds or subtracts the value from the existing value in the target column For example if the source column changed from a 2 to a 4 and the target column is currently 10 the effect of the transform will be to change the target column to a value of 12 10 4 2 gt 12 Substring Transform substr This transformation computes a substring of the source column data and uses the substring as the target column value The transform_expression can be a single integer
28. in the JVM s default temporary directory Next the data is streamed to the target node across the transport layer The receiving node will cache the Symmetric DS v2 5 43 Advanced Topics data in memory until the threshold size is reached writing to a temporary file if necessary At last the data is loaded into the target database by the data loader This step by step approach allows for extract time transport time and load time to all be measured independently It also allows database resources to be used most optimally The transport manager handles the incoming and outgoing streams of data between nodes The default transport is based on a simple implementation over HTTP An internal transport is also provided It is possible to add other implementations such as a socket based transport manager Node communication over HTTP is represented in the following figure lt lt dient node gt gt lt lt host node gt gt 001 000 configure database sync triggers openRegistration client node 001 reloadNode 001 pull http get ack http post pull job register http get sync triggers push job ok to push http head push http put Figure 5 1 Node Communication The standaloneSymmet ricEngine is wrapper API that can be used to directly start the client services only The symmetricWebServer is a wrapper API that can be used to directly start both the client and host services inside a Jetty
29. recent entry 1 e max trigger_hist_id in TRIGGER_HIST for the trigger router combination for your table and router e channel_id the channel in which the table is routed e transaction_id pick a value for example 1 e source_node_id null e external_data null e create_time current_timestamp By way of example take our retail hands on tutorial covered in Chapter 2 Hands on Tutorial p 7 Let s say we need to re send a particular sales transaction from the store to corp over again because we lost the data in corp due to an overzealous delete For the tutorial all transaction related tables start with sale_ use the sale_transaction Channel and are routed using the store_corp_identity router In addition the trigger routers have been set up with an initial load order based on the necessary foreign key relationships 1 e transaction tables which are parents have a lower initial load order than those of their children An insert statement that would create the necessary reload events three in this case one for each table would be as follows where MISSING_ID is changed to the needed transaciton id insert into sym_data sellece mili t SouKee_icdlole ineime YIRY Vicseeia_aiol MISSING ID ial A layer lnisie_ acl wW Ccineimmeil ach 1 mull aull uiecenic tlmesiteano from sym_trigger t inner join sym_trigger_router tr on t trigger_id tr trigger_id inner join sym_trigger_hist h on h trigger_hist_id select max tr
30. router that executes a Bean Shell script expression in order to select nodes to route to The script can use the the old and new column values Xml Publishing Router a router the publishes data changes directly to a messaging solution instead of transmitting changes to registered nodes This router must be configured manually in XML as an extension point The mapping between the set of triggers and set of routers is many to many This means that one trigger can capture changes and route to multiple locations It also means that one router can be defined an Symmetric DS v2 5 29 Configuration associated with many different triggers 4 6 2 1 Default Router The simplest router is a router that sends all the data that is captured by its associated triggers to all the nodes that belong to the target node group defined in the router A router is defined as a row in the ROUTER table It is then linked to triggers in the TRIGGER_ROUTER table The following SQL statement defines a router that will send data from the corp group to the store group insert into SYM _ROUTER router_id source_node_group_id target_node_group_id create_time last_update_time values corp 2 store corp store current_timestamp current_timestamp The following SQL statement maps the corp 2 store router to the item trigger insert into SYM_TRIGGER_ROUTER trigger_id router_id initial_load_order create_time last_update_time
31. size is controlled with the max_batch_size on CHANNEL The pull and push jobs have runtime properties to control their interval C 11 Interbase The Interbase Dialect requires the installation of a User Defined Function UDF library in order to provide functionality needed by the database triggers SymmetricDS includes the required UDF library called SYM_UDF in both source form as a C program and as pre compiled libraries for both Windows and Linux The SYM_UDEF library is copied into the UDF folder within the Interbase installation directory For Linux users cp databases interbase sym_udf so opt interbase UDF For Windows users copy databases interbase sym_udf dll C CodeGear InterBase UDF The Interbase dialect currently has the following limitations e Data capture is limited to 4 KB per row including large objects LOB e There is no transaction ID recorded on data captured Either specify a tx_id_expression on the TRIGGER table or set a max_batch_size on the CHANNEL table that will accommodate your Symmetric DS v2 5 106 Database Notes transactional data Symmetric DS v2 5 107 Appendix D Data Format The SymmetricDS Data Format is used to stream data from one node to another The data format reader and writer are pluggable with an initial implementation using a format based on Comma Separated Values CSV Each line in the stream is a record with fields separated by commas String fields are surrounded with
32. status 5 6 Clustering A single SymmetricDS node may be clustered across a series of instances creating a web farm A node might be clustered to provide load balancing and failover for example When clustered a hardware load balancer is typically used to round robin client requests to the cluster The load balancer should be configured for stateless connections Also the sync ur1 discussed in Section 4 1 Node Properties p 24 SymmetricDS property should be set to the URL of the load balancer If the cluster will be running any of the SymmetricDS jobs then the cluster 1ock enablea property should be set to true By setting this property to true SymmetricDS will use a row in the LOCK table as a semaphore to make sure that only one instance at a time runs a job When a lock is acquired a row is updated in the lock table with the time of the lock and the server id of the locking job The lock time is set back to null when the job is finished running Another instance of SymmetricDS cannot aquire a lock until the locking instance according to the server id releases the lock If an instance is terminated while the lock is still held an instance with the same server id is allowed to reaquire the lock If the locking instance remains down the lock can be broken after a period of time specified by the cluster lock timeout ms property has expired Note that if the job is still running and the lock expires two jobs could be running at the s
33. supports bi directional or two way table synchronization and avoids getting into update loops by only recording data changes outside of synchronization 1 3 3 Data Channels SymmetricDS supports the concept of channels of data Data synchronization is defined at the table or Symmetric DS v2 5 2 Introduction table subset level and each managed table can be assigned to a channel that helps control the flow of data A channel is a category of data that can be enabled prioritized and synchronized independently of other channels For example in a retail environment users may be waiting for inventory documents to update while a promotional sale event updates a large number of items If processed in order the item updates would delay the inventory updates even though the data is unrelated By assigning changes to the item tables to an item channel and inventory tables changes to an inventory channel the changes are processed independently so inventory can get through despite the large amount of item data Channels are discussed in more detail in Section 3 5 Choosing Data Channels p 19 1 3 4 Transaction Awareness Many databases provide a unique transaction identifier associated with the rows that are committed together as a transaction SymmetricDS stores the transaction identifier along with the data that changed so it can play back the transaction exactly as it occurred originally This means the target database maintains th
34. table is inserted in the database when the node first registers with a parent node In the case of a root node the row is Symmetric DS v2 5 23 Configuration entered by the user The row is used by a node instance to determine its node identity The following SQL statements set up a top level registration server as a node identified as 00000 in the corp node group insert into SYM_NODE node_id node_group_id external_id sync_enabled values OOOOO Yeowe YOOOOO 1 is eno SN MINO DEN EN wells OOOO The second table NODE_SECURITY has rows created for each child node that registers with the node assuming auto registration is enabled If auto registration is not enabled you must create a row in NODE and NODE_SECURITY for the node to be able to register You can also with this table manually cause a node to re register or do a re initial load by setting the corresponding columns in the table itself Registration is discussed in more detail in Section 4 7 Opening Registration p 38 4 3 Node Group Node Groups are straightforward to configure and are defined in the NODE_GROUP table The following SQL statements would create node groups for corp and store based on our retail store example insert into SYM _NODE_ GROUP node_group_id description values sioze WA rerall suce inocle insert into SYM NODE GROUP node_group_id description values coma Ae Og Oman OGdeus E 4 4 Node Group
35. today 1 3 SymmetricDS Features At a high level SymmetricDS comes with a number of features that you are likely to need or want when doing data synchronization A majority of these features were created as a direct result of real world use of SymmetricDS in production settings 1 3 1 Notification Schemes After a change to the database is recorded the SymmetricDS nodes interested in the change are notified Change notification is configured to perform either a push trickle back or a pull trickle poll of data When several nodes target their changes to a central node it is efficient to push the changes instead of waiting for the central node to pull from each source node If the network configuration protects a node with a firewall a pull configuration could allow the node to receive data changes that might otherwise be blocked using push The frequency of the change notification is configurable and defaults to once per minute 1 3 2 Two Way Table Synchronization In practice much of the data in a typical synchronization requires synchronization in just one direction For example a retail store sends its sales transactions to a central office and the central office sends its stock items and pricing to the store Other data may synchronize in both directions For example the retail store sends the central office an inventory document and the central office updates the document status which is then sent back to the store SymmetricDS
36. transactional synchronization Large objects LOB are supported but are limited to 16 336 bytes in size The current features in the DB2 Dialect have been tested using DB2 9 5 on Linux and Windows operating systems There is currently a bug with the retrieval of auto increment columns with the DB2 9 5 JDBC drivers that causes some of the SymmetricDS configuration tables to be rebuilt when auto config database true The DB2 9 7 JDBC drivers seem to have fixed the issue They may be used with the 9 5 database A system temporary tablespace with too small of a page size may cause the following trigger build errors SQL1424N Too many references to transition variables and transition table columns or the row length for these references is too long Reason code 2 LINE NUMBER 1 SOQLSTATE 54040 Simply create a system temporary tablespace that has a bigger page size A page size of 8k will probably suffice C 9 Firebird The Firebird Dialect requires the installation of a User Defined Function UDF library in order to provide functionality needed by the database triggers SymmetricDS includes the required UDF library called SYM_UDF in both source form as a C program and as pre compiled libraries for both Windows and Linux The SYM_UDEF library is copied into the UDF folder within the Firebird installation directory For Linux users cp databases firebird sym_udf so opt firebird UDF For Windows users copy databases firebird sym_udf
37. treat date time as varchar enabled property to true C 3 PostgreSQL Starting with PostgreSQL 8 3 SymmetricDS supports the transaction identifier Binary Large Object BLOB replication is supported for both byte array BYTEA and object ID OID data types In order to function properly SymmetricDS needs to use session variables On PostgreSQL session variables are enabled using a custom variable class Add the following line to the postgresq1 cons file of PostgreSQL server custom_variable_classes symmetric This setting is required and SymmetricDS will log an error and exit if it is not present Before database triggers can be created by in PostgreSQL the plpgsql language handler must be installed on the database The following statements should be run by the administrator on the database Symmetric DS v2 5 103 Database Notes CREATE FUNCTION plpgsgl_call_handler RETURNS language_handler AS Slibdir plpgsql LANGUAGE C CREATE FUNCTION plpgsgl_validator oid RETURNS void AS Slibdir plpgsql LANGUAGE C CREATE TRUSTED PROCEDURAL LANGUAGE plpgsgl HANDLER plpgsql_call_handler VALIDATOR plpgsql_validator C 4 MS SQL Server SQL Server was tested using the TDS JDBC driver C 5 HSQLDB HSQLDB was implemented with the intention that the database be run embedded in the same JVM process as SymmetricDS Instead of dynamically generating static SQL based triggers l
38. up to a max batch size Symmetric DS v2 5 5 Introduction but never breaking on a database transaction boundary e Batching can be completely tied to a database transaction One batch per database transaction e Batching can ignore database transactions altogether and always batch based on a max batch size Another significant change to note in SymmetricDS 2 is the removal of the incoming and outgoing batch history tables This change was made because it was found that over 95 of the time the statistics the end user truly wanted to see were those for the most recent synchronization attempt not to mention that the outgoing batch history table was difficult to query The most valuable information in the batch history tables the batch statistics have been moved over to the batch tables themselves The statistics in the batch tables now always represent the latest synchronization attempt Symmetric DS v2 5 6 Chapter 2 Hands on Tutorial Now that several of the features of SymmetricDS have been discussed a quick working example of SymmetricDS is in order This section contains a hands on tutorial that demonstrates how to synchronize a sample database between two running instances of SymmetricDS This example models a retail business that has a central office database called root and multiple retail store databases called client For the tutorial we will have only one client as shown in Figure 2 1 l ORE S gt
39. updating the same DATA_EVENT table as part of the batching process while the row inserts are being created In SymmetricDS 2 triggers capture only data changes not the node specific details The node specific row inserts are replaced with a new routing mechanism that does both the routing and the batching of data on one thread Thus the real time inserts into DATA_EVENT by applications using synchronized tables have been eliminated and database performance is therefore improved The database contention on DATA_EVENT has also been eliminated since the router job is the only thread inserting data into that table The only other access to the DATA_EVENT table is from selects by synchronizing nodes As a result of these changes we gain the following benefits e Synchronizing client nodes will spend less time connected to a server node e Applications updating database tables that are being synchronized to a large number of nodes will not degrade in performance as more nodes are added and e There should be almost no database contention on the data_event table unlike the possible contention in 1 X Because routing no longer takes place in the SymmetricDS database triggers a new mechanism for routing was needed In SymmetricDS 1 x the node_select expression was used for specifying the desired data routing It was a SQL expression that qualified the insert into DATA_EVENT from the SymmetricDS triggers In SymmetricDS 2 there is a new extension
40. v2 5 12 Hands on Tutorial are categories assigned to tables for the purpose of independent synchronization and control Batches for a Channel are not created when a batch in the channel is in error status 1 PA Open an interactive SQL session with either the root or client database Verify that the data change you made was captured select from sym_data order by data_id desc Each row represents a row of data that was changed The event_type is I for insert U for update or D for delete For insert and update the captured data values are listed in row_data For update and delete the primary key values are listed in pk_data Verify that the data change was routed to a node using the data_id from the previous step select from sym_data_event where data_id When the batched flag is set the data change is assigned to a batch using a batch_id that is used to track and synchronize the data Batches are created and assigned during a push or pull synchronization Verify that the data change was batched sent and acknowledged using the batch_id from the previous step select from sym_outgoing_batch where batch_id A batch represents a collection of changes to be sent to a node The batch is created during a push or pull synchronization when the status is set to NE for new The receiving node acknowledges the batch with a status of OK for success or ER for error Understanding these three tables alo
41. web container The symmetricLauncher provides command line tools to work with and start SymmetricDS 5 2 1 Route Job Symmetric DS v2 5 44 Advanced Topics 5 2 1 1 Overview The SymmetricDS created database triggers cause data to be capture in the DATA table The next step in the synchronization process is to process the change data to determine which nodes if any the data should be routed to This step is performed by the Route Job In addition to determining which nodes data will be sent to the Route Job is also responsible for determing how much data will be batched together for transport It is a single background task that inserts into DATA_EVENT and OUTGOING_BATCH At a high level the Route Job is straightforward It collects a list of data ids from DATA which haven t yet been routed see Section 5 2 1 2 Data Gaps p 45 for much more detail about this step one channel at a time up to a limit specified by the channel configuration max_data_to_route on CHANNEL The data is then batched based on the batch_algorithm defined for the channel and as documented in Section 4 5 Channel p 27 Note that for the default batching algorithm there may actually be more than max_data_to_route Included depending on the transaction boundaries The mapping of data to specific nodes organized into batches is then recorded in OUTGOING_BATCH with a status of RT in each case representing the fact that the Route Job is still running
42. 9 commit 100 Symmetric DS v2 5 109 Appendix E Version Numbering The software is released with a version number based on the Apache Portable Runtime Project version guidelines In summary the version is denoted as three integers in the format of MAJOR MINOR PATCH Major versions are incompatible at the API level and they can include any kind of change Minor versions are compatible with older versions at the API and binary level and they can introduce new functions or remove old ones Patch versions are perfectly compatible and they are released to fix defects Symmetric DS v2 5 110
43. AILED_ROW_NUMBER BIGINT 0 X For a status of error ER this is the data_id that was being processed when the batch failed BYTE_COUNT BIGINT 0 X The number of bytes that were sent as part of this batch STATEMENT_COUNT BIGINT 0 X The number of statements run to load this batch FALLBACK_INSERT_COUNT BIGINT 0 X The number of times an update was turned into an insert because the data was not already in the target database FALLBACK_UPDATE_COUNT BIGINT 0 X The number of times an insert was turned into an update because a data row already existed in the target database MISSING_DELETE_COUNT BIGINT 0 X THe number of times a delete did not effect the database because the row was already deleted SKIP_COUNT BIGINT 0 X The number of times a batch was sent and skipped because it had already been loaded according to incoming_batch SQL_STATE VARCHAR For a status of error ER this is the XOPEN or 10 SQL 99 SQL State SQL_CODE INTEGER 0 X For a status of error ER this is the error code Symmetric DS v2 5 90 Data Model Name Type Size Default PK not Description FK null from the database that is specific to the vendor SQL_MESSAGE LONGVARCHAR For a status of error ER this is the error message that describes the error LAST_UPDATE_HOSTNAME VARCHAR The host name of the process that last did work 255 on this batch LAST_UPDATE_TIME TIMESTAMP Timestamp when a process
44. AME SOURCE_TABLE_NAME CHANNEL_ID SYNC_ON UPDATE SYNC_ON INSERT SYNC ON DELETE SYNC_ON_INCOMING_BATCH NAME_FOR_UPDATE_ TRIGGER NAME_FOR_INSERT_TRIGGER NAME_FOR_DELETE_TRIGGER SYNC_ON_UPDATE_CONDITION SYNC_ON_INSERT_CONDITION SYNC_ON_DELETE_CONDITION EXTERNAL _ SELECT TX_ID_EXPRESSION EXCLUDED_COLUMN_NAMES CREATE_TIME LAST_UPDATE_BY LAST_UPDATE_TIME values T SATE TRANSACTION _DEAD null null SALE _TRANSACTION transaction 0 0 0 amm od y el il iow dl some dl mye Il al y saul LL current_timestamp demo current_timestamp insert into sym router ROUTER_ID TARGET_CATALOG_NAME TARGET_SCHEMA_ NAME TARGET _TABLE NAME SOURCE_NODE_GROUP_ID TARGET_NODE_GROUP_ID ROUTER_TYPE ROULE REE PRES ONT SMNCERONRUE DAE SNC RONMIN SERIAS UN COND ENG EEE CREATE TIME LAST_UPDATE_BY LAST_UPDATE_TIME wales AS OREM ESOR ELE iawulil ioeli mili Corpi sucre mwulil mul 1 1 1 current_timestamp demo current_timestamp insert into sym_trigger_router TRIGGER_ID ROUTER_ID INITIAL_LOAD_ORDER INITIAL LOAD SELECT CREATE _ TIME LAST UPDATE _BY LAST_UPDATE_TIME values SALE TRANSACTION_DEAD CORP_2_REGION 100 null current_timestamp demo current_timestamp 4 6 3 3 Enabling Ping Back As discussed in Section 3 6 3 2 Circular References and Ping Back p 22 SymmetricDS by default avoids circ
45. CHANNEL CTE a ici 78 A 12 NODE_GROUP_CHANNEL_WINDOW cooocccccoccconcnocnnonnnonnncconocananonnccnnncconocnnnnnnncconnc ns 79 ALOS PRIGGER H ts ae T ET AE EA AE R RIG 79 A a o a a a E N E A ASO Ti 81 A15 TRIGGER ROUTER oia 82 AAG PARA ME TER a a a N R n R do 83 ALL REGIS PRA TON REDIRECT recaer 83 ALS REGISTRATION REQUEST a R O E A E TA e e 83 ANO TRIGGER HIST iS 84 PD DATA a hese a das othe e A N a A a AN AN A A ERES 85 A2 DATA REP aae a S ETT ERTA tun dca R S 86 A227 DATA GAP O O 87 A 2S IDATA EVEN T os 87 A24 OQOUTGONG BA TOE a A N e an ea a aa ieie ees 88 A 253 INCOMING BA TCH Ral 89 Symmetric DS v2 5 SymmetricDS 2 User Guide A20 LOCK mn aR A O OTAN 91 A27 TRANSFORM SABIE e O E Glam N A REN ea aad N 91 A28 TRANSFORM COLUMN ias 92 BPacameterse aaen e a E 94 A Rr E a E Reet 94 B 2 Runtime Parameters e ri eiia aAa A Aia nnnoncononnnonennnnncnnon 97 E Database Notes 2 sa it EE E E EEE 101 Ed o e OO PIE ae E A A a PEE PPE 101 A A E 102 O A N 103 CAMS SOL Servera toa ao 104 CI SO a Be he NNN a Make Nota Ae 104 A ance E oncaaden sees ahiaesoo ea teak oaseaeSA RSE Sah a 104 EA NCL aca ses cafe sats ts ace ai 104 A AAA O Mn a a a a NaN 104 E enre a A E ON APE A E N A O E A O E 105 C TOTO MIX OO 105 E Wa ES 0 Thc by hol Reape ee ee NEEE A eee E A A E NR EN 106 TDs Py abe Oral ss scesses cos seae Stes tamaac shots oi OL 108 Es EIA ID SEN es ie ee a as SB a a E da le ae A i a 110 Symmetric DS v2 5 Prefac
46. D EXTERNAL _ID_COLUMN STORE_ID current_timestamp current_timestamp 4 6 2 4 Subselect Router Sometimes routing decisions need to be made based on data that is not in the current row being synchronized Consider an example where an Order table and a OrderLineltem table need to be routed to a specific store The Order table has a column named order_id and STORE_ID A store node has an external_id that is equal to the STORE_ID on the Order table OrderLineltem however only has a foreign key to its Order of order_id To route OrderLineltems to the same nodes that the Order will be routed to we need to reference the master Order record There are two possible ways to route the OrderLineltem in SymmetricDS One is to configure a subselect router_type on the ROUTER table and the other is to configure an external_select on the TRIGGER table A subselect is configured with a router_expression that is a SQL select statement which returns a result set of the node_ids that need routed to Column tokens can be used in the SQL expression and will be replaced with row column data The overhead of using this router type is high because the subselect statement runs for each row that is routed It should not be used for tables that have a lot of rows that are updated It also has the disadvantage that 1f the Order master record is deleted then no results would be returned and routing would not happen The router_expression is appended to the fo
47. ER A E AA aA a ideene 46 24 S bselect ROUE Tesis pi R ERS A62 A ET a n AER O 4 6 3 Trigger Router Mappings ut DOS Load en S aan a E E AEE EN ARAA OESTRA Eee 4 6 3 2 Dead Ia 46 3 3 Enabline Ping Back see r n eee a a iia 4 T Opening Registration cercen ar E a T E Rea 4S Transformi Ne LALA r E a A A R ast ae ance ps aaaea 4 8 1 Transform Configuration Tables rs A Transf ora OA PV ES A e ans A RT REO e osne eea aeae a A EE iR a 5 1 1 Bi Directional Synchronization as 5 1 2 Multi Tiered ACA id ia Zo RESISTANCE AR IS Di 2a MODS e e aoa Siete eae eee Gh eed coe aoe a Sale kad Sag cd ee Gad Aa Did Le ROQUE NA A O 32 2 E O 5 2 2 Controlling Synchronization Frequency ooococcnccccnoncccnoncnononcnonnncnonnnnnononcncnnnccnonnncnnn Di Oe VC LEIS Perso E R NS cell WA PAULI SHAUN 255555 saretcsf esc cisau taco ass aces sania vactnc cudeao ge O a a R eee 3 4 A O e Web ATV weds aye sect cole R Ghat cass eee eG Goatees FEZ Slane Al ONS il sa IAS Pi bedded eRe e a BS his at 5 5 Running SymmetricDS as a Service ti ito 5 5 1 Running as a Windows A veces aes sazdeuccs tose ec sv acasaeadbendsosventnecaseat 5 3 2 RUTAS as AS NIX SERVICE A O A E E EEE E E E Dad Mey PIE Passwords isesi a a r TEE TES S A ORENS A N ess O ea a E E E aeay sou oeemaadeauasbes Do la ym Launcher sein a a a N N a a nmtoas D POMICAL E E E E E es ta O ES A A Wessu ocssss secon dee gushes nau yeciou aes satduuctis esau gs aansaeau bead I e 3 9 Ba
48. For triggers this is the change that occurred which is T for insert U for update or D for delete Other events include R for reloading the entire table or subset of the table to the node S for running dynamic SQL at the node which is used for adhoc administration ROW_DATA LONGVARCHAR The captured data change from the synchronized table The column values are stored in comma separated values CSV format PK_DATA LONGVARCHAR The primary key values of the captured data change from the synchronized table This data is captured for updates and deletes The primary key values are stored in comma separated values CSV format OLD_DATA LONGVARCHAR The captured data values prior to the update The column values are stored in CSV format TRIGGER_HIST_ID INTEGER X The foreign key to the trigger_hist entry that contains the primary key and column names for the table being synchronized CHANNEL_ID VARCHAR The channel that this data belongs to such as 20 prices TRANSACTION_ID VARCHAR An optional transaction identifier that links 255 multiple data changes together as the same transaction SOURCE_NODE_ID VARCHAR If the data was inserted by a SymmetricDS data 50 loader then the id of the source node is record so that data is not re routed back to it EXTERNAL _ DATA VARCHAR A field that can be populated by a trigger that 50 uses the EXTERNAL SELECT CREATE_TIME TIMESTAMP Timestamp when th
49. Group so do not choose Node Groups based on needing only subsets of data at specific nodes For example although you could you would not want to create a Node Group for each store even though different tax rates need to be routed to each store Each store needs to synchronize the same tables to the same groups so store would be a good choice for a Node Group 3 4 Linking Nodes Now that Node Groups have been chosen the next step in planning is to document the individual links between Node Groups These Node Group Links establish a source Node Group a target Node Group and a data event action namely whether the data changes are pushed or pulled The push method causes the source Node Group to connect to the target while a pull method causes it to wait for the target to connect to it For our retail store example there are two Node Group Links defined For the first link the store Node Group pushes data to the corp central office Node Group The second defines a corp to store link as a pull Thus the store nodes will periodically pull data from the central office but when it comes time to send data to the central office a store node will do a push 3 5 Choosing Data Channels When SymmetricDS captures data changes in the database the changes are captured in the order in which they occur In addition that order is preserved when synchronizing the data to other nodes Frequently however you will have cases where you have diff
50. Insert for example Finally please note that the tranformation engine relies on a source trigger router existing to supply the source data for the transformation The transform configuration will never be used if the source table and target node group does not have a defined trigger router combination for that source table and target node group 4 8 1 Transform Configuration Tables SymmetricDS stores its transformation configuration in two configuration tables TRANSFORM_TABLE and TRANSFORM_COLUMN Defining a transformation involves configuration in both tables with the first table defining which source and destination tables are involved and the second defining the columns involved in the transformation and the behavior of the data for those columns We will explain the various options available in both tables and the various pre defined transformation types To define a transformation you will first define the source table and target table that applies to a particular transformation The source and target tables along with a unique identifier the transform_id column are defined in TRANSFORM_TABLE In addition you will specify the source_node_group_id and target_node_group_id to which the transform will apply along with whether the transform should occur on the Extract step or the Load step transform_point All of these values are required Three additional configuration settings are also defined at the source target table level
51. JDBC driver has the potential to run SymmetricDS The database is abstracted through a Database Dialect in order to support specific features of each database The following Database Dialects have been included with this release e MySQL version 5 0 2 and above e Oracle version 8 1 7 and above e PostgreSQL version 8 2 5 and above e Sql Server 2005 e HSQLDB 1 8 e H2 1 x e Apache Derby 10 3 2 1 and above e IBM DB2 9 5 e Firebird 2 0 and above See Appendix C Database Notes p 101 for compatibility notes and other details for your specific database 1 5 What s new in SymmetricDS 2 SymmetricDS 2 builds upon the existing SymmetricDS 1 x software base and incorporates a number of architectural changes and performance improvements If you are brand new to SymmetricDS you can Symmetric DS v2 5 Introduction safely skip this section If you have used SymmetricDS 1 x in the past this section summarizes the key differences you will encounter when moving to SymmetricDS 2 The first significant architectural change involves SymmetricDS s use of triggers In 1 x triggers capture and record data changes as well as the nodes to which the changes must be applied as row inserts into the DATA_EVENT table Thus the number of row inserts grows linearly with the number of client nodes This can lead to an obvious performance issue as the number of nodes increases In addition the problem is made worse at times due to synchronizing nodes
52. ME VARCHAR Optional name for the catalog the configured 50 table is in SOURCE_SCHEMA_NAME VARCHAR Optional name for the schema a configured 50 table is in SOURCE_TABLE NAME VARCHAR X The name of the source table that will have a 50 trigger installed to watch for data changes CHANNEL_ID VARCHAR X The channel_id of the channel that data changes 20 will flow through SYNC_ON_UPDATE INTEGER 1 1 X Whether or not to install an update trigger SYNC_ON_INSERT INTEGER 1 1 X Whether or not to install an insert trigger SYNC_ON_DELETE INTEGER 1 1 X Whether or not to install an delete trigger SYNC_ON_INCOMING_BATCH INTEGER 1 0 X Whether or not an incoming batch that loads data into this table should cause the triggers to capture data_events Be careful turning this on because an update loop is possible NAME_FOR_UPDATE_TRIGGER VARCHAR Override the default generated name for the 50 update trigger NAME_FOR_INSERT_TRIGGER VARCHAR Override the default generated name for the 50 insert trigger NAME_FOR_DELETE_TRIGGER VARCHAR Override the default generated name for the 50 delete trigger SYNC_ON_UPDATE_CONDITION LONGVARCHAR Specify a condition for the update trigger firing using an expression specific to the database SYNC_ON_INSERT_CONDITION LONGVARCHAR Specify a condition for the insert trigger firing using an expression specific to the database SYNC_ON_DELETE_CONDITION LONGVARCHAR Specify a condition for the delete trigge
53. PARTENON PARTITION I_CONFIG L ONE L TWO I_CHANNE I_CHANNE I_CHANNE L_N Ie _ DIEU AL Ae C 2 MySQL CHANNEL ID Symmetric DS v2 5 102 Database Notes MySQL supports several storage engines for different table types SymmetricDS requires a storage engine that handles transaction safe tables The recommended storage engine is InnoDB which is included by default in MySQL 5 0 distributions Either select the InnoDB engine during installation or modify your server configuration To make InnoDB the default storage engine modify your MySQL server configuration file my ini on Windows my cnf on Unix default storage_engine innodb Alternatively you can convert tables to the InnoDB storage engine with the following command alter table t engine innodb On MySQL 5 0 the SymmetricDS user needs the SUPER privilege in order to create triggers grant super on to symmetric On MySQL 5 1 the SymmetricDS user needs the TRIGGER and CREATE ROUTINE privileges in order to create triggers and functions Geant TELGE CGM CO SYameiiale grant create routine on to symmetric MySQL allows 0000 00 00 00 00 00 to be entered as a value for datetime and timestamp columns JDBC can not deal with a date value with a year of 0 In order to work around this SymmetricDS can be configured to treat date and time columns as varchar columns for data capture and data load To enable this feature set the db
54. PDATE_HOSTNAME VARCHAR The host name of the process that last did work 255 on this batch LAST_UPDATE_TIME TIMESTAMP Timestamp when a process last updated this entry CREATE_TIME TIMESTAMP Timestamp when this entry was created A 25 INCOMING_BATCH Symmetric DS v2 5 89 Data Model The incoming_batch is used for tracking the status of loading an outgoing_batch from another node Data 1s loaded and commited at the batch level The status of the incoming_batch is either successful OK or error ER Table A 25 INCOMING_BATCH Name Type Size Default PK not Description FK null BATCH_ID INTEGER PK X The id of the outgoing_batch that is being 50 loaded NODE_ID VARCHAR PK X The node_id of the source of the batch being 50 loaded CHANNEL_ID VARCHAR The channel_id of the batch being loaded 20 STATUS CHAR 2 The current status of the batch can be loading LD successfully loaded OK in error ER or skipped SK ERROR_FLAG INTEGER 1 0 A flag that indicates that this batch was in error during the last synchornization attempt NETWORK_MILLIS BIGINT 0 X The number of milliseconds spent transfering this batch across the network FILTER_MILLIS BIGINT 0 X The number of milliseconds spent in filters processing data DATABASE_MILLIS BIGINT 0 X The number of milliseconds spent loading the data into the target database F
55. SymmetftricDS SymmetricDS 2 User Guide v2 5 Copyright O 2007 2011 Eric Long Chris Henson Mark Hanes Greg Wilmer Permission to use copy modify and distribute the SymmetricDS 2 User Guide Version 2 5 for any purpose and without fee is hereby granted in perpetuity provided that the above copyright notice and this paragraph appear in all copies Table of Contents PA A A Ad A cs vi INTO dUCUO a A A A A Ad 1 1 1 What 18 Symmetric DS ms n 1 132 Back round unidad 1 1 3 SymmetricDs Peatures dis ios 2 1 3 1 Notification Schemes iia id 2 1 3 2 Two Way Table Synchronization yiiiinicncon vanidad asian cias 2 1 3 3 Dat Channels descrita nilo 2 1 34 Transaction A Wareness eiii tati 3 1 3 5 Data Filtering and Rerouting sunvini iia is 3 1 3 6 HTTPS Transport eisir ieat e ea dead EEA E KASE Aa eai 3 1 3 7 R emote M nagem fit isis 4 LA System ReguirementS innri eiee iienaa a EE E TEE EE EEEE E A 4 1 5 What s new in Symmetric DS Za iooi decias 4 2 Hands on Tutorial aiii ds 7 2 1 Installing SymmetrieDS vin ra diria ER EEE 8 2 2 Creating and Populating Your Databases ooooocnnncccnoncccnoncccnoncnonononononcncnnncncnnncncnnnnccnnnnnnnnncno 9 23 SLATES Sym trie DS na aia 10 2 4 Registering a Node seenior tersa a i ia 11 2 vendia an Initial Load iran li 11 2 6 Pulling Data sieniin i a a 11 21 P stimo Data en aii 12 2 8 Verifying Outgoing Batches quin inicias 12 2 9 Verifying Incoming
56. Symmetric DS v2 5 46 Advanced Topics A configuration entry in Trigger without any history in Trigger Hist results in a new trigger being created N The Trigger Hist stores a hash of the underlying table so any alteration to the table causes the trigger to be rebuilt S When the 1ast_update_time 1s changed on the Trigger entry the configuration change causes the trigger to be rebuilt C If an entry in Trigger Hist is missing the corresponding database trigger the trigger is created T The process of examining triggers and rebuilding them is automatically run during startup and each night by the SyncTriggersJob The user can also manually run the process at any time by invoking the syncTriggers method over JMX The SyncTriggersJob is enabled by default to run at 15 minutes past midnight If SymmetricDS is being run from a collection of servers multiple instances of the same Node running against the same database then locking should be enable to prevent database contention The following runtime properties control the behavior of the process start synctriggers job Whether the sync triggers job is enabled for this node Default true job synctriggers aftermidnight minutes If scheduled the sync triggers job will run nightly This is how long after midnight that job will run Default 15 cluster lock during sync triggers Indicate if the sync triggers job is clustered and requires a lock before running Default false
57. SymmetricDS parameters Parameters can be targeted at a specific node group and even at a specific external id These settings will take precedence over all of the above IParameterFilter N An extension point which allows parameters to be sourced from another location or customized These settings will take precedence over all of the above B 1 Startup Parameters Startup parameters are read once from properties files and apply only during start up The following properties are used db jndi name The name of the database connection pool to use which is registered in the JNDI directory tree of the application server It is recommended that this DataSource is NOT transactional because SymmetricDS will handle its own transactions If NOT using a JNDI connection pool you must provide information about the database connection using the db driver db url db user and do password properties instead which will create a pool of connections using the db pool properties Symmetric DS v2 5 94 Parameters Default db driver The class name of the JDBC driver If ab jndi name is set this property is ignored Default com mysql jdbc Driver db url The JDBC URL used to connect to the database If ab jndi name is set this property is ignored Default jdbc mysql localhost symmetric db user The database username which is used to login create and update SymmetricDS tables To use an encrypted usern
58. The following is an example of the needed grant statements GRAN GRAN GRAN GRAN Partitioning the DATA table by channel can help insert routing and extraction performance on CONNECT TO SYMMETRIC RESOURCE TO SYMMETRIC CREATE ANY TRIGGER 1 EXECUTE ON UTL_RAW 1 LOR SuNMENEI O TO SYMMETRIC concurrent high throughput systems TRIGGER s should be organized to put data that is expected to be inserted concurrently on separate CHANNELs The following is an example of partitioning Note that both the table and the index should be partitioned The default value allows for more channels to be added without having to modify the partitions CREATE 1 TABLE SYM_DATA data_id INTEGER NOT NULL ta ble name VARCHAR2 50 event_type CHAR 1 row_data CLOB pk_data CLOB old_data CLOB trigger_hist_id INTEGER NOT NULL channel_id VARCHAR2 20 transaction_id VARCHAR2 1000 source node 1d VARCHAR2 50 external _data VARCHAR2 50 create_time TIMESTAMP EMO NENAS NOT NULL P_CONFIG VALUES channel_id NOT NULL eomtalo P_CHANNEL ONE VALUES channel_one P_CHANNEL_TWO VALUES channel_two P_CHANNEL_N VALUES P_DEFAULT VALUES Cebanne a DEFAULT UNIQUE INDEX IDX_D_CHANNEL_ID ON SYM_DATA PA PARTERET ON PARTITION PARTITION PARTITION PARTITION CREATE EXPERTA ON LYNE IE LOIN PARTITION
59. What is the name of your State or Province Unknown Symmetric DS v2 5 55 Advanced Topics What is the two letter country code for this unit Unknown Is CN localhost OU SymmetricDS O JumpMind L Unknown ST Unknown C Unknown COLLEC no yes Enter key password for lt sym gt RETURN if same as keystore password 4 Export the certificate from the private keystore keytool keystore keystore export alias sym rfc file sym cer 5 Install the certificate in the trusted keystore keytool keystore cacerts import alias sym file sym cer 6 Copy the cacerts file that is generated by this process to the security directory of each client s SymmetricDS installation 5 9 Basic Authentication SymmetricDS supports basic authentication for client and server nodes To configure a client node to use basic authentication when communicating with a server node specify the following startup parameters http basic auth username username for client node basic authentication Default http basic auth password password for client node basic authentication Default The SymmetricDS Standalone and Embedded Server also support basic authentication This feature is enabled by specifying the basic authentication username and password using the following startup parameters embedded webserver basic auth username username for basic authentication for an embedded server or standalone server node Default e
60. acks during extraction A value of 1 indicates to stream from the source via callback a value of 0 lob data is captured by the trigger use_capture_lobs Provides a hint as to whether this trigger will capture big lobs data If set to 1 every effort will be made during data capture in trigger and during data selection for initial load to use lob facilities to extract and store data in the database A Important Note that many databases allow for multiple triggers of the same type to be defined Each database defines the order in which the triggers fire differently If you have additional triggers beyond those SymmetricDS installs on your table please consult your database documentation to determine if there will be issues with the ordering of the triggers 4 6 2 Router Routers provided in the base implementation currently include Default Router a router that sends all data to all nodes that belong to the target node group defined in the router Column Match Router a router that compares old or new column values to a constant value or the value of a node s external_id or node_id Lookup Router a router which can be configured to determine routing based on an existing or ancillary table specifically for the purpose of routing data Subselect Router a router that executes a SQL expression against the database to select nodes to route to This SQL expression can be passed values of old and new column values Scripted Router a
61. al aliowe CaTa e insert into SYM_CHANNEL channel_id processing_order max_batch_size max_batch_to_send extract_period_millis batch_algorithm enabled description values sale ctransaccilom 1 1000 10 00000 Yecransactiomel 1 retail sale transactions from register Batching is the grouping of data by channel to be transferred and committed at the client together There are three different out of the box batching algorithms which may be configured in the batch_algorithm column on channel default All changes that happen in a transaction are guaranteed to be batched together Multiple transactions will be batched and committed together until there is no more data to be sent or the max_batch_size is reached transactional Batches will map directly to database transactions If there are many small database transactions then there will be many batches The max_batch_size column has no effect nontransactional Multiple transactions will be batched and committed together until there is no more data to be sent or the max_batch_size is reached The batch will be cut off at the max_batch_size regardless of whether it is in the middle of a transaction There are also several size related parameters that can be set by channel They include max_batch_size Symmetric DS v2 5 27 Configuration Specifies the maximum number of data events to process within a batch for this channel max_batch_to_send Spe
62. ame see Section 5 7 Encrypted Passwords p 54 If ab jndi name is set this property is ignored Default symmetric db password The password for the database user To use an encrypted password see Section 5 7 Encrypted Passwords p 54 If ab jndi name is set this property is ignored Default db pool initial size The initial size of the connection pool If ab jndi name is set this property is ignored Default 5 db pool max active The maximum number of connections that will be allocated in the pool If ab jndi name is set this property is ignored Default 10 db pool max wait millis This is how long a request for a connection from the datasource will wait before giving up If db jndi name is set this property is ignored Default 30000 db pool min evictable idle millis This is how long a connection can be idle before it will be evicted If ab jndi name is set this property is ignored Default 120000 db spring bean name The name of a Spring bean to use as the DataSource If you want to use a different DataSource other than the provided DBCP version that SymmetricDS uses out of the box you may set this to be the Spring bean name of your DataSource db sql query timeout seconds The timeout in seconds for queries running on the database Default 300 db tx timeout seconds This is how long the default transaction time is This needs to be fairly big to account for large data loads Default
63. ame time which could cause database deadlocks By default the locking server id is the hostname of the server If two clustered instances are running on the same server then the cluster server id property may be set to indicate the name that the instance should use for its server id When deploying SymmetricDS to an application server like Tomcat or JBoss no special session clustering needs to be configured for the application server Symmetric DS v2 5 53 Advanced Topics 5 7 Encrypted Passwords The ab user and db password properties Will accept encrypted text which protects against casual observation The text is prefixed with enc to indicate that it is encrypted To encrypt text use the following command sym e secret The text is encrypted by the cipher defined as alias sym secret in the Java keystore The keystore is specified by the sym keystore file system property which defaults to security keystore If a cipher is not found a default cipher using Triple DES with a random password is generated 5 8 Secure Transport By specifying the https protocol for a URL SymmetricDS will communicate over Secure Sockets Layer SSL for an encrypted transport The following properties need to be set with https in the URL sync url This is the URL of the current node so if you want to force other nodes to communicate over SSL with this node you specify https in the URL registration url This is the URL where th
64. an Insert Update or Delete In the case of Delete you even have options on what exactly to do on the target side be it a delete of a row setting columns to specific values or absolutely nothing at all A few key concepts are important to keep in mind to understand how SymmetricDS performs transformations The first concept is that of the source operation or source DML type which is the type of operation that occurred to generate the synchronization data in the first place 1 e an insert a Symmetric DS v2 5 38 Configuration delete or an update Your transformations can be configured to act differently based on the source DML type 1f desired When transforming by default the DML action taken on the target matches that of the action taken on the row in the source although this behavior can be altered through configuration if needed If the source DML type is an Insert for example the resulting transformation DML s will be Insert s Another important concept is the way in which transforms are applied Each source operation may map to one or more transforms and result in one or more operations on the target tables Each of these target Operations are performed as independent operations in sequence and must be complete from a SQL perspective In other words you must define columns for the transformation that are sufficient to fill in any primary key or other required data in the target table if the source operation was an
65. apture and record relevant data changes into a table the DATA table After the data is captured a background process chooses the nodes that the data will be synchronized to This is called routing and it is performed by the Routing Job Note that the Routing Job does not actually send any data It just organizes and records the decisions on where to send data in a staging table called DATA_EVENT and OUTGOING_BATCH Now we are ready to discuss Routers The router itself is what defines the configuration of where to send a data change Each Router you define can be associated with or assigned to any number of Triggers through a join table that defines the relationship Routers are defined the SymmetricDS table named ROUTER For each router you define you will need to specify e the target table on the destination node to route the data e the source node group and target node group for the nodes to route the data to e a router type and router expression e whether to route updates inserts and or deletes For now do not worry about the specific routing types They will be covered later For your design simply make notes of the information needed and decisions to determine the list of nodes to route to You will find later that there is incredible flexibility and functionality available in routers For example you will find you can e send the changes to all nodes that belong to the target node group defined in the router e compare old or new co
66. atement is run against each table to get the data load that will be streamed to the target node The selected data is filtered through the configured router for the table being loaded If the data set is going to be large then SQL criteria can optionally be provided to pair down the data that is selected out of the database An initial load can not occur until after a node is registered An initial load is requested by setting the initial_load_enablea column on NODE_SECURITY to on the row for the target node in the parent node s database The next time the target node synchronizes reload batches will be inserted At the same time reload batches are inserted all previously pending batches for the node are marked as successfully sent A Important Note that if the parent node that a node is registering with is not a registration server node as can happen with a registration redirect or certain non tree structure node configurations the parent node s NODE_ SECURITY entry must exist at the parent node and have a non null value for column initial_load_time Nodes can t be registered to non registration server nodes without this value being set one way or another 1 e manually or as a result of an initial load occuring at the parent node SymmetricDS recognizes that an initial load has completed when the initial_1oad_time column on the target node is set to a non null value An initial load is accomplished by inserting reload batches in a defin
67. ce can use the sym command line options to start a server An embedded instance of Jetty is used to service web requests for all the servlets symmetric bin sym properties root properties port 8080 server Symmetric DS v2 5 50 Advanced Topics This example starts the SymmetricDS server on port 8080 with the startup properties found in the root properties file 5 4 3 Embedded A Java application with the SymmetricDS Java Archive JAR library on its classpath can use the symmetricwWebserver to start the server import org Jumpmind symmetric SymmetricWebServer public class StartSymmetricEngine Start an engine that is configured by two properties files One is packaged with the application and contains overridden properties that are specific to the application The other is found in the application s working directory It can be used to setup environment specific properties public static void main String args throws Exception A ROO CR SymmetricWebServer node new SymmetricWebServer classpath my application properties this will create the database sync triggers start jobs running node start 8080 this will stop the node node stop This example starts the SymmetricDS server on port 8080 with startup properies found in two locations The first file my application properties is packaged in the application to provide properties that override
68. cifies the maximum number of batches to send for a given channel during a synchronization between two nodes A synchronization is equivalent to a push or a pull For example if there are 12 batches ready to be sent for a channel and max_batch_to_send is equal to 10 then only the first 10 batches will be sent even though 12 batches are ready max_data_to_route Specifices the maximum number of data rows to route for a channel at a time Based on your particular synchronization requirements you can also specify whether old new and primary key data should be read and included during routing for a given channel These are controlled by the columns use_old_data_to_route use_row_data_to_route and use_pk_data_to_route respectively By default they are all 1 true Finally if data on a particular channel contains big lobs you can set the column contains_big_lob to 1 true to provide SymmetricDS the hint that the channel contains big lobs Some databases have shortcuts that SymmetricDS can take advantage of if it knows that the lob columns in DATA aren t going to contain large lobs The definition of how large a big lob is varies from database to database 4 6 Triggers and Routers 4 6 1 Trigger SymmetricDS captures synchronization data using database triggers SymmetricDS Triggers are defined in the TRIGGER table Each record is used by SymmetricDS when generating database triggers Database triggers are only generated when a trigg
69. d be created prior to an initial load Default false http timeout ms Sets both the connection and read timeout on the internal HttpUrlConnection Default 600000s http compression Whether or not to use compression over HTTP connections Currently this setting only affects the push connection of the source node Compression on a pull is enabled using a filter in the web xml for the PullServlet Default true web compression disabled Disable compression from occurring on Servlet communication This property only affects the outbound HTTP traffic streamed by the PullServlet and PushServlet Default false compression level Set the compression level this node will use when compressing synchronization payloads Valid values include NO_COMPRESSION 0 BEST_SPEED 1 BEST_COMPRESSION 9 DEFAULT_COMPRESSION 1 Default 1 compression strategy Set the compression strategy this node will use when compressing synchronization payloads Valid values include FILTERED 1 HUFFMAN_ONLY 2 DEFAULT_STRATEGY 0 Default 0 stream to file enabled Save data to the file system before transporting it to the client or loading it to the database if the number of bytes is past a certain threshold This allows for better compression and better use of database and network resources Statistics in the batch tables will be more accurate if this is set to true because each timed operation is independent of the others Default true
70. d line utility does JMX can be invoked programatically or via a web console e Both the utility and the JMX method register a node by inserting into two tables A script can be written to directly register nodes by directly inserting into the database e SymmetricDS can be configured to auto register nodes This means that any node that asks for a Symmetric DS v2 5 22 Planning an Implementation registration will be given one 3 7 Planning Data Transformations SymmetricDS also provides the abilty to transform synchronized data instead of simply synchronizing it Your application might for example require a particular column in your source data to be mapped to two different target tables with possibly different column names Or you might need to merge one or more columns of data from two indepdentent tables into one table on the target Or you may want to set default column values on a target table based on a particular event on the source database All of these operations and many more can be accomplished using SymmetricDS transformation capabilities As you plan your SymmetricDS implementation make notes of cases where a data transformation is needed Include details such as when the transformation might occur is it only on an insert or a delete which tables or columns play a part etc Complete details of all the transformation features including how to configure a transformation are discussed in Section 4 8 Transfor
71. e SymmetricDS is an open source web enabled database independent data synchronization software application It uses web and database technologies to replicate tables between relational databases in near real time The software was designed to scale for a large number of databases work across low bandwidth connections and withstand periods of network outages This User Guide introduces SymmetricDS and its uses for data synchronization It is intended for users who want to be quickly familiarized with the software configure it and use its many features This version of the guide was generated on 2011 11 06 at 12 55 56 Symmetric DS v2 5 vi Chapter 1 Introduction This User Guide will introduce both basic and advanced concepts in the configuration of SymmetricDS By the end of this chapter you will have a better understanding of SymmetricDS capabilities and many of its basic concepts 1 1 What is SymmetricDS SymmetricDS is an asynchronous data replication software package that supports multiple subscribers and bi directional synchronization It uses web and database technologies to replicate tables between relational databases in near real time if desired The software was designed to scale for a large number of databases work across low bandwidth connections and withstand periods of network outage The software can be installed as a standalone process as a web application in a Java application server or it can be embedded
72. e Type Size Default PK not Description FK null TRANSFORM_ID VARCHAR PK X Unique identifier of a specific transform 50 INCLUDE_ON CHAR 1 ds PK X Indicates whether this mapping is included Symmetric DS v2 5 92 Data Model Name Type Size Default PK not Description FK null during an insert 1 update U delete D operation at the target based on the dml type at the source A value of represents the fact that you want to map the column for all operations TARGET_COLUMN_NAME VARCHAR PK X Name of the target column 128 SOURCE_COLUMN_NAME VARCHAR Name of the source column 128 PK INTEGER 1 0 Indicates whether this mapping defines a primary key to be used to identify the target row At least one row must be defined as a pk for each transform_id TRANSFORM_TYPE VARCHAR copy The name of a specific type of transform 50 Custom transformers can be configured as extension points TRANSFORM_EXPRESSION LONGVARCHAR An expression that is specific to the type of transform that is configured in transform_type See the documentation for each transformer for more details TRANSFORM_ORDER INTEGER 1 X Specifies the order in which to apply transforms if more than one target operation occurs Symmetric DS v2 5 93 Appendix B Parameters There are two kinds of parameters that can be used to configure the behavior of Sym
73. e following lt xml version 1 0 encoding UTF 8 gt lt sale xmlns xsi http www w3 org 2001 XMLSchema instance id 0012010 01 220031234 lt row entity SALE_1 lt data lt data lt data lt data lt data lt row gt key STORE_ key WORKSTA key TRANSACT key CASHIER_ID gt 0 EY ln nodeid 00001 E ID gt 001 lt data gt key BUSINESS_DAY gt 2010 01 22 lt data gt KONSI D gt 003 lt data gt LEONEL eK aaa 10110 lt data gt lt row entity SALE_LINE_ITEM dml I gt lt data lt data lt data lt data lt data lt data lt data lt row gt key DESC key WORKSTA key TRANSACTION_I key SKU gt 9999999 lt data gt key PRICE gt key STORE_ID gt 001 lt data gt key BUSINESS_DAY gt 2010 01 22 lt data gt TION_1D gt 003 lt data gt D gt 1234 lt data gt 10 00 lt data gt zals mil turua gt lt row entity SALE_LINE_ITEM dml I gt lt data lt data lt data lt data lt data lt data lt data lt row gt Kev DESCI key WORKSTAT key TRANSAC key SKU gt 9999999 lt data gt key PRICE gt 1 key STORE_ID gt 001 lt data gt key BUSINESS_DAY gt 2010 01 22 lt data gt TON ID gt 003 lt data gt TION_1ID gt 1234 lt data gt 10 00 lt data gt ssl mi l Merue gt lt row entity SALE_TAX dml I gt ime 1264187704155 gt Symmetric DS v2 5 48 Advanced Topics
74. e node will connect for registration when it first starts up To protect the registration with SSL you specify https in the URL For incoming HTTPS connections SymmetricDS depends on the webserver where it is deployed so the webserver must be configured for HTTPS As a standalone deployment the sym launcher command provides options for enabling HTTPS support 5 8 1 Sym Launcher The sym launch command uses Jetty as an embedded web server Using command line options the web server can be told to listen for HTTP HTTPS or both sym port 8080 server sym secure port 8443 secure server sym port 8080 secure port 8443 mixed server 5 8 2 Tomcat If you deploy SymmetricDS to Apache Tomcat it can be secured by editing the TOMCAT_HOME conf server xm1 Configuration file There is already a line that can be uncommented and changed to the following Symmetric DS v2 5 54 Advanced Topics lt Connector port 8443 protocol HTTP 1 1 SSLEnabled true maxThreads 150 scheme https secure true clientAuth false sslProtocol TLS keystoreFile symmetric ds 1 x x security keystore gt 5 8 3 Keystores When SymmetricDS connects to a URL with HTTPS Java checks the validity of the certificate using the built in trusted keystore located at yre_HomE 1ib security cacerts The sym launcher command overrides the trusted keystore to use its own trusted keystore instead which is located at security cacerts T
75. e reopenRegistration JMX method which takes a node_ia as an argument 4 8 Transforming Data New to SymmetricDS 2 4 SymmetricDS is now able to transform synchronized data by way of configuration previously for most cases a custom data loader would need to have been written This transformation can take place on a source node or on a target node as the data is being loaded or extracted With this new feature you can for example e Copy a column from a source table to two or more target table columns e Merge columns from two or more source tables into a single row in a target table e Insert constants in columns in target tables based on source data synchronizations e Insert multiple rows of data into a single target table based on one change in a source table e Apply a Bean Shell script to achieve a custom transform when loading into the target database These transformations can take place either on the target or on the source and as data is either being extracted or loaded In either case the transformation is initiated due to existence of a source synchronization trigger The source trigger creates the synchronization data while the transformation configuration decides what to do with the sychronization data as it is either being extracted from the source or loaded into the target You have the flexibility of defining different transformation behavior depending on whether the source change that triggered the synchronization was
76. e same transactional integrity as 1ts source Support for transaction identification for supported databases is documented in the appendix of this guide 1 3 5 Data Filtering and Rerouting Using SymmetricDS data can be filtered as it is recorded extracted and loaded e Data routing is accomplished by assigning a router type to a ROUTER configuration Routers are responsible for identifying what target nodes captured changes should be delivered to Custom routers are possible by providing a class implementing IDatarouter e As data changes are loaded in the target database a class implementing DataLoaderFilter can change the data in a column or route it somewhere else One possible use might be to route credit card data to a secure database and blank it out as it loads into a centralized sales database The filter can also prevent data from reaching the database altogether effectively replacing the default data loading process e Columns can be excluded from synchronization so they are never recorded when the table is changed As data changes are loaded into the target database a class implementing tcolumnFilter can remove a column altogether from the synchronization For example an employee table may be synchronized to a retail store database but the employee s password is only synchronized on the initial insert e As data changes are extracted from the source database a class implementing the IExt ractorListener Interface is called to
77. e target group only when a status column changes values The following SQL statement will insert a column router to accomplish that Note the use of OLD_STATUS where the OLD_ prefix gives access to the old column value insert into SYM_ROUTER router_id source_node_group_id target_node_group_id router_expression create_time last_update_time values COrO 2 Store stacus coma VSCO y Yeo lumina STATUS OLD_STATUS current_timestamp current_timestamp ROUTERS per Consider a table that needs to be routed to only nodes in the target group whose STORE_ID column matches the external id of a node The following SQL statement will insert a column router to accomplish that insert imtoo SM ROUTER router_id source_node_group_id target_node_group_id router_type router_expression create_time last_update_time values como 2 stome 1i0 eos score COE STORE_ID EXTERNAL_ID current_timestamp current_timestamp Attributes on a NODE that can be referenced with tokens include NODE ID e EXTERNAL ID e NODE_GROUP_ID Consider a table that needs to be routed to a redirect node defined by its external id in the REGISTRATION_REDIRECT table The following SQL statement will insert a column router to accomplish that insert into SYM _ROUTER router_id source_node_group_id target_node_group_id router_expression create_time last_update_time TOUS per values TCO e 2
78. eate the SymmetricDS system tables It begins polling the root node in order to register Since registration is not yet open the client node receives an authorization failure HTTP response of 403 Tip If you want to change the port number used by SymmetricDS you need to also set the sync url runtime property to match The default value is url http localhost 8080 sync Symmetric DS v2 5 10 Hands on Tutorial 2 4 Registering a Node Next we need to open registration for the client node so that it may receive its initial load of data and so that it may receive and send data from and to the root node There are several ways to do this We will use the administration feature on the root node 1 Open a command prompt and navigate to the samples subdirectory of your SymmetricDS installation Open registration for the client node server by executing bin sym p root properties open registration store 1 The registration is now opened for a node group called store with an external identifier of 1 This information matches the settings in client properties for the client node Each node is assigned to a node group and is given an external ID that makes sense for the application In this tutorial we have retail stores that run SymmetricDS so we named our node group store and we used numeric identifiers starting with 1 More information about node groups will be covered in the next chapter Watch the logging ou
79. ecified the username for basic authentication for an embedded server or standalone server node Specifying the username and password is all that s needed to enable basic authentication for an embedded server or standalone server node Default embedded webserver basic auth password If specified the password for basic authentication for an embedded server or standalone server node Default https verified server names A list of comma separated server names that will always verify when using https This is useful if the URL s hostname and the server s identification hostname don t match exactly using the default rules for the JRE A special value of all may be specified to allow all hostnames to verify Default sync table prefix When symmetric tables are created and accessed this is the prefix to use for the table name Default sym engine name This is the engine name This should be set if you have more than one engine running in the same JVM It is used to name the JMX management bean Default Default start push job Symmetric DS v2 5 96 Parameters Whether the push job is enabled for this node Default true start pull job Whether the pull job is enabled for this node Default true start purge job Whether the purge job is enabled for this node Default true start synctriggers job Whether the sync triggers job is enabled for this node Default true start heartbeat job Whether
80. ed order according to the initial_load_order column on TRIGGER_ROUTER Initial load data is always queried from the source database table All data is passed through the configured router to filter out data that might not be targeted at a node An efficient way to select a subset of data from a table for an initial load is to provide an initial_load_select Clause on TRIGGER_ROUTER This clause if present is applied as a where clause to the SQL used to select the data to be loaded The clause may use t as an alias for the table being loaded if needed If an initial_load_select Clause is provided data will not be passed through the configured router during initial load In cases where routing is done using a feature like Section 4 6 2 4 Subselect Router p 33 an initial_load_select clause matching the subselect s criteria would be a more efficient approach One example of the use of an initial load select would be if you wished to only load data created more recently than the start of year 2011 Say for example the column created_time contains the creation date Your initial_load_select Would read created_time gt ts 2011 01 01 00 00 00 0000 using whatever timestamp format works for your database This then gets applied as a wnere clause when selecting data from the table Q Important When providing an initial_load_select be sure to test out the criteria against production data in a query browser Do an explain plan to make sure you
81. efault column bsh and subselect Custom routers can be configured as extension points ROUTER_EXPRESSION LONGVARCHAR An expression that is specific to the type of router that is configured in router_type See the documentation for each router for more details SYNC_ON_UPDATE INTEGER 1 1 X Flag that indicates that this router should route updates SYNC_ON_INSERT INTEGER 1 1 X Flag that indicates that this router should route inserts SYNC_ON_DELETE INTEGER 1 1 X Flag that indicates that this router should route deletes CREATE_TIME TIMESTAMP X Timestamp when this entry was created LAST_UPDATE_BY VARCHAR The user who last updated this entry 50 LAST_UPDATE_TIME TIMESTAMP X Timestamp when a user last updated this entry Map a trigger to a router Table A 15 TRIGGER_ROUTER Name Type Size Default PK not Description FK null TRIGGER_ID VARCHAR PK X The id of a trigger 50 ROUTER_ID VARCHAR PK X The id of a router 50 INITIAL_LOAD_ ORDER INTEGER 1 X Order sequence of this table when an initial load is sent to a node INITIAL_LOAD_SELECT LONGVARCHAR Optional expression that can be used to pair down the data selected from a table during the initial load process PING_BACK_ENABLED INTEGER 1 0 X When enabled the node will route data that originated from a node back to that node This attribute is only effective if sync_on_incoming_batch is set to 1 CREATE_TIME TIMESTAMP X Timestamp when t
82. el but sales transactions on another We will define which tables belong to which channels in the next sections A Important Be sure that when defining Channels all tables related by foreign keys are included in the same channel 3 6 Defining Data Changes to be Captured and Routed At this point you have designed the node related aspects of your implementation namely choosing nodes grouping the nodes based on functionality defining which node groups send and receive data to which others and by what method You have defined data Channels based on the types and priority of data being synchronized The largest remaining task prior to starting your implementation is to define and document what data changes are to be captured by defining SymmetricDS Triggers and to decide to which node s the data changes are to be routed to and under what conditions We will also in this section discuss the concept of an initial load of data into a SymmetricDS node 3 6 1 Defining Triggers SymmetricDS uses database triggers to capture and record changes to be synchronized to other nodes Based on the configuration you provide SymmetricDS creates the needed database triggers automatically for you There is a great deal of flexibility in terms of defining the exact conditions under which a data change is captured SymmetricDS triggers are defined in a table named TRIGGER Each trigger you define is for a particular table associated Each trigger can als
83. epresents a category of data that can be synchronized independently of other channels Channels allow control over the type of data flowing and prevents one type of synchronization from contending with another Table A 10 CHANNEL Symmetric DS v2 5 771 Data Model Name Type Size Default PK not Description FK null CHANNEL_ID VARCHAR PK X_ A unique identifer usually named something 20 meaningful like sales or inventory PROCESSING_ORDER INTEGER 1 X Order of sequence to process channel data MAX_BATCH_SIZE INTEGER 1000 X The maximum number of Data Events to process within a batch for this channel MAX_BATCH_TO_SEND INTEGER 60 X The maximum number of batches to send during a synchronization between two nodes A synchronization is equivalent to a push or a pull If there are 12 batches ready to be sent for a channel and max_batch_to_send is equal to 10 then only the first 10 batches will be sent MAX_DATA_TO_ROUTE INTEGER 100000 X The maximum number of data rows to route for a channel at a time EXTRACT_PERIOD_MILLIS INTEGER 0 X The minimum number of milliseconds allowed between attempts to extract data for targeted at a node_id ENABLED INTEGER 1 1 X Indicates whether channel is enabled or not USE_OLD_DATA_TO_ROUTE INTEGER 1 1 X Indicates whether to read the old data during routing USE_ROW_DATA_TO_ROUTE INTEGER 1 1 X Indicate
84. er is associated with a ROUTER whose source_node_group_id matches the node group id of the current node When determining whether a data change has occurred or not by defalt the triggers will record a change even if the data was updated to the same value s they were originally For example a data change will be captured if an update of one column in a row updated the value to the same value it already was There is a global property trigger update capture changed data only enabled false by default that allows you to override this behavior When set to true SymmetricDS will only capture a change if the data has truly changed i e when the new column data is not equal to the old column data Important The property trigger update capture changed data only enabled is currently only supported in the MySQL and Oracle dialects The following SQL statement defines a trigger that will capture data for a table named item whenever data is inserted updated or deleted The trigger is assigned to a channel also called item insert into SYM_TRIGGER trigger_id source_table_name channel_id last_update_time create_time Symmetric DS v2 5 28 Configuration values item item item current_timestamp current_timestamp Two lobs related settings are also available on TRIGGER use_stream_lobs Specifies whether to capture lob data as the trigger is firing or to stream lob columns from the source tables using callb
85. erent types of data with differing priorities Some data might for example need priority for synchronization despite the normal order of events For example in a retail environment users may be waiting for inventory documents to update while a promotional sale event updates a large number of items SymmetricDS supports this by allowing tables being synchronized to be grouped together into Channels Symmetric DS v2 5 19 Planning an Implementation of data A number of controls to the synchronization behavior of SymmetricDS are controlled at the Channel level For example Channels provide a processing order when synchronizing a limit on the amount of data that will be batched together and isolation from errors in other channels By categorizing data into channels and assigning them to TRIGGERs the user gains more control and visibility into the flow of data In addition SymmetricDS allows for synchronization to be enabled suspended or scheduled by Channels as well The frequency of synchronization can also be controlled at the channel level Choosing Channels is fairly straightforward and can be changed over time if needed Think about the differing types of data present in your application the volume of data in the various types etc What data is considered must have and can t be delayed due to a high volume load of another type of data For example you might place employee related data such as clocking in or out on one chann
86. example you may have a system where the lowest tier may by a computer or device located in a store Those devices may connect to a server located physically at that store Then the store server may communicate with a corporate server for example In this case the three tiers would be device store and corporate Each tier is typically represented by a node group Each node in the tier would belong to the node group representing that tier A node will always push and pull data to other node groups according to the node group link configuration A node can only pull and push data to other nodes that are represented node table in its database and having sync_enablea 1 Because of this a tree like hierarchy of nodes can be created by having only a subset of nodes belonging to the same node group represented at the different branches of the tree If auto registration is turned off then this setup must occur manually by opening registration for the desired nodes at the desired parent node and by configuring each node s registration url to be the parent node s URL The parent node is always tracked by the setting of the parent s node_ia in the created_at_node_id column of the new node When a node registers and downloads its configuration it is always provided the configuration for nodes that might register with the node itself based on the Node Group Links defined in the parent node Symmetric DS v2 5 42 Advanced Topics 5 1 2 1 Registration
87. finition If changes are detected to the values that affect a trigger definition then the trigger will be regenerated COLUMN_NAMES LONGVARCHAR X The column names defined on the table The column names are stored in comma separated values CSV format PK_COLUMN_NAMES LONGVARCHAR X The primary key column names defined on the table The column names are stored in comma separated values CSV format LAST_TRIGGER_BUILD_REASONCHAR 1 X The following reasons for a change are possible New trigger that has not been created before N Schema changes in the table were detected S Configuration changes in Trigger C Trigger was missing T ERROR_MESSAGE LONGVARCHAR Record any errors or warnings that occurred when attempting to build the trigger CREATE_TIME TIMESTAMP X Timestamp when this entry was created INACTIVE_TIME TIMESTAMP The date and time when a trigger was inactivated A 20 DATA The captured data change that occurred to a row in the database Entries in data are created by database triggers Table A 20 DATA Name Type Size Default PK not Description FK null DATA_ID INTEGER PK X Unique identifier for a data Symmetric DS v2 5 85 Data Model Name Type Size Default PK not Description FK null TABLE_NAME VARCHAR X The name of the table in which a change 50 occurred that this entry records EVENT_TYPE CHAR 1 X The type of event captured by this entry
88. from the source Symmetric DS v2 5 41 Chapter 5 Advanced Topics This chapter focuses on a variety of topics including deployment options jobs clustering encryptions synchronization control and configuration of SymmetricDS 5 1 Advanced Synchronization 5 1 1 Bi Directional Synchronization SymmetricDS allows tables to be synchronized bi directionally Note that an outgoing synchronization does not process changes during an incoming synchronization on the same node unless the trigger was created with the sync_on_incoming_batch flag set If the sync_on_incoming_batch flag 1s set then update loops are prevented by a feature that is available in most database dialects More specifically during an incoming synchronization the source node_ia is put into a database session variable that is available to the database trigger Data events are not generated if the target node_ia on an outgoing synchronization is equal to the source node_id By default only the columns that changed will be updated in the target system More complex conflict resolution strategies can be accomplished by using the 1pataLoaderFilter extension point which has access to both old and new data 5 1 2 Multi Tiered Synchronization As shown in Section 3 2 Organizing Nodes p 15 there may be scenarios where data needs to flow through multiple tiers of nodes that are organized in a tree like network with each tier requiring a different subset of data For
89. ging through Commons Logging When deploying to an application server if Log4J is not being leveraged then the general rules for for Commons Logging apply 7 6 Java Management Extensions Monitoring and administrative operations can be performed using Java Management Extensions JMX SymmetricDS uses MX4J to expose JMX attributes and operations that can be accessed from the built in web console Java s jconsole or an application server By default the web management console can be opened from the following address inicio LlOCAlinosie 9 31416 Using the Java jconsole command SymmetricDS is listed as a local process named SymmetricLauncher In jconsole SymmetricDS appears under the MBeans tab under then name defined by the engine name property The default value is SymmetricDS The management interfaces under SymmetricDS are organized as follows e Node administrative operations e Incoming statistics about incoming batches e Outgoing statistics about outgoing batches e Parameters access to properties set through the parameter service e Notifications setting thresholds and receiving notifications 7 7 Temporary Files SymmetricDS creates temporary extraction and data load files with the CSV payload of a synchronization when the value of the stream to file threshold bytes SymmetricDS property has been reached Before reaching the threshold files are streamed to from memory The default threshold value is 32 767 bytes
90. he database product name at this node as 50 reported by JDBC DATABASE_VERSION VARCHAR The database product version at this node as 50 reported by JDBC HEARTBEAT_TIME TIMESTAMP The last timestamp when the node sent a heartbeat which is attempted every ten minutes by default TIMEZONE_OFFSET VARCHAR The timezone offset in RFC822 format at the 6 time of the last heartbeat BATCH_TO_SEND_COUNT INTEGER 0 The number of outgoing batches that have not yet been sent This field is updated as part of the heartbeat job BATCH_IN_ERROR_COUNT INTEGER 0 The number of outgoing batches that are in error at this node This field is updated as part of the heartbeat job CREATED_AT_NODE_ID VARCHAR The node_id of the node where this node was 50 created This is typically filled automatically with the node_id found in node_identity where registration was opened for the node DEPLOYMENT_TYPE VARCHAR An indicator as to the type of SymmetricDS 50 software that is running Possible values are but not limited to engine standalone war professional mobile A 2 NODE_SECURITY Security features like node passwords and open registration flag are stored in the node_security table Table A 2 NODE_SECURITY Name Type Size Default PK not Description FK null NODE_ID VARCHAR PK X Unique identifier for a node 50 NODE_ PASSWORD VARCHAR X The password used by the node to prove its 50 identity duri
91. hema version This is hook to give the user a mechanism to indicate the schema version that is being synchronized This property is only valid if you use the default IRuntimeConfiguration implementation Default registration url The URL where this node can connect for registration to receive its configuration This property is only valid 1f you use the default IRuntimeConfiguration implementation Default sync url The URL where this node can be contacting for synchronization Default http localhost 8080 sync group id The node group id for this node Default default external id The secondary identifier for this node that has meaning to the system where it is deployed While the node id is a generated sequence number the external ID could have meaning in the user s domain such as a retail store number Default transport type Specify the transport type Supported values currently include http internal Default http hsqldb initialize db If using the HsqlDbDialect this property indicates whether Symmetric should setup the embedded database properties or if an external application will be doing so Default true Symmetric DS v2 5 100 Appendix C Database Notes Each database management system has its own characteristics that results in feature coverage in SymmetricDS The following table shows which features are available by database Table C 1 Support by Database
92. his channel to this node will be held until the error condition is resolved e The specific data id in the batch which is causing the failure available in column FatLep_paTa_1D e Any SQL message SQL State and SQL Codes being returned during the synchronization attempt available in columns sor_mEssAGE soL_sTATE and soL_copz respectively Er Note Using the error_flag on the batch table as shown above is more reliable than using the status column The status column can change from ER to a different status temporarily as the batch is retried Sl Note The query above will also show you any recent batches that were originally in error and were changed to be manually skipped See the end of Section 7 1 2 Resolving the Issue p 64 for more details To get a full picture of the batch you can query for information representing the complete list of all data changes associated with the failed batch by joining DATA and DATA_EVENT such as Symmetric DS v2 5 63 Administration select from sym_data where data_id in select data_id from sym_data_event where batch_id XXXXXX where XXXXXX is the batch id of the failing batch This query returns a wealth of information about each data change in a batch including e The table involved in each data change available in column TABLE_NAME The event type Update U Insert I or Delete D available in column evenr_rvee e A comma separated list of the new data and
93. his entry was created LAST_UPDATE_BY VARCHAR The user who last updated this entry 50 Symmetric DS v2 5 82 Data Model Name Type Size Default PK not Description FK null LAST_UPDATE_TIME TIMESTAMP X Timestamp when a user last updated this entry A 16 PARAMETER Provides a way to manage most SymmetricDS settings in the database Table A 16 PARAMETER Name Type Size Default PK not Description FK null EXTERNAL ID VARCHAR PK X Target the parameter at a specific external id 50 To target all nodes use the value of ALL NODE_GROUP_ID VARCHAR PK X Target the parameter at a specific node group 50 id To target all groups use the value of ALL PARAM_KEY VARCHAR PK X The name of the parameter 80 PARAM_VALUE LONGVARCHAR The value of the parameter A 17 REGISTRATION REDIRECT Provides a way for a centralized registration server to redirect registering nodes to their prospective parent node in a multi tiered deployment Table A 17 REGISTRATION_REDIRECT Name Type Size Default PK not Description FK null REGISTRANT_EXTERNAL_ID VARCHAR PK X Maps the external id of a registration request to 50 a different parent node REGISTRATION _NODE_ID VARCHAR X The node_id of the node that a registration 50 request should be redirected to A 18 REGISTRATION_REQUEST
94. his keystore contains the certificate aliased as sym for use in testing and easing deployments The trusted keystore can be overridden by specifying the javax net ssl trustStore System property When SymmetricDS is run as a secure server with the sym launcher it accepts incoming requests using the key installed in the keystore located at security keystore The default key is provided for convenience of testing but should be re generated for security 5 8 4 Generating Keys To generate new keys and install a server certificate use the following steps 1 Open a command prompt and navigate to the security subdirectory of your SymmetricDS installation on the server to which communication will be secured typically the root or central office server 2 Delete the old key pair and certificate keytool keystore keystore delete alias sym keytool keystore cacerts delete alias sym Enter keystore password changeit 3 Generate a new key pair Note that the first name last name the CN must match the fully qualified hostname the client will be using to communcate to the server keytool keystore keystore alias sym genkey keyalg RSA validity 10950 Enter keystore password changeit What is your first and last name Unknown localhost What is the name of your organizational unit Unknown SymmetricDSs What is the name of your organization Unknown JumpMind What is the name of your City or Locality Unknown
95. ially you would like to pre populate a store database with all the item pricing and tax data for that specific store This is achieved through an initial load A part of your planning be sure to consider which tables if any will need to be loaded initially SymmetricDS can also perform an initial load on a table with just a subset of data Initial Loads are further discussed in Section 4 6 3 1 Initial Load p 35 3 6 3 2 Circular References and Ping Back When routing data SymmetricDS by default checks each data change and will not route a data change back to a node if it originated the change to begin with This prevents the possibility of data changes resulting in an infinite loop of changes under certain circumstances You may find that for some reason you need SymmetricDS to go ahead and send the data back to the originating node a ping back As part of the planning process consider whether you have a special case for needing ping back Ping Back control is further discussed in Section 4 6 3 3 Enabling Ping Back p 37 3 6 4 Planning for Registering Nodes Our final step in planning an implementation of SymmetricDS involves deciding how a new node is connected to or registered with a parent node for the first time The following are some options on ways you might register nodes The tutorial uses the command line utility to register each individual node e A JMX interface provides the same interface that the comman
96. ice node to an individual register and vice versa but never flows between registers SIORE Z CORP Internet Stateless Corporate Load Balancer Store Firewall Firewall Central Office Central Office CO Server s Database HTTP S Register Figure 3 1 Two Tiered Retail Store Deployment Example More complex organization can also be used Consider for example if the same retail example is expanded to include store servers in each store to perform tasks such as opening the store for the day reconciling registers assigning employees etc One approach to this new configuration would be to create a three tier hierarchy see Figure 3 2 The highest tier the centralized database connects with each store server s database The store servers in turn communicate with the individual point of sale workstations at the store In this way data from each register could be accumulated at the store server then sent on to the central office Similarly data from the central office can be staged in the store server and then sent on to each register filtering the register s data based on which register it is Symmetric DS v2 5 16 Planning an Implementation STORE ____ A CORP Register 001 01 Store Firewall Store 001 Server Register 001 02 Internet Stateless Load Balancer Central Office CO Database Firewall Central Offica Server s Register 002 01
97. igger_hist_id from sym_trigger_hist where trigger_id t trigger_id where channel_id sale_transaction and tr router_id like store_corp_identity and t source_table_ name like sale_ order by tr initial_load_order asc This insert statement generates three rows one for each configured sale table It uses the most recent trigger history id for the corresponding table Finally it takes advantage of the initial load order for each trigger router to create the three rows in the correct order the order corresponding to the order in which the tables would have been initial loaded 7 4 Changing Configuration The configuration of your system as defined in the sym_ tables may be modified at runtime By default any changes made to the sym_ tables with the exception of sym_node should be made at the registration Symmetric DS v2 5 67 Administration server The changes will be synchronized out to the leaf nodes by SymmetricDS triggers that are automatically created on the tables If this behavior is not desired the feature can be turned off using a parameter Custom triggers may be added to the sym_ tables when the auto syncing feature is disabled 7 5 Logging Configuration The standalone SymmetricDS installation uses Log4J for logging The configuration file is conf log4j xml The 10943 xm1 file has hints as to what logging can be enabled for useful finer grained logging SymmetricDS proxies all of its log
98. ike the other databases HSQLDB triggers are Java classes that re use existing SymmetricDS services to read the configuration and insert data events accordingly The transaction identifier support is based on SQL events that happen in a window of time The trigger s track when the last trigger fired If a trigger fired within X milliseconds of the previous firing then the current event gets the same transaction identifier as the last If the time window has passed then a new transaction identifier is generated C 6 H2 The H2 database allows only Java based triggers Therefore the H2 dialect requires that the SymmetricDS jar file be in the database s classpath C 7 Apache Derby The Derby database can be run as an embedded database that is accessed by an application or a standalone server that can be accessed from the network This dialect implementation creates database triggers that make method calls into Java classes This means that the supporting JAR files need to be in the classpath when running Derby as a standalone database which includes symmetric ds jar and commons lang jar C 8 IBM DB2 The DB2 Dialect uses global variables to enable and disable node and trigger synchronization These Symmetric DS v2 5 104 Database Notes variables are created automatically during the first startup The DB2 JDBC driver should be placed in the lib folder Currently the DB2 Dialect for SymmetricDS does not provide support for
99. into another Java application A single installation of SymmetricDS attached to a target database is called a node A node is initialized by a properties file and is configured by inserting configuration data into a series of database tables It then creates database triggers on the application tables to be synchronized so that database events are captured for delivery to other SymmetricDS nodes In most databases the transaction id is also captured by the database triggers so that the insert update and delete events can be replicated transactionally via the transport layer to other nodes The transport layer is typically a CSV protocol over HTTP or HTTPS SymmetricDS supports synchronization across different database platforms through the concept of Database Dialects A Database Dialect is an abstraction layer that SymmetricDS uses to insulate the main synchronization logic from database specific implementation details In addition to synchronization SymmetricDS is also capable of performing fairly complex transformations of data as the synchronization data is loaded into a target database The transformations can be used to merge source data make multiple copies of source data across multiple target tables set defaults in the target tables etc The types of transformation can also be extended to create even more custom transformations SymmetricDS is extendable through extension points Extension points are custom reusable Java code that a
100. is entry was created A 21 DATA_REF Used only when routing data reader type is set to ref Table that tracks the last known data_id that has been processed This table is used so that joins to find unprocessed data can be better optimized Table A 21 DATA_REF Symmetric DS v2 5 86 Data Model Name Type Size Default PK not Description FK null REF_DATA_ID INTEGER PK X The data_id that can be used to limit the search of the data table to rows that are greater than this data_id value REF_TIME TIMESTAMP The time when the ref_data_id was recorded It is used as the base time to calculate timeouts for gaps in the data_ids A 22 DATA_GAP Used only when routing data reader type is set to gap Table that tracks gaps in the data table so that they may be processed efficiently if data shows up Gaps can show up in the data table if a database transaction is rolled back Table A 22 DATA_GAP Name Type Size Default PK not Description FK null START_ID INTEGER PK X The first missing data_id from the data table where a gap is detected This could be the last data_id inserted plus one END_ID INTEGER PK X The last missing data_id from the data table where a gap is detected If the start_id is the last data_id inserted plus one then this field is filled in with a 1 STATUS CHAR 2 GP SK or FL GP means there i
101. last updated this entry CREATE_TIME TIMESTAMP Timestamp when this entry was created A 26 LOCK Contains semaphores that are set when processes run so that only one server can run a process at a time Enable this feature by using the cluster lock during xxxx parameters Table A 26 LOCK Name Type Size Default PK not Description FK null LOCK_ACTION VARCHAR PK X The process that needs a lock 50 LOCKING_SERVER_ID VARCHAR The name of the server that currently has a 255 lock This is typically a host name but it can be overridden using the Druntime symmetric cluster server id name System property LOCK_TIME TIMESTAMP The time a lock is aquired Use the cluster lock timeout ms to specify a lock timeout period LAST_LOCK_TIME TIMESTAMP Timestamp when a process last updated this entry LAST_LOCKING_SERVER_ID VARCHAR The server id of the process that last did work 255 on this batch A 27 TRANSFORM_TABLE Defines a data loader transformation which can be used to map arbitrary tables and columns to other tables and columns Table A 27 TRANSFORM_TABLE Symmetric DS v2 5 91 Data Model Name Type Size Default PK not Description FK null TRANSFORM_ID VARCHAR PK X Unique identifier of a specific transform 50 SOURCE_NODE_GROUP_ID VARCHAR PK X The node group where data changes should be 50 ca
102. llowing SQL statement in order to select the node ids select c node_id from sym_node c where c node_group_id NODE_GROUP_ID and c sync_enabled 1 and Consider a table that needs to be routed to all nodes in the target group only when a status column is set to OK The following SQL statement will insert a column router to accomplish that insert into SYM_ROUTER router_id source_node_group_id target_node_group_id router_type router_expression create_time last_update_ time values coma 2 stome coma store suoseleci c external_id in select STORE_ID from order where order_id ORDER_ID current_timestamp current_timestamp Alternatively when using an external_select on the TRIGGER table data is captured in the Symmetric DS v2 5 33 Configuration EXTERNAL_DATA column of the DATA table at the time a trigger fires The EXTERNAL_DATA can then be used for routing by using a router_type of column The advantage of this approach is that it is very unlikely that the master Order table will have been deleted at the time any DML accures on the OrderLineltem table It also is a bit more effcient than the subselect approach although the triggers produced do run the extra external_select inline with application database updates In the following example the STORE_ID is captured from the Order table in the EXTERNAL_DATA column EXTERNAL_DATA is always available for routing as a virtual column in a column
103. loaded 3 Edit the database properties in the following property files for the root central office and client TA store nodes samples root properties samples client properties Set the following properties in both files to specify how to connect to the database class name for the JDBC Driver driver com mysql jdbc Driver The JDBC URL used to connect to the database url jdbc mysql localhost sample alia user symmetric user to login as who can create and update tables The password for the user to login as db password secret 5 Tia Next set the following property in the client properties file to specify where the root node can be contacted HTTP URL of the root node to contact for registration registration url http localhost 8080 sync For the tutorial the client database starts out empty and the node is not registered Registration is the process where the node receives its configuration and stores it in its database The configuration describes which database tables to synchronize and to which nodes When an unregistered node starts up it will register with the node specified by the registration URL The Symmetric DS v2 5 Hands on Tutorial registration node centrally controls nodes on the network by allowing registration and returning configuration In this tutorial the registration node is the root node which also participates in sy
104. lso provides the ability to configure windows of time when synchronization is allowed This is done using the NODE_GROUP_CHANNEL_WINDOW table A list of allowed time windows can be specified for a node group and a channel If one or more windows exist then data will only be extracted and transported if the time of day falls within the window of time specified The configured times are always for the target node s local time If the start_time is greater than the ena_time then the window crosses over to the next day All data loading may be disabled by setting the dataloader enable property to false This has the effect of not allowing incoming synchronizations while allowing outgoing synchronizations All data extractions may be disabled by setting the dataextractor enable property to false These properties can be controlled by inserting into the root server s PARAMETER table These properties affect every channel with the exception of the config channel 5 2 3 Sync Triggers Job SymmetricDS examines the current configuration corresponding database triggers and the underlying tables to determine if database triggers need created or updated The change activity is recorded on the TRIGGER_HIST table with a reason for the change The following reasons for a change are possible N New trigger that has not been created before e S Schema changes in the table were detected e C Configuration changes in Trigger e T Trigger was missing
105. lumn values to a constant value or the value of a node s identity e execute a SQL expression against the database to select nodes to route to This SQL expression can be passed values of old and new column values e execute a Bean Shell expression in order to select nodes to route to The Bean Shell expression can use the the old and new column values e publish data changes directly to a messaging solution instead of transmitting changes to registered Symmetric DS v2 5 21 Planning an Implementation nodes This router must be configured manually in XML as an extension point For each of your Triggers decide which Router matches the behavior needed for that Trigger These Trigger Router combinations will be used to define a mapping between your Triggers and Routers when you implement your design 3 6 3 Mapping Triggers to Routers The mapping between Triggers and Routers found in the table TRIGGER_ROUTER defines configuration specific to a particular Trigger and Router combination 3 6 3 1 Planning Initial Loads SymmetricDS provides the ability to load or seed a node s database with specific sets of data from its parent node This concept is known as an Initial Load of data and is used to start off most synchronization scenarios The Trigger Router mapping defines how initial loads can occur so now is a good time to plan how your Initial Loads will work Using our retail example consider a new store being opened Init
106. mbedded webserver basic auth password password for basic authentication for an embedded server or standalone server node Default If the server node is deployed to Tomcat or another application server as a WAR or EAR file then basic authentication is setup with the standard configuration in the WEB xml file 5 10 Multi Server Mode Symmetric DS v2 5 56 Advanced Topics SymmetricDS supports running multiple SymmetricDS instances that leverage the same web server in the same process This mode can be turned on in the web weB INF web xm1 file By default multiserverMode 18 turned off lt context param gt lt param name gt multiServerMode lt param name gt lt param value gt true lt param value gt lt context param gt When multiserverMode is turned on SymmetricDS will initialize itself with an instance of a node for each properties file found in the engines directory Each node will inherit common properties from conf symmetric properties Each properties file must specify the minimum required properties to define a single node In addition the properties file is required to also specify a property engine name that provides a unique name for the node s engine Symmetric DS v2 5 57 Chapter 6 Extending SymmetricDS SymmetricDS may be extended via a plug in like architecture where extension point interfaces may be implemented by a custom class and registered with the synchronization engine All supported ex
107. me between ack retries ms This is the amount of time to wait between trying to send an ACK back to the remote node when pulling and loading data Default 5000 dataextractor enabled Enable or disable all data extraction at a node for all channels other than the config channel Default true dataloader enabled Enable or disable all data loading at a node for all channels other than the config channel Default true dataloader enable fallback update If an insert is received but the row already exists then try an update instead Default true dataloader enable fallback insert If an update is received but it affects no rows then try to insert instead Default true dataloader allow missing delete If a delete is received but it affects no rows then continue Default true cluster server id Set this if you want to give your server a unique name to be used to identify which server did what action Typically useful when running in a clustered environment This is currently used by the ClusterService when locking for a node Default cluster lock timeout ms Time limit of lock before it is considered abandoned and can be broken Default 1800000 Symmetric DS v2 5 98 Parameters cluster lock enabled Default false initial load delete first Set this 1f tables should be purged prior to an initial load Default false initial load create first Set this if tables and their indexes shoul
108. mes including key columns of the table Only needs to occur after the first occurrence of the table insert column value Insert into the table with the values that correspond with the columns update new column value old key value Update the table using the old key values to set the new column values Symmetric DS v2 5 108 Data Format old fold column value Represent all the old values of the data This data can be used for conflict resolution delete old key value Delete from the table using the old key values sql sql statement Optional notation that instructs the data loader to run the accompanying SQL statement bsh bsh script Optional notation that instructs the data loader to run the accompanying BeanShell snippet create xml Optional notation that instructs the data loader to run the accompanying DdlUtils XML table definition in order to create a database table commit batch_id An indicator that the batch has been transmitted and the data can be committed to the database Example D 1 Data Format Stream inereleslel LOQUO channel pricing binary BASE64 Dare nO schema catalog table item_selling_price keys price_id columnis ao ci COSIE insert AI schema catalog table item keys item_id columns item_id price_id name imsere 110000055 55 Seize a delete 110000001 schema catalog table item_selling_price pdate S55 0 19 W 65 3
109. metricDS Startup Parameters and Runtime Parameters Startup Parameters are required to be in a system property or a property file while Runtime Parameters can also be found in the Parameter table from the database Parameters are re queried from their source at a configured interval and can also be refreshed on demand by using the JMX API The following table shows the source of parameters and the hierarchy of precedence Table B 1 Parameter Locations Location Required Description symmetric default properties Y Packaged inside symmetric ds jar file This file has all the default settings along with descriptions symmetric properties N Provided by the end user on the classpath The first symmetric properties found on the classpath will be used symmetric properties N Provided by the end user in the current system user s user home directory named properties file 1 N Provided by the end user as a Java system property i e Dsymmetric override properties file 1 file my properties or in the constructor Of a symmetricEngine named properties file 2 N Provided by the end user as a Java system property i e Dsymmetric override properties file 2 classpath my properties or in the constructor Of a symmetricEngine Java System Properties N Any SymmetricDS property can be passed in as a D property to the runtime It will take precedence over any properties file property Parameter table N A table which contains
110. mines which nodes data will be sent to as well as how much data will be batched together for transport When the start route job SymmetricDS property is set to true the frequency that routing occurs is controlled by the job routing period time ms Each time data is routed the DATA_REF table is updated with the id of the last contiguous data row to have been processed This is done so the query to find unrouted data is optimal After data is routed it awaits transport to the target nodes Transport can occur when a client node is configured to pull data or when the host node is configured to push data These events are controlled by the Push and the Pull Jobs When the start pull job SymmetricDS property is set to true the frequency that data is pulled is controlled by the job pull period time ms When the start push job SymmetricDS property is set to true the frequency that data is pushed is controlled by the job push period time ms Data is extracted by channel from the source database s DATA table at an interval controlled by the extract_period_millis column on the CHANNEL table The 1ast_extract_time is always recorded by channel on the NODE_CHANNEL CTL table for the host node s id When the Pull and Push Job run if the extract period has not passed according to the last extract time then the channel will be skipped for this run If the extract_period_millis is set to zero data extraction will happen every time the jobs run SymmetricDS a
111. ming Data p 38 Symmetric DS v2 5 23 Chapter 4 Configuration Chapter 3 introduced numerous concepts and the analysis and design needed to create an implementation of SymmetricDS This chapter re visits each analysis step and documents how to turn a SymmetricDS design into reality through configuration of the various SymmetricDS tables In addition several advanced configuration options not presented previously will also be covered 4 1 Node Properties To get a SymmetricDS node running it needs to be given an identity and it needs to know how to connect to the database it will be synchronizing A typical way to specify this is to place properties in the symmetric properties file When started up SymmetricDS reads the configuration and state from the database If the configuration tables are missing they are created automatically auto creation can be disabled Basic configuration is described by inserting into the following tables the complete data model is defined in Appendix A Data Model p 70 e NODE_GROUP specifies the tiers that exist in a SymmetricDS network e NODE_GROUP_LINK links two node groups together for synchronization e CHANNEL grouping and priority of synchronizations e TRIGGER specifies tables channels and conditions for which changes in the database should be captured e ROUTER specifies the routers defined for synchronization along with other routing details TRIGGER_ROUTER provides map
112. nchronization with other nodes 2 2 Creating and Populating Your Databases A Important You must first create the databases for your root and client nodes using the administration tools provided by your database vendor Make sure the name of the databases you create match the settings in the properties files See Appendix C Database Notes p 101 for compatibility with your specific database First create the sample tables in the root node database load the sample data and load the sample configuration 1 Open a command prompt and navigate to the samples subdirectory of your SymmetricDS installation Create the sample tables in the root database by executing the following command bin sym p root properties run ddl create_sample xml Note that the warning messages from the command are safe to ignore Next create the SymmetricDS tables in the root node database These tables will contain the configuration for synchronization The following command uses the auto creation feature to create all the necessary SymmetricDS system tables bin sym p root properties auto create Finally load the sample data and configuration into the root node database by executing bin sym p root properties run sql insert_sample sql We have now created the root database tables and populated them with sample data Next we create the sample tables in the client node database to prepare it for receiving data 1 Open a command
113. nd access to old data if the sync_column_leve1 flag is enabled The context also provides a means to share data during a synchronization between different rows of data that are committed in a database transaction and are in the same channel It does so by providing a context cache which can be populated by the extension point Many times the IDataLoaderFilter will be combined with the IBatchListener The Xm PublisherFilter in the org jumpmind symmetric ext package is a good example of using the combination of the two extension points in order to create XML messages to be published to JMS A class implementing the IDataLoaderFilter interface is injected onto the DataLoaderService in order to receive callbacks when data is inserted updated or deleted public MyFilter implements IDataLoaderFilter public boolean isAutoRegister HEED LLUIS y public boolean filterInsert IDataLoaderContext context String columnValues perur 1EJLUS public boolean filterUpdate IDataLoaderContext context String columnValues String keyValues Scudo CPUS public void filterDelete IDataLoaderContext context String keyValues recub IES Symmetric DS v2 5 59 Extending SymmetricDS The filter class is specified as a Spring managed bean A custom Spring XML file is specified as follows ina jar at META INF services symmetric myfilter ext xml lt xml version 1 0 encoding UTE 8 gt lt bean
114. ng synchronization REGISTRATION_ENABLED INTEGER 1 0 Indicates whether registration is open for this node Re registration may be forced for a node if this is set back to 1 in a parent database for the node_id that should be re registred REGISTRATION_TIME TIMESTAMP The timestamp when this node was last registered Symmetric DS v2 5 12 Data Model Name Type Size Default PK not Description FK null INITIAL_LOAD_ENABLED INTEGER 1 0 Indicates whether an initial load will be sent to this node INITIAL_LOAD_TIME TIMESTAMP The timestamp when this node started the initial load CREATED_AT_NODE_ID VARCHAR X The node_id of the node where this node was 50 created This is typically filled automatically with the node_id found in node_identity where registration was opened for the node A 3 NODE_IDENTITY After registration this table will have one row representing the identity of the node For a root node the row is entered by the user Table A 3 NODE_IDENTITY Name Type Size Default PK not Description FK null NODE_ID VARCHAR PK X Unique identifier for a node 50 A 4 NODE_GROUP A category of Nodes that synchronizes data with one or more NodeGroups A common use of NodeGroup is to describe a level in a hierarchy of data synchronization Table A 4 NODE_GROUP Name Type Size Default PK n
115. ng with a fourth table discussed in the next section is key to diagnosing any synchronizaiton issues you might encounter As you work with SymmetricDS either when experimenting or starting to use SymmetricDS on your own data spend time monitoring these tables to better understand how SymmetricDS works 2 9 Verifying Incoming Batches The receiving node keeps track of the batches it acknowledges and records statistics about loading the data Duplicate batches are skipped by default but this behavior can be changed with the incoming batches skip duplicates runtime property 1 2 Open an interactive SQL session with either the root or client database Verify that the batch was acknowledged using a batch_id from the previous section select from sym_incoming_batch where batch_id A batch represents a collection of changes loaded by the node The sending node that created the batch is recorded The status is either OK for success or ER for error Symmetric DS v2 5 13 Hands on Tutorial Symmetric DS v2 5 14 Chapter 3 Planning an Implementation In the previous Chapter we presented a high level introduction to some basic concepts in SymmetricDS some of the high level features and a tutorial demonstrating a basic working example of SymmetricDS in action This chapter will focus on the key considerations and decisions one must make when planning a SymmetricDS implementation As needed basic concepts will be
116. nge is captured by SymmetricDS and queued for the client node to pull Watch the logging output of both nodes to see the data transfer The client is configured to pull data from the root every minute Verify that the new data arrives in the client database using another interactive SQL session 2 7 Pushing Data We will now simulate a sale at the store and observe how SymmetricDS pushes the sale transaction to the central office 1 Ze Open an interactive SQL session with the client database Add a new sale to the client database insert into sale_transaction tran_id store workstation day seq values 1000 1 3 2007 11 01 100 insert into sale_return_line_item tran_id item_id price quantity values 1000 110000055 0 65 1 Once the statements are committed the data change is captured and queued for the client node to push Watch the logging output of both nodes to see the data transfer The client is configured to push data to the root every minute 2 8 Verifying Outgoing Batches Now that we have pushed and pulled data we will demonstrate how you can obtain information about what data has been batched and sent A batch is used for tracking and sending data changes to nodes The sending node creates a batch and the receiving node acknowledges it A batch in error is retried during synchronization attempts but only after data changes in other channels are allowed to be sent Channels Symmetric DS
117. nges and statistics Symmetric DS v2 5 70 Data Model Outgoing Batch Incoming Batch Figure A 2 Runtime Data Model A A 1 NODE Representation of an instance of SymmetricDS that synchronizes data with one or more additional nodes Each node has a unique identifier nodeld that is used when communicating as well as a domain specific identifier externalld that provides context within the local system Table A 1 NODE Name Type Size Default PK not Description FK null NODE_ID VARCHAR PK X A unique identifier for a node 50 NODE_GROUP_ID VARCHAR X The node group that this node belongs to such 50 as store EXTERNAL_ID VARCHAR X A domain specific identifier for context within 50 the local system For example the retail store number SYNC_ENABLED INTEGER 1 0 Indicates whether this node should be sent synchronization Disabled nodes are ignored by the triggers so no entries are made in data_event for the node SYNC_URL VARCHAR The URL to contact the node for 255 synchronization SCHEMA_VERSION VARCHAR The version of the database schema this node 50 manages Useful for specifying synchronization by version SYMMETRIC_VERSION VARCHAR The version of SymmetricDS running at this Symmetric DS v2 5 71 Data Model Name Type Size Default PK not Description FK null 50 node DATABASE_TYPE VARCHAR T
118. o specify e whether to install a trigger for updates inserts and or deletes e conditions on which an insert update and or delete fires e a list of columns that should not be synchronized from this table e a SQL select statement that can be used to hold data needed for routing known as External Data As you define your triggers consider which data changes are relevant to your application and which ones Symmetric DS v2 5 20 Planning an Implementation ar not Consider under what special conditions you might want to route data as well For our retail example we likely want to have triggers defined for updating inserting and deleting pricing information in the central office so that the data can be routed down to the stores Similarly we need triggers on sales transaction tables such that sales information can be sent back to the central office 3 6 2 Defining Routers The triggers that have been defined in the previous section only define when data changes are to be captured for synchronization They do not define where the data changes are to be sent to Routers plus a mapping between Triggers and Routers TRIGGER_ROUTER define the process for determining which nodes receive the data changes Before we discuss Routers and Trigger Routers we should probably take a break and discuss the process SymmetricDS uses to keep track of the changes and routing As we stated SymmetricDS relies on auto created database triggers to c
119. ode sends that acknowledgement Table A 24 OUTGOING BATCH Name Type Size Default PK not Description FK null BATCH_ID INTEGER PK X A unique id for the batch NODE_ID VARCHAR The node that this batch is targeted at 50 CHANNEL_ID VARCHAR The channel that this batch is part of 20 STATUS CHAR 2 The current status of the Batch can be currently routing RE newly created and ready for replication NE being queried from the database QE sent to a Node SE ready to be loaded LD and acknowledged as successful OK or error ER LOAD_FLAG INTEGER 1 0 A flag that indicates that this batch is part of an initial load ERROR_FLAG INTEGER 1 0 A flag that indicates that this batch was in error during the last synchornization attempt BYTE_COUNT BIGINT 0 X The number of bytes that were sent as part of this batch EXTRACT_COUNT BIGINT 0 X The number of times this an attempt to extract this batch occurred SENT_COUNT BIGINT 0 X The number of times this batch was sent A batch can be sent multiple times if an ACK is not received LOAD_COUNT BIGINT 0 X The number of times an attempt to load this Symmetric DS v2 5 88 Data Model Name Type Size Default PK not Description FK null batch occurred DATA_EVENT_COUNT BIGINT 0 X The number of data_events that are part of this batch
120. ode_group_id target_node_group_id router_type router_expression create_time last_update_time values Mecoms 2 stoze losia coma VsSicoxre asia ISTMO REID sb WORSE IEOUN INUUIMIBIEIR Y current_timestamp current_timestamp The following example will synchronize to all nodes if the FLAG column has changed otherwise no nodes will be synchronized Note that here we make use of OLD_ which provides access to the old column value insert into SYM _ROUTER router_id source_node_group_id target_node_group_id router_type router_expression create_time last_update_time values COR o 2 SiroO1Se i lag clheimeiecl coma Ystore asia FLAG null amp amp FLAG equals OLD_FLAG current_timestamp current_timestamp 4 6 3 Trigger Router Mappings Two important controls can be configured for a specific Trigger Router combination Initial Load and Ping Back The parameters for these can be found in the Trigger Router mapping table TRIGGER_ROUTER 4 6 3 1 Initial Load An initial load is the process of seeding tables at a target node with data from its parent node When a node connects and data is extracted after it is registered and if an initial load was requested each table Symmetric DS v2 5 35 Configuration that is configured to synchronize to the target node group will be given a reload event in the order defined by the end user A SQL st
121. of database connections in the database pool Symmetric DS v2 5 97 Parameters should be set to twice this number Default 20 offline node detection period minutes This is the minimum number of minutes that a child node has been offline before taking action Refer to Section 6 15 IOfflineServerListener p 61 for more information Default 120 outgoing batches peek ahead window after max size This is the maximum number of events that will be peeked at to look for additional transaction rows after the max batch size is reached The more concurrency in your db and the longer the transaction takes the bigger this value might have to be Default 100 incoming batches skip duplicates Whether or not to skip duplicate batches that are received A duplicate batch is identified by the batch ID already existing in the incoming batch table If this happens it means an acknowledgement was lost due to failure or there is a bug Accepting a duplicate batch in this case can mean overwriting data with old data Another cause of duplicates is when the batch sequence number is reset which might happen in a lab environement Skipping a duplicate batch in this case would prevent data changes from loading Generally in a production envionment this setting should be true Default true num of ack retries This is the number of times we will attempt to send an ACK back to the remote node when pulling and loading data Default 5 ti
122. onfigurable to push or pull in either direction the same node can act as either a client or a host in different circumstances The SymmetricDS software consists of a series of background jobs managers Servlets and services wired together via dependency injection using the Spring Framework As a client the node runs the router job push job and pull job on a timer thread The router job uses services to create batches that are targeted at certain nodes The push job uses services to extract and stream data to another node that is it pushes data The response from a push is a list of batch acknowlegements to indicate that data was loaded The pull job uses services to load data that is streamed from another node i e it pulls data After loading data a second connection is made to send a list of batch acknowlegements As a host the node waits for incoming connections that pull push or acknowledge data changes The push Servlet uses services to load data that is pushed from a client node After loading data it responds with a list of batch acknowledgements The pull Servlet uses services to extract and stream data back to the client node The ack Servlet uses services to update the status of data that was loaded at a client node The router job batches and routes data By default data is extracted from the source database into memory until a threshold size is reached If the threshold size is reached data is streamed to a temporary file
123. optionally the old data available in columns row_pata and OLD_DATA respectively The primary key data available in column pPx_para e The channel id trigger history information transaction id if available and other information More importantly if you narrow your query to just the failed data id you can determine the exact data change that is causing the failure select from sym_data where data_id in select failed_data_id from sym_outgoing_batch where batch_id XXXXX where XXXXXX is the batch that is failing The queries above usually yield enough information to be able to determine why a particular batch is failing Common reasons a batch might be failing include e The schema at the destination has a column that is not nullable yet the source has the column defined as nullable and a data change was sent with the column as null e A foreign key constraint at the destination is preventing an insertion or update which could be caused from data being deleted at the destination or the foreign key constraint is not in place at the source e The data size of a column on the destination is smaller than the data size in the source and data that is too large for the destination has been synced 7 1 2 Resolving the Issue Once you have decided upon the cause of the issue you ll have to decide the best course of action to fix the issue If for example the problem is due to a database schema mismatch one possible solution wo
124. ot Description FK null NODE_GROUP_ID VARCHAR PK X Unique identifier for a node group usually 50 named something meaningful like store or warehouse DESCRIPTION VARCHAR A description of this node group 255 A 5 NODE GROUP_LINK A source node_ group sends its data updates to a target NodeGroup using a pull push or custom Symmetric DS v2 5 13 Data Model technique Table A 5 NODE_GROUP_LINK Name Type Size Default PK not Description FK null SOURCE_NODE_GROUP_ID VARCHAR PK X The node group where data changes should be 50 captured TARGET_NODE_GROUP_ID VARCHAR PK X The node group where data changes will be 50 sent DATA_EVENT_ACTION CHAR 1 W X The notification scheme used to send data changes to the target node group P Push W Wait for Pull A 6 NODE_HOST Representation of an physical workstation or server that is hosting the SymmetricDS software In a clustered environment there may be more than one entry per node in this table Table A 6 NODE_HOST Name Type Size Default PK not Description FK null NODE_ID VARCHAR PK X A unique identifier for a node 50 HOST_NAME VARCHAR PK X The host name of a workstation or server If 60 more than one instance of SymmetricDS runs on the same server then this value can be a server id specified by Drun
125. outer_type for a Bean Shell scripted router is bsh The router_expression is a valid Bean Shell script that e adds node ids to the targetNodes collection which is bound to the script e returns a new collection of node ids e returns a single node id e returns true to indicate that all nodes should be routed or returns false to indicate that no nodes should be routed Also bound to the script evaluation is a list of nodes The list of nodes is a list of eligible Node objects The current data column values and the old data column values are bound to the script evaluation as Java object representations of the column data The columns are bound using the uppercase names of the Symmetric DS v2 5 34 Configuration columns Old values are bound to uppercase representations that are prefixed with OLD_ In the following example the node_id is a combination of STORE_ID and WORKSTATION_NUMBER both of which are columns on the table that is being routed insert into SYM _ROUTER router_id source_node_group_id target_node_group_id router_type router_expression create_time last_update_time values como 2 stome losla cora store osla targetNodes add STORE_ID WORKSTATION_NUMBER current_timestamp current_timestamp The same could also be accomplished by simply returning the node id The last line of a bsh script is always the return value insert into SYM _ROUTER router_id source_n
126. ows in individual tables that need re sent By touch we mean to alter the row data in such a way that SymmetricDS detects a data change and therefore includes the data change in the batching and synchronizing steps Note that you have to change the data in some meaningful way e g update a time stamp setting a column to its current value is not sufficient by default if there s not an actual data value change SymmetricDS won t treat the change as something which needs synched A second approach would be to take advantage of SymmetricDS built in functionality by simulating a partial initial load of the data The approach is to manually create reload events in DATA for the necessary tables thereby resending the desired rows for the given tables Again foreign key constraints must be kept in mind when creating these reload events These reload events are created in the source database itself and the necessary table trigger router combination and channel are included to indicate the direction of synchronization To create a reload event you create a DATA row using e data_id null e table name name of table to be sent e event_type R for reload e row_data a where clause minus the word where which defines the subset of rows from the table to be sent To send all rows one can use 1 1 for this value Symmetric DS v2 5 66 Administration e pk_data null e old data null e trigger_hist_id use the id of the most
127. pe Size Default PK not Description FK null NODE_ID VARCHAR PK X A unique identifier for a node 50 HOST_NAME VARCHAR PK X The host name of a workstation or server If 60 more than one instance of SymmetricDS runs on the same server then this value can be a server id specified by Druntime symmetric cluster server id CHANNEL_ID VARCHAR PK X The channel_id of the channel that data changes 20 will flow through START_TIME TIMESTAMP PK END_TIME TIMESTAMP PK X DATA_ROUTED BIGINT 0 Indicate the number of data rows that have been routed during this period DATA_UNROUTED BIGINT 0 DATA_EVENT_INSERTED BIGINT 0 Indicate the number of data rows that have been Symmetric DS v2 5 75 Data Model Name Type Size Default PK not Description FK null routed during this period DATA_EXTRACTED BIGINT 0 DATA_BYTES_EXTRACTED BIGINT 0 DATA_EXTRACTED_ERRORS BIGINT 0 DATA_BYTES_SENT BIGINT 0 DATA_SENT BIGINT 0 DATA_SENT_ERRORS BIGINT 0 DATA_LOADED BIGINT 0 DATA_BYTES_LOADED BIGINT 0 DATA_LOADED_ERRORS BIGINT 0 A 8 NODE_HOST_STATS Table A 8 NODE_HOST_STATS Name Type Size Default PK not Description FK null NODE_ID VARCHAR PK X A unique identifier for a node 50 HOST_NAME VARCHAR PK X The host name of a workstation or server If 60 more than one instance of SymmetricDS r
128. pings of routers and triggers During start up triggers are verified against the database and database triggers are installed on tables that require data changes to be captured The Route Pull and Push Jobs begin running to synchronize changes with other nodes Each node requires properties that allow it to connect to a database and register with a parent node To give a node its identity the following properties are used group id The node group that this node is a member of Synchronization is specified between node groups which means you only need to specify it once for multiple nodes in the same group external id The external id for this node has meaning to the user and provides integration into the system where it is deployed For example it might be a retail store number or a region number The external id can be used in expressions for conditional and subset data synchronization Behind the scenes each node has a unique sequence number for tracking synchronization events That makes it possible to assign the same external id to multiple nodes if desired Symmetric DS v2 5 24 Configuration sync url The URL where this node can be contacted for synchronization At startup and during each heartbeat the node updates its entry in the database with this URL When a new node is first started it is has no information about synchronizing It contacts the registration server in order to join the network and receive its configu
129. point called the data router Data routers are configured in the router table with a router_type and a router_expression Several different routers have been provided to serve the majority of users routing needs but the framework is in place for a SymmetricDS programmer to develop domain or application specific routers See Section 4 6 2 Router p 29 for a complete list of provided routers Since the routing and capturing of data are now performed with two separate mechanisms the two concepts have been separated into separate configuration tables in the database with a join table TRIGGER_ROUTER specifying the relationships between routing ROUTER and capturing of data TRIGGER This solves a long standing issue with some databases which only allow one trigger per table On those database platforms we can now route data in multiple directions since we only require one SymmetricDS trigger to capture data This also helps performance in those scenarios since we only capture the data once instead of once per routing instance As part of the new routing job we have introduced another new extension point to allow more flexibility in the way data events get batched A batch is the unit by with captured data is sent and committed on target nodes In SymmetricDS 2 batching is now configured on the channel configuration table This provides additional flexibility for batching e Batching can have the traditional SymmetricDS 1 x behavior of batching
130. prompt and navigate to the samples subdirectory of your SymmetricDS installation Create the sample tables in the client database by executing bin sym p client properties run ddl create_sample xml Symmetric DS v2 5 Hands on Tutorial Note that the warning messages from the command are safe to ignore Please verify both databases by logging in and listing the tables 1 2 Find the item tables that sync from root to client item and item_selling_ price Find the sales tables that sync from client to root sale_transaction and sale_return_line_ item Find the SymmetricDS system tables which have a prefix of sym_ Validate the root item tables have sample data 2 3 Starting SymmetricDS Database setup and configuration for the tutorial is now complete Time to put SymmetricDS into action We will 1 sync now start both SymmetricDS nodes and observe the logging output Open a command prompt and navigate to the samples subdirectory of your SymmetricDS installation Start the root node server by executing bin sym p root properties port 8080 server The root node server starts up and creates all the triggers that were configured by the sample configuration It listens on port 8080 for synchronization and registration requests Start the client node server by executing bin sym p client properties port 9090 server The client node server starts up and uses the auto creation feature to cr
131. ptions listed above 5 4 1 Web Archive As a web application archive a WAR is deployed to an application server such as Tomcat Jetty or JBoss The structure of the archive will have a web xm1 file in the wes 1w folder an appropriately configured symmetric properties file in the wes 1NF classes folder and the required JAR files in the WEB INF 1ib folder E E symmetric war E 5 WEB INF 2 web xml CD classes symmetric properties lib ls asm 1 5 3 jar ES cglib 2 1_3 jar E commons beanutils 1 7 0 jar A war file can be generated using the standalone installation s sym utility and the create war option The command requires the name of the war file to generate It essentially packages up the web directory the conf directory and includes an optional properties file Note that if a properties file is included it will be copied to WEB INF classes symmetric properties This is the same location conf symmetric properties would have been copied to The generated war distribution uses the same web xml as the standalone deployment bin sym p my symmetric ds properties create war some path to symmetric ds war The web base servlet path property in symmetric properties Can be set if the SymmetricServlet needs to coexist with other Servlets By default the value is blank If you set it to say web base servlet path sync for exmaple registration url would be http server port syne 5 4 2 Standalone A standalone servi
132. ptured TARGET_NODE_GROUP_ID VARCHAR PK X The node group where data changes will be 50 sent TRANSFORM_POINT VARCHAR X The point during the transport of captured data 10 that a transform happens Support values are EXTRACT or LOAD SOURCE_CATALOG_NAME VARCHAR Optional name for the catalog the configured 128 table is in SOURCE_SCHEMA_NAME VARCHAR Optional name for the schema a configured 128 table is in SOURCE_TABLE NAME VARCHAR X The name of the source table that will be 128 transformed TARGET_CATALOG_NAME VARCHAR Optional name for the catalog a target table is 128 in Only use this if the target table is not in the default catalog TARGET_SCHEMA_NAME VARCHAR Optional name of the schema a target table is 128 in Only use this if the target table is not in the default schema TARGET_TABLE_NAME VARCHAR Optional name for a target table Use this if the 128 target table name is different than the source UPDATE_FIRST INTEGER 1 0 Tf true the target actions are attempted as updates first regardless of whether the source operation was an insert or an update DELETE_ACTION VARCHAR X An action to take upon delete of a row 10 TRANSFORM_ORDER INTEGER 1 X Specifies the order in which to apply transforms if more than one target operation occurs A 28 TRANSFORM_COLUMN Defines the column mappings and optional data transformation for a data loader transformation Table A 28 TRANSFORM_COLUMN Nam
133. r firing using an expression specific to the database EXTERNAL_SELECT LONGVARCHAR Specify a SQL select statement that returns a single result It will be used in the generated database trigger to populate the EXTERNAL_DATA field on the data table TX_ID_EXPRESSION LONGVARCHAR Override the default expression for the transaction identifier that groups the data changes that were committed together EXCLUDED_COLUMN_NAMES LONGVARCHAR Specify a comma delimited list of columns that should not be synchronized from this table Note that if a primary key is found in this list it will be ignored Symmetric DS v2 5 80 Data Model Name Type Size Default PK FK not null Description USE_STREAM_LOBS INTEGER 1 Specifies whether to capture lob data as the trigger is firing or to stream lob columns from the source tables using callbacks during extraction A value of indicates to stream from the source via callback a value of 0 lob data is captured by the trigger USE_CAPTURE_LOBS INTEGER 1 Provides a hint as to whether this trigger will capture big lobs data If set to 1 every effort will be made during data capture in trigger and during data selection for initial load to use lob facilities to extract and store data in the database CREATE_TIME TIMESTAMP Timestamp when this entry was created LAST_UPDATE_BY VARCHAR 50 The user who last updated this en
134. r to always do an Update first which can have performance benefits under certain situations you may run into For each transformation defined in TRANSFORM_TABLE the columns to be transformed and how they are transformed are defined in TRANSFORM COLUMN This column level table typically has several rows for each transformation id each of which defines the source column name the target column name as well as the following details e include_on Defines whether this entry applies to source operations of Insert I Update U or Delete D or any source operation e pk Indicates that this mapping is used to define the primary key for identifying the target row s which may or may not be the true primary key of the target table This is used to define the where clause when an Update or Delete on the target is occurring At least one row marked as a pk should be present for each transform_id e transform_type transform_expression Specifies how the data is modified if at all The available transform types are discussed below and the default is copy which just copies the data from source to target e transform_order In the event there are more than one columns to transform this defines the relative order in which the transformations are applied 4 8 2 Transformation Types There are several pre defined transform types available in SymmetricDS Additional ones can be defined by creating and configuring an extension point which
135. ration The configuration for all nodes is stored on the registration server and the URL must be specified in the following property registration url The URL where this node can connect for registration to receive its configuration The registration server 1s part of SymmetricDS and is enabled as part of the deployment 4 Important Note that a registration server node is defined as one whose registration ur1 is either a blank or b identical to its sync url When deploying to an application server it is common for database connection pools to be found in the Java naming directory JNDD In this case set the following property db jndi name The name of the database connection pool to use which is registered in the JNDI directory tree of the application server It is recommended that this DataSource is NOT transactional because SymmetricDS will handle its own transactions For a deployment where the database connection pool should be created using a JDBC driver set the following properties db driver The class name of the JDBC driver db url The JDBC URL used to connect to the database db user The database username which is used to login create and update SymmetricDS tables db password The password for the database user 4 2 Node A node a single instance of SymmetricDS is defined in the NODE table Two other tables play a direct role in defining a node as well The first is NODE_IDENTITY The only row in this
136. re configured via XML Extension points hook into key points in the life cycle of a synchronization to allow custom behavior to be injected Extension points allow custom behavior such as publishing data to other sources transforming data and taking different actions based on the content or status of a synchronization 1 2 Background The idea of SymmetricDS was born from a real world need Several of the original developers were several years ago implementing a commercial Point of Sale POS system for a large retailer The development team came to the conclusion that the software available for trickling back transactions to Symmetric DS v2 5 1 Introduction corporate headquarters frequently known as the central office or general office did not meet the project needs The list of project requirements made finding the ideal solution difficult e Sending and receiving data with up to 2000 stores during peak holiday loads e Supporting one database platform at the store and a different one at the central office e Synchronizing some data in one direction and other data in both directions e Filtering out sensitive data and re routing it to a protected database e Preparing the store database with an initial load of data from the central office The team ultimately created a custom solution that met the requirements and led to a successful project From this work came the knowledge and experience that SymmetricDS benefits from
137. releases public class MyParameterFilter implements IParameterFilter INodeGroupExtensionPoint a Oaly agoly las dEl leer Om Stores ny public String getNodeGroupldsToApplyTo return new String store public String filterParameter String key String value look up a store number from an already existing properties file if key equals ParameterConstants EXTERNAL_ID return StoreProperties getStoreProperties getProperty StoreProperties STORE_NUMBER return value Symmetric DS v2 5 58 Extending SymmetricDS public boolean isAutoRegister HEE DUN LLUIS y 6 2 IDataLoaderFilter Data can be filtered as it is loaded into the target database It can also be filtered when it is extracted from the source database As data is loaded into the target database a filter can change the data in a column or save it somewhere else It can also specify by the return value of the function call that the data loader should continue on and load the data by returning true or ignore it by returning false One possible use of the filter might be to route credit card data to a secure database and blank it out as it loads into a less restricted reporting database An IDataLoaderContext is passed to each of the callback methods A new context is created for each synchronization The context provides methods to lookup column indexes by column name get table meta data a
138. represents trigger_hist entries are made during the sync trigger process which runs at each startup each night in the syncTriggersJob or any time the syncTriggers JMX method is manually invoked A new entry is made when a table definition or a trigger definition is changed which causes a database trigger to be created or rebuilt Table A 19 TRIGGER_HIST Name Type Size Default PK not Description FK null TRIGGER_HIST_ID INTEGER PK X Unique identifier for a trigger_hist entry TRIGGER_ID VARCHAR X Unique identifier for a trigger 50 SOURCE_TABLE NAME VARCHAR X The name of the source table that will have a 50 trigger installed to watch for data changes Symmetric DS v2 5 84 Data Model Name Type Size Default PK not Description FK null SOURCE_CATALOG_NAME VARCHAR The catalog name where the source table 50 resides SOURCE_SCHEMA_NAME VARCHAR The schema name where the source table 50 resides NAME_FOR_UPDATE_TRIGGER VARCHAR X The name used when the insert trigger was 50 created NAME_FOR_INSERT_TRIGGER VARCHAR X The name used when the update trigger was 50 created NAME_FOR_DELETE_TRIGGER VARCHAR X The name used when the delete trigger was 50 created TABLE_HASH BIGINT X A hash of the table definition used to detect changes in the definition TRIGGER_ROW_HASH BIGINT X A hash of the trigger de
139. reviewed or introduced throughout this Chapter By the end of the chapter you should be able to proceed forward and implement your planned design This Chapter will intentionally avoid discussing the underlying database tables that capture the configuration resulting from your analysis and design process Implementation of your design along with discussion of the tables backing each concept is covered in Chapter 4 Configuration p 24 When needed we will rely on an example of a typical use of SymmetricDS in retail situations This example retail deployment of SymmetricDS might include many point of sale workstations located at stores that may have intermittent network connection to a central location These workstations might have point sale software that uses a local relational database The database is populated with items prices and tax information from a centralized database The point of sale software looks up item information from the local database and also saves sale information to the same database The persisted sales need to be propagated back to the centralized database 3 1 Identifying Nodes A node is a single instance of SymmetricDS It can be thought of as a proxy for a database which manages the synchronization of data to and or from its database For our example retail application the following would be SymmetricDS nodes e Each point of sale workstation e The central office database server Each node of SymmetricDS can
140. ric DS v2 5 61 Extending SymmetricDS Implement this extension point to get callbacks for offline events detected on a server node during monitoring of client nodes 6 16 INodePasswordFilter Implement this extension point to intercept the saving and rendering of the node password Symmetric DS v2 5 62 Chapter 7 Administration 7 1 Solving Synchronization Issues By design whenever SymmetricDS encounters an issue with a synchronization the batch containing the error is marked as being in an error state and all subsequent batches for that particular channel to that particular node are held and not synchronized until the error batch is resolved SymmetricDS will retry the batch in error until the situation creating the error is resolved or the data for the batch itself is changed 7 1 1 Analyzing the Issue The first step in analyzing the cause of a failed batch is to locate information about the data in the batch starting with either OUTGOING_BATCH or INCOMING_BATCH We ll use outgoing batches for the examples below To locate batches in error use select from sym_outgoing_batch where error_flag 1 Several useful pieces of information are available from this query e The batch number of the failed batch available in column sarch_1b e The node to which the batch is being sent available in column nopz_1p e The channel to which the batch belongs available in column cranner _1b All subsequent batches on t
141. s a detected gap FL means that the gap has been filled SK means that the gap has been skipped either because the gap expired or because no database transaction was detected which means that no data will be committed to fill in the gap CREATE_TIME TIMESTAMP X Timestamp when this entry was created LAST_UPDATE_HOSTNAME VARCHAR The host who last updated this entry 255 LAST_UPDATE_TIME TIMESTAMP X Timestamp when a user last updated this entry A 23 DATA_EVENT Represents routing of a data row to one or more nodes Entries in data_event are created by database triggers Table A 23 DATA_EVENT Symmetric DS v2 5 87 Data Model Name Type Size Default PK not Description FK null DATA_ID INTEGER PK X Id of the data to be routed BATCH_ID INTEGER 1 PK X The node_id of the node that is to receive the data ROUTER_ID VARCHAR PK X The router_id of the router that routed this 50 data_event CREATE_TIME TIMESTAMP Timestamp when this entry was created A 24 OUTGOING _ BATCH Used for tracking the sending a collection of data to a node in the system A new outgoing_batch is created and given a status of NE After sending the outgoing batch to its target node the status becomes SE The node responds with either a success status of OK or an error status of ER An error while sending to the node also results in an error status of ER regardless of whether the n
142. s property indicates the period of history to keep for statistics The default value is also 5 days The purge properties should be adjusted according to how much data is flowing through the system and the amount of storage space the database has For an initial deployment it is recommended that the purge properties be kept at the defaults since it is often helpful to be able to look at the captured data in order to triage problems and profile the synchronization patterns When scaling up to more nodes it is recomended that the purge parameters be scaled back to 24 hours or less Symmetric DS v2 5 69 Appendix A Data Model What follows is the complete SymmetricDS data model Note that all tables are prepended with a configurable prefix so that multiple instances of SymmetricDS may coexist in the same database The default prefix is sym_ SymmetricDS configuration is entered by the user into the data model to control the behavior of what data is synchronized to which nodes Node Group Link Node Identity Y Node Group Node Channel Control Node Security Figure A 1 Configuration Data Model At runtime the configuration is used to capture data changes and route them to nodes The data changes are placed together in a single unit called a batch that can be loaded by another node Outgoing batches are delivered to nodes and acknowledged Incoming batches are received and loaded History is recorded for batch status cha
143. s whether to read the row data during routing USE_PK_DATA_TO_ROUTE INTEGER 1 1 X Indicates whether to read the pk data during routing CONTAINS_BIG_LOB INTEGER 1 0 X Provides SymmetricDS a hint as to whether this channel will contain big lobs data Some databases have shortcuts that SymmetricDS can take advantage of if it knows that the lob columns in sym_data aren t going to contain large lobs The definition of how big a large lob is will differ from database to database BATCH_ALGORITHM VARCHAR default X The algorithm to use when batching data on this 50 channel Possible values are default transactional and nontransactional DESCRIPTION VARCHAR Description on the type of data carried in this 255 channel A 11 NODE CHANNEL CTL Used to ignore or suspend a channel A channel that is ignored will have its data_events batched and they will immediately be marked as OK without sending them A channel that is suspended is skipped when batching data_events Symmetric DS v2 5 78 Data Model Table A 11 NODE_CHANNEL_CTL Name Type Size Default PK not Description FK null NODE_ID VARCHAR PK X Unique identifier for a node 50 CHANNEL_ID VARCHAR PK X The name of the channel_id that is being 20 controlled SUSPEND_ENABLED INTEGER 1 0 Indicates 1f this channel is suspended which prevents its Data Events from being batched IGNORE_ENABLED INTEGER 1 0 Indicates 1f
144. s xmlns http www springframework org schema beans xmlns xsi http www w3 org 2001 XMLSchema instance xmlns context http www springframework org schema context xsi schemaLocation http www springframework org schema beans http www springframework org schema beans spring beans 3 0 xsd http www springframework org schema context http www springframework org schema context spring context 3 0 xsd gt lt bean id myFilter class com mydomain MyFilter gt lt beans gt 6 3 ITableColumnFilter Implement this extension point to filter out specific columns from use by the dataloader Only one column filter may be added per target table 6 4 IBatchListener This extension point is called whenever a batch has completed loading but before the transaction has committed 6 5 AcknowledgeEventListener Implement this extension point to receive callback events when a batch is acknowledged The callback for this listener happens at the point of extraction 6 6 IReloadListener Implement this extension point to listen in and take action before or after a reload is requested for a Node The callback for this listener happens at the point of extraction 6 7 lExtractorFilter This extension point is called after data has been extracted but before it has been streamed It has the ability to inspect each row of data to take some action and indicate if necessary that the row should not be streamed Symmetric DS v2
145. ste A thenticaton sasse eneen a e do LO Multi Server Mode e Oe 6 Extending Syme iC LS A A RA is cd sie nin cel ede ae AA o eee eased Gave eee Gnade st 02 ID Atal GaGe rier iio E leG oli Palen A E ER deesnce A NA Symmetric DS v2 5 111 SymmetricDS 2 User Guide 6 5 LIAckn wledgeEyentListener da al 60 626 IRE AAA O a iaa 60 A A TT 60 i ALADI EAEI O REEE EE E E E E oe agus nase E E 61 A saceatesoumecnasvadcanegawmeges aagesteaaiaeesaleaecanas ane aa a 61 ts Te ALON ISMOT aone ao acy age eea esau a E a a a E SEE ERSS 61 6 UE TE AGC HA a ONG TAN ice 61 A E E E EE 61 0 13 THearbDe asientan at NE iia TaS 61 6 14 TOTANA ios 61 6 15 TO IE SELLA SIENA as 61 A A A O a AREA 62 A o lesa a dE cala 63 TA Solving Synchronization E data 63 TALA dos 63 AS O E Sa 64 T2 AM Frogers ii E TAS 65 SNA a a a E accu a e a aS 66 7 4 Changing Contra coceuteds as conacodcoedest us acute ssudety aeduaestagnanedesssencatesouqeantaaeceorereeeed 67 F3 LE A A ONG SoG ete RU 68 7 6 Java Management Extensions pst at 68 NN I EE E AE AEE E A EETA EE E E eee 68 T S Database Puring ii ios 69 A A a a i a a a 70 ANODE edo 71 V NO D Ee A AEA E E ES 72 ANODE IDENTITY mia a aa a E Taste itn trek serene ore 73 PO A dt ay ee A R RE 73 AS NODEZGROUP LINK osas 73 E sae ese lay an a a o a a A an A ATO Ea E e E wie eee EEA 74 AY NODE HOST CHANNEL STATS siii 75 AS NODER HOST O A A A AR 76 AS NODE HOST JOB STA TS tao 77 AO CANNOT ia T11 Ae NODE
146. t lt bean id configuration publishingFilter class org jumpmind symmetric integrate xXmlPublisherDataLoaderFilter gt lt property name xmlTagNameToUseForGroup value sale gt Symmetric DS v2 5 47 Advanced Topics lt property name tableNamesToPublishAsGroup gt lt a ste gt lt value gt SALE_TX lt value gt lt value gt SALE_LINE_ITEM lt value gt lt value gt SALE_TAX lt value gt lt value gt SALE_TOTAL lt value gt Sf Mase lt property gt lt property name groupByColumnNames gt lt list gt lt value gt STORE_ID lt value gt lt value gt BUSINESS_DAY lt value gt lt value gt WORKSTA lt value gt TRANSAC lt list gt lt property gt lt property name publisher gt lt bean class org jumpmind symmetric integrate SimpleJmsPubl lt property name jmsTemplate lt bean gt lt property gt lt bean gt lt beans gt TION _ID lt value gt TION _ID lt value gt ref definedSpringJmsTemp lisher gt late gt The publisher property on the XmlPublisherDataLoaderFilter takes an interface of type Publisher The implementation demonstrated here is an implementation that publishes to JMS using Spring s JMS template Other implementations of Publisher could easily publish the XML to other targets like an HTTP server the file system or secure copy it to another server The above configuration will publish XML similiar to th
147. ta ids In fact this table completely defines the entire range of data tha can be routed at any point in time For a brand new instance of SymmetricDS this table is empty and SymmetricDS creates a gap starting from data id of zero and ending with a very large number defined by routing largest gap size At the start of a Route Job the list of valid gaps gaps with status of GP is collected and each gap is evaluated in turn If a gap is sufficiently old as defined by routing stale dataid gap time ms the gap is marked as skipped status of SK and will no longer be evaluated in future Route Jobs note that the last gap the one with the highest starting data id is never skipped If not skipped then DATA_EVENT is searched for data ids present in the gap If one or more data ids is found in DATA_EVENT then the current gap is marked with a status of OK and new gap s are created to represent the data ids still missing in the gap s range This process is done for all gaps If the very last gap contained data a new gap starting from the highest data id and ending at highest data id routing largest gap size is then created This process has resulted in an updated list of gaps which may contain new data to be routed Symmetric DS v2 5 45 Advanced Topics 5 2 2 Controlling Synchronization Frequency The frequency of data synchronization is controlled by the coordination of a series of asynchronous events The Route Job deter
148. take effect until the Sync Triggers Job runs Instead of waiting for the Sync Triggers Job to run overnight after making a Trigger change you can invoke the syncTriggers method over JMX or simply restart the SymmetricDS server A complete record of trigger changes is kept in the table TRIGGER_HIST which was discussed in Section 5 2 3 Sync Triggers Job p 46 7 3 Re synchronizing Data There may be times where you find you need to re send or re synchronize data when the change itself was not captured This could be needed for example if the data changes occurred prior to SymmetricDS placing triggers on the data tables themselves or if the data at the destination was accidentally deleted or for some other reason Two approaches are commonly taken to re send the data both of which are discussed below 4 Important Be careful when re sending data using either of these two techniques Be sure you are only sending the rows you intend to send and more importantly be sure to re send the data in a way that won t cause foreign key constraint issues at the destination In other words if more than one table is involved be sure to send any tables which are referred to by other tables by foreign keys first Otherwise the channel s synchronization will block because SymmetricDS is unable to insert or update the row because the foreign key relationship refers to a non existent row in the destination One possible approach would be to touch the r
149. tension points extend the IExtensionPoint interface The currently available extension points are documented in the following sections When the synchronization engine starts up a Spring post processor searches the Spring ApplicationContext for any registered classes which implement IExtensionPoint An IExtensionPoint designates whether it should be auto registered or not If the extension point is to be auto registered then the post processor registers the known interface with the appropriate service The INodeGroupExtensionPoint interface may be optionally implemented to designate that auto registered extension points should only be auto registered with specific node groups Only apply this extension point to the root node group e public String getNodeGroupldsToApplyTo return new String root SymmetricDS will look for Spring configured extensions in the application Classpath by importing any Spring XML configuration files found matching the following pattern META INF services symmetric ext xml When packaged in a jar file the uzta r1nr directory should be at the root of the jar file When packaged in a war file the mera 1w directory should be in the WEB INF classes directory 6 1 IParameterFilter Parameter values can be specified in code using a parameter filter Note that there can be only one parameter filter per engine instance The IParameterFilter replaces the deprecated RuntimeConfig from prior
150. the SymmetricDS default values 5 5 Running SymmetricDS as a Service SymmetricDS can be configured to start and run as a service in both Windows and nix platforms 5 5 1 Running as a Windows Service SymmetricDS uses the Java Service Wrapper product from Tanuki Software to run in the background as a Windows system service The Java Service Wrapper executable is named sym_service exe SO it can be easily identified from a list of running processes To install the service use the provided script bin install_service bat Symmetric DS v2 5 51 Advanced Topics The service configuration is found in conf sym_service conf Edit this file if you want to change the default port number 8080 initial memory size 256 MB log file size 10 MB or other settings When started the server will look in the conf directory for the symmetric properties file and the log43 xml file Logging for standard out error and application are written to the logs directory Most configuration changes do not require the service to be re installed To un install the service use the provided script bin uninstall_service bat Use the net command to start and stop the service net start symmetric net stop symmetric 5 5 2 Running as a nix Service SymmetricDS uses the Java Service Wrapper product from Tanuki Software to run in the background as a Unix system service The Java Service Wrapper executable is named sym_service so it can be easily
151. the heartbeat job is enabled for this node The heartbeat job simply inserts an event to update the heartbeat_time column on the node table for the current node Default true start watchdog job Whether the watchdog job is enabled for this node The watchdog job monitors child nodes to detect if they are offline Refer to Section 6 15 IOfflineServerListener p 61 for more information Default true job purge period time ms This is how often the purge job will be run Default 600000 job statflush period time ms This is how often accumulated statistics will be flushed out to the database from memory Default 600000 web base servlet path The base servlet path for when embedding SymmetricDS with in another web application Default B 2 Runtime Parameters Runtime parameters are read periodically from properties files or the database The following properties are used auto registration If this is true registration is opened automatically for nodes requesting it Default false auto reload If this is true a reload is automatically sent to nodes when they register Default false auto update node values from properties Update the node row in the database from the local properties during a heartbeat operation Default true http concurrent workers max This is the number of HTTP concurrent push pull requests symmetric will accept This is controlled by the NodeConcurrencyFilter The maximum number
152. the order of the transformations the behavior when deleting and whether an update should always be attempted first More specifically e transform_order For a single source operation that is mapped to a transformation there could be more than one target operation that takes place You may control the order in which the target operations are applied through a configuration parameter defined for each source target table combination This might be important for example if the foreign key relationships on the target tables require you to execute the transformations in a particular order e delete_action When a source operation of Delete takes place there are three possible ways to handle the transformation at the target The options include e NONE The delete results in no target changes e DEL_ROW The delete results in a delete of the row as specified by the pk columns defined in Symmetric DS v2 5 39 Configuration the transformation configuration e UPDATE_COL The delete results in an Update operation on the target which updates the specific rows and columns based on the defined transformation e update_first This option overrides the default behavior for an Insert operation Instead of attempting the Insert first SymmetricDS will always perform an Update first and then fall back to an Insert if that fails Note that by default fall back logic always applies for Insert and Updates Here all you a specifying is whethe
153. this channel is ignored which marks its Data Events as if they were actually processed LAST_EXTRACT_TIME TIMESTAMP Record the last time data was extract for a node and a channel A 12 NODE_GROUP_CHANNEL_WINDOW An optional window of time for which a node group and channel will be active Table A 12 NODE_GROUP_CHANNEL_WINDOW Name Type Size Default PK not Description FK null NODE_GROUP_ID VARCHAR PK X The node_group_id that this window applies to 50 CHANNEL_ID VARCHAR PK X The channel_id that this window applies to 20 START_TIME TIME PK X The start time for the active window END_TIME TIME PK The end time for the active window Note that if the end_time is less than the start_time then the window crosses a day boundary ENABLED INTEGER 1 0 X Enable this window If this is set to 0 then this window is ignored A 13 TRIGGER Configures database triggers that capture changes in the database Configuration of which triggers are generated for which tables is stored here Triggers are created in a node s database if the source_node_group_id of a router is mapped to a row in this table Symmetric DS v2 5 79 Data Model Table A 13 TRIGGER Name Type Size Default PK not Description FK null TRIGGER_ID VARCHAR PK X Unique identifier for a trigger 50 SOURCE_CATALOG_NA
154. time symmetric cluster server id IP_ADDRESS VARCHAR The ip address for the host 50 OS_USER VARCHAR The user SymmetricDS is running under 50 OS_NAME VARCHAR The name of the OS 50 OS_ARCH VARCHAR The hardware architecture of the OS 50 OS_VERSION VARCHAR The version of the OS 50 AVAILABLE_PROCESSORS INTEGER 0 The number of processors available to use FREE _MEMORY_BYTES BIGINT 0 The amount of free memory available to the JVM Symmetric DS v2 5 74 Data Model Name Type Size Default PK not Description FK null TOTAL_MEMORY_BYTES BIGINT 0 The amount of total memory available to the JVM MAX _MEMORY_BYTES BIGINT 0 The max amount of memory available to the JVM JAVA_VERSION VARCHAR The version of java that SymmetricDS is 50 running as JAVA_VENDOR VARCHAR The vendor of java that SymmetricDS is 255 running as SYMMETRIC_VERSION VARCHAR The version of SymmetricDS running at this 50 node TIMEZONE_OFFSET VARCHAR The timezone offset in RFC822 format at the 6 time of the last heartbeat HEARTBEAT_TIME TIMESTAMP The last timestamp when the node sent a heartbeat which is attempted every ten minutes by default LAST_RESTART_TIME TIMESTAMP X Timestamp when this instance was last restarted CREATE_TIME TIMESTAMP X Timestamp when this entry was created A 7 NODE_HOST_CHANNEL_STATS Table A 7 NODE_HOST_CHANNEL_STATS Name Ty
155. tinguish between successful batches and ones that you ve artificially marked as OK since the error_flag column on the failed batch will still be set to 1 in error e Removing the failing data id from the batch by deleting the corresponding row in DATA_EVENT Eliminating the data id from the list of data ids in the batch will cause future synchronization attempts of the batch to no longer include that particular data change as part of the batch For example delete from sym_data_event where batch_id XXXXXX and data_id YYYYYY where XXXXXX is the failing batch and Y Y Y Y Y Y is the data id to longer be included in the batch 7 2 Changing Triggers A trigger row may be updated using SQL to change a synchronization definition SymmetricDS will look for changes each night or whenever the Sync Triggers Job is run see below For example a change to place the table price_changes into the price channel would be accomplished with the following statement update SYM_TRIGGER set channel_id price last_update_by jsmith last_update_time current_timestamp where source_table_name price_changes All configuration should be managed centrally at the registration node If enabled configuration changes will be synchronized out to client nodes When trigger changes reach the client nodes the Sync Triggers Job will run automatically Symmetric DS v2 5 65 Administration Centrally the trigger changes will not
156. tion means running the sym command line which launches the built in Jetty web server This is a simple option because it is already provided but you lose the flexibility to configure the web server any further e Embedded as a Java library in an application This option means you must write a wrapper Java program that runs SymmetricDS You would probably use Jetty web server which is also embeddable You could bring up an embedded database like Derby or H2 You could configure the web server database or SymmetricDS to do whatever you needed but it s also the most work of the three options discussed thus far e Grails Application A Grails SymmetricDS plugin is provided at the default Grails plugin site This option ends up being a WAR deployment but allows for the use of the Grails SDK for configuring and building the deployment The plugin also provides Gorm Hibernate access to many of the core database tables Symmetric DS v2 5 49 Advanced Topics The deployment model you choose depends on how much flexibility you need versus how easy you want 1t to be Both Jetty and Tomcat are excellent scalable web servers that compete with each other and have great performance Most people choose either the Standalone or Web Archive with Tomcat 5 5 or 6 Deploying to Tomcat is a good middle of the road decision that requires a little more work for more flexibility Next we will go into a little more detail on the first three deployment o
157. tput of the client node to see it successfully register with the root node The client is configured to attempt registration once per minute Once registered the root and client are enabled for synchronization 2 5 Sending an Initial Load Next we will send an initial load of data to our store that is the client node again using the root node administration feature 1 Open a command prompt and navigate to the samples subdirectory of your SymmetricDS installation Send an initial load of data to the client node server by executing bin sym p root properties reload node 1 With this command the root node queues up an initial load for the client node that will be sent the next time the client performs its pull The initial load includes data for each table that is configured for synchronization Watch the logging output of both nodes to see the data transfer The client is configured to pull data from the root every minute 2 6 Pulling Data Symmetric DS v2 5 11 Hands on Tutorial Next we will make a change to the item data in the central office we ll add a new item and observe the data being pulled down to the store 1 PA Open an interactive SQL session with the root database Add a new item for sale insert into item_selling_price price_id price values 55 0 65 insert into item item_id price_id name values 110000055 55 Soft Drink Once the statements are committed the data cha
158. try LAST_UPDATE_TIME TIMESTAMP Timestamp when a user last updated this entry A 14 ROUTER Configure a type of router from one node group to another through trigger_routers Note that routers are mapped to triggers Table A 14 ROUTER Name Type Size Default PK not Description FK null ROUTER_ID VARCHAR PK X Unique description of a specific router 50 TARGET_CATALOG_NAME VARCHAR Optional name for the catalog a target table is 50 in Only use this if the target table is not in the default catalog TARGET_SCHEMA_NAME VARCHAR Optional name of the schema a target table is 50 in On use this if the target table is not in the default schema TARGET_TABLE NAME VARCHAR Optional name for a target table Only use this 50 if the target table name is different than the source SOURCE_NODE_GROUP_ID VARCHAR X Routers with this node_group_id will install 50 triggers that are mapped to this router TARGET_NODE_GROUP_ID VARCHAR X The node_group_id for nodes to route data to 50 Note that routing can be further narrowed down by the configured router_type and router_expression ROUTER_TYPE VARCHAR The name of a specific type of router Out of Symmetric DS v2 5 81 Data Model Name Type Size Default PK not Description FK null 50 the box routers are d
159. ular data changes When a trigger fires as a result of SymmetricDS itself such as the case when sync on incoming batch is set it records the originating source node of the data change in source_node_id During routing if routing results in sending the data back to the originating source node Symmetric DS v2 5 37 Configuration the data is not routed by default If instead you wish to route the data back to the originating node you can set the ping_back_enablea column for the needed particular trigger router combination This will cause the router to ping the data back to the originating node when it usually would not 4 7 Opening Registration Node registration is the act of setting up a new NODE and NODE_SECURITY so that when the new node is brought online it is allowed to join the system Nodes are only allowed to register if rows exist for the node and the registration_enabled flag is set to 1 If the auto registration SymmetricDS property is set to true then when a node attempts to register if registration has not already occurred the node will automatically be registered SymmetricDS allows you to have multiple nodes with the same externa1_ia Out of the box openRegistration will open a new registration if a registration already exists for a node with the same external_id A new registration means a new node with a new node_ia and the same externa1_id will be created If you want to re register the same node you can use th
160. uld be to alter the destination database in such a way that the SQL error no longer occurs Whatever approach you take to remedy the issue once you have made the change on the next push or pull SymmetricDS will retry the batch and the channel s data will start flowing again If you have instead decided that the batch itself is wrong or does not need synchronized or you wish to remove a particular data change from a batch you do have the option of changing the data associated Symmetric DS v2 5 64 Administration with the batch directly e Warning Be cautious when using the following two approaches to resolve synchronization issues By far the best approach to solving a synchronization error is to resolve what is truly causing the error at the destination database Skipping a batch or removing a data id as discussed below should be your solution of last resort since doing so results in differences between the source and destination databases Now that you ve read the warning if you still want to change the batch data itself you do have several options including e Causing SymmetricDS to skip the batch completely This is accomplished by setting the batch s status to OK as in update sym_outgoing_batch set status OK where batch_id XXXXXX where XXXXXX is the failing batch On the next pull or push SymmetricDS will skip this batch since it now thinks the batch has already been synchronized Note that you can still dis
161. uns on the same server then this value can be a server id specified by Druntime symmetric cluster server id START_TIME TIMESTAMP PK END_TIME TIMESTAMP PK RESTARTED BIGINT 0 X Indicate that a restart occurred during this period NODES _PULLED BIGINT 0 TOTAL_NODES_PULL_TIME BIGINT 0 NODES_PUSHED BIGINT 0 TOTAL_NODES_PUSH_TIME BIGINT 0 NODES_REJECTED BIGINT 0 NODES_REGISTERED BIGINT 0 NODES_LOADED BIGINT 0 NODES_DISABLED BIGINT 0 Symmetric DS v2 5 76 Data Model Name Type Size Default PK not Description FK null PURGED_DATA_ROWS BIGINT 0 PURGED_DATA_EVENT_ROWS BIGINT 0 PURGED_BATCH_OUTGOING_ROBYGINT 0 PURGED_BATCH_INCOMING_ROBISINT 0 TRIGGERS_CREATED_COUNT BIGINT TRIGGERS_REBUILT_COUNT BIGINT TRIGGERS_REMOVED_COUNT BIGINT A 9 NODE_HOST_JOB_STATS Table A 9 NODE_HOST_JOB_STATS Name Type Size Default PK not Description FK null NODE_ID VARCHAR PK X A unique identifier for a node 50 HOST_NAME VARCHAR PK X The host name of a workstation or server If 60 more than one instance of SymmetricDS runs on the same server then this value can be a server id specified by Druntime symmetric cluster server id JOB_NAME VARCHAR PK X 50 START_TIME TIMESTAMP PK END_TIME TIMESTAMP PK X PROCESSED_COUNT BIGINT 0 A 10 CHANNEL This table r
162. values item corp 2 store 1 current_timestamp current_timestamp 4 6 2 2 Column Match Router Sometimes requirements may exist that require data to be routed based on the current value or the old value of a column in the table that is being routed Column routers are configured by setting the router_type column on the ROUTER table to column and setting the router_expression column to an equality expression that represents the expected value of the column The first part of the expression is always the column name The column name should always be defined in upper case The upper case column name prefixed by OLD_ can be used for a comparison being done with the old column data value The second part of the expression can be a constant value a token that represents another column or a token that represents some other SymmetricDS concept Token values always begin with a colon Consider a table that needs to be routed to all nodes in the target group only when a status column is set to OK The following SQL statement will insert a column router to accomplish that insert into SYM_ROUTER router_id source_node_group_id target_node_group_id router_type router_expression create_time last_update time values coma 2 Store oki comes sueome columa STATUS 0K current_timestamp current_timestamp Symmetric DS v2 5 30 Configuration Consider a table that needs to be routed to all nodes in th

Download Pdf Manuals

image

Related Search

Related Contents

CEL-350 dBadge & CEL-352 dBadge `Plus` Manuel d`utilisation    ici - Doug  Samsung AW07A0SE manual de utilizador  ダウンロード(339KB)  DVI Splitter 1/2 - TLS Communication  取扱説明書 保証書付 - ご家庭のお客さま  NO24 - 日本機械学会  Hamilton Beach 68990 User's Manual  

Copyright © All rights reserved.
Failed to retrieve file