UltraLite includes a built-in bi-directional synchronization client that causes all data in an UltraLite database to be synchronized by default.
Users new to MobiLink synchronization may use this default behavior until business requirements necessitate a custom synchronization design to alter what UltraLite data gets synchronized to the consolidated database. Unlike SQL Anywhere remote databases, you do not need to increase the size of the UltraLite footprint to include synchronization functionality.
Important synchronization features built into the UltraLite runtime include a row state tracking mechanism and a synchronization state tracking mechanism.
Tracking the state of tables and rows is particularly important for data synchronization. Each row in an UltraLite database has an associated row state structure. In addition to synchronization, UltraLite also uses the row states to control transaction processing and data recovery.
UltraLite uses a progress counter to ensure robust synchronization. Each upload is given a unique number to identify it. This allows UltraLite to determine whether an upload was successful when a communication error occurs.
When you first create a new database, UltraLite always sets the synchronization progress counter to zero. A progress counter value of zero identifies the database as a new UltraLite database, which tells the MobiLink server to reset its state information for this client.
Because UltraLite increments the progress counter each time a synchronization occurs, you cannot synchronize an UltraLite database to different consolidated databases. If the progress counter value is not zero and does not match that sequence number stored in the consolidated database, MobiLink synchronization reports an offset mismatch and synchronization fails. You cannot replace an UltraLite database with a backup copy if the progress counter is older than the current value.