* New error handling mechanism:
– Removed RPL$ERRORS table and TCcReplicator.LogErrors property.
– Added some new fields to RPL$LOG (ERROR_MESSAGE, ERROR_CONTEXT).
– Rows that cannot be replicated are now left in RPL$LOG with their ERROR_MESSAGE and ERROR_CONTEXT set.

* New option to keep rows in RPL$LOG
– A new property TCcReplicator.KeepRowsInLog allows you to keep replicated rows in RPL$LOG. This gives you a very detailed trace of everything that took place, and can be used instead of the depecated RPL$TRACE mechanism for debug purposes, or for auditing.
– Rows that have been replicated will have their RPL$LOG.REPLICATION_STATE set, so if you want to see the rows that need to be replicated, you check where REPLICATION_STATE is null.

– TCcReplicator: If a row can’t be replicated due to an error, we now place it in a list of failed rows, and continue to replicate. If the same row was changed again at a later point in the repliaction cycle, we skip it and leave it unreplicated. This is particularly important when using the new ReplicateOnlyChangedFields option, as data changes could otherwise get lost (and to avoid such problems, it would have been necessary to perform the entire replication cycle within a single transaction).

– TCcReplictor: Added a new SkipToRemote option in OnReplicationError event allowing you to skip replication of local rows if an error occurs, but to continue replicating the remote changes to the local database. This feature makes sense only if using ReplicateOnlyChangedFields. Using this option, you can ensure consistency (by rolling back when there is a replication error) without aborting replication altogether.

– TCcReplicator: Added queryPerformed parameter to OnRowReplFinishing and OnRowReplicated events, so that you can know what type of action was performed on the row (delete, update, or insert).

– TCcConnection: fixed a bug that sometimes caused an access violation when destroying a TCcConnection.

– TCcConfig: fixed a bug causing the OnExecute event of the TCcConnection not to fire while using TCcConfig.

– TCcConfig: Added OnProgress event allowing you to keep the GUI active (using an Application.ProcessMessages for example) while configuring the databases.

– TCcConfig: Some internal meta-data caching during configuration so as to improve performance over slow connections.

– TCcConflictMgr: fixed a bug causing all the rows in RPL$LOG for a given row/table to be set to conflicted state rather than just the rows being replicated.

– FIREBIRD ONLY: Fixed a bug causing the new ReplicateOnlyChangedFields feature to fail when replicating floating point values on systems using a decimal separator other than ‘.’.

– FIREBIRD ONLY: Added a new RPL$NO_REPLICATION context variable. If you set this variable to ‘True’, the replication triggers will be by-passed. This is very useful if you want to execute a script that will cause massive updates to a large table.

* [FB only] Tracking of changed fields. This feature will be added to other database types in future versions.

