Copiare dati da e in Oracle usando Azure Data Factory

SI APPLICA A: Azure Data Factory Azure Synapse Analytics

Questo articolo illustra come usare l'attività di copia in Azure Data Factory copiare dati da e in un database Oracle. Si basa sulla panoramica dell'attività di copia.

Funzionalità supportate

Questo connettore Oracle è supportato per le attività seguenti:

È possibile copiare dati da un database Oracle in qualsiasi archivio dati di sink supportato. È anche possibile copiare dati da qualsiasi archivio di dati di origine supportato in un database Oracle. Per un elenco degli archivi dati supportati come origini o sink dall'attività di copia, vedere la tabella relativa agli archivi dati supportati.

In particolare, questo connettore Oracle supporta:

  • Le versioni seguenti di un database Oracle:
    • Oracle 19c R1 (19.1) e versioni successive
    • Oracle 18c R1 (18.1) e versioni successive
    • Oracle 12c R1 (12.1) e versioni successive
    • Oracle 11g R1 (11.1) e versioni successive
    • Oracle 10g R1 (10.1) e versioni successive
    • Oracle 9i R2 (9.2) e versioni successive
    • Oracle 8i R3 (8.1.7) e versioni successive
    • Oracle Database servizio Cloud Exadata
  • Copia parallela da un'origine Oracle. Per informazioni dettagliate, vedere la sezione Copia parallela da Oracle.

Nota

Il server proxy Oracle non è supportato.

Prerequisiti

Se l'archivio dati si trova all'interno di una rete locale, una rete virtuale di Azure o un cloud privato virtuale di Amazon, è necessario configurare un runtime di integrazione self-hosted per connettersi.

Se l'archivio dati è un servizio dati cloud gestito, è possibile usare il Azure Integration Runtime. Se l'accesso è limitato agli indirizzi IP approvati nelle regole del firewall, è possibile Azure Integration Runtime indirizzi IP consentiti.

È anche possibile usare la funzionalità runtime di integrazione della rete virtuale gestita in Azure Data Fatcory per accedere alla rete locale senza installare e configurare un runtime di integrazione self-hosted.

Per altre informazioni sui meccanismi di sicurezza di rete e sulle opzioni supportate da Data Factory, vedere strategie di accesso ai dati.

Il runtime di integrazione fornisce un driver Oracle incorporato. Non è pertanto necessario installare manualmente un driver quando si copiano dati da e in Oracle.

Introduzione

Per eseguire l'attività di copia con una pipeline, è possibile usare uno degli strumenti o SDK seguenti:

Le sezioni seguenti riportano informazioni dettagliate sulle proprietà usate per definire entità di Data Factory specifiche per il connettore Oracle.

Proprietà del servizio collegato

Il servizio collegato Oracle supporta le proprietà seguenti:

Proprietà Descrizione Obbligatoria
type La proprietà type deve essere impostata su Oracle.
connectionString Specifica le informazioni necessarie per la connessione all'istanza del database Oracle.
È anche possibile inserire una password Azure Key Vault ed estrarre la password configurazione dalla stringa di connessione. Fare riferimento agli esempi seguenti e Archiviare le credenziali in Azure Key Vault informazioni più dettagliate.

Tipo di connessione supportato: è possibile usare l'ID di sicurezza Oracle o il nome del servizio Oracle per identificare il database:
- Se si usa il SID: Host=<host>;Port=<port>;Sid=<sid>;User Id=<username>;Password=<password>;
- Se si usa il nome del servizio: Host=<host>;Port=<port>;ServiceName=<servicename>;User Id=<username>;Password=<password>;
Per le opzioni avanzate di connessione nativa Oracle, è possibile scegliere di aggiungere una voce in TNSNAMES. File ORA nel server Oracle e nel servizio collegato AdF Oracle scegliere di usare il tipo di connessione Nome servizio Oracle e configurare il nome del servizio corrispondente.
connectVia Runtime di integrazione da usare per la connessione all'archivio dati. Per altre informazioni, vedere la sezione Prerequisiti. Se questa proprietà non è specificata, viene usato il tipo Azure Integration Runtime predefinito. No

Suggerimento

