public void TestBackupCallbacks() { testName = "TestBackupCallbacks"; SetUpTest(true); string dbFileName = testName + ".db"; // Open an environment. DatabaseEnvironmentConfig envConfig = new DatabaseEnvironmentConfig(); envConfig.AutoCommit = true; envConfig.Create = true; envConfig.UseMPool = true; envConfig.UseLogging = true; envConfig.UseTxns = true; DatabaseEnvironment env = DatabaseEnvironment.Open( testHome, envConfig); // Open a databases. BTreeDatabaseConfig dbConfig = new BTreeDatabaseConfig(); dbConfig.Creation = CreatePolicy.IF_NEEDED; dbConfig.Env = env; BTreeDatabase db = BTreeDatabase.Open( dbFileName, dbConfig); /* * Populate the database but keep it small, we're going to do a * byte-by-byte comparison at the end. */ byte[] byteArr = new byte[1024]; for (int i = 0; i < 10; i++) db.Put(new DatabaseEntry( BitConverter.GetBytes(i)), new DatabaseEntry(byteArr)); db.Close(); /* Set up the target directory for the backup. */ string target = testFixtureHome + "/" + testName + "_backup"; Configuration.ClearDir(target); BackupWriter backup = new BackupWriter(); env.BackupHandler = backup; BackupOptions opt = new BackupOptions(); opt.Creation = CreatePolicy.ALWAYS; env.Backup(target, opt); Assert.Greater(Directory.GetFiles(target).Length, 0); /* Check that our callbacks wrote the file correctly. */ FileStream orig = new FileStream(Path.Combine(testHome, dbFileName), FileMode.Open, FileAccess.Read); FileStream bak = new FileStream(Path.Combine(target, dbFileName), FileMode.Open, FileAccess.Read); int orig_byte, bak_byte; do { orig_byte = orig.ReadByte(); bak_byte = bak.ReadByte(); Assert.AreEqual(orig_byte, bak_byte); } while (orig_byte != -1 && bak_byte != -1); orig.Close(); bak.Close(); Directory.Delete(target, true); env.Close(); }
/// <summary> /// Perform a hot back up of the open environment. /// <para> /// All files used by the environment are backed up, so long as the /// normal rules for file placement are followed. For information on how /// files are normally placed relative to the environment directory, see /// the "Berkeley DB File Naming" section in the Berkeley DB Reference /// Guide. /// </para> /// <para> /// By default, data directories and the log directory specified /// relative to the home directory are recreated relative to the /// target directory. If absolute path names are used, then use the /// <see cref="BackupOptions.SingleDir"/> method. /// </para> /// <para> /// This method provides the same functionality as the db_hotbackup /// utility. However, this method does not perform the housekeeping /// actions performed by that utility. In particular, you may want to /// run a checkpoint before calling this method. To run a checkpoint, /// use the <see cref="DatabaseEnvironment.Checkpoint"/> method. For /// more information on checkpoints, see the "Checkpoint" section in the /// Berkeley DB Reference Guide. /// </para> /// <para> /// To back up a single database file within the environment, use the /// <see cref="DatabaseEnvironment.BackupDatabase"/> method. /// </para> /// <para> /// In addition to the configuration options available using the /// <see cref="BackupOptions"/> class, additional tuning modifications /// can be made using the <see cref="DatabaseEnvironment.BackupReadCount"/>, /// <see cref="DatabaseEnvironment.BackupReadSleepDuration"/>, /// <see cref="DatabaseEnvironment.BackupBufferSize"/>, and /// <see cref="DatabaseEnvironment.BackupWriteDirect"/> properties. /// Alternatively, you can write your own custom hot back up facility /// using the <see cref="IBackup"/> interface. /// </para> /// </summary> /// <param name="target">Identifies the directory in which the back up /// is placed. Any subdirectories required to contain the back up /// must be placed relative to this directory. If an /// <see cref="IBackup"/> is configured for the environment, then the /// value specified to this parameter is passed on to the /// <see cref="IBackup.Open"/> method. If this parameter is null, then /// the target must be specified to the <see cref="IBackup.Open"/> /// method. /// <para> /// This directory, and any required subdirectories, are created for /// you if you specify <see cref="CreatePolicy.IF_NEEDED"/> or /// <see cref="CreatePolicy.ALWAYS"/> for the /// <see cref="BackupOptions.Creation"/> property. /// </para> /// </param> /// <param name="opt">The <see cref="BackupOptions"/> instance used to /// configure the hot back up.</param> public void Backup(string target, BackupOptions opt) { dbenv.backup(target, opt.flags); }
public void TestBackup() { testName = "TestBackup"; SetUpTest(true); string dbFileName = testName + ".db"; // Open an environment. DatabaseEnvironmentConfig envConfig = new DatabaseEnvironmentConfig(); envConfig.AutoCommit = true; envConfig.Create = true; envConfig.UseMPool = true; envConfig.UseLogging = true; envConfig.UseTxns = true; DatabaseEnvironment env = DatabaseEnvironment.Open( testHome, envConfig); // Open a databases. BTreeDatabaseConfig dbConfig = new BTreeDatabaseConfig(); dbConfig.Creation = CreatePolicy.IF_NEEDED; dbConfig.Env = env; BTreeDatabase db = BTreeDatabase.Open( dbFileName, dbConfig); /* * Put 1000 records into the database to generate * more than one log file. */ byte[] byteArr = new byte[1024]; for (int i = 0; i < 1000; i++) db.Put(new DatabaseEntry( BitConverter.GetBytes(i)), new DatabaseEntry(byteArr)); db.Close(); /* Set up the target directory for the backup. */ string target = testFixtureHome + "/" + testName + "_backup"; Configuration.ClearDir(target); BackupOptions opt = new BackupOptions(); opt.Creation = CreatePolicy.ALWAYS; env.Backup(target, opt); Assert.Greater(Directory.GetFiles(target).Length, 0); Directory.Delete(target, true); env.Close(); }