Copier des données vers ou à partir d’une instance locale d’Oracle à l’aide d’Azure Data FactoryCopy data to or from Oracle on-premises by using Azure Data Factory

Notes

Cet article s’applique à la version 1 d’Azure Data Factory.This article applies to version 1 of Azure Data Factory. Si vous utilisez la version actuelle du service Azure Data Factory, consultez Connecteur Oracle dans V2.If you're using the current version of the Azure Data Factory service, see Oracle connector in V2.

Cet article explique comment utiliser l’activité de copie dans Azure Data Factory pour déplacer des données vers ou à partir d’une base de données Oracle locale.This article explains how to use Copy Activity in Azure Data Factory to move data to or from an on-premises Oracle database. Il s’appuie sur l’article relatif aux activités de déplacement des données, qui présente une vue d’ensemble du déplacement des données avec l’activité de copie.The article builds on Data movement activities, which presents a general overview of data movement by using Copy Activity.

Scénarios pris en chargeSupported scenarios

Vous pouvez copier des données d’une base de données Oracle vers les magasins de données suivants :You can copy data from an Oracle database to the following data stores:

CatégorieCategory Banque de donnéesData store
AzureAzure stockage d’objets blob AzureAzure Blob storage
Azure Data Lake Storage Gen1Azure Data Lake Storage Gen1
Azure Cosmos DB (API SQL)Azure Cosmos DB (SQL API)
Azure SQL DatabaseAzure SQL Database
Azure SQL Data WarehouseAzure SQL Data Warehouse
Index Recherche AzureAzure Search Index
Stockage Table AzureAzure Table storage
Bases de donnéesDatabases SQL ServerSQL Server
OracleOracle
FichierFile Système de fichiersFile system

Vous pouvez copier des données des magasins de données suivants vers une base de données Oracle :You can copy data from the following data stores to an Oracle database:

CatégorieCategory Banque de donnéesData store
AzureAzure stockage d’objets blob AzureAzure Blob storage
Azure Cosmos DB (API SQL)Azure Cosmos DB (SQL API)
Azure Data Lake Storage Gen1Azure Data Lake Storage Gen1
Azure SQL DatabaseAzure SQL Database
Azure SQL Data WarehouseAzure SQL Data Warehouse
Stockage Table AzureAzure Table storage
Bases de donnéesDatabases Amazon RedshiftAmazon Redshift
DB2DB2
MySQLMySQL
OracleOracle
PostgreSQLPostgreSQL
SAP Business WarehouseSAP Business Warehouse
SAP HANASAP HANA
SQL ServerSQL Server
SybaseSybase
TeradataTeradata
NosqlNoSQL CassandraCassandra
MongoDBMongoDB
FichierFile Amazon S3Amazon S3
Système de fichiersFile system
FTPFTP
HDFSHDFS
SFTPSFTP
AutresOthers HTTP génériqueGeneric HTTP
OData génériqueGeneric OData
ODBC génériqueGeneric ODBC
SalesforceSalesforce
Table web (table HTML)Web table (table from HTML)

PrérequisPrerequisites

Data Factory prend en charge la connexion à des sources Oracle locales à l’aide de la passerelle de gestion des données.Data Factory supports connecting to on-premises Oracle sources by using Data Management Gateway. Pour plus d’informations sur la passerelle de gestion des données, consultez Passerelle de gestion des données.See Data Management Gateway to learn more about Data Management Gateway. Pour obtenir des instructions détaillées sur la configuration de la passerelle dans un pipeline de données en vue de déplacer des données, consultez l’article Déplacer les données d’une source locale vers le cloud.For step-by-step instructions on how to set up the gateway in a data pipeline to move data, see Move data from on-premises to cloud.

Une passerelle est nécessaire, même si la base de données Oracle est hébergée sur une machine virtuelle Azure IaaS.The gateway is required even if the Oracle is hosted in an Azure infrastructure as a service (IaaS) VM. Vous pouvez installer la passerelle sur la même machine virtuelle IaaS que le magasin de données, ou sur une autre machine virtuelle, pourvu que la passerelle puisse se connecter à la base de données.You can install the gateway on the same IaaS VM as the data store or on a different VM, as long as the gateway can connect to the database.

Notes

Pour obtenir des conseils sur la résolution des problèmes de connexion ou de passerelle, consultez Résolution des problèmes de passerelle.For tips on troubleshooting issues that are related to connection and the gateway, see Troubleshoot gateway issues.

Versions prises en charge et installationSupported versions and installation

