When you use -tu, you create a transactional upload: dbmlsync uploads each transaction on the remote database as a distinct transaction. The MobiLink server applies and commits
each transaction separately when it is received.
When you use -tu, the order of transactions on the remote database is always preserved on the consolidated database. However,
the order of operations in a transaction may not be preserved, for two reasons:
MobiLink always applies updates based on foreign key relationships. For example, when data is changed in foreign key and primary
key tables, MobiLink inserts data into the primary key table before the foreign key table, but deletes data from the foreign
key table before the primary key table. If your remote operations do not follow this order, the order of operations differ
on the consolidated database.
Operations within a transaction are coalesced. This means that if you change the same row three times in one transaction,
only the final form of the row is uploaded.
If a transactional upload is interrupted, the data that was not sent is sent in the next synchronization. Typically, only
the transactions that were not successfully completed are sent at that time. Sometimes, such as when the upload failure occurs
during the first synchronization of a subscription, dbmlsync resends all transactions.
When you do not use -tu, MobiLink coalesces all changes on the remote database into one transaction in the upload. This means
that if you change the same row three times between synchronizations, regardless of the number of remote transactions, only
the final form of the row is uploaded. This default behavior is efficient and is optimal in many situations.
However, in certain situations you may want to preserve remote transactions on the consolidated database. For example, you
may want to define triggers on the consolidated database that act on transactions as they occur in the remote database.
In addition, there are advantages to breaking up the upload into smaller transactions. Many consolidated databases are optimized
for small transactions, so sending a very large transaction is not efficient or may cause too much contention. Also, when
you use -tu you may not lose the entire upload if there are communications errors during the upload. When you use -tu and
there is an upload error, all successfully uploaded transactions are applied.
The -tu option makes MobiLink behave in a manner that is very close to SQL Remote. The main difference is that SQL Remote
replicates all changes to the remote database in the order they occur, without coalescing. To mimic this behavior, you must
commit after each database operation on the remote database.
You cannot use -tu with the Increment extended option or with scripted uploads.