Examining Berkeley DB files from the CLI

LinuxCommand Line-InterfaceBerkeley Db

Linux Problem Overview


I have a set of Berkeley DB files on my Linux file system that I'd like to examine.

What useful tools exist for getting a quick overview of the contents? I can write Perl scripts that use BDB modules for examining them, but I'm looking for some CLI utility to be able to take a look inside without having to start writing scripts.

Linux Solutions


Solution 1 - Linux

Use the db_dump program. It is contained in the package core/db (Arch), db-util (Debian, Ubuntu), sys-libs/db (Gentoo, note that here the binary is called db4.8_dump or whatever version you are using).

On some systems the man pages are not installed, in that case the documentation can be found here. By default, db_dump outputs some hex numbers, which is not really useful if you are trying to analyse the content of a database. Use the -p argument to change this.

Show everything that’s in the file database.db:

db_dump -p database.db

List the databases in the file database.db:

db_dump -l database.db

Show only the content of the database mydb in the file database.db:

db_dump -p -s mydb database.db

Solution 2 - Linux

Check out the db-utils package. If you use apt, you can install it with the following: apt-get install db-util (or apt-get install db4.8-util or whatever version you have or prefer.)

Additional links:

Solution 3 - Linux

I found @strickli's answer to be the most helpful, as I didn't want to add any new packages to the machine with the database I was on. However, the db file I was reading was of type btree, not hash, so I had to use bsddb

# file foo.db
foo.db: Berkeley DB (Btree, version 9, native byte-order)

# python
>>> import bsddb
>>> for k, v in bsddb.btopen("*<db filename here...>*").iteritems():
...     print k,v
...

Solution 4 - Linux

As mentioned in the other answers, the db-utils package (db4-utils under RHEL) has some tools. However, db_dump can be unhelpful, since the output is 'bytevalue' format.

For a quick'n'dirty viewer, use python:

me@machine$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06) 
>>> import dbhash
>>> for k, v in dbhash.open( *<db filename here...>* ).iteritems(): print k, v
...

Note that dbhash is deprecated since python 2.6.

Solution 5 - Linux

The db_hotbackup utility creates "hot backup" or "hot failover" snapshots of Berkeley DB database environments. Install it with the following

apt-get install db-util

then run following command to take hot backup

db_hotbackup [-cDEguVv] [-d data_dir ...] [-h home] [-l log_dir] [-P password] -b backup_dir

Solution 6 - Linux

Once you have installed the db utils you can simple do a db_dump on the db file.

Solution 7 - Linux

Note that the initial answer says to use "db-utils" package, but the example shows the correct "db-util" package. (with no "s")

Solution 8 - Linux

Under Amazon Linux you can install it with:

yum install db43-utils

Solution 9 - Linux

Python 3
from bsddb3 import db
import collections
d = db.DB()
d.open('./file.dat', 'dbname', db.DB_BTREE, db.DB_THREAD | db.DB_RDONLY)
d.keys()
collections.OrderedDict((k, d[k]) for k in d.keys())

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmercutioView Question on Stackoverflow
Solution 1 - LinuxcdauthView Answer on Stackoverflow
Solution 2 - LinuxDavid CrowView Answer on Stackoverflow
Solution 3 - LinuxtrjhView Answer on Stackoverflow
Solution 4 - LinuxstrickliView Answer on Stackoverflow
Solution 5 - LinuxIshtiaq AhmedView Answer on Stackoverflow
Solution 6 - LinuxGunnarssonView Answer on Stackoverflow
Solution 7 - LinuxA.R. PepperView Answer on Stackoverflow
Solution 8 - LinuxDan HermanView Answer on Stackoverflow
Solution 9 - LinuxkenorbView Answer on Stackoverflow