#include <db_cxx.h> int DbEnv::set_flags(u_int32_t flags, int onoff);
Configure a database environment.
The database environment's flag values may also be configured using the environment's DB_CONFIG file. The syntax of the entry in that file is a single line with the string "set_flags", one or more whitespace characters, and the method flag parameter as a string, and optionally one or more whitespace characters, and the string "on" or "off". If the optional string is omitted, the default is "on"; for example, "set_flags DB_TXN_NOSYNC" or "set_flags DB_TXN_NOSYNC on". Because the DB_CONFIG file is read when the database environment is opened, it will silently overrule configuration done before that time.
The DbEnv::set_flags()
method either returns a non-zero error value or throws an
exception that encapsulates a non-zero error value on
failure, and returns 0 on success.
The flags parameter must be set by bitwise inclusively OR'ing together one or more of the following values:
If set, Db handle operations for which no explicit transaction handle was specified, and which modify databases in the database environment, will be automatically enclosed within a transaction.
Calling DbEnv::set_flags()
with this flag only affects the specified
DbEnv handle (and any other
Berkeley DB handles opened within the scope of that handle). For
consistent behavior across the environment, all
DbEnv handles opened in the
environment must either set this flag
or the flag should be specified in the
DB_CONFIG configuration file.
This flag may be used to configure Berkeley DB at any time during the life of the application.
If set, Berkeley DB Concurrent Data Store applications will perform locking on an environment-wide basis rather than on a per-database basis.
Calling DbEnv::set_flags()
with the DB_CDB_ALLDB flag only affects
the specified DbEnv
handle (and any other Berkeley DB handles opened within the scope of
that handle). For consistent behavior across the environment, all
DbEnv handles opened in
the environment must either set the DB_CDB_ALLDB flag or the flag
should be specified in the
DB_CONFIG configuration file.
The DB_CDB_ALLDB flag may be used to configure Berkeley DB only before the DbEnv::open() method is called.
Turn off system buffering of Berkeley DB database files to avoid double caching.
Calling DbEnv::set_flags()
with
the DB_DIRECT_DB flag only affects the specified
DbEnv handle (and any other
Berkeley DB handles opened within the scope of that
handle). For consistent behavior across the environment,
all DbEnv handles opened
in the environment must either set the DB_DIRECT_DB flag
or the flag should be specified in the DB_CONFIG
configuration file.
The DB_DIRECT_DB flag may be used to configure Berkeley DB at any time during the life of the application.
Set this flag prior to creating a
hot backup of a database environment.
If a transaction with the bulk
insert optimization enabled (with the
DB_TXN_BULK
flag) is in progress,
setting the DB_HOTBACKUP_IN_PROGRESS
flag
forces a checkpoint in the environment.
After
this flag is set in the environment, the bulk insert
optimization is disabled, until the flag is reset.
Using this protocol allows a hot backup procedure to
make a consistent copy of the database even when
bulk transactions are ongoing. For more information, see the
section on Hot Backup in the Getting Started
With Transaction Processing Guide and the description of the
DB_TXN_BULK
flag in the
DbEnv::txn_begin()
method.
The db_hotbackup utility implements the protocol described above.
Configure Berkeley DB to flush database writes to the backing disk before returning from the write system call, rather than flushing database writes explicitly in a separate system call, as necessary. This is only available on some systems (for example, systems supporting the IEEE/ANSI Std 1003.1 (POSIX) standard O_DSYNC flag, or systems supporting the Windows FILE_FLAG_WRITE_THROUGH flag). This flag may result in inaccurate file modification times and other file-level information for Berkeley DB database files. This flag will almost certainly result in a performance decrease on most systems. This flag is only applicable to certain filesysystems (for example, the Veritas VxFS filesystem), where the filesystem's support for trickling writes back to stable storage behaves badly (or more likely, has been misconfigured).
Calling DbEnv::set_flags()
with the DB_DSYNC_DB flag only affects
the specified DbEnv
handle (and any other Berkeley DB handles opened within the scope of
that handle). For consistent behavior across the environment, all
DbEnv handles opened in
the environment must either set the DB_DSYNC_DB flag or the flag
should be specified in the DB_CONFIG configuration file.
The DB_DSYNC_DB flag may be used to configure Berkeley DB at any time during the life of the application.
If set, all databases in the environment will be opened as if DB_MULTIVERSION is passed to the Db::open() method. This flag will be ignored for queue databases for which DB_MULTIVERSION is not supported.
Calling DbEnv::set_flags()
with the DB_MULTIVERSION flag only
affects the specified DbEnv handle (and any other
Berkeley DB handles opened within the scope of that handle). For
consistent behavior across the environment, all DbEnv
handles opened in the environment must either set the DB_MULTIVERSION flag or the flag
should be specified in the
DB_CONFIG configuration file.
The DB_MULTIVERSION flag may be used to configure Berkeley DB at any time during the life of the application.
If set, Berkeley DB will grant all requested mutual exclusion mutexes and database locks without regard for their actual availability. This functionality should never be used for purposes other than debugging.
Calling DbEnv::set_flags()
with the DB_NOLOCKING flag only affects
the specified DbEnv
handle (and any other Berkeley DB handles opened within the scope of
that handle).
The DB_NOLOCKING flag may be used to configure Berkeley DB at any time during the life of the application.
If set, Berkeley DB will copy read-only database files into the local cache instead of potentially mapping them into process memory (see the description of the DbEnv::set_mp_mmapsize() method for further information).
Calling DbEnv::set_flags()
with the DB_NOMMAP flag only affects the
specified DbEnv handle
(and any other Berkeley DB handles opened within the scope of that
handle). For consistent behavior across the environment, all
DbEnv handles opened in the
environment must either set the DB_NOMMAP flag or the flag should be
specified in the DB_CONFIG configuration file.
The DB_NOMMAP flag may be used to configure Berkeley DB at any time during the life of the application.
If set, Berkeley DB will ignore any panic state in the database environment. (Database environments in a panic state normally refuse all attempts to call Berkeley DB functions, returning DB_RUNRECOVERY.) This functionality should never be used for purposes other than debugging.
Calling DbEnv::set_flags()
with the DB_NOPANIC flag only affects the
specified DbEnv handle
(and any other Berkeley DB handles opened within the scope of that
handle).
The DB_NOPANIC flag may be used to configure Berkeley DB at any time during the life of the application.
Overwrite files stored in encrypted formats before deleting them. Berkeley DB overwrites files using alternating 0xff, 0x00 and 0xff byte patterns. For file overwriting to be effective, the underlying file must be stored on a fixed-block filesystem. Systems with journaling or logging filesystems will require operating system support and probably modification of the Berkeley DB sources.
Calling DbEnv::set_flags()
with the DB_OVERWRITE flag only affects
the specified DbEnv
handle (and any other Berkeley DB handles opened within the scope of
that handle).
The DB_OVERWRITE flag may be used to configure Berkeley DB at any time during the life of the application.
If set, Berkeley DB will set the panic state for the database environment. (Database environments in a panic state normally refuse all attempts to call Berkeley DB functions, returning DB_RUNRECOVERY.) This flag may not be specified using the environment's DB_CONFIG file.
Calling DbEnv::set_flags()
with the DB_PANIC_ENVIRONMENT flag
affects the database environment, including all threads of control
accessing the database environment.
The DB_PANIC_ENVIRONMENT flag may be used to configure Berkeley DB only after the DbEnv::open() method is called.
In some applications, the expense of page-faulting the underlying shared memory regions can affect performance. (For example, if the page-fault occurs while holding a lock, other lock requests can convoy, and overall throughput may decrease.) If set, Berkeley DB will page-fault shared regions into memory when initially creating or joining a Berkeley DB environment. In addition, Berkeley DB will write the shared regions when creating an environment, forcing the underlying virtual memory and filesystems to instantiate both the necessary memory and the necessary disk space. This can also avoid out-of-disk space failures later on.
Calling DbEnv::set_flags()
with the DB_REGION_INIT flag only affects
the specified DbEnv
handle (and any other Berkeley DB handles opened within the scope of
that handle). For consistent behavior across the environment, all
DbEnv handles opened in
the environment must either set the DB_REGION_INIT flag or the flag
should be specified in the DB_CONFIG configuration file.
The DB_REGION_INIT flag may be used to configure Berkeley DB at any time during the life of the application.
If set, database calls timing out based on lock or transaction timeout values will return DB_LOCK_NOTGRANTED instead of DB_LOCK_DEADLOCK. This allows applications to distinguish between operations which have deadlocked and operations which have exceeded their time limits.
Calling DbEnv::set_flags()
with the DB_TIME_NOTGRANTED flag only
affects the specified DbEnv handle (and any other
Berkeley DB handles opened within the scope of that handle). For
consistent behavior across the environment, all
DbEnv handles opened in the
environment must either set the DB_TIME_NOTGRANTED flag or the flag
should be specified in the DB_CONFIG configuration file.
The DB_TIME_NOTGRANTED
flag may be used to configure Berkeley DB at
any time during the life of the application.
Note that the DbEnv::lock_get() and DbEnv::lock_vec() methods are unaffected by this flag.
If set, Berkeley DB will not write or synchronously flush the log on transaction commit. This means that transactions exhibit the ACI (atomicity, consistency, and isolation) properties, but not D (durability); that is, database integrity will be maintained, but if the application or system fails, it is possible some number of the most recently committed transactions may be undone during recovery. The number of transactions at risk is governed by how many log updates can fit into the log buffer, how often the operating system flushes dirty buffers to disk, and how often the log is checkpointed.
Calling DbEnv::set_flags()
with the DB_TXN_NOSYNC flag only affects
the specified DbEnv
handle (and any other Berkeley DB handles opened within the scope of
that handle). For consistent behavior across the environment, all
DbEnv handles opened in
the environment must either set the DB_TXN_NOSYNC flag or the flag
should be specified in the DB_CONFIG configuration file.
The DB_TXN_NOSYNC flag may be used to configure Berkeley DB at any time during the life of the application.
If set and a lock is unavailable for any Berkeley DB operation performed in the context of a transaction, cause the operation to return DB_LOCK_DEADLOCK (or DB_LOCK_NOTGRANTED if configured using the DB_TIME_NOTGRANTED flag).
Calling DbEnv::set_flags()
with the DB_TXN_NOWAIT flag only affects
the specified DbEnv
handle (and any other Berkeley DB handles opened within the scope of
that handle). For consistent behavior across the environment, all
DbEnv handles opened in
the environment must either set the DB_TXN_NOWAIT flag or the flag
should be specified in the DB_CONFIG configuration file.
The DB_TXN_NOWAIT flag may be used to configure Berkeley DB at any time during the life of the application.
If set, all transactions in the environment will be started as if DB_TXN_SNAPSHOT were passed to the DbEnv::txn_begin() method, and all non-transactional cursors will be opened as if DB_TXN_SNAPSHOT were passed to the Db::cursor() method.
Calling DbEnv::set_flags()
with the DB_TXN_SNAPSHOT flag only
affects the specified DbEnv
handle (and any other Berkeley DB handles opened within the scope of that handle). For
consistent behavior across the environment, all
DbEnv handles opened in the
environment must either set the DB_TXN_SNAPSHOT flag or the flag
should be specified in the DB_CONFIG configuration file.
The DB_TXN_SNAPSHOT flag may be used to configure Berkeley DB at any time during the life of the application.
If set, Berkeley DB will write, but will not synchronously flush, the log on transaction commit. This means that transactions exhibit the ACI (atomicity, consistency, and isolation) properties, but not D (durability); that is, database integrity will be maintained, but if the system fails, it is possible some number of the most recently committed transactions may be undone during recovery. The number of transactions at risk is governed by how often the system flushes dirty buffers to disk and how often the log is checkpointed.
Calling DbEnv::set_flags()
with the DB_TXN_WRITE_NOSYNC flag only
affects the specified DbEnv
handle (and any other Berkeley DB handles opened within the scope of that handle). For
consistent behavior across the environment, all
DbEnv handles opened in the
environment must either set the DB_TXN_WRITE_NOSYNC flag or the flag
should be specified in the DB_CONFIG configuration file.
The DB_TXN_WRITE_NOSYNC flag may be used to configure Berkeley DB at any time during the life of the application.
If set, Berkeley DB will yield the processor immediately after each page or mutex acquisition. This functionality should never be used for purposes other than stress testing.
Calling DbEnv::set_flags()
with the DB_YIELDCPU flag only affects
the specified DbEnv
handle (and any other Berkeley DB handles opened within the scope of
that handle). For consistent behavior across the environment, all
DbEnv handles opened in
the environment must either set the DB_YIELDCPU flag or the flag
should be specified in the DB_CONFIG configuration file.
The DB_YIELDCPU flag may be used to configure Berkeley DB at any time during the life of the application.
The DbEnv::set_flags()
method may fail and throw a DbException
exception, encapsulating one of the following non-zero errors, or return one
of the following non-zero errors: