Excalibur.EventSourcing.Oracle
10.0.0-alpha.11
dotnet add package Excalibur.EventSourcing.Oracle --version 10.0.0-alpha.11
NuGet\Install-Package Excalibur.EventSourcing.Oracle -Version 10.0.0-alpha.11
<PackageReference Include="Excalibur.EventSourcing.Oracle" Version="10.0.0-alpha.11" />
<PackageVersion Include="Excalibur.EventSourcing.Oracle" Version="10.0.0-alpha.11" />
<PackageReference Include="Excalibur.EventSourcing.Oracle" />
paket add Excalibur.EventSourcing.Oracle --version 10.0.0-alpha.11
#r "nuget: Excalibur.EventSourcing.Oracle, 10.0.0-alpha.11"
#:package Excalibur.EventSourcing.Oracle@10.0.0-alpha.11
#addin nuget:?package=Excalibur.EventSourcing.Oracle&version=10.0.0-alpha.11&prerelease
#tool nuget:?package=Excalibur.EventSourcing.Oracle&version=10.0.0-alpha.11&prerelease
Excalibur.EventSourcing.Oracle
Oracle Database implementations of the Excalibur event-sourcing stores.
Provides:
OracleEventStore—IEventStorewith optimistic concurrency (read-current-version-then-compare inside a serializable transaction), atomic append, and GDPR erasure.OracleSnapshotStore—ISnapshotStorewithMERGE-based upsert semantics.
Data access uses Dapper over Oracle.ManagedDataAccess.Core (ODP.NET). No EntityFramework.
Schema
The stores do not create their tables at runtime. Provision them before the first append, by
running the scripts shipped inside this package under scripts/:
| Script | Creates | Required |
|---|---|---|
scripts/003_CreateEventStoreSchema.sql |
EVENTSTOREEVENTS |
Yes — this is the event store itself |
scripts/001_CreateSnapshotSchema.sql |
EVENTSTORESNAPSHOTS |
Only if you enable snapshots |
scripts/002_MigrateSnapshotsToKeyedSentinel.sql |
— | Upgrade only, see below |
scripts/004_MakeEventTenantTotal.sql |
— | Upgrade only, see below |
In Oracle a schema is a user. Run the scripts while connected as the user named by
OracleEventStoreOptions.Schema (default EXCALIBUR), or switch first with
ALTER SESSION SET CURRENT_SCHEMA = EXCALIBUR. The objects are created unqualified, so connecting
as a different user without switching creates them where the store will not look for them.
sqlplus excalibur/password@//host:1521/service @003_CreateEventStoreSchema.sql
Oracle has no CREATE TABLE IF NOT EXISTS, so re-running a create script raises ORA-00955 (name
already used), which is safe to ignore.
002_MigrateSnapshotsToKeyedSentinel.sql is an upgrade for databases whose snapshot table predates
the keyed tenant sentinel. It is not needed for a fresh install.
004_MakeEventTenantTotal.sql is the same upgrade for the EVENT table: it backfills
EVENTSTOREEVENTS.TENANTID from NULL to the reserved __untenanted__ sentinel and then makes the
column NOT NULL, so an untenanted event is a value rather than a missing one. It is not needed for
a fresh install — 003 already creates the column that way.
Run it if your event store predates the sentinel. It closes a real concurrency hole as well as
tidying the representation: Oracle treats NULLs as distinct in a unique index, so while TENANTID
was nullable the stream-identity constraint did not constrain untenanted rows, and two appends at
the same version of the same untenanted stream could both succeed. Tenanted streams were never
affected. The script's STEP 0 reports any such duplicate that already exists; resolve those rows
before continuing, because only you can decide which append survives.
Registration
services.AddOracleEventStore(o =>
{
o.ConnectionString = "User Id=excalibur;Password=...;Data Source=localhost:1521/FREEPDB1";
o.Schema = "EXCALIBUR";
});
services.AddOracleSnapshotStore(o => o.ConnectionString = "...");
Options are validated at startup (ValidateOnStart).
Driver license
This package depends on Oracle.ManagedDataAccess.Core, Oracle's own ODP.NET Core driver. It is
not distributed under an OSI-approved open-source license. Its LICENSE.txt opens:
Your use of this Program is governed by the Oracle Free Distribution, Hosting, and Use Terms and Conditions set forth below, unless you have received this Program (alone or as part of another Oracle product) under an Oracle license agreement (including but not limited to the Oracle Master Agreement), in which case your use of this Program is governed solely by such license agreement with Oracle.
Excalibur redistributes no Oracle software and asserts nothing about your eligibility on your behalf. Referencing this package makes NuGet install the driver into your application, so the obligations are yours. Read the terms shipped in the driver package before you deploy, and confirm your deployment is covered -- the free terms carry conditions that the MIT and PostgreSQL licenses of Excalibur's other database drivers do not.
If those terms do not suit you, no other Excalibur provider carries them: the SQL Server, MySQL and
SQLite drivers are MIT and Npgsql is the PostgreSQL license. Every dependency's license is listed in
THIRD-PARTY-NOTICES.md in the repository.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Ben.Demystifier (>= 0.4.1)
- CloudNative.CloudEvents (>= 2.8.0)
- CloudNative.CloudEvents.SystemTextJson (>= 2.8.0)
- Cronos (>= 0.12.0)
- Dapper (>= 2.1.72)
- Excalibur.Data.Abstractions (>= 10.0.0-alpha.11)
- Excalibur.Dispatch.Abstractions (>= 10.0.0-alpha.11)
- Excalibur.Dispatch.Serialization.MemoryPack (>= 10.0.0-alpha.11)
- Excalibur.EventSourcing (>= 10.0.0-alpha.11)
- FluentValidation (>= 12.1.1)
- FluentValidation.DependencyInjectionExtensions (>= 12.1.1)
- IdentityModel (>= 7.0.0)
- JsonNet.ContractResolvers (>= 2.0.0)
- Medo.Uuid7 (>= 3.2.0)
- MemoryPack (>= 1.21.4)
- Microsoft.ApplicationInsights (>= 3.1.0)
- Microsoft.Extensions.Caching.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Caching.Memory (>= 10.0.10)
- Microsoft.Extensions.Configuration (>= 10.0.10)
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.10)
- Microsoft.Extensions.Configuration.CommandLine (>= 10.0.10)
- Microsoft.Extensions.Configuration.EnvironmentVariables (>= 10.0.10)
- Microsoft.Extensions.Configuration.Json (>= 10.0.10)
- Microsoft.Extensions.DependencyInjection (>= 10.0.10)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Diagnostics.HealthChecks (>= 10.0.10)
- Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Hosting (>= 10.0.10)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Http (>= 10.0.10)
- Microsoft.Extensions.Logging (>= 10.0.10)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Logging.Console (>= 10.0.10)
- Microsoft.Extensions.ObjectPool (>= 10.0.10)
- Microsoft.Extensions.Options (>= 10.0.10)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.10)
- Microsoft.Extensions.Options.DataAnnotations (>= 10.0.10)
- Microsoft.IdentityModel.Tokens (>= 8.17.0)
- NCrontab (>= 3.4.0)
- OpenTelemetry (>= 1.15.3)
- OpenTelemetry.Api (>= 1.15.3)
- OpenTelemetry.Extensions.Hosting (>= 1.15.3)
- Oracle.ManagedDataAccess.Core (>= 23.8.0)
- Polly (>= 8.6.6)
- System.Diagnostics.PerformanceCounter (>= 10.0.7)
- System.IdentityModel.Tokens.Jwt (>= 8.17.0)
- System.IO.Hashing (>= 10.0.7)
- System.Threading.RateLimiting (>= 10.0.7)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 10.0.0-alpha.11 | 28 | 9/15/2026 |
| 10.0.0-alpha.10 | 64 | 9/6/2026 |
| 10.0.0-alpha.9 | 58 | 8/31/2026 |
| 10.0.0-alpha.8 | 71 | 8/14/2026 |
| 10.0.0-alpha.7 | 66 | 8/13/2026 |
| 10.0.0-alpha.6 | 67 | 8/11/2026 |
| 10.0.0-alpha.5 | 61 | 8/10/2026 |
| 10.0.0-alpha.4 | 64 | 8/10/2026 |
Release notes and versioning policy: https://docs.excalibur-dispatch.dev/docs/migration/version-upgrades