Ce connecteur Oracle prend en charge deux versions de pilotes :This Oracle connector support two versions of drivers:

  • Pilote Microsoft pour Oracle (recommandé)  : À compter de la version 2.7 de la passerelle de gestion des données, le pilote Microsoft pour Oracle est installé automatiquement avec la passerelle.Microsoft driver for Oracle (recommended): Beginning in Data Management Gateway version 2.7, a Microsoft driver for Oracle is automatically installed with the gateway. Vous n’avez pas besoin d’installer ou de mettre à jour le pilote pour établir une connectivité à Oracle.You don't need to install or update the driver to establish connectivity to Oracle. Avec ce pilote, vous pouvez également constater de meilleures performances de copie.You can also experience better copy performance by using this driver. Voici les versions prises en charge des bases de données Oracle :These versions of Oracle databases are supported:

    • Oracle 12c R1 (12.1)Oracle 12c R1 (12.1)

    • Oracle 11g R1, R2 (11.1, 11.2)Oracle 11g R1, R2 (11.1, 11.2)

    • Oracle 10g R1, R2 (10.1, 10.2)Oracle 10g R1, R2 (10.1, 10.2)

    • Oracle 9i R1, R2 (9.0.1, 9.2)Oracle 9i R1, R2 (9.0.1, 9.2)

    • Oracle 8i R3 (8.1.7)Oracle 8i R3 (8.1.7)

      Notes

      Le serveur proxy Oracle n’est pas pris en charge.Oracle proxy server isn't supported.

      Important

      Le pilote Microsoft pour Oracle prend uniquement en charge la copie de données à partir d’Oracle.Currently, the Microsoft driver for Oracle supports only copying data from Oracle. Le pilote ne prend pas en charge l’écriture de données dans Oracle.The driver doesn't support writing to Oracle. Ce pilote n’est pas pris en charge par la fonctionnalité de connexion de test sous l’onglet Diagnostics de la passerelle de gestion des données.The test connection capability on the Data Management Gateway Diagnostics tab doesn't support this driver. Cependant, vous avez la possibilité de valider la connectivité à l’aide de l’Assistant Copie.Alternatively, you can use the Copy wizard to validate connectivity.

  • Fournisseur de données Oracle pour .NET : Vous pouvez utiliser le fournisseur de données Oracle pour copier des données vers ou à partir d’Oracle.Oracle Data Provider for .NET: You can use Oracle Data Provider to copy data from or to Oracle. Ce composant est inclus dans Oracle Data Access Components for Windows.This component is included in Oracle Data Access Components for Windows. Installez la version appropriée (32 ou 64 bits) sur l’ordinateur où est installée la passerelle.Install the relevant version (32-bit or 64-bit) on the machine where the gateway is installed. Le Fournisseur de données Oracle pour .NET 12.1 peut accéder à Oracle Database 10g Release 2 ou versions ultérieures.Oracle Data Provider .NET 12.1 can access Oracle Database 10g Release 2 and later versions.

    Si vous sélectionnez XCopy Installation (Installation de XCopy), effectuez les étapes décrites dans le fichier readme.htm.If you select XCopy Installation, complete the steps that are described in the readme.htm file. Nous vous recommandons de sélectionner le programme d’installation qui comprend une interface utilisateur (et non le programme d’installation XCopy).We recommend selecting the installer that has the UI (not the XCopy installer).

    Après avoir installé le fournisseur, redémarrez le service hôte de la passerelle de gestion des données sur votre ordinateur, à l’aide de l’applet Services ou du Gestionnaire de configuration de la passerelle de gestion des données.After you install the provider, restart the Data Management Gateway host service on your machine by using the Services applet or Data Management Gateway Configuration Manager.

Si vous utilisez l’Assistant Copie pour créer le pipeline de copie, le type de pilote sera déterminé automatiquement.If you use the Copy wizard to author the copy pipeline, the driver type is autodetermined. Le pilote Microsoft est utilisé par défaut, sauf si votre version de la passerelle est antérieure à la version 2.7, ou si vous sélectionnez Oracle en tant que récepteur.The Microsoft driver is used by default, unless your gateway version is earlier than version 2.7 or you select Oracle as the sink.

Prise en mainGet started

Vous pouvez créer un pipeline ayant une activité de copie.You can create a pipeline that has a copy activity. Le pipeline déplace les données vers ou à partir d’une base de données Oracle locale, à l’aide de différents outils ou API.The pipeline moves data to or from an on-premises Oracle database by using different tools or APIs.

Le moyen le plus simple de créer un pipeline consiste à utiliser l’Assistant de copie.The easiest way to create a pipeline is to use the Copy wizard. Consultez le tutoriel : Créer un pipeline à l’aide de l’Assistant Copie de données pour obtenir une procédure pas à pas rapide sur la création d’un pipeline à l’aide de l’Assistant Copie de données.See Tutorial: Create a pipeline by using the Copy wizard for a quick walkthrough on creating a pipeline by using the Copy Data wizard.

Vous pouvez également utiliser un des outils suivants pour créer un pipeline : Visual Studio, Azure PowerShell, un modèle Azure Resource Manager, l’API .NET ou l’API REST.You can also use one of the following tools to create a pipeline: Visual Studio, Azure PowerShell, an Azure Resource Manager template, the .NET API, or the REST API. Pour obtenir des instructions détaillées sur la création d’un pipeline ayant une activité de copie, consultez le Tutoriel sur l’activité de copie.See the Copy Activity tutorial for step-by-step instructions on how to create a pipeline that has a copy activity.

