From b26a199da3f22e3954b05f369096ad5ab833d65c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Lachowski?= Date: Tue, 21 Jul 2026 09:17:01 +0200 Subject: [PATCH 1/3] RDBTC-245 Guide: Server wide connection strings Adding article --- ...ver-wide-connection-string-duplicates.webp | Bin 0 -> 43218 bytes guides/server-wide-connection-string.mdx | 206 ++++++++++++++++++ 2 files changed, 206 insertions(+) create mode 100644 guides/assets/server-wide-connection-string-duplicates.webp create mode 100644 guides/server-wide-connection-string.mdx diff --git a/guides/assets/server-wide-connection-string-duplicates.webp b/guides/assets/server-wide-connection-string-duplicates.webp new file mode 100644 index 0000000000000000000000000000000000000000..11805f1f563711aaec674f6cbae3c91a83c3004e GIT binary patch literal 43218 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 literal 0 HcmV?d00001 diff --git a/guides/server-wide-connection-string.mdx b/guides/server-wide-connection-string.mdx new file mode 100644 index 0000000000..76d1faaf93 --- /dev/null +++ b/guides/server-wide-connection-string.mdx @@ -0,0 +1,206 @@ +--- +title: "Bringing Connection Strings Together in RavenDB" +tags: [administration, clusters, csharp, use-case] +icon: "manage-connection-strings" +description: "Consolidate duplicate ETL, backup, and replication connection strings scattered across databases into a single server-wide definition, and migrate existing databases to it." +published_at: 2026-02-01 +see_also: + - title: "Add or Update a Server-Wide Connection String" + link: "integrations/connection-strings/server-wide/add-or-update-connection-string" + source: "docs" + path: "Integrations > Connection Strings > Server-Wide > Add or Update Connection String" + - title: "Get Server-Wide Connection Strings" + link: "integrations/connection-strings/server-wide/get-connection-strings" + source: "docs" + path: "Integrations > Connection Strings > Server-Wide > Get connection strings" + - title: "Remove a Per-Database Connection String" + link: "integrations/connection-strings/per-database/remove-connection-string" + source: "docs" + path: "Integrations > Connection Strings > Per-Database > Remove connection string" +author: "Paweł Lachowski" +proficiency_level: "Expert" +--- + +import Admonition from '@theme/Admonition'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import CodeBlock from '@theme/CodeBlock'; +import LanguageSwitcher from "@site/src/components/LanguageSwitcher"; +import LanguageContent from "@site/src/components/LanguageContent"; +import Image from "@theme/IdealImage"; + +## How the copies pile up + +RavenDB integrates with SQL databases, cloud storage, other RavenDB clusters, and more. Connection strings tell features such as ETL, backups, and external replication where those external targets are. + +In a multi-database setup, the same target is often used by several databases. As the cluster grows, its connection string gets copied from one database to the next. The result is connection string sprawl: the same SQL warehouse, S3 bucket, or replication destination defined in many places, with every change needing to be repeated in each one. + +When a shared target changes, every database with its own copy of the connection string must be updated separately. The more databases use it, the more places there are to find, change, and verify. + +That is connection string sprawl: the same destination defined many times, slowly drifting out of sync because there was never one place to update it. Server-Wide Connection Strings fix that by moving the shared definition to the server level. Instead of keeping a separate copy in every database, you define the connection string once and let databases use that shared version. Existing databases can be moved to it, and new databases can use it too, including databases you have not created yet. + +There is one thing we want to say immediately. Switching to a shared connection string still takes some cleanup. You need to visit each affected database once and remove its local copy, either in Studio or using the API. But it is also the last time you should need to do that work for this connection. After that, the destination has a single definition, a single place to update, and far fewer chances of drifting out of sync. + +## Looking for duplicates + +Before you can sort anything out, you need to know what is repeated and where. RavenDB does not currently have one server-wide command that says, “show me every connection string in every database.” `GetConnectionStringsOperation` works one database at a time, so the first step is simple: go through the databases, ask each one for its connection strings, and collect the results. + +```c# +using Raven.Client.Documents; +using Raven.Client.Documents.Operations.ConnectionStrings; +using Raven.Client.ServerWide.Operations; + +var databaseNames = store.Maintenance.Server.Send( + new GetDatabaseNamesOperation(start: 0, pageSize: 1024)); + +var connectionStringsByDatabase = new Dictionary(); + +foreach (var dbName in databaseNames) +{ + GetConnectionStringsResult result = store.Maintenance.ForDatabase(dbName) + .Send(new GetConnectionStringsOperation()); + + connectionStringsByDatabase[dbName] = result; +} +``` + +You will usually know which connection strings are shared. If you have many databases or are unsure where duplicates exist, use `GetDatabaseNamesOperation` and `GetConnectionStringsOperation` to find them across the cluster. + +The exact comparison depends on the connection string type, but the goal is always the same: take a long list of database-level settings and turn it into a clear picture of which destinations are shared. + +```c# +var byDestination = connectionStringsByDatabase + .SelectMany(kvp => kvp.Value.SqlConnectionStrings.Values + .Select(cs => new { Database = kvp.Key, cs.Name, cs.ConnectionString })) + .GroupBy(x => x.ConnectionString); + +foreach (var group in byDestination) +{ + Console.WriteLine($"{group.Count()} databases point at: {group.Key}"); + foreach (var entry in group) + Console.WriteLine($" - {entry.Database} ({entry.Name})"); +} +``` + +After you run this, the sprawl becomes visible. You might find ten databases using the same SQL warehouse under slightly different local names. You might also find two databases that really do point somewhere else, and that distinction matters. Not every difference is a mistake. Some differences are intentional, and those should either stay local or become a separate Server-Wide Connection String. + +Console output listing duplicate SQL connection strings found across two databases + +The important part is that you now know what you are dealing with. Finding the sprawl required checking every database because the old setup was spread across every database. But once the shared destinations are moved to Server-Wide Connection Strings, you no longer have to take care of the same connection string again and again. There is one shared definition to update, and the databases that use it can all follow that same definition. + +## Moving to server-wide + +Once you know which connection strings are really shared, the cleanup is straightforward: define the connection string once at the cluster level, then remove the redundant per-database copies. The connection string object itself is not new. You still use the same types you already use for local connection strings, such as `SqlConnectionString`, `RavenConnectionString`, `OlapConnectionString`, and so on. + +```c# +var sharedWarehouse = new SqlConnectionString +{ + Name = "Shared-SQL-Warehouse", + FactoryName = "MySql.Data.MySqlClient", + ConnectionString = "Server=warehouse.internal;Database=Analytics;Uid=etl_user;" +}; +``` + +What changes is where the definition lives. Instead of saving this connection string inside one database, you put it at the server-wide level. Internally, this is handled through dedicated Raft/Rachis commands in the cluster state machine, the same general pattern RavenDB already uses for other server-wide features. From the client side, you do not call those internal commands directly. You send the matching server operation through `Maintenance.Server`. + +```c# +// Client-facing server operation, following the server-wide pattern. +// This is a brand-new feature. Confirm the exact operation name and +// signature against the shipped release, as the public API surface and +// Studio work were still being finalized at PR time. +store.Maintenance.Server.Send( + new PutServerWideConnectionStringOperation(sharedWarehouse)); +``` + +The important part is not the exact internal command name. It is the behavior. Because the change goes through RavenDB’s consensus layer, it is not a loose setting that eventually makes its way around the cluster. Once accepted, the server-wide connection string is part of the cluster state and is consistent across the nodes in that cluster. + +After that, remove the local copies that pointed at the same destination. This is the one-time cost from earlier: each affected database has to be touched once, so the old local definition can be removed. The per-database `RemoveConnectionStringOperation` takes the connection string object, using its Name to identify which connection string should be deleted. + +```c# +foreach (var dbName in databasesToConsolidate) +{ + var toRemove = new SqlConnectionString { Name = "Old-Local-SQL-String" }; + + store.Maintenance.ForDatabase(dbName).Send( + new RemoveConnectionStringOperation(toRemove)); +} +``` + +Finally, run the check again. Query the same databases and confirm that the old local connection string is gone, and that the shared server-wide definition is now the one being resolved. + +```c# +var check = store.Maintenance.ForDatabase(dbName) + .Send(new GetConnectionStringsOperation()); + +// check.SqlConnectionStrings should no longer contain "Old-Local-SQL-String", +// and should reflect the server-wide "Shared-SQL-Warehouse" definition instead. +``` + +At that point, every database that uses this destination is reading from one definition. If the endpoint changes or the credentials need to be rotated, you update the server-wide connection string once. There is no second pass over every database, and no quiet local copy left behind with last quarter’s settings. + +## Adding a database afterward + +Before Server-Wide Connection Strings, creating a new database meant repeating the same setup again: add the SQL warehouse connection string, add the backup target, add the replication destination, and hope it matched the other databases that already used those same places. Now the shared definition already lives at the cluster level, so the new database can resolve it without getting another local copy. + +```c# +var createOp = new CreateDatabaseOperation(new DatabaseRecord("NewAnalyticsDb")); +store.Maintenance.Server.Send(createOp); + +var stringsOnNewDb = store.Maintenance.ForDatabase("NewAnalyticsDb") + .Send(new GetConnectionStringsOperation()); + +// "Shared-SQL-Warehouse" is present here without any per-database +// configuration call having been made for this database. +``` + +That is important: the connection string is available to the database because it is defined server-wide. You are not copying the configuration into the new database, and you are not adding another place that has to be updated later. + +When the destination changes later, you update the server-wide connection string once, and the databases that use it continue resolving the same shared definition instead of depending on their own local copies. + +## The database that's a real exception + +Not every database should use every shared connection string, and that is expected. Server-wide does not mean “force this onto everything.” It means “define the common destination once, then name the databases that should not use this particular definition.” If one database talks to a regional SQL instance instead of the shared warehouse, maybe for data residency reasons, maybe because that team owns separate infrastructure, that database can keep its own local connection string. + +```c# +var sharedWarehouse = new SqlConnectionString +{ + Name = "Shared-SQL-Warehouse", + FactoryName = "MySql.Data.MySqlClient", + ConnectionString = "Server=warehouse.internal;Database=Analytics;Uid=etl_user;" +}; + +// The exclusion list identifies databases that should NOT receive this +// particular server-wide string. Exact property/parameter names follow the +// server-wide pattern and should be confirmed against the shipped release. +store.Maintenance.Server.Send( + new PutServerWideConnectionStringOperation( + sharedWarehouse, + excludedDatabases: new[] { "RegionalDb-EU" })); +``` + +The [exclusion list](/7.2/integrations/connection-strings/server-wide/add-or-update-connection-string) belongs to the connection string, not to the database. RegionalDb-EU can be excluded from the shared warehouse connection string while still using other server-wide definitions, such as a shared backup destination or a shared replication target. You are not opting the database out of server-wide configuration as a whole. You are only saying that this one shared destination does not apply to it. + +Most databases use the shared definition because they really do point at the same place. The exceptions stay local because they really are different. That gives you a clean split: one server-wide definition for the common path, and local connection strings only where the database has a good reason to be different. + +In Studio, once the server-wide connection strings page is available, this same distinction should be visible instead of implied. A database’s own Connection Strings view can show which entries come from the cluster level, so you do not have to guess whether a connection string is locally owned or resolved from a server-wide definition. + +## Cheatsheet: per-database vs. server-wide + +| Situation | Use | +| :---- | :---- | +| Most or all databases share the same ETL/replication/backup destination | Server-wide | +| One database points somewhere genuinely different | Per-database (or server-wide + exclusion) | +| Credentials or endpoint need to rotate across the whole cluster | Server-wide: one update instead of N | +| A new database is about to be created and will need the shared destination | Nothing to do; server-wide already covers it | +| You're not sure how much duplication exists today | Run the enumeration loop first | + +## Summary + +* Copied config creates connection string sprawl. +* No cluster-wide list yet, so check per database. +* Group duplicates by target. +* Move shared strings to server-wide. +* Delete local copies they replace. +* Exclude only genuine exceptions. + +Any questions about RavenDB features, or just want to hang out and talk with the RavenDB team? Join our Discord Community Server. The invitation link is [here](https://discord.com/invite/ravendb). \ No newline at end of file From 2589adfc1ff376b76501f719e95e890c67ec9ac0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Lachowski?= Date: Tue, 21 Jul 2026 09:31:36 +0200 Subject: [PATCH 2/3] RDBTC-245 Guide: Server wide connection strings Fixing code --- guides/server-wide-connection-string.mdx | 30 ++++++++++++++---------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/guides/server-wide-connection-string.mdx b/guides/server-wide-connection-string.mdx index 76d1faaf93..a020eed29a 100644 --- a/guides/server-wide-connection-string.mdx +++ b/guides/server-wide-connection-string.mdx @@ -104,12 +104,13 @@ var sharedWarehouse = new SqlConnectionString What changes is where the definition lives. Instead of saving this connection string inside one database, you put it at the server-wide level. Internally, this is handled through dedicated Raft/Rachis commands in the cluster state machine, the same general pattern RavenDB already uses for other server-wide features. From the client side, you do not call those internal commands directly. You send the matching server operation through `Maintenance.Server`. ```c# -// Client-facing server operation, following the server-wide pattern. -// This is a brand-new feature. Confirm the exact operation name and -// signature against the shipped release, as the public API surface and -// Studio work were still being finalized at PR time. +var serverWideConStr = new ServerWideConnectionString +{ + ConnectionString = sharedWarehouse +}; + store.Maintenance.Server.Send( - new PutServerWideConnectionStringOperation(sharedWarehouse)); + new PutServerWideConnectionStringOperation(serverWideConStr)); ``` The important part is not the exact internal command name. It is the behavior. Because the change goes through RavenDB’s consensus layer, it is not a loose setting that eventually makes its way around the cluster. Once accepted, the server-wide connection string is part of the cluster state and is consistent across the nodes in that cluster. @@ -169,20 +170,23 @@ var sharedWarehouse = new SqlConnectionString ConnectionString = "Server=warehouse.internal;Database=Analytics;Uid=etl_user;" }; -// The exclusion list identifies databases that should NOT receive this -// particular server-wide string. Exact property/parameter names follow the -// server-wide pattern and should be confirmed against the shipped release. +// The exclusion list belongs to the ServerWideConnectionString wrapper, +// not to the underlying connection string object. +var serverWideConStr = new ServerWideConnectionString +{ + ConnectionString = sharedWarehouse, + ExcludedDatabases = new[] { "RegionalDb-EU" } +}; + store.Maintenance.Server.Send( - new PutServerWideConnectionStringOperation( - sharedWarehouse, - excludedDatabases: new[] { "RegionalDb-EU" })); + new PutServerWideConnectionStringOperation(serverWideConStr)); ``` -The [exclusion list](/7.2/integrations/connection-strings/server-wide/add-or-update-connection-string) belongs to the connection string, not to the database. RegionalDb-EU can be excluded from the shared warehouse connection string while still using other server-wide definitions, such as a shared backup destination or a shared replication target. You are not opting the database out of server-wide configuration as a whole. You are only saying that this one shared destination does not apply to it. +The [exclusion list](/7.2/integrations/connection-strings/server-wide/add-or-update-connection-string) belongs to the server-wide connection string, not to the database. RegionalDb-EU can be excluded from the shared warehouse connection string while still using other server-wide definitions, such as a shared backup destination or a shared replication target. You are not opting the database out of server-wide configuration as a whole. You are only saying that this one shared destination does not apply to it. Most databases use the shared definition because they really do point at the same place. The exceptions stay local because they really are different. That gives you a clean split: one server-wide definition for the common path, and local connection strings only where the database has a good reason to be different. -In Studio, once the server-wide connection strings page is available, this same distinction should be visible instead of implied. A database’s own Connection Strings view can show which entries come from the cluster level, so you do not have to guess whether a connection string is locally owned or resolved from a server-wide definition. +In Studio, this same distinction is visible instead of implied. The **Manage Server > Server-Wide Connection Strings** view lists every server-wide definition in the cluster, and a database's own Connection Strings view shows which entries are propagated from the cluster level, so you do not have to guess whether a connection string is locally owned or resolved from a server-wide definition. ## Cheatsheet: per-database vs. server-wide From 52af0b942faa415b86397adc75737018cf1e51ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Lachowski?= Date: Tue, 21 Jul 2026 10:03:37 +0200 Subject: [PATCH 3/3] RDBTC-245 Guide: Server wide connection strings Fixing date. --- guides/server-wide-connection-string.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/guides/server-wide-connection-string.mdx b/guides/server-wide-connection-string.mdx index a020eed29a..236f454978 100644 --- a/guides/server-wide-connection-string.mdx +++ b/guides/server-wide-connection-string.mdx @@ -1,9 +1,9 @@ --- title: "Bringing Connection Strings Together in RavenDB" -tags: [administration, clusters, csharp, use-case] +tags: [administration, clusters, csharp] icon: "manage-connection-strings" description: "Consolidate duplicate ETL, backup, and replication connection strings scattered across databases into a single server-wide definition, and migrate existing databases to it." -published_at: 2026-02-01 +published_at: 2026-07-21 see_also: - title: "Add or Update a Server-Wide Connection String" link: "integrations/connection-strings/server-wide/add-or-update-connection-string"