### Berkeley DB Reference Guide: Access Methods |

# Opening a database

The DB->open function is the standard interface for opening a database, and takes five arguments:

name
  The name of the database file to be opened.

subname
  The optional subdatabase name. The subdatabase name allows applications to have subdatabases, i.e., multiple logical databases inside of a single physical file. This is useful when the logical databases are both numerous and reasonably small, in order to avoid creating a large number of underlying files. Databases created as subdatabases are otherwise identical to any other database.

  It is not an error to open a database file that contains subdatabases without specifying a subdatabase name, however it must be opened read-only. The handle that is returned from such a call is a handle on a database whose key values are the names of the subdatabases stored in the database file and whose data values are opaque objects. No keys or data values can be changed or stored through this database handle.

  It is an error to attempt to open a subdatabase in a database file that was not initially created using a subdatabase name, i.e., a database file must be initially specified as holding subdatabases for a subdatabase to be created within it.

type
  The type of database to open. This value will be one of the three access methods Berkeley DB supports: DB_BTREE, DB_HASH, DB_QUEUE or DB_RECNO, or the special value DB_UNKNOWN, which allows you to open an existing file without knowing its type.

mode
  The permissions to give to any created file.

There are a few flags that you can set to customize open:

DB_CREATE
  Create the underlying database and any necessary physical files.

DB_NOMMAP
  Do not map this database into process memory.

DB_RDONLY
  Treat the data base as readonly.

DB_THREAD
  The returned handle is free-threaded, and can be used by multiple threads within the process.

DB_TRUNCATE
  Physically truncate the underlying database file, discarding all previous subdatabases or databases. Underlying filesystem primitives are used to implement this flag. For this reason it is only applicable to the physical database file and cannot be used to discard subdatabases.

DB_UPGRADE
  Upgrade the database format as necessary.

Copyright Sleepycat Software