Que vous utilisiez des outils ou des API, effectuez les étapes suivantes pour créer un pipeline qui déplace les données d’un magasin de données source vers un magasin de données récepteur :Whether you use the tools or APIs, complete the following steps to create a pipeline that moves data from a source data store to a sink data store:

  1. Création d'une fabrique de données.Create a data factory. Une fabrique de données peut contenir un ou plusieurs pipelines.A data factory can contain one or more pipelines.
  2. Création de services liés pour lier les magasins de données d’entrée et de sortie à votre fabrique de données.Create linked services to link input and output data stores to your data factory. Par exemple, si vous copiez des données d’une base de données Oracle vers le Stockage Blob Azure, créez deux services liés pour lier votre base de données Oracle et votre compte de stockage Azure à votre fabrique de données.For example, if you are copying data from an Oracle database to Azure Blob storage, create two linked services to link your Oracle database and Azure storage account to your data factory. Pour les propriétés du service lié qui sont propres à Oracle, consultez Propriétés du service lié.For linked service properties that are specific to Oracle, see Linked service properties.
  3. Création de jeux de données pour représenter les données d’entrée et de sortie de l’opération de copie.Create datasets to represent input and output data for the copy operation. Dans l’exemple de l’étape précédente, vous créez un jeu de données pour spécifier la table de votre base de données Oracle qui doit contenir les données d’entrée.In the example in the preceding step, you create a dataset to specify the table in your Oracle database that contains the input data. Créez un autre jeu de données pour spécifier le conteneur d’objets blob et le dossier qui contient les données copiées à partir de la base de données Oracle.You create another dataset to specify the blob container and the folder that holds the data copied from the Oracle database. Pour plus d’informations sur les propriétés de jeu de données qui sont propres à Oracle, consultez Propriétés du jeu de données.For dataset properties that are specific to Oracle, see Dataset properties.
  4. Créez un pipeline comprenant une activité de copie qui utilise un jeu de données en tant qu’entrée et un jeu de données en tant que sortie.Create a pipeline that has a copy activity that takes a dataset as an input and a dataset as an output. Dans l’exemple précédent, vous utilisez OracleSource comme source et BlobSink comme récepteur pour l’activité de copie.In the preceding example, you use OracleSource as a source and BlobSink as a sink for the copy activity. De la même façon, si vous copiez des données du Stockage Blob Azure vers une base de données Oracle, vous devez utiliser BlobSource et OracleSink dans l’activité de copie.Similarly, if you are copying from Azure Blob storage to an Oracle database, you use BlobSource and OracleSink in the copy activity. Pour connaître les propriétés d’activité de copie qui sont propres à une base de données Oracle, consultez Propriétés de l’activité de copie.For Copy Activity properties that are specific to an Oracle database, see Copy Activity properties. Pour plus d’informations sur l’utilisation d’un magasin de données comme source ou comme récepteur, sélectionnez le lien de la section précédente correspondant à votre magasin de données.For details about how to use a data store as a source or sink, select the link for your data store in the preceding section.

Lorsque vous utilisez l’Assistant, les définitions JSON de ces entités Data Factory (services liés, jeux de données et pipeline) sont automatiquement créées.When you use the wizard, JSON definitions for these Data Factory entities are automatically created for you: linked services, datasets, and the pipeline. Lorsque vous utilisez les outils ou API (à l’exception de l’API .NET), vous devez définir ces entités Data Factory à l’aide du format JSON.When you use tools or APIs (except for the .NET API), you define these Data Factory entities by using the JSON format. Pour obtenir des exemples comportant des définitions JSON d’entités Data Factory utilisées dans le but de copier des données vers ou à partir d’une base de données Oracle locale, consultez Exemples JSON.For samples that have JSON definitions for Data Factory entities that you use to copy data to or from an on-premises Oracle database, see JSON examples.

Les sections suivantes fournissent des informations sur les propriétés JSON qui sont utilisées pour définir les entités Data Factory.The following sections provide details about JSON properties that you use to define Data Factory entities.

Propriétés du service liéLinked service properties

Le tableau suivant décrit les éléments JSON qui sont propres au service lié Oracle.The following table describes JSON elements that are specific to the Oracle linked service:

PropriétéProperty DescriptionDescription ObligatoireRequired
Typetype La propriété type doit être définie sur OnPremisesOracle.The type property must be set to OnPremisesOracle. OUIYes
driverTypedriverType Spécifiez le pilote à utiliser pour copier les données vers ou à partir de la base de données Oracle.Specify which driver to use to copy data from or to an Oracle database. Les valeurs autorisées sont Microsoft ou ODP (par défaut).Allowed values are Microsoft and ODP (default). Pour plus d’informations sur le pilote, consultez Version prise en charge et installation.See Supported version and installation for driver details. NonNo
connectionStringconnectionString Spécifiez les informations nécessaires pour se connecter à l’instance de base de données Oracle pour la propriété connectionString.Specify the information that's needed to connect to the Oracle database instance for the connectionString property. OUIYes
gatewayNamegatewayName Nom de la passerelle utilisée pour se connecter au serveur Oracle localThe name of the gateway that's used to connect to the on-premises Oracle server. OUIYes

Exemple : Utilisation du pilote MicrosoftExample: Using the Microsoft driver

Conseil

Si vous voyez l’erreur « ORA-01025: UPI parameter out of range » et que votre version d’Oracle est 8i, ajoutez WireProtocolMode=1 à votre chaîne de connexion, puis réessayez :If you see an error that says "ORA-01025: UPI parameter out of range" and your Oracle is version 8i, add WireProtocolMode=1 to your connection string and try again:

{
    "name": "OnPremisesOracleLinkedService",
    "properties": {
        "type": "OnPremisesOracle",
        "typeProperties": {
            "driverType": "Microsoft",
            "connectionString":"Host=<host>;Port=<port>;Sid=<service ID>;User Id=<user name>;Password=<password>;",
            "gatewayName": "<gateway name>"
        }
    }
}

