What could be the reason for such a problem (SQL Anywhere 17.0.10.6285): Cons. DB ~ 2.5GB, and tries to download big amount of Data (45 Tables with total ~1 GB) / into a Remote DB. DBMLSYNC stops during downloading into one of the biggest tables (say Table1) and reports an error (-141 table Table1 not found), but the table exists of course. I tried to split the amount of data being downloaded into 3 portions, then it works (using one of these approaches) 1- On remote I let each time only 15 tables synchronize, at the end I get all 45 synchronized (downloaded) without error. 2- On the Cons. I copy the shadow tables, delete them and re-fill them on 3 steps, so each time one third of each table will be downloaded, at the end the full amount of data is downloaed without error. P.S. in case I split the data into 2 portions, then I get the same error regarding another table, so it sounds like it is not related to a particular table, but more a performance problem. How can I better localize the error? |
I can think of no reason why the database engine would suddenly say that the table does not exist after having already insert/updated/deleted a number of rows into that table.
Is there anything the database engine output log at the same time as the error?
Have you looked at the transaction log (make sure to translate in chronological order and include rollback transactions) around the time of the error to convince yourself that nobody deleted (and maybe re-added) the table at the time the error occurred?
Reg
What do you mean with chronological translation? I think dbtran does it by default, is there a way to change the order of transaction or to enforce translating them 'chronologically'?
I don't see any unusal message in the log of the engine!
As reported, dividing/splitting the amount of data solves the problem!
During the synchronisation there is no any other connections to the databases, and I tried also extra setting PUBLIC.fire_triggers='Off'
I guess Reg is refering to using DBTRAN with options "-a -d" to include rolled-back transactions and use chronological output.
By default, when dbtran sees a commit (or rollback if -a is used), it will then print the entire transaction to the output file. If you run dbtran with the -d switch to write in chronological order, then each operation is printed to the output file as it is read, regardless of when the commit/rollback occurs.