Se viene visualizzato l'errore "ORA-01025: PARAMETRO UPI non compreso nell'intervallo" e la versione di Oracle è 8i, aggiungere alla stringa WireProtocolMode=1 di connessione. Quindi riprovare.

Se si dispone di più istanze di Oracle per lo scenario di failover, è possibile creare il servizio collegato Oracle e inserire l'host primario, la porta, il nome utente, la password e così via e aggiungere una nuova " Proprietà di connessione aggiuntive " con il nome della proprietà e il valore come . Non perdere le parentesi quadre e prestare attenzione ai due punti ( ) come AlternateServers (HostName=<secondary host>:PortNumber=<secondary port>:ServiceName=<secondary service name>) : separatore. Ad esempio, il valore seguente dei server alternativi definisce due server di database alternativi per il failover della connessione: (HostName=AccountingOracleServer:PortNumber=1521:SID=Accounting,HostName=255.201.11.24:PortNumber=1522:ServiceName=ABackup.NA.MyCompany) .

Altre proprietà di connessione che è possibile impostare nella stringa di connessione in base al caso specifico:

Proprietà Descrizione Valori consentiti
ArraySize Numero di byte che il connettore può recuperare in una singola rete round trip. Ad esempio, ArraySize=‭10485760‬ .

I valori più grandi aumentano la velocità effettiva riducendo il numero di volte in cui recuperare i dati in rete. I valori più piccoli aumentano il tempo di risposta, in quanto si verifica un ritardo nell'attesa che il server trasmanda i dati.
Intero compreso tra 1 e 4294967296 (4 GB). Il valore predefinito è 60000. Il valore 1 non definisce il numero di byte, ma indica l'allocazione di spazio per una riga di dati.

Per abilitare la crittografia sulla connessione di Oracle, sono disponibili due opzioni:

  • Per usare la crittografia Triple-DES (3DES) e Advanced Encryption Standard (AES), sul lato server Oracle passare a Oracle Advanced Security (OAS) e configurare le impostazioni di crittografia. Per informazioni dettagliate, vedere la documentazione di Oracle. Il connettore Oracle Application Development Framework (ADF) negozia automaticamente il metodo di crittografia per l'uso di quello configurato in OAS quando si stabilisce una connessione a Oracle.

  • Per usare TLS:

    1. Ottenere le informazioni sul certificato TLS/SSL. Ottenere le Distinguished Encoding Rules del certificato con codifica DER (Der) del certificato TLS/SSL e salvare l'output (----- Begin Certificate ... End Certificate -----) come file di testo.

      openssl x509 -inform DER -in [Full Path to the DER Certificate including the name of the DER Certificate] -text
      

      Esempio: Estrarre le informazioni sul certificato da DERcert.cer e quindi salvare l'output in cert.txt.

      openssl x509 -inform DER -in DERcert.cer -text
      Output:
      -----BEGIN CERTIFICATE-----
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      XXXXXXXXX
      -----END CERTIFICATE-----
      
    2. Compilare keystore o truststore . Il comando seguente crea truststore il file, con o senza password, in formato PKCS-12.

      openssl pkcs12 -in [Path to the file created in the previous step] -out [Path and name of TrustStore] -passout pass:[Keystore PWD] -nokeys -export
      

      Esempio: Creare un file PKCS12 truststore denominato MyTrustStoreFile con una password.

      openssl pkcs12 -in cert.txt -out MyTrustStoreFile -passout pass:ThePWD -nokeys -export  
      
    3. Inserire il truststore file nel computer ARI self-hosted. Ad esempio, inserire il file in C:\MyTrustStoreFile.

    4. In Azure Data Factory configurare la stringa di connessione Oracle con EncryptionMethod=1 e il valore TrustStore / TrustStorePassword corrispondente. Ad esempio: Host=<host>;Port=<port>;Sid=<sid>;User Id=<username>;Password=<password>;EncryptionMethod=1;TrustStore=C:\\MyTrustStoreFile;TrustStorePassword=<trust_store_password>.

Esempio:

