The length of name of the tables/columns are more than 50 chars.
DataSync will create triggers joining table name plus GUID and other text, in this case, you could reach the maxium length of an object of 128 characters.
The user that performs the provisioning process has not permissions to create triggers that DataSync needs to create/run in every table selected to be synced.
CREATE USER AzureSync WITH PASSWORD='x'
GRANT CONTROL ON object::tablename to AzureSync
It is needed to provision all the tables manually due to some non-clustered indexes that maintain the integrity referential has the same name.
Our suggestion is that all the non-clustered indexes have an unique name. We found that when we are using as constraints to maintain the referential integrity between tables, DataSync creates a constraints and if the index has the same name you are going to have an error because there is not possible to have constraints with same name.
To provisioning manually the tables, basically, you need to script out the tables using SQL Server Management Studio and execute it in the target database.
The user has not CONTROL access to the schema DataSync.
We need to create the schema Datasync - CREATE schema DataSync
And grant the permission CONTROL to this schema - GRANT CONTROL ON Schema::DataSync To <UserName>
And finally, the collation of the destination and source are different.
We need that the source database and destination will have same collation. Remember that DataSync checks the structure of the tables of the different members.
In order to validate these checks, I created the following TSQL that perform these validations, all feedback and improvement are welcome:
User with access to mor than 500 tables.
Snapshot isolation level.
Name tables/columns with more than 50 chars.
Check permissions to DataSync Schema and tables in the source database.