Benutzer mit den meisten Antworten
Globale Sp für mehrere DB's (ohne masterDB) ?

Frage
-
Hi,
habe folgende Situation:
Wir haben mehrere DB's, die alle identisch aufgebaut sind (Tabellen, etc). In jeder befinden sich Daten aus unterschiedlichen Ländern. Dies ist so gewollt. Nun möchte ich meine ganzen SP's, die bereits für "DE" existieren nicht reduntant halten. In Kürze kommen 2 neue Länder hinzu, und dann dies eine oder andere ebenfalls.
Dass man in der masterDB SP's global definieren kann ist mir bekannt, doch möchte ich Erstens nicht die masterDb versauen und Zweitens nicht den undokumentierten Befehl dafür verwenden. Auch habe ich wie oben bereits erwähnt keine Lust, alle SP's im Dutzend billiger gleich zu halten.
Schön wäre es, eine zentrale eigene DB zu haben die wie ein Interface fungiert und dann je nach Länder-Parameter die SP's startet und die Daten in der entsprechenden DB verarbeitet.
Gibt es hier irgendeine Lösung?
Gruß Hipp
Antworten
-
Neben den von Olaf vorgeschlagenen Optionen solltest Du noch berücksichtigen, daß einen datenbankübergreifende Technologie ohne Zertifikate nur geht, wenn die Datenbankoption TRUSTWORTHY auf ON geschaltet wurde.
Ich halte das Konzept der Verteilung auf meherer Datenbanken nicht für sinnvoll, wenn die Benutzer auf ALLE gleichzeitig zugreifen dürfen.
Ev. wäre eine Verlagerung in "Länderschemata" sinnvoller, die dann in einer Datenbank gehostet werden.e.g.
CREATE SCHEMA [Deutschland] AUTHORIZATION dbo
In diesem Schemata befinden sich dann die Objekte Deine dedizierten Datenbank.
Somit bleibst Du immer im Kontext der Datenbank.Uwe Ricken
MCITP Database Administrator 2005
MCITP Database Administrator 2008
MCITP Microsoft SQL Server 2008, Database Development
db Berater GmbH
http://www-db-berater.de
SQL Server Blog (german only)- Als Antwort markiert Hipp1010 Donnerstag, 6. Dezember 2012 14:50
Alle Antworten
-
Hallo Hipp,
Du könntest Dir selbst eine "globale" Datenbank anlegen und dort die SP erstellen. In den eigentlichen Datenbanken legst Du dann ein Synonym zu den SP's in der globalen Datenbank an; geht so:
USE [Test] GO CREATE SYNONYM [dbo].[SynSPHelp] FOR [master].[sys].[sp_helpdb] GO EXEC [dbo].[SynSPHelp]
Nur die SP wird dann auch in der globalen Datenbank ausgeführt; ob Dir das dann hilft?Olaf Helper
Blog Xing -
Hallo Olaf,
verstehe ich das richtig: Ich lege mir eine "Master" Db an.
In den eigentlichen Daten-DB's hier "Test" erstelle ich Synonyme für die SP's (hier das Synonym "SynSPHelp") zur eigentliche SP in der "Master" (sp_helpdb).
Wenn ich also in der Test-DB die SP mit dem Parameter "DE" starten würde, so würde die SP in der Master-DB gecalled. Aber wie ist das dann mit dem USE? In der SP steht doch zwecks Umgebung der USE Befehl? Oder wird der über das Synonym obsolet und zählt letzt endlich die Aufrufumgebung?
Und wie verhält es sich mit der Konstellation SP -> SubSP1 -> SubSubSP1 -> Fn1 -> Assembly?
Gruß Hipp
- Bearbeitet Hipp1010 Donnerstag, 6. Dezember 2012 09:24
-
Hallo Hipp,
In einer SP kannst Du keine USE Anweisung verwenden; deswegen mein Nachsatz, es wird Dir nicht viel helfen. Du könntest es über rein dynamisches SQL lösen, wäre aber sehr, sehr unschön und fehleranfällig.
Auf welche Daten zugegriffen wird, steht in der SP. Von daher wirst Du die SP's, die mit Daten arbeiten, auch in der Datenbank anlegen müssen, wo die Daten sind.
Olaf Helper
Blog Xing -
Neben den von Olaf vorgeschlagenen Optionen solltest Du noch berücksichtigen, daß einen datenbankübergreifende Technologie ohne Zertifikate nur geht, wenn die Datenbankoption TRUSTWORTHY auf ON geschaltet wurde.
Ich halte das Konzept der Verteilung auf meherer Datenbanken nicht für sinnvoll, wenn die Benutzer auf ALLE gleichzeitig zugreifen dürfen.
Ev. wäre eine Verlagerung in "Länderschemata" sinnvoller, die dann in einer Datenbank gehostet werden.e.g.
CREATE SCHEMA [Deutschland] AUTHORIZATION dbo
In diesem Schemata befinden sich dann die Objekte Deine dedizierten Datenbank.
Somit bleibst Du immer im Kontext der Datenbank.Uwe Ricken
MCITP Database Administrator 2005
MCITP Database Administrator 2008
MCITP Microsoft SQL Server 2008, Database Development
db Berater GmbH
http://www-db-berater.de
SQL Server Blog (german only)- Als Antwort markiert Hipp1010 Donnerstag, 6. Dezember 2012 14:50
-
Hallo Olaf,
das mit den Synonymen macht Sinn in einem unserer Fälle. Wir haben eine Global-DB, in der Applikationen und Userverwaltet werden. Mit Synonymen in den einzelnen Applikations-DB's kann dies bewerkstelligt werden. Und sogenannte global zu verwendende SP's würden wir entsprechend benennen und in der Global-DB ablegen. Gleiches für FN's. Spezielle lokale SP's bleiben in der einzelnen DB. Passt.
@Uwe:
Da wir leider von unserer Mutter-Firma die Daten pro Land geliefgert bekommen und leider die ID's von ein und den selben Entities in den einzelnen Ländern unterschiedlich sind, bleibt uns nichts anderes übrig, als diese Daten je Land zu übernehmen. Wenn ich das richtig verstehe, so könnten wir pro Land ein Schema anlegen, unter der wir dann jeweils die (leider) identischen Tabellen anlegen. Die vorhandenen SP's müssten dann alle bezüglich der Tabellen-Namen zusätzlich mit dem Schema angesprochen werden. Korrekt?Gruß Hipp
-
Hallo Hipp,
ja - genau so ist es.
Man sollte immer Full Qualified Object-Konventionen verwenden.Ich habe dazu mal was im Zusammenhang mit Performance geschrieben:
http://db-berater.blogspot.de/2012/11/auswirkung-von-vollstandig.htmlUwe Ricken
MCITP Database Administrator 2005
MCITP Database Administrator 2008
MCITP Microsoft SQL Server 2008, Database Development
db Berater GmbH
http://www-db-berater.de
SQL Server Blog (german only)