AppendTransaction
AppendTransaction allows transactions to be directly inputted into a backup database.unsigned __int64 AppendTransaction ( unsigned int logNumber, __int64 position, unsigned int transactionID, __int64 length, const void* buffer );
Parameters
logNumber | a value between 0-65,535 that tells the system which cyclical log file this tranaction should be appended to. |
position | to enable cross checking that slave log is insync with master. |
transactionID | the Transaction ID for the appending transaction. This has internal use and should not be changed. |
length | the length on the transaction buffer. |
buffer | a buffer containing a correctly formatted buffer. |
Return Values
If the method succeeds, the return value is zero else see error codes for more details.Remarks
- This methods require the transaction mode to be CODBPP::EXCLUSIVE
Example Use
- C++
#include "ODBPP.h" int wmain(int argc, wchar_t* argv[]) { unsigned __int64 error; const char16_t *message; unsigned int logFile, transactionID; __int64 length = 0, size, position; BYTE *buffer = NULL; CODBPP database, backup; //production database is read only if((error = database.OpenDatabase(u"YourDatabase")) == NO_ERROR){ if((error = backup.OpenDatabase(u"YourBackupDatabase")) == NO_ERROR){ //lock backup database from other transactions if((error = backup.BeginTransaction(CODBPP::EXCLUSIVE)) == NO_ERROR{ //get last transaction from backup log file if ((error = backup.WaitNextCommit(&logFile, &position, &transactionID, &size)) == NO_ERROR) { while (error == NO_ERROR) { //gets next after the the inputted commit if ((error = database.WaitNextCommit(&logFile, &position, &transactionID, &size)) == NO_ERROR) { if (length < size || (size << 4) < length) { if(buffer != NULL) delete[] buffer; buffer = new BYTE[(length = (size + 0x3f)&~0x3f)]; } size = length;//resets length to maximum size //reads the next commit if ((error = database.WaitNextCommit(&logFile, &position, &transactionID, &size, buffer)) == NO_ERROR) //append the previous transaction to the backup database error = backup.AppendTransaction(logFile, position, transactionID, size, buffer); } else if (ERROR_MASK(error) == WAIT_TIMEOUT) error = NO_ERROR; } } } backup.EndTransaction(); } backup.CloseDatabase(); } if(error && database.GetErrorMessage(&message) == NO_ERROR) MessageBox(message); database.CloseDatabase(); return NO_ERROR; }
Since
Version 4.5
Updated
Version 4.5.1
Also See
WaitNextCommitListen All
Comments (0)