– Added intelligence to the triggers in order to detect and log the full list of changed fields and their values, rather than merely the primary key. This new option is activated by the TCcConfig.TrackFieldChanges property (the old mode can still be used.

– An associated option was added to TCcReplicator, OnlyReplicateChangedFields. If this option is set to true, then the changes will be replicated exactly as they occured, with no bunching of records, and replicating every time only the fields that were changed. In terms of performance, the new mode will be better for some situations (particularly tables with many fields or with blob fields, as those fields will only be sent over the wire when they actually change, rather than every time the row was touched.

– This new mode also allows improved consistency, as there should never be any foreign key violations (sometimes inevitable with the old system, due to record bunching), which means that it becomes possible (and recommended) to run the whole replication cycle within a single transaction, and to rollback if an error occurs.

* [FB only] Improved conflict management. This feature will be added to other database types in future versions.

– Thanks to the new field change tracking, finer conflict management is now possible. A new property TCcReplicator.MergeChangedFieldsOnConflict allows many conflicts to be automatically resolved by merging the changes from both nodes, in cases where none of the same fields were changed on both sides. In cases that are still conflictual, the OnResolveConflict event and the RPL$CONFLICTS table provide the list of fields changed on each side as well as the list of fields changed on both sides, and it is also possible to find out for each field the value that it was changed from and to on each side, making conflict resolution much easier.

– If the TCcReplicator.MergeChangedFieldsOnConflict property is set to True and a conflict is detected, the fields that were changed on only one of the nodes will be merged. For instance, if the first node changed fields A, B and C while the seconde node changed fields C and D, if the conflict is resolved in favor of the second node, the values of A and B from the first node will be kept, as they were not conflictual with the change from the second node. Thus, conflict resolution can be much finer-grained.

– This option depends on the TCcReplicator.OnlyReplicateChangedFields property being set to True, as it doesn’t make any sense without it.

– Added support for FreePascal/Lazarus

– New Direction property added to TCcReplicator enabling various performance optimizations when replicating only one way.

– Fixed bug in NexusDB support causing replication to fail on tables with multi-segment primary keys.

* TCcConfig
– Raise error if ConfigName property is set while connection is open.
– Fixed bug that caused incorrect priority numbers to be inserted into RPL$TABLES
– Automatically grant full rights to system tables created by CopyCat for all users
– New ConnectAndRemoveConfig method allows to totally remove all CopyCat triggers and system tables from the database. This can be particularly useful when upgrading from an old version of CopyCat, so as to ensure that the tables are created correctly and up-to-date.

* TCcConnection : On databases that support quoted meta-data, we now always quote all meta-data identifiers (table names, field names, etc), which means that if any reserverd words or spaces are used in the names, it causes no trouble during replication.

* TCcReplicator
– Replication log counters (line number and total number of rows to replicate) are now cleared correctly after a call to AbortReplication or a connection loss (previously, they would be reset only on new connection).
– Fixed bug causing null values in ftWideString and ftWideMemo fields to get changed to ” (empty string) during replication.
– Fixed a bug causing the AutoReplicate property to be disabled after a lost connection
– For Firebird / Interbase dialect 1 databases (which do not support quoted meta-data), fields using reserved keywords as names are excluded from replication.

CopyCat LiveMirror is our database mirroring and backup tool, designed to make it trivial to setup a one-way replication between two Firebird databases, so that you can easily have a reliable, up-to-date backup at your fingertips, at all times. Please refer to our product page for more information

Changes in this release :

* Various core changes and minor bug fixes.
* Fixed bug saving database configuration data.
* Fixed bug causing errors with wide string fields in some situations.
* Improved log viewer window so that it’s responsive even when holding a large log file.
* Added an error reporting module allowing for more detailed error messages and bug reports.
* Fixed bug causing automatic replication to stop after database connection loss. In such a case, LiveMirror will now continue trying to reestablish a connection every time replication fires.
* LiveMirror now excludes fields with errorneous field names (DATE, TYPE, USER, etc) that were allowed in older versions of Firebird and can still be present in some databases.
* Automatically grant full rights to all users for RPL$ system tables created by LiveMirror, so that there will be no error when inserting into RPL$LOG through the triggers when a user makes changes to the database.

Microtec is pleased to announce a new release of our CopyCat Replication Engine, version 3.06.0 ! CopyCat is a set of Delphi / C++Builder components providing customizable replication for Firebird, Interbase, Microsoft SQL Server, MySQL, NexusDB and SQLite, including heteogenous replication between different database types. This latest version adds support for iOS and Android platforms!

Added index on RPL$LOG.PRIMARY_KEY_VALUES in Firebird 2.5+ for the sake of optimization

Added support for replicating tables with no primary key : in such cases, CopyCat will first look for any unique index to use instead of the PK, and if none are available, then rows will be identified based on all the fields of the table (excluding varchars longer than 200 characters and blobs).

Added support for various field types that were missing (ftGuid in ADO connector, ftTimeStamp, ftFmtBCD, ftWord, ftLongWord…)

Added TFDMemTable as an optional ancestor for TCcMemoryData, activated by setting compiler conditional CC_MEMDS_FIREDAC in CC.INC. Using this feature is necessary on mobile platforms, as the built-in memory dataset does not support the nextgen compiler.

Added PKSynchronization property to TCcReplicator. If set to false (the default), the primary key synchronization system is disabled, which allows some optimizations of the code internally.

Added Priority property in TCcConfigTable so you can set the replication priority of a table through the TCcConfig.Tables property.

TCcReplicator.Log is now reinitilized at the very start of replication, before the log is loaded. That way, if replication is aborted and then restarted, the TCcLog.LineCount and CurrentLine properties will be correct.

TCcReplicator now automatically disconnects if Replicate is called with a connection is already open, unless that connection had been opened by the replicator itself (using KeepConnection for example). That addresses a common mistake people made when trying to replicate, as a connection open outside of TCcReplicator will cause the rows replicated to bounce back and forth between nodes.

Fixed problem in the installer causing the components to not be installed in the IDE

Changed date format used for MS SQL to ‘YYYY-MM-DDThh:mm:ss[.mmm]’, so that it works in all locales.

CopyCat LiveMirror is a database mirroring tool designed to make it very easy to setup a hot-standby backup copy of your Firebird databases. Have a look at our website for more information : www.copycat.fr

Microtec Communications is pleased to announce a new release of CopyCat,
version 3.04.0! You will find the full list of changes at the end of
this email. This release also includes the changes from version 3.03.0,
which had not been made publicly available till now.

CopyCat is a Delphi / C++Builder component set encapsulating a database
replication engine for Interbase, Firebird, MS SQL Server, MySQL and
SQLite. Using CopyCat, you can replicate heterogenously between all the
above database types, over various transport systems (direct DB
connection, XMLRPC, or RTC), on various platforms : Delphi/MS Windows
for the client side, server side implemented in Delphi, in Java, in PHP
(only for MySQL) and in Objective-C on iOS (only for SQLite).

CopyCat is a robust replication engine that has been in production use
since 2004. Go to our site at http://www.copycat.fr to find out more!

Added AutoCommit property on client transport. Setting
autocommit optimizes communication by not explicitly starting nor ending
transactions. This implies that the server side must automatically
commit after executying every query.

Added parameters TableName and Fields to OnRowReplicated
event, allowing to access the table name of the row just replicated, as
well as the values of the fields transfered.

Added parameters ReplicateRow and AbortAndTryLater to the
OnRowReplicating event. If ReplicateRow is set to false, the row is not
replicated and the row is discarded from RPL$LOG. If AbortAndTryLater is
set to true, replication of the row is aborted, and will be tried again
next replication cycle (ie, the row is left in RPL$LOG).

Renamed OnAbort event OnReplicationAborted. It it called only
when replication is explicitly aborted via the AbortReplication method
or by setting CanContinue to false in the OnReplicationError event.

Added property TrimCharFields. If set to True, TCcReplicator
will trim all char, varchar or memo fields that are read from the source
database before replicating them to the destination database.

TCcConfig

Added multi-configuration abilities. This means that multiple
replication configurations can be created for the same database,
allowing separate lists of tables, replication conditions, and
replication nodes to be configured independantly from each other.

You can now define replication configuration at design time,
using the new Tables property. Double-clicking on this property allows
you to define the list of tables to replicate for the current
configuration (defined by the ConfigName property), along with the
conditions for each, as well as the list of nodes to replicate towards
(corresponding to the RPL$USERS table). You can then roll out this
configuration at run time by calling the GenerateConfig property. This
will create triggers for all the tables defined in your configuration,
or recreate them if any of the configuration options has changed. If you
want to define several replication configurations, then you need one
TCcConfig instance for each configuration.

New IncludedFields property in the Tables list allows you to
specify the list of fields to include in the replication triggers. This
means that the change will only be logged for replication (in RPL$LOG)
if at least one of the included fields has changed. Thus empty updates
or updates of fields that are of no interest to the replication config
can be excluded, thereby lightening the replication load. If no
IncludedFields are set, the default is to include all fields, as before.

New IncludedFields property in the Tables list allows you to
set a list of fields to exclude from the replication triggers. This is
just a shortcut for adding all but the fields specified to the
IncludedFields list.

New procedure RPL$FORCE_REPL allows to force replication of a
certain set of rows, within the context of a certain config. This can be
useful when the IncludedFields property is used.

Added multiple data types in order to handle all the new
TDataType values. This fixes a bug that occured with some Firebird
dialect 3 datatypes, when replicating over XMLRPC or RTC transports.