Exemple : Utilisation du pilote ODPExample: Using the ODP driver

Pour plus d’informations sur les formats autorisés, consultez Fournisseur de données Oracle pour .NET ODP.To learn about allowed formats, see Oracle data provider for .NET ODP.

{
    "name": "OnPremisesOracleLinkedService",
    "properties": {
        "type": "OnPremisesOracle",
        "typeProperties": {
            "connectionString": "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<host name>)(PORT=<port number>))(CONNECT_DATA=(SERVICE_NAME=<service ID>))); User Id=<user name>;Password=<password>;",
            "gatewayName": "<gateway name>"
        }
    }
}

Propriétés du jeu de donnéesDataset properties

Pour obtenir une liste complète des sections et propriétés disponibles pour la définition de jeux de données, consultez l’article Création de jeux de données.For a full list of sections and properties that are available for defining datasets, see Creating datasets.

Les sections d’un fichier JSON de jeu de données, comme la structure, la disponibilité et la stratégie, sont similaires pour tous les types de jeux de données (par exemple, Oracle, Stockage Blob Azure et Table de stockage Azure).The sections of a dataset JSON file, such as structure, availability, and policy, are similar for all dataset types (for example, for Oracle, Azure Blob storage, and Azure Table storage).

La section typeProperties est différente pour chaque type de jeu de données et fournit des informations sur l’emplacement des données dans le magasin de données.The typeProperties section is different for each type of dataset and provides information about the location of the data in the data store. La section typeProperties du jeu de données de type OracleTable a les propriétés suivantes :The typeProperties section for the dataset of type OracleTable has the following properties:

PropriétéProperty DescriptionDescription ObligatoireRequired
tableNametableName Nom de la table dans la base de données Oracle à laquelle le service lié fait référence.The name of the table in the Oracle database that the linked service refers to. Non (si oracleReaderQuery ou OracleSource est spécifié)No (if oracleReaderQuery or OracleSource is specified)

Propriétés de l’activité de copieCopy Activity properties

Pour obtenir la liste complète des sections et des propriétés permettant de définir des activités, consultez Création de pipelines.For a full list of sections and properties that are available for defining activities, see Creating pipelines.

Les propriétés comme le nom, la description, les tables d’entrée et de sortie, et la stratégie, sont disponibles pour tous les types d’activités.Properties like name, description, input and output tables, and policy are available for all types of activities.

Notes

L’activité de copie accepte uniquement une entrée et produit une seule sortie.Copy Activity takes only one input and produces only one output.

Les propriétés disponibles dans la section typeProperties de l’activité varient pour chaque type d’activité.Properties that are available in the typeProperties section of the activity vary with each activity type. Les propriétés de l’activité de copie dépendent du type de la source et du récepteur.Copy Activity properties vary depending on the type of source and sink.

OracleSourceOracleSource

Dans le cas d’une activité de copie, quand la source est de type OracleSource, les propriétés suivantes sont disponibles dans la section typeProperties :In Copy Activity, when the source is the OracleSource type, the following properties are available in the typeProperties section:

PropriétéProperty DescriptionDescription Valeurs autoriséesAllowed values ObligatoireRequired
oracleReaderQueryoracleReaderQuery Utilise la requête personnalisée pour lire des données.Use the custom query to read data. Chaîne de requête SQL.A SQL query string. Par exemple : « select * from MyTable ».For example, "select * from MyTable".

Si non spécifié, l’instruction SQL est exécutée : « select * from MyTable ».If not specified, this SQL statement is executed: "select * from MyTable"
NonNo
(si tableName de dataset est spécifié)(if tableName of dataset is specified)

OracleSinkOracleSink

OracleSink prend en charge les propriétés suivantes :OracleSink supports the following properties:

PropriétéProperty DescriptionDescription Valeurs autoriséesAllowed values ObligatoireRequired
writeBatchTimeoutwriteBatchTimeout Temps d’attente avant expiration de l’opération d’insertion de lot.The wait time for the batch insert operation to complete before it times out. timespantimespan

Exemple : 00:30:00 (30 minutes)Example: 00:30:00 (30 minutes)
NonNo
writeBatchSizewriteBatchSize Insère des données dans la table SQL quand la taille de la mémoire tampon atteint la valeur de writeBatchSize.Inserts data into the SQL table when the buffer size reaches the value of writeBatchSize. Nombre entier (nombre de lignes)Integer (number of rows) Non (valeur par défaut : 100)No (default: 100)
sqlWriterCleanupScriptsqlWriterCleanupScript Spécifie une requête pour exécuter l’activité de copie afin que les données d’un segment spécifique soient nettoyées.Specifies a query for Copy Activity to execute so that the data of a specific slice is cleaned up. Une instruction de requête.A query statement. NonNo
sliceIdentifierColumnNamesliceIdentifierColumnName Spécifie le nom de la colonne qui doit être remplie avec un identificateur de segment généré automatiquement pour l’activité de copie.Specifies the column name for Copy Activity to fill with an autogenerated slice identifier. La valeur de sliceIdentifierColumnName est utilisée pour nettoyer les données d’un segment quand celui-ci est réexécuté.The value for sliceIdentifierColumnName is used to clean up data of a specific slice when rerun. Nom d’une colonne avec le type de données binary(32) .The column name of a column that has data type of binary(32). NonNo

