<< Click to Display Table of Contents >> Navigation: SQL-Server Objekte > Kurzanleitung Föderierung |
Die Föderierung erfolgt über die OPENDATASOURCE-Anweisung.
Einstellen der Adhoc-Berechtigungen
Standardmäßig ist diese OPENDATASOURCE -Anweisung ausgeschaltet und muss manuell eingeschaltet werden.
Am schnellsten geht dies in der Management Console unter Programmenü Programm 🡪 Direkt SQL:
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
Um diese Scripte ausführen zu können, müssen Sie mindestens eine der folgenden zwei Serverrollen haben: sysadmin und/oder serveradmin.
Zugriff auf andere Datenbanken
Eine detaillierte Syntax-Beschreibung für OPENDATASOURCE finden Sie hier:
http://msdn.microsoft.com/de-de/library/ms179856.aspx
Wichtig ist, dass ein entsprechender OLEDB-Provider auf dem SQL-Server-Rechner (nicht auf dem Client!) installiert ist. Achten Sie bitte darauf, in OPENDATASOURCE den richtigen Providernamen zu benutzen.
In der Management Console kann die OPENDATASOURCE in der Maske SQL-Sicht über einige vordefinierte Assistenten generiert werden.
Assistent für Oracle:
Beim Assistenten für Oracle wird von uns der Providername „MSDAORA“ vorgeschlagen. Auf dem SQL-Server-Rechner kann jedoch ein anderer Oracle-Provider bzw. auch gar kein Oracle-Provider installiert sein.
Bevor Sie einen Oracle-Provider installieren, versuchen Sie es zuerst mit einer Änderung von "MSDAORA" auf "MSDAORA.1" oder "OraOLEDB.Oracle"
Zugriffsoptimierung bei Föderierung
Einleitung
In rimacon omniSuite wird die Föderierung über eine SQL-Sicht realisiert. In der SQL-Sicht wird die Fremdtabelle angebunden, nach Bedarf einige Spalten angepasst und das Ergebnis zurückgeschickt. Dank der Ähnlichkeit zwischen SQL-Tabellen und SQL-Sichten kann rimacon omniSuite den SQL-Sichtnamen als üblichen Tabellenname benutzen und in diversen SQL-Befehlen kombinieren.
Problem
Das Hauptproblem bei der Logik liegt darin, dass immer die Gesamt-Menge eingelesen und erst danach nach weiteren Bedingungen reduziert wird. Bei der Zugriffsoptimierung besteht die Möglichkeit, einen parallelen SQL-Ausdruck zu definieren. (wird nicht als SQL-Sicht gespeichert) unter Berücksichtigung eines Filterszenarios (von vier vordefinierten Filterszenarien).
Filterszenarien
1. Alle Primärschlüssel
In diesem Fall wird nur die Primärschlüsselspalte ohne weitere Einschränkungen benötigt.
2. Eine Zeile nach Primärschlüssel-ID
In diesem Fall wird nur eine konkrete Zeile für eine konkrete Primärschlüssel-ID benötigt. Als Platzhalter für die konkrete ID wird die Variable $PKID genutzt.
3. Zeilen nach konkreter FK-ID (alle Spalten)
In diesem Fall werden Zeilen nach einem Fremdschlüssel gefiltert (z.B. alle Tickets eines Rechners). Da die rimacon omniSuite-Fremdschlüssel-ID und die entsprechende externe Spalte normalerweise unterschiedliche Arten von Inhalt haben (in rimacon omniSuite immer INT, in externer Spalte meistens eine Zeichenfolge), muss die Fremdschlüssel-ID über Konversion-SQL konvertiert werden.
Als Platzhalter für die konkrete ID wird die Variable $ObjID genutzt. Falls Konversion-SQL definiert wird, wird dies erst ausgeführt und das Ergebnis als Fremdschlüssel-ID ($ObjID) genutzt.
4. Zeilen nach konkreter FK-ID (nur Primärschlüssel)
Dieses Szenario ist fast identisch mit dem unter Punkt 3 beschriebenen Szenario, es wird aber nur die Primärschlüsselspalte benötigt.
Vollständiges Beispiel
Ausgangsituation:
Externe Tabelle: opendatasource(...).fed.dbo.InstalledSW:
InstalledSW_ID |
Primärschlüssel |
RechnerName |
Rechnername als Text |
SWName |
Produktname |
SWVersion |
Produktversion |
Ziel ist es, diese Tabelle mit einer rimacon-Rechnertabelle (HWM) als 0:n-Beziehung zu verknüpfen, wobei der Rechnername HWM_COMNAME entspricht.
SQL-Sicht:
Name=view_MSSQL2000_InstalledSW
Inhalt:
select InstalledSW_ID,RechnerName,SWName,SWVersion,HWM_ID from opendatasource(...).fed.dbo.InstalledSW X inner join HWM on HWM_MDT_ID=1 and HWM.HWM_COMPNAME=dbo.fnc_StringToString(X.RechnerName) |
In Anbindungseigenschaften wird die "HWM_ID" als FK an die rimacon-Rechnertabelle angebunden.
1. Alle Primärschlüssel
(select InstalledSW_ID from opendatasource(...).fed.dbo.InstalledSW) |
2. Eine Zeile nach Primärschlüssel-ID
(select InstalledSW_ID,RechnerName,SWName,SWVersion,HWM_ID from opendatasource(...).fed.dbo.InstalledSW X inner join HWM on HWM_MDT_ID=1 and HWM.HWM_COMPNAME=dbo.fnc_StringToString(X.RechnerName) where X.InstalledSW_ID=$PKID) |
3. Zeilen nach konkreter FK-ID (alle Spalten)
(select InstalledSW_ID,RechnerName,SWName,SWVersion,HWM_ID from opendatasource(...).fed.dbo.InstalledSW X inner join HWM on HWM_MDT_ID=1 and HWM.HWM_COMPNAME=dbo.fnc_StringToString(X.RechnerName) where X.RechnerName='$ObjID') |
SQL zur Umwandlung des Variableninhalts:
select HWM_COMPNAME from HWM where HWM_ID=$ObjID |
4. Zeilen nach konkreter FK-ID (nur Primärschlüssel)
(select InstalledSW_ID from opendatasource(...).fed.dbo.InstalledSW X where X.RechnerName='$ObjID') |
SQL zur Umwandlung des Variableninhalts:
select HWM_COMPNAME from HWM where HWM_ID=$ObjID |