Tutorial: Abfragen von Oracle in einem SQL Server Big Data-Cluster

Gilt für: SQL Server 2019 (15.x)

Wichtig

Das Microsoft SQL Server 2019-Big Data-Cluster-Add-On wird eingestellt. Der Support für SQL Server 2019-Big Data-Clusters endet am 28. Februar 2025. Alle vorhandenen Benutzer*innen von SQL Server 2019 mit Software Assurance werden auf der Plattform vollständig unterstützt, und die Software wird bis zu diesem Zeitpunkt weiterhin über kumulative SQL Server-Updates verwaltet. Weitere Informationen finden Sie im Ankündigungsblogbeitrag und unter Big Data-Optionen auf der Microsoft SQL Server-Plattform.

Dieses Tutorial veranschaulicht, wie Sie Oracle-Daten aus einem Big Data-Cluster für SQL Server 2019 abfragen. Zum Ausführen dieses Tutorials benötigen Sie Zugriff auf einen Oracle-Server. Ein Oracle-Benutzerkonto mit Leseberechtigungen für das externe Objekt ist erforderlich. Oracle-Proxybenutzerauthentifizierung wird unterstützt. Auch wenn Sie keinen Zugriff haben, bietet Ihnen dieses Tutorial einen Einblick darin, wie die Datenvirtualisierung für externe Datenquellen in einem SQL Server-Big Data-Cluster funktioniert.

In diesem Tutorial lernen Sie Folgendes:

  • Sie erstellen eine externe Tabelle für Daten in einer externen Oracle-Datenbank.
  • Verknüpfen dieser Daten mit hochwertigen Daten in der Masterinstanz

Tipp

Wenn Sie möchten, können Sie ein Skript für die Befehle in diesem Tutorial herunterladen und ausführen. Anweisungen finden Sie in den Beispielen zur Datenvirtualisierung auf GitHub.

Voraussetzungen

Erstellen einer Oracle-Tabelle

Mit den folgenden Schritten erstellen Sie eine Beispieltabelle namens INVENTORY in Oracle.

  1. Stellen Sie eine Verbindung mit einer Oracle-Instanz und -Datenbank her, die Sie für dieses Tutorial verwenden möchten.

  2. Führen Sie zum Erstellen der Tabelle INVENTORY die folgende Anweisung aus:

     CREATE TABLE "INVENTORY"
     (
         "INV_DATE" NUMBER(10,0) NOT NULL,
         "INV_ITEM" NUMBER(10,0) NOT NULL,
         "INV_WAREHOUSE" NUMBER(10,0) NOT NULL,
         "INV_QUANTITY_ON_HAND" NUMBER(10,0)
     );
    
     CREATE INDEX INV_ITEM ON HR.INVENTORY(INV_ITEM);
    
  3. Importieren Sie die Inhalte der Datei inventory.csv in diese Tabelle. Diese Datei wurde von den Beispielerstellungsskripts im Abschnitt Voraussetzungen erstellt.

Erstellen einer externen Datenquelle

Der erste Schritt besteht darin, eine externe Datenquelle zu erstellen, die auf Ihren Oracle-Server zugreifen kann.

  1. Stellen Sie in Azure Data Studio eine Verbindung mit der SQL Server-Masterinstanz Ihres Big Data-Clusters her. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit der SQL Server-Masterinstanz.

  2. Doppelklicken Sie im Fenster Server auf die Verbindung, um das Serverdashboard der SQL Server-Masterinstanz anzuzeigen. Wählen Sie Neue Abfrage aus.

    Abfrage der SQL Server-Masterinstanz

  3. Führen Sie den folgenden Transact-SQL-Befehl aus, um den Kontext in der Masterinstanz in die Sales-Datenbank zu ändern.

    USE Sales
    GO
    
  4. Erstellen Sie datenbankweit gültige Anmeldeinformationen zum Herstellen einer Verbindung mit dem Oracle-Server. Geben Sie in der folgenden Anweisung die entsprechenden Anmeldeinformationen für Ihren Oracle-Server an.

    CREATE DATABASE SCOPED CREDENTIAL [OracleCredential]
    WITH IDENTITY = '<oracle_user,nvarchar(100),SYSTEM>', SECRET = '<oracle_user_password,nvarchar(100),manager>';
    
  5. Erstellen Sie eine externe Datenquelle, die auf den Oracle-Server zeigt.

    CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
    WITH (LOCATION = 'oracle://<oracle_server,nvarchar(100)>',CREDENTIAL = [OracleCredential]);
    