Exemples JSON pour copier des données vers et à partir de la base de données OracleJSON examples for copying data to and from the Oracle database

Les exemples suivants présentent des exemples de définitions JSON que vous pouvez utiliser pour créer un pipeline à l’aide de Visual Studio ou d’Azure PowerShell.The following examples provide sample JSON definitions that you can use to create a pipeline by using Visual Studio or Azure PowerShell. Ils indiquent comment copier des données vers ou à partir d’une base de données Oracle ou du Stockage Blob Azure.The examples show how to copy data from or to an Oracle database and to or from Azure Blob storage. Toutefois, il est possible de copier des données dans l’un des récepteurs répertoriés dans Magasins et formats de données pris en charge, à l’aide de l’activité de copie dans Azure Data Factory.However, data can be copied to any of the sinks listed in Supported data stores and formats by using Copy Activity in Azure Data Factory.

Exemple : Copie de données d’Oracle vers Stockage Blob AzureExample: Copy data from Oracle to Azure Blob storage

L’exemple contient les entités Data Factory suivantes :The sample has the following Data Factory entities:

L’exemple copie toutes les heures les données d’une table d’une base de données Oracle locale vers un objet blob.The sample copies data from a table in an on-premises Oracle database to a blob hourly. Pour plus d’informations sur les propriétés qui sont utilisées dans les exemples, consultez les sections qui suivent chaque exemple.For more information about various properties that are used in the sample, see the sections that follow the samples.

Service lié OracleOracle linked service

{
    "name": "OnPremisesOracleLinkedService",
    "properties": {
        "type": "OnPremisesOracle",
        "typeProperties": {
            "driverType": "Microsoft",
            "connectionString":"Host=<host>;Port=<port>;Sid=<service ID>;User Id=<username>;Password=<password>;",
            "gatewayName": "<gateway name>"
        }
    }
}

Service lié Azure Blob StorageAzure Blob storage linked service

{
    "name": "StorageLinkedService",
    "properties": {
        "type": "AzureStorage",
        "typeProperties": {
            "connectionString": "DefaultEndpointsProtocol=https;AccountName=<account name>;AccountKey=<account key>"
        }
    }
}

Jeu de données d’entrée OracleOracle input dataset

L’exemple suppose que vous avez créé une table nommée MyTable dans Oracle.The sample assumes that you have created a table named MyTable in Oracle. Il contient une colonne appelée timestampcolumn pour les données de série chronologique.It contains a column called timestampcolumn for time series data.

Définition de external : la valeur true informe le service Data Factory qu’il s’agit d’un jeu de données qui est externe à Data Factory, et non produit par une activité dans Data Factory.Setting external: true informs the Data Factory service that the dataset is external to the data factory and that the dataset isn't produced by an activity in the data factory.

{
    "name": "OracleInput",
    "properties": {
        "type": "OracleTable",
        "linkedServiceName": "OnPremisesOracleLinkedService",
        "typeProperties": {
            "tableName": "MyTable"
        },
        "external": true,
        "availability": {
            "offset": "01:00:00",
            "interval": "1",
            "anchorDateTime": "2014-02-27T12:00:00",
            "frequency": "Hour"
        },
        "policy": {
            "externalData": {
                "retryInterval": "00:01:00",
                "retryTimeout": "00:10:00",
                "maximumRetry": 3
            }
        }
    }
}

Jeu de données de sortie d'objet Blob AzureAzure Blob output dataset

Les données sont écrites dans un nouvel objet blob toutes les heures (fréquence : heure, intervalle : 1).Data is written to a new blob every hour (frequency: hour, interval: 1). Le chemin du dossier et le nom de fichier de l’objet blob sont évalués dynamiquement en fonction de l’heure de début du segment en cours de traitement.The folder path and file name for the blob are dynamically evaluated based on the start time of the slice that's being processed. Le chemin du dossier utilise l’année, le mois, le jour et l’heure de début.The folder path uses the year, month, day, and hour part of the start time.

{
    "name": "AzureBlobOutput",
    "properties": {
        "type": "AzureBlob",
        "linkedServiceName": "StorageLinkedService",
        "typeProperties": {
            "folderPath": "mycontainer/myfolder/yearno={Year}/monthno={Month}/dayno={Day}/hourno={Hour}",
            "partitionedBy": [
                {
                    "name": "Year",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "yyyy"
                    }
                },
                {
                    "name": "Month",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "MM"
                    }
                },
                {
                    "name": "Day",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "dd"
                    }
                },
                {
                    "name": "Hour",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "HH"
                    }
                }
            ],
            "format": {
                "type": "TextFormat",
                "columnDelimiter": "\t",
                "rowDelimiter": "\n"
            }
        },
        "availability": {
            "frequency": "Hour",
            "interval": 1
        }
    }
}

Pipeline avec une activité de copiePipeline with a copy activity

Le pipeline contient une activité de copie qui est configurée pour utiliser les jeux de données d’entrée et de sortie, et qui est planifiée pour s’exécuter toutes les heures.The pipeline contains a copy activity that's configured to use the input and output datasets and scheduled to run hourly. Dans la définition du pipeline JSON, le type source est défini sur OracleSource et le type sink est défini sur BlobSink.In the pipeline JSON definition, the source type is set to OracleSource and the sink type is set to BlobSink. La requête SQL spécifiée pour la propriété oracleReaderQuery sélectionne les données de la dernière heure qui sont à copier.The SQL query that you specify by using the oracleReaderQuery property selects the data in the past hour to copy.

{
    "name":"SamplePipeline",
    "properties":{
        "start":"2014-06-01T18:00:00",
        "end":"2014-06-01T19:00:00",
        "description":"pipeline for a copy activity",
        "activities":[
            {
                "name": "OracletoBlob",
                "description": "copy activity",
                "type": "Copy",
                "inputs": [
                    {
                        "name": " OracleInput"
                    }
                ],
                "outputs": [
                    {
                        "name": "AzureBlobOutput"
                    }
                ],
                "typeProperties": {
                    "source": {
                        "type": "OracleSource",
                        "oracleReaderQuery": "$$Text.Format('select * from MyTable where timestampcolumn >= \\'{0:yyyy-MM-dd HH:mm}\\' AND timestampcolumn < \\'{1:yyyy-MM-dd HH:mm}\\'', WindowStart, WindowEnd)"
                    },
                    "sink": {
                        "type": "BlobSink"
                    }
                },
                "scheduler": {
                    "frequency": "Hour",
                    "interval": 1
                },
                "policy": {
                    "concurrency": 1,
                    "executionPriorityOrder": "OldestFirst",
                    "retry": 0,
                    "timeout": "01:00:00"
                }
            }
        ]
    }
}

Exemple : Copie de données de Stockage Blob Azure vers OracleExample: Copy data from Azure Blob storage to Oracle

Cet exemple indique comment copier des données d’un compte de stockage d’objets blob Azure vers une base de données Oracle locale.This sample shows how to copy data from an Azure Blob storage account to an on-premises Oracle database. Toutefois, vous pouvez copier les données directement dans l’une des sources répertoriées dans Magasins et formats de données pris en charge, à l’aide de l’activité de copie dans Azure Data Factory.However, you can copy data directly from any of the sources listed in Supported data stores and formats by using Copy Activity in Azure Data Factory.

L’exemple contient les entités Data Factory suivantes :The sample has the following Data Factory entities:

L’exemple copie chaque heure les données d’une objet blob vers une table d’une base de données Oracle locale.The sample copies data from a blob to a table in an on-premises Oracle database every hour. Pour plus d’informations sur les propriétés qui sont utilisées dans les exemples, consultez les sections qui suivent chaque exemple.For more information about various properties that are used in the sample, see the sections that follow the samples.

Service lié OracleOracle linked service

{
    "name": "OnPremisesOracleLinkedService",
    "properties": {
        "type": "OnPremisesOracle",
        "typeProperties": {
            "connectionString": "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<host name>)(PORT=<port number>))(CONNECT_DATA=(SERVICE_NAME=<service ID>)));
            User Id=<username>;Password=<password>;",
            "gatewayName": "<gateway name>"
        }
    }
}

Service lié Azure Blob StorageAzure Blob storage linked service

{
    "name": "StorageLinkedService",
    "properties": {
        "type": "AzureStorage",
        "typeProperties": {
            "connectionString": "DefaultEndpointsProtocol=https;AccountName=<account name>;AccountKey=<account key>"
        }
    }
}

Jeu de données d'entrée d'objet Blob AzureAzure blob input dataset

Les données sont récupérées depuis un nouvel objet blob toutes les heures (fréquence : heure, intervalle : 1).Data is picked up from a new blob every hour (frequency: hour, interval: 1). Le chemin du dossier et le nom de fichier de l’objet blob sont évalués dynamiquement en fonction de l’heure de début du segment en cours de traitement.The folder path and file name for the blob are dynamically evaluated based on the start time of the slice that's being processed. Le chemin du dossier utilise l’année, le mois et le jour de début.The folder path uses the year, month, and day part of the start time. Le nom de fichier utilise la partie Heure du début.The file name uses the hour part of the start time. Définition de external : la valeur true informe le service Data Factory qu’il s’agit d’un jeu de données qui est externe à Data Factory, et non produit par une activité dans Data Factory.The setting external: true informs the Data Factory service that this table is external to the data factory and is not produced by an activity in the data factory.

{
    "name": "AzureBlobInput",
    "properties": {
        "type": "AzureBlob",
        "linkedServiceName": "StorageLinkedService",
        "typeProperties": {
            "folderPath": "mycontainer/myfolder/yearno={Year}/monthno={Month}/dayno={Day}",
            "partitionedBy": [
                {
                    "name": "Year",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "yyyy"
                    }
                },
                {
                    "name": "Month",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "MM"
                    }
                },
                {
                    "name": "Day",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "dd"
                    }
                }
            ],
            "format": {
                "type": "TextFormat",
                "columnDelimiter": ",",
                "rowDelimiter": "\n"
            }
        },
        "external": true,
        "availability": {
            "frequency": "Day",
            "interval": 1
        },
        "policy": {
            "externalData": {
                "retryInterval": "00:01:00",
                "retryTimeout": "00:10:00",
                "maximumRetry": 3
            }
        }
    }
}

Jeu de données de sortie OracleOracle output dataset

L’exemple suppose que vous avez créé une table nommée MyTable dans Oracle.The sample assumes you have created a table named MyTable in Oracle. Créez la table dans Oracle avec le nombre de colonnes que le fichier CSV d’objets blob doit contenir.Create the table in Oracle with the same number of columns that you expect the blob CSV file to contain. De nouvelles lignes sont ajoutées à la table toutes les heures.New rows are added to the table every hour.

{
    "name": "OracleOutput",
    "properties": {
        "type": "OracleTable",
        "linkedServiceName": "OnPremisesOracleLinkedService",
        "typeProperties": {
            "tableName": "MyTable"
        },
        "availability": {
            "frequency": "Day",
            "interval": "1"
        }
    }
}

Pipeline avec une activité de copiePipeline with a copy activity

Le pipeline contient une activité de copie qui est configurée pour utiliser les jeux de données d’entrée et de sortie, et qui est planifiée pour s’exécuter toutes les heures.The pipeline contains a copy activity that's configured to use the input and output datasets and scheduled to run every hour. Dans la définition du pipeline JSON, le type source est défini sur BlobSource et le type sink est défini sur OracleSink.In the pipeline JSON definition, the source type is set to BlobSource and the sink type is set to OracleSink.

{
    "name":"SamplePipeline",
    "properties":{
        "start":"2014-06-01T18:00:00",
        "end":"2014-06-05T19:00:00",
        "description":"pipeline with a copy activity",
        "activities":[
            {
                "name": "AzureBlobtoOracle",
                "description": "Copy Activity",
                "type": "Copy",
                "inputs": [
                    {
                        "name": "AzureBlobInput"
                    }
                ],
                "outputs": [
                    {
                        "name": "OracleOutput"
                    }
                ],
                "typeProperties": {
                    "source": {
                        "type": "BlobSource"
                    },
                    "sink": {
                        "type": "OracleSink"
                    }
                },
                "scheduler": {
                    "frequency": "Day",
                    "interval": 1
                },
                "policy": {
                    "concurrency": 1,
                    "executionPriorityOrder": "OldestFirst",
                    "retry": 0,
                    "timeout": "01:00:00"
                }
            }
        ]
    }
}

Conseils de dépannageTroubleshooting tips

Problème 1 : Fournisseur de données .NET FrameworkProblem 1: .NET Framework Data Provider

Message d’erreurError message

Copy activity met invalid parameters: 'UnknownParameterName', Detailed message: Unable to find the requested .NET Framework Data Provider. It may not be installed.

Causes possiblesPossible causes

  • Le fournisseur de données .NET Framework pour Oracle n’a pas été installé.The .NET Framework Data Provider for Oracle wasn't installed.
  • Le fournisseur de données .NET Framework pour Oracle a été installé pour .NET Framework 2.0 et est introuvable dans les dossiers de .NET Framework 4.0.The .NET Framework Data Provider for Oracle was installed to .NET Framework 2.0 and isn't found in the .NET Framework 4.0 folders.

Résolution :Resolution

  • Si vous n’avez pas installé le fournisseur .NET pour Oracle, installez-le, puis réessayez.If you haven't installed the .NET Provider for Oracle, install it, and then retry the scenario.
  • Si vous obtenez le message d’erreur, même après l’installation du fournisseur, effectuez les étapes suivantes :If you see the error message even after you install the provider, complete the following steps:
    1. Ouvrez le fichier machine.config de .NET 2.0 dans le dossier : <disque système>:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config.Open the machine config file for .NET 2.0 from the folder <system disk>:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config.
    2. Recherchez le Fournisseur de données Oracle pour .NET.Search for Oracle Data Provider for .NET. Vous devez trouver une entrée comme celle de l’exemple suivant sous system.data > DbProviderFactories : <add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />You should be able to find an entry as shown in the following sample under system.data > DbProviderFactories: <add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
  • Copiez cette entrée dans le fichier machine.config qui est situé dans le dossier .NET 4.0 suivant : <disque système>:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config. Ensuite, remplacez la version par 4.xxx.x.x.Copy this entry to the machine.config file in the following .NET 4.0 folder: <system disk>:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config. Then, change the version to 4.xxx.x.x.
  • Installez <Chemin d’installation d’ODP.NET>\11.2.0\client_1\odp.net\bin\4\Oracle.DataAccess.dll dans le Global Assembly Cache (GAC) en exécutant gacutil /i [chemin du fournisseur] .Install <ODP.NET Installed Path>\11.2.0\client_1\odp.net\bin\4\Oracle.DataAccess.dll in the global assembly cache (GAC) by running gacutil /i [provider path].

Problème 2 : Mise en forme de la date et de l’heureProblem 2: Date/time formatting

Message d’erreurError message

Message=Operation failed in Oracle Database with the following error: 'ORA-01861: literal does not match format string'.,Source=,''Type=Oracle.DataAccess.Client.OracleException,Message=ORA-01861: literal does not match format string,Source=Oracle Data Provider for .NET,'.

Résolution :Resolution

Vous devez ajuster la chaîne de requête en fonction de la configuration des dates dans votre base de données Oracle.You might need to adjust the query string in your copy activity based on how dates are configured in your Oracle database. Voici un exemple (utilisant la fonction to_date) :Here's an example (using the to_date function):

"oracleReaderQuery": "$$Text.Format('select * from MyTable where timestampcolumn >= to_date(\\'{0:MM-dd-yyyy HH:mm}\\',\\'MM/DD/YYYY HH24:MI\\') AND timestampcolumn < to_date(\\'{1:MM-dd-yyyy HH:mm}\\',\\'MM/DD/YYYY HH24:MI\\') ', WindowStart, WindowEnd)"

Mappage de type pour OracleType mapping for Oracle

Comme mentionné dans Activités de déplacement de données, l’activité de copie convertit automatiquement les types source en types récepteur à l’aide de l’approche en deux étapes suivante :As mentioned in Data movement activities, Copy Activity performs automatic type conversions from source types to sink types by using the following two-step approach:

  1. Conversion de types sources natifs en types .NETConvert from native source types to the .NET type.
  2. Conversion d’un type .NET en type récepteur natifConvert from the .NET type to the native sink type.

Quand vous déplacez des données à partir d’Oracle, les mappages suivants sont utilisés pour convertir le type de données Oracle en type .NET, et vice versa :When you move data from Oracle, the following mappings are used from the Oracle data type to the .NET type and vice versa:

Type de données OracleOracle data type Type de données .NET Framework..NET Framework data type
BFILEBFILE Byte[]Byte[]
BLOBBLOB Byte[]Byte[]
(uniquement pris en charge sur Oracle 10g et versions ultérieures lorsque vous utilisez le pilote Microsoft)(only supported on Oracle 10g and later versions when you use a Microsoft driver)
CHARCHAR ChaîneString
CLOBCLOB ChaîneString
DATEDATE DatetimeDateTime
FLOATFLOAT Décimale, chaîne (si précision > 28)Decimal, String (if precision > 28)
INTEGERINTEGER Décimale, chaîne (si précision > 28)Decimal, String (if precision > 28)
INTERVAL YEAR TO MONTHINTERVAL YEAR TO MONTH Int32Int32
INTERVAL DAY TO SECONDINTERVAL DAY TO SECOND intervalle de tempsTimeSpan
LONGLONG ChaîneString
LONG RAWLONG RAW Byte[]Byte[]
NCHARNCHAR ChaîneString
NCLOBNCLOB ChaîneString
NUMBERNUMBER Décimale, chaîne (si précision > 28)Decimal, String (if precision > 28)
NVARCHAR2NVARCHAR2 ChaîneString
RAWRAW Byte[]Byte[]
ROWIDROWID ChaîneString
TIMESTAMPTIMESTAMP DatetimeDateTime
TIMESTAMP WITH LOCAL TIME ZONETIMESTAMP WITH LOCAL TIME ZONE DatetimeDateTime
TIMESTAMP WITH TIME ZONETIMESTAMP WITH TIME ZONE DatetimeDateTime
UNSIGNED INTEGERUNSIGNED INTEGER NUMBERNumber
VARCHAR2VARCHAR2 ChaîneString
XMLXML ChaîneString

Notes

Les types de données INTERVAL YEAR TO MONTH et INTERVAL DAY TO SECOND ne sont pas pris en charge lors de l’utilisation du pilote Microsoft.Data types INTERVAL YEAR TO MONTH and INTERVAL DAY TO SECOND aren't supported when you use a Microsoft driver.

Mapper les colonnes source aux colonnes du récepteurMap source to sink columns

Pour savoir comment mapper des colonnes du jeu de données source à des colonnes du jeu de données récepteur, consultez Mappage des colonnes d’un jeu de données dans Data Factory.To learn more about mapping columns in the source dataset to columns in the sink dataset, see Mapping dataset columns in Data Factory.

Lecture renouvelée de sources relationnellesRepeatable read from relational sources

Lorsque vous copiez des données à partir d’un magasin de données relationnel, gardez à l’esprit la répétabilité de l’opération, afin d’éviter des résultats imprévus.When you copy data from relational data stores, keep repeatability in mind to avoid unintended outcomes. Dans Azure Data Factory, vous pouvez réexécuter un segment manuellement.In Azure Data Factory, you can manually rerun a slice. Vous pouvez également configurer une stratégie de nouvelles tentatives pour un jeu de données, afin qu’un segment soit réexécuté en cas de défaillance.You can also configure a retry policy for a dataset so that a slice is rerun when a failure occurs. Lorsqu’un segment est réexécuté, que ce soit manuellement ou à l’aide d’une stratégie de nouvelles tentatives, vous devez vous assurer que les mêmes données sont lues et ce, quel que soit le nombre d’exécutions du segment.When a slice is rerun, either manually or by a retry policy, make sure that the same data is read no matter how many times a slice is run. Pour plus d’informations, consultez Lecture renouvelée de sources relationnelles.For more information, see Repeatable read from relational sources.

Performances et réglagePerformance and tuning

Pour plus d’informations sur les facteurs clés affectant les performances du déplacement de données dans Azure Data Factory (activité de copie), consultez le Guide des performances et de l’optimisation de l’activité de copie.See the Copy Activity performance and tuning guide to learn about key factors that affect the performance of data movement (Copy Activity) in Azure Data Factory. Vous pouvez également découvrir les différentes façons d’optimiser la copie de données.You can also learn about various ways to optimize it.