Db::close |
#include <db_cxx.h>int Db::close(u_int32_t flags);
The Db::close method flushes any cached database information to disk, closes any open cursors, frees any allocated resources, and closes any underlying files. Because key/data pairs are cached in memory, failing to sync the file with the Db::close or Db::sync method may result in inconsistent or lost information.
The flags value must be set to 0 or the following value:
It is important to understand that flushing cached information to disk only minimizes the window of opportunity for corrupted data. Although unlikely, it is possible for database corruption to happen if a system or application crash occurs while writing data to the database. To ensure that database corruption never occurs, applications must either: use transactions and logging with automatic recovery; use logging and application-specific recovery; or edit a copy of the database, and once all applications using the database have successfully called Db::close, atomically replace the original database with the updated copy.
When multiple threads are using the Berkeley DB handle concurrently, only a single thread may call the Db::close method.
After Db::close has been called, regardless of its return, the Db handle may not be accessed again.
The Db::close method either returns a non-zero error value or throws an exception that encapsulates a non-zero error value on failure, 0 on success, and returns DB_INCOMPLETE if the underlying database still has dirty pages in the cache. (The only reason to return DB_INCOMPLETE is if another thread of control were writing pages in the underlying database file at the same time as the Db::close method was called. For this reason, a return of DB_INCOMPLETE can normally be ignored; or, in cases where it is a possible return value, the DB_NOSYNC option should probably have been specified.)
The Db::close method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods. If a catastrophic error has occurred, the Db::close method may fail and either return DB_RUNRECOVERY or throw an exception encapsulating DB_RUNRECOVERY, in which case all subsequent Berkeley DB calls will fail in the same way.