Operations: Server: How to Create a Database

Create a new database on a server.

Syntax

public CreateDatabaseOperation(
    DatabaseRecord databaseRecord,
    int replicationFactor = 1)
{
}
Parameters Type Description
databaseRecord DatabaseRecord instance of DatabaseRecord containing database configuration
replicationFactor int indicates how many nodes should contain the database

DatabaseRecord

DatabaseRecord is a collection of database configurations.

Constructor

Name Description
DatabaseRecord(string databaseName) Initialize a new database record.

Properties

Name Type Description
Disabled bool (default: false) Disable the database.
Encrypted bool (default: false) Enables database encryption.
DeletionInProgress Dictionary<string, DeletionInProgress> Mark the deletion of the database from specific nodes.
Topology DatabaseTopology By default it is null and the server will decided on which nodes to place the database according to the Replication Factor.
ConflictSolverConfig ConflictSolver Specify the strategy to resolve Conflicts.
Indexes Dictionary<string, IndexDefinition> Define Indexes
AutoIndexes Dictionary<string, AutoIndexDefinition> Define Auto Indexes
Settings Dictionary<string, string> Provide Configuration settings.
Revisions RevisionsConfiguration Set Revision configuration.
Expiration ExpirationConfiguration Set Expiration configuration.
RavenConnectionStrings Dictionary<string, RavenConnectionString> Add Raven Connection String
SqlConnectionStrings Dictionary<string, SqlConnectionString> Add SQL Connection String
PeriodicBackups List<PeriodicBackupConfiguration> Add Backup tasks.
ExternalReplications List<ExternalReplications> Add External Replication tasks.
RavenEtls List<RavenEtlConfiguration> Add Raven ETL tasks.
SqlEtls List<SqlEtlConfiguration> Add SQL ETL tasks.
Client ClientConfiguration Set Client Configuration

Remarks

If Topology is specified, the replicationFactor will be ignored.

Example

store.Maintenance.Server.Send(new CreateDatabaseOperation(new DatabaseRecord("MyNewDatabase")));
await store.Maintenance.Server.SendAsync(new CreateDatabaseOperation(new DatabaseRecord("MyNewDatabase")));

Information

To ensure database exists before creating it we can use the following example

Example - EnsureDatabaseExists

public void EnsureDatabaseExists(IDocumentStore store, string database = null, bool createDatabaseIfNotExists = true)
{
    database = database ?? store.Database;

    if (string.IsNullOrWhiteSpace(database))
        throw new ArgumentException("Value cannot be null or whitespace.", nameof(database));

    try
    {
        store.Maintenance.ForDatabase(database).Send(new GetStatisticsOperation());
    }
    catch (DatabaseDoesNotExistException)
    {
        if (createDatabaseIfNotExists == false)
            throw;

        try
        {
            store.Maintenance.Server.Send(new CreateDatabaseOperation(new DatabaseRecord(database)));
        }
        catch (ConcurrencyException)
        {
            // The database was already created before calling CreateDatabaseOperation
        }

    }
}
public async Task EnsureDatabaseExistsAsync(IDocumentStore store, string database = null, bool createDatabaseIfNotExists = true)
{
    database = database ?? store.Database;

    if (string.IsNullOrWhiteSpace(database))
        throw new ArgumentException("Value cannot be null or whitespace.", nameof(database));

    try
    {
        await store.Maintenance.ForDatabase(database).SendAsync(new GetStatisticsOperation());
    }
    catch (DatabaseDoesNotExistException)
    {
        if (createDatabaseIfNotExists == false)
            throw;

        try
        {
            await store.Maintenance.Server.SendAsync(new CreateDatabaseOperation(new DatabaseRecord(database)));
        }
        catch (ConcurrencyException)
        {
        }
    }
}

Note

Creation of a database requires admin certificate