{
    "name": "OracleLinkedService",
    "properties": {
        "type": "Oracle",
        "typeProperties": {
            "connectionString": "Host=<host>;Port=<port>;Sid=<sid>;User Id=<username>;Password=<password>;"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Esempio: archiviare la password in Azure Key Vault

{
    "name": "OracleLinkedService",
    "properties": {
        "type": "Oracle",
        "typeProperties": {
            "connectionString": "Host=<host>;Port=<port>;Sid=<sid>;User Id=<username>;",
            "password": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Proprietà del set di dati

Questa sezione presenta un elenco delle proprietà supportate dal set di dati Oracle. Per un elenco completo delle sezioni e delle proprietà disponibili per la definizione dei set di dati, vedere Set di dati.

Per copiare dati da e in Oracle, impostare la proprietà type del set di dati su OracleTable . Sono supportate le proprietà seguenti.

Proprietà Descrizione Obbligatoria
type La proprietà type del set di dati deve essere impostata su OracleTable .
schema Nome dello schema. No per l'origine, Sì per il sink
tabella Nome della tabella/vista. No per l'origine, Sì per il sink
tableName Nome della tabella/vista con schema. Questa proprietà è supportata per garantire la compatibilità con le versioni precedenti. Per i nuovi carichi di lavoro, usare schema e table. No per l'origine, Sì per il sink

Esempio:

{
    "name": "OracleDataset",
    "properties":
    {
        "type": "OracleTable",
        "schema": [],
        "typeProperties": {
            "schema": "<schema_name>",
            "table": "<table_name>"
        },
        "linkedServiceName": {
            "referenceName": "<Oracle linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

Proprietà dell'attività di copia

Questa sezione presenta un elenco delle proprietà supportate dall'origine e dal sink Oracle. Per un elenco completo delle sezioni e delle proprietà disponibili per la definizione delle attività, vedere l'articolo sulle pipeline.

Oracle come origine

Suggerimento

Per caricare i dati da Oracle in modo efficiente usando il partizionamento dei dati, vedere Copia parallela da Oracle.

Per copiare dati da Oracle, impostare il tipo di origine nell'attività di copia su OracleSource . Nella sezione source dell'attività di copia sono supportate le proprietà seguenti.

Proprietà Descrizione Obbligatoria
type La proprietà type dell'origine dell'attività di copia deve essere impostata su OracleSource .
oracleReaderQuery Usare la query SQL personalizzata per leggere i dati. Un esempio è "SELECT * FROM MyTable".
Quando si abilita il carico partizionato, è necessario eseguire l'hook dei parametri di partizione predefiniti corrispondenti nella query. Per esempi, vedere la sezione Copia parallela da Oracle.
No
partitionOptions Specifica le opzioni di partizionamento dei dati usate per caricare i dati da Oracle.
I valori consentiti sono: Nessuno (impostazione predefinita), PhysicalPartitionsOfTable e DynamicRange.
Quando un'opzione di partizione è abilitata (ovvero non ), il grado di parallelismo per caricare contemporaneamente i dati da un database Oracle è controllato dall'impostazione None parallelCopies nell'attività di copia.
No
partitionSettings Specifica il gruppo di impostazioni per il partizionamento dei dati.
Applicare quando l'opzione di partizione non è None .
No
partitionNames Elenco di partizioni fisiche da copiare.
Si applica quando l'opzione di partizione è PhysicalPartitionsOfTable. Se si usa una query per recuperare i dati di origine, associare ?AdfTabularPartitionName nella clausola WHERE. Per un esempio, vedere la sezione Copia parallela da Oracle.
No
partitionColumnName Specifica il nome della colonna di origine nel tipo Integer che verrà usata dal partizionamento dell'intervallo per la copia parallela. Se non specificato, la chiave primaria della tabella viene rilevata automaticamente e usata come colonna di partizione.
Si applica quando l'opzione di partizione è DynamicRange. Se si usa una query per recuperare i dati di origine, eseguire l'hook ?AdfRangePartitionColumnName nella clausola WHERE. Per un esempio, vedere la sezione Copia parallela da Oracle.
No
partitionUpperBound Valore massimo della colonna di partizione da cui copiare i dati.
Si applica quando l'opzione di partizione è DynamicRange. Se si usa una query per recuperare i dati di origine, associare ?AdfRangePartitionUpbound nella clausola WHERE. Per un esempio, vedere la sezione Copia parallela da Oracle.
No
partitionLowerBound Valore minimo della colonna di partizione da cui copiare i dati.
Si applica quando l'opzione di partizione è DynamicRange. Se si usa una query per recuperare i dati di origine, associare ?AdfRangePartitionLowbound nella clausola WHERE. Per un esempio, vedere la sezione Copia parallela da Oracle.
No

Esempio: copiare i dati usando una query di base senza partizione

"activities":[
    {
        "name": "CopyFromOracle",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Oracle input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "OracleSource",
                "oracleReaderQuery": "SELECT * FROM MyTable"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Oracle come sink

Per copiare dati in Oracle, impostare il tipo di sink nell'attività di copia su OracleSink . Nella sezione sink dell'attività di copia sono supportate le proprietà seguenti.

Proprietà Descrizione Obbligatoria
type La proprietà type del sink dell'attività di copia deve essere impostata su OracleSink .
writeBatchSize Inserisce dati nella tabella SQL quando la dimensione del buffer raggiunge writeBatchSize .
I valori consentiti sono integer (numero di righe).
No (il valore predefinito è 10.000)
writeBatchTimeout Tempo di attesa per l'operazione di inserimento batch da completare prima del timeout.
I valori consentiti sono un intervallo di tempo. Ad esempio "00:30:00" (30 minuti).
No
preCopyScript Specificare una query SQL per l'esecuzione dell'attività di copia prima di scrivere dati in Oracle in ogni esecuzione. È possibile usare questa proprietà per pulire i dati precaricati. No
maxConcurrentConnections Limite superiore di connessioni simultanee stabilite all'archivio dati durante l'esecuzione dell'attività. Specificare un valore solo quando si desidera limitare le connessioni simultanee. No

Esempio:

"activities":[
    {
        "name": "CopyToOracle",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Oracle output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "OracleSink"
            }
        }
    }
]

Copia parallela da Oracle

Il Data Factory Oracle offre il partizionamento dei dati incorporato per copiare dati da Oracle in parallelo. Le opzioni di partizionamento dei dati sono disponibili nella scheda Origine dell'attività di copia.

Screenshot delle opzioni di partizione

Quando si abilita la copia partizionata, Data Factory esegue query parallele nell'origine Oracle per caricare i dati in base alle partizioni. Il grado di parallelismo è controllato dall'impostazione parallelCopies sull'attività di copia. Se ad esempio si imposta su quattro, Data Factory genera ed esegue contemporaneamente quattro query in base all'opzione di partizione e alle impostazioni specificate e ogni query recupera una parte dei dati dal parallelCopies database Oracle.

È consigliabile abilitare la copia parallela con il partizionamento dei dati, soprattutto quando si caricano grandi quantità di dati dal database Oracle. Di seguito sono riportate le configurazioni consigliate per i diversi scenari: Quando si copiano dati in un archivio dati basato su file, viene riordinata la scrittura in una cartella come più file con solo il nome della cartella specificato, nel qual caso le prestazioni sono migliori rispetto alla scrittura in un singolo file.

Scenario Impostazioni consigliate
Carico completo da tabelle di grandi dimensioni, con partizioni fisiche. Opzione di partizione: partizioni fisiche della tabella.

Durante l'Data Factory rileva automaticamente le partizioni fisiche e copia i dati in base alle partizioni.
Carico completo da tabelle di grandi dimensioni, senza partizioni fisiche, mentre con una colonna integer per il partizionamento dei dati. Opzioni di partizione: Partizione a intervalli dinamici.
Colonna di partizione: Specificare la colonna usata per partizionare i dati. Se non viene specificato, viene usata la colonna chiave primaria.
Caricare una grande quantità di dati usando una query personalizzata, con partizioni fisiche. Opzione di partizione: partizioni fisiche della tabella.
Query: SELECT * FROM <TABLENAME> PARTITION("?AdfTabularPartitionName") WHERE <your_additional_where_clause>.
Nome partizione: specificare i nomi delle partizioni da cui copiare i dati. Se non specificato, Data Factory automaticamente le partizioni fisiche nella tabella specificata nel set di dati Oracle.

Durante l'Data Factory viene sostituito con il nome effettivo della partizione ?AdfTabularPartitionName e inviato a Oracle.
Caricare una grande quantità di dati usando una query personalizzata, senza partizioni fisiche, mentre con una colonna integer per il partizionamento dei dati. Opzioni di partizione: Partizione a intervalli dinamici.
Query: SELECT * FROM <TABLENAME> WHERE ?AdfRangePartitionColumnName <= ?AdfRangePartitionUpbound AND ?AdfRangePartitionColumnName >= ?AdfRangePartitionLowbound AND <your_additional_where_clause>.
Colonna di partizione: Specificare la colonna usata per partizionare i dati. È possibile partizionare la colonna con il tipo di dati Integer.
Limite superiore della partizione e limite inferiore della partizione: specificare se si vuole filtrare in base alla colonna di partizione per recuperare i dati solo tra l'intervallo inferiore e quello superiore.

Durante l'esecuzione, Data Factory sostituisce , e con il nome della colonna e gli intervalli di valori effettivi per ogni partizione ?AdfRangePartitionColumnName e li invia a ?AdfRangePartitionUpbound ?AdfRangePartitionLowbound Oracle.
Ad esempio, se la colonna di partizione "ID" è impostata con il limite inferiore su 1 e il limite superiore su 80, con la copia parallela impostata su 4, Data Factory recupera i dati da 4 partizioni. Gli ID sono rispettivamente compresi tra [1, 20], [21, 40], [41, 60] e [61, 80].

Suggerimento

Quando si copiano dati da una tabella non partizionata, è possibile usare l'opzione di partizione "Intervallo dinamico" per eseguire il partizionamento in base a una colonna integer. Se i dati di origine non hanno questo tipo di colonna, è possibile sfruttare ORA_HASH funzione nella query di origine per generare una colonna e usarla come colonna di partizione.

Esempio: query con partizione fisica

"source": {
    "type": "OracleSource",
    "query": "SELECT * FROM <TABLENAME> PARTITION(\"?AdfTabularPartitionName\") WHERE <your_additional_where_clause>",
    "partitionOption": "PhysicalPartitionsOfTable",
    "partitionSettings": {
        "partitionNames": [
            "<partitionA_name>",
            "<partitionB_name>"
        ]
    }
}

Esempio: query con partizione a intervalli dinamici

"source": {
    "type": "OracleSource",
    "query": "SELECT * FROM <TABLENAME> WHERE ?AdfRangePartitionColumnName <= ?AdfRangePartitionUpbound AND ?AdfRangePartitionColumnName >= ?AdfRangePartitionLowbound AND <your_additional_where_clause>",
    "partitionOption": "DynamicRange",
    "partitionSettings": {
        "partitionColumnName": "<partition_column_name>",
        "partitionUpperBound": "<upper_value_of_partition_column>",
        "partitionLowerBound": "<lower_value_of_partition_column>"
    }
}

Mapping dei tipi di dati per Oracle

Quando si copiano dati da e in Oracle, si applicano i mapping seguenti. Per informazioni su come l'attività di copia esegue il mapping dello schema di origine e del tipo di dati al sink, vedere Mapping dello schema e del tipo di dati.

Tipo di dati Oracle Tipo di dati provvisorio di Data Factory
BFILE Byte[]
BLOB Byte[]
(supportato solo in Oracle 10g e versioni successive)
CHAR string
CLOB Stringa
DATE DataOra
FLOAT Decimal, String (se la precisione > 28)
INTEGER Decimal, String (se la precisione > 28)
LONG Stringa
LONG RAW Byte[]
NCHAR Stringa
NCLOB Stringa
NUMBER (p,s) Decimal, String (se p > 28)
NUMBER senza precisione e scala Double
NVARCHAR2 Stringa
RAW Byte[]
ROWID Stringa
timestamp DataOra
TIMESTAMP WITH LOCAL TIME ZONE Stringa
TIMESTAMP WITH TIME ZONE Stringa
UNSIGNED INTEGER Numero
VARCHAR2 Stringa
XML Stringa

Nota

I tipi di dati INTERVAL YEAR TO MONTH e INTERVAL DAY TO SECOND non sono supportati.

Proprietà dell'attività Lookup

Per altre informazioni sulle proprietà, vedere Attività Lookup.

Passaggi successivi

Per un elenco degli archivi dati supportati come origini e sink dall'attività di copia in Data Factory, vedere gli archivi dati supportati.