Optional: Oracle-Proxyauthentifizierung

Oracle unterstützt die Proxyauthentifizierung, um eine fein abgestimmte Zugriffssteuerung zu ermöglichen. Ein Proxybenutzer stellt mithilfe seiner Anmeldeinformationen eine Verbindung mit der Oracle-Datenbank her und nimmt die Identität eines anderen Benutzers in der Datenbank an.

Ein Proxybenutzer kann so konfiguriert werden, dass er im Vergleich zu dem Benutzer, dessen Identität angenommen wird, eingeschränkten Zugriff hat. Beispielsweise kann einem Proxybenutzer das Herstellen eine Verbindung mithilfe einer bestimmten Datenbankrolle des Benutzers, dessen Identität angenommen wird, gestattet werden. Die Identität des Benutzers, der über einen Proxybenutzer eine Verbindung mit der Oracle-Datenbank herstellt, bleibt in der Verbindung erhalten, auch wenn mehrere Benutzer mithilfe der Proxyauthentifizierung eine Verbindung herstellen. Dadurch kann Oracle die Zugriffssteuerung erzwingen und Aktionen überwachen, die im Auftrag des tatsächlichen Benutzers ausgeführt wurden.

Wenn für Ihr Szenario die Verwendung eines Oracle-Proxybenutzers erforderlich ist, ersetzen Sie die vorherigen Schritte 4 und 5 durch folgende.

  1. Erstellen Sie datenbankweit gültige Anmeldeinformationen zum Herstellen einer Verbindung mit dem Oracle-Server. Geben Sie in der folgenden Anweisung die entsprechenden Anmeldeinformationen des Oracle-Proxybenutzers für Ihren Oracle-Server an.

    CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
    WITH IDENTITY = '<oracle_proxy_user,nvarchar(100),SYSTEM>', SECRET = '<oracle_proxy_user_password,nvarchar(100),manager>';
    
  2. Erstellen Sie eine externe Datenquelle, die auf den Oracle-Server zeigt.

    CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
    WITH (LOCATION = 'oracle://<oracle_server,nvarchar(100)>',
    CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
    CREDENTIAL = [OracleProxyCredential]);
    

Erstellen einer externen Tabelle

Erstellen Sie als Nächstes eine externe Tabelle namens iventory_ora über der Tabelle INVENTORY auf dem Oracle-Server.

CREATE EXTERNAL TABLE [inventory_ora]
    ([inv_date] DECIMAL(10,0) NOT NULL, [inv_item] DECIMAL(10,0) NOT NULL,
    [inv_warehouse] DECIMAL(10,0) NOT NULL, [inv_quantity_on_hand] DECIMAL(10,0))
WITH (DATA_SOURCE=[OracleSalesSrvr],
        LOCATION='<oracle_service_name,nvarchar(30),xe>.<oracle_schema,nvarchar(128),HR>.<oracle_table,nvarchar(128),INVENTORY>');

Hinweis

Tabellen- und Spaltennamen verwenden beim Abfragen von Oracle SQL-Bezeichner in ANSI-Anführungszeichen. Daher wird bei den Namen nach Groß-/Kleinschreibung unterschieden. Es ist wichtig, den Namen in der externen Tabellendefinition so anzugeben, dass er mit der exakten Groß-und Kleinschreibung der Tabellen- und Spaltennamen in den Oracle-Metadaten übereinstimmt.

Abfragen der Daten

Führen Sie die folgende Abfrage aus, um die Daten in der externen Tabelle iventory_ora mit den Tabellen in der lokalen Datenbank Sales zu verknüpfen.

SELECT TOP(100) w.w_warehouse_name, i.inv_item, SUM(i.inv_quantity_on_hand) as total_quantity
  FROM [inventory_ora] as i
  JOIN item as it
    ON it.i_item_sk = i.inv_item
  JOIN warehouse as w
    ON w.w_warehouse_sk = i.inv_warehouse
 WHERE it.i_category = 'Books' and i.inv_item BETWEEN 1 and 18000 --> get items within specific range
 GROUP BY w.w_warehouse_name, i.inv_item;

Bereinigung

Verwenden Sie den folgenden Befehl, um die in diesem Tutorial erstellten Datenbankobjekte zu entfernen.

DROP EXTERNAL TABLE [inventory_ora];
DROP EXTERNAL DATA SOURCE [OracleSalesSrvr] ;
DROP DATABASE SCOPED CREDENTIAL [OracleCredential];

Nächste Schritte

Erfahren Sie, wie Sie Daten im Datenpool einfügen: