Menyalin data ke atau dari Oracle lokal dengan menggunakan Azure Data Factory

Catatan

Artikel ini berlaku untuk Azure Data Factory versi 1. Jika Anda menggunakan versi layanan Azure Data Factory saat ini, lihat Konektor Oracle di V2.

Artikel ini menjelaskan cara menggunakan Aktivitas Penyalinan di Azure Data Factory untuk memindahkan data dari database Oracle lokal. Artikel ini dibuat berdasarkan Aktivitas perpindahan data, yang menyajikan gambaran umum tentang perpindahan data menggunakan Aktivitas Penyalinan.

Skenario yang didukung

Anda bisa menyalin data dari database Oracle ke penyimpanan data berikut ini:

Kategori Penyimpanan data
Azure Azure Blob Storage
Azure Data Lake Storage Gen1
Azure Cosmos DB (SQL API)
Azure SQL Database
Azure Synapse Analytics
Indeks Azure Cognitive Search
Penyimpanan Tabel Azure
Database SQL Server
Oracle
File Sistem file

Anda bisa menyalin data dari penyimpanan data berikut ke database Oracle:

Kategori Penyimpanan data
Azure Azure Blob Storage
Azure Cosmos DB (SQL API)
Azure Data Lake Storage Gen1
Azure SQL Database
Azure Synapse Analytics
Penyimpanan Tabel Azure
Database Amazon Redshift
DB2
MySQL
Oracle
PostgreSQL
SAP Business Warehouse
SAP HANA
SQL Server
Sybase
Teradata
NoSQL Cassandra
MongoDB
File Amazon S3
Sistem file
FTP
HDFS
SFTP
Lainnya HTTP Generik
OData Generik
ODBC Generik
Salesforce
Tabel web (tabel dari HTML)

Prasyarat

Azure Data Factory mendukung untuk terhubung ke sumber data Oracle lokal dengan menggunakan Gateway Manajemen Data. Lihat Gateway Manajemen Data untuk mempelajari selengkapnya tentang Gateway Manajemen Data. Untuk instruksi langkah demi langkah tentang cara menyiapkan gateway dalam alur data untuk memindahkan data, lihat Memindahkan data dari lokal ke cloud.

Gateway diperlukan bahkan jika Oracle dihosting di Azure infrastruktur sebagai layanan (IaaS) komputer virtual. Anda bisa memasang gateway pada infrastruktur sebagai layanan komputer virtual yang sama dengan penyimpanan data atau di komputer virtual lain, selama gateway bisa tersambung ke database.

Catatan

Untuk tips tentang pemecahan masalah yang terkait dengan koneksi dan gateway, lihat Memecahkan masalah gateway.

Versi dan penginstalan yang didukung

Konektor Oracle ini mendukung dua versi driver:

  • Driver Microsoft untuk Oracle (disarankan) : Dimulai di Gateway Manajemen Data versi 2.7, driver Microsoft untuk Oracle secara otomatis dipasang dengan gateway. Anda tidak perlu memasang atau memperbarui driver untuk membangun konektivitas ke Oracle. Anda juga dapat mengalami kinerja penyalinan yang lebih baik dengan menggunakan driver ini. Versi database Oracle ini didukung:

    • Oracle 12c R1 (12.1)

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

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

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

    • Oracle 8i R3 (8.1.7)

      Catatan

      Server proksi Oracle tidak didukung.

      Penting

      Saat ini, driver Microsoft untuk Oracle hanya mendukung penyalinan data dari Oracle. Driver tidak mendukung penulisan untuk Oracle. Kapabilitas koneksi pengujian pada tab Gateway Manajemen Data tidak mendukung driver ini. Cara lainnya, Anda bisa menggunakan wizard Penyalinan untuk memvalidasi konektivitas.

  • Oracle Data Provider untuk .NET: Anda dapat menggunakan Oracle Data Provider untuk menyalin data dari atau ke Oracle. Komponen ini disertakan dalam Komponen Akses Data Oracle untuk Windows. Pasang versi yang relevan (32-bit atau 64-bit) pada mesin tempat gateway dipasang. Oracle Data Provider untuk .NET 12.1 dapat mengakses Oracle Database 10g Rilis 2 dan versi yang lebih baru.

    Jika Anda memilih Penginstalan XCopy, selesaikan langkah-langkah yang dijelaskan file readme.htm. Sebaiknya pilih penginstal yang memiliki antarmuka pengguna (bukan penginstal XCopy).

    Setelah Anda memasang penyedia, hidupkan ulang layanan host Gateway Manajemen Data di mesin Anda dengan menggunakan aplet Layanan atau Gateway Manajemen Data Configuration Manager.

Jika Anda menggunakan wizard Penyalin untuk menulis alur penyalinan, tipe driver telah ditentukan secara otomatis. Driver Microsoft digunakan secara default, kecuali versi gateway Anda lebih lama dari versi 2.7 atau Anda memilih Oracle sebagai sink.

Mulai

Anda dapat membuat alur yang memiliki aktivitas penyalinan. Alur memindahkan data ke atau dari database Oracle lokal dengan menggunakan alat atau antarmuka pemrograman aplikasi yang berbeda.

Cara termudah untuk membuat alur adalah dengan menggunakan Wizard Penyalinan. Lihat Tutorial: Membuat alur dengan menggunakan wizard Penyalinan untuk penelusuran cepat dalam membuat alur dengan menggunakan wizard Data Penyalinan.

Anda juga dapat menggunakan alat berikut untuk membuat alur: Visual Studio, Azure PowerShell, templat Azure Resource Manager, .NET API, atau REST API. Lihat tutorial Aktivitas Penyalinan untuk petunjuk langkah demi langkah pembuatan alur yang memiliki aktivitas penyalinan.

Baik menggunakan alat ataupun antarmuka pemrograman aplikasi, lakukan langkah-langkah berikut untuk membuat alur yang memindahkan data dari penyimpanan sumber data ke penyimpanan data sink:

  1. Buat pabrik data. Pabrik data dapat berisi satu atau beberapa alur.
  2. Buat layanan tertaut untuk menautkan penyimpanan data input dan output ke pabrik data Anda. Misalnya, jika Anda menyalin data dari database Oracle ke penyimpanan Azure Blob, buat dua layanan tertaut untuk menautkan database Oracle dan akun penyimpanan Azure Anda ke pabrik data Anda. Untuk properti layanan tertaut yang spesifik untuk Oracle, lihat Properti layanan tertaut.
  3. Buat himpunan data untuk merepresentasikan data input dan output untuk operasi penyalinan. Dalam contoh langkah sebelumnya, Anda membuat himpunan data untuk menentukan tabel dalam database Oracle Anda yang berisi data input. Anda membuat himpunan data lain untuk menentukan kontainer blob dan folder yang menyimpan data yang disalin dari database Oracle. Untuk properti himpunan data yang spesifik untuk Oracle, lihat Properti himpunan data.
  4. Buat alur dengan aktivitas penyalinan yang mengambil himpunan data sebagai input dan himpunan data sebagai output. Dalam contoh sebelumnya, Anda menggunakan OracleSource sebagai sumber data dan BlobSink sebagai sink untuk aktivitas penyalinan. Demikian pula, jika Anda menyalin dari penyimpanan Azure Blob ke database Oracle, Anda menggunakan BlobSource dan OracleSink dalam aktivitas penyalinan. Untuk properti Aktivitas Penyalinan yang spesifik untuk database Oracle, lihat Properti Aktivitas Penyalinan. Untuk detail tentang cara menggunakan penyimpanan data sebagai sumber atau sink, pilih tautan untuk penyimpanan data Anda di bagian sebelumnya.

Saat Anda menggunakan wizard, definisi JSON untuk entitas Azure Data Factory ini secara otomatis dibuat untuk Anda: layanan tertaut, himpunan data, dan alur. Saat menggunakan alat atau API (kecuali .NET API), Anda menentukan entitas Azure Data Factory ini menggunakan format JSON. Untuk sampel yang memiliki definisi JSON untuk entitas Azure Data Factory yang Anda gunakan untuk menyalin data ke atau dari database Oracle lokal, lihat contoh JSON.

Bagian berikut memberikan detail tentang properti JSON yang Anda gunakan untuk menentukan entitas Azure Data Factory.

Properti layanan tertaut

Tabel berikut ini menjelaskan elemen JSON yang khusus untuk layanan tertaut Oracle:

Properti Deskripsi Diperlukan
jenis Jenis properti harus diatur ke OnPremisesOracle. Ya
driverType Tentukan driver mana yang akan digunakan untuk menyalin data dari atau ke database Oracle. Nilai yang diperbolehkan adalah Microsoft dan ODP (default). Lihat Versi dan penginstalan yang didukung untuk detail driver. Tidak
connectionString Tentukan informasi yang diperlukan untuk menyambungkan ke instans DB Oracle untuk properti connectionString. Ya
gatewayName Nama gateway yang digunakan untuk menyambungkan ke server Oracle lokal. Ya

Contoh: Menggunakan driver Microsoft

Tip

Jika Anda melihat kesalahan yang mengatakan "ORA-01025: Parameter UPI di luar jangkauan" dan Oracle Anda adalah versi 8i, tambahkan WireProtocolMode=1 ke string koneksi Anda dan coba lagi:

{
    "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>"
        }
    }
}

Contoh: Menggunakan driver ODP

Untuk mempelajari tentang format yang diizinkan, lihat Penyedia data Oracle untuk .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>"
        }
    }
}

Properti himpunan data

Untuk daftar lengkap bagian dan properti yang tersedia untuk menentukan himpunan data, lihat Membuat himpunan data.

Beberapa bagian dari file himpunan data JSON, seperti struktur, ketersediaan, dan kebijakan, sama untuk semua jenis himpunan data (contohnya, untuk Oracle, penyimpanan Azure Blob, dan penyimpanan Tabel Azure).

Bagian typeProperties berbeda untuk setiap jenis himpunan data dan menyediakan informasi tentang lokasi data di penyimpanan data. Bagian typeProperties untuk himpunan data jenis OracleTable memiliki properti berikut:

Properti Deskripsi Diperlukan
tableName Nama tabel dalam database Oracle yang dirujuk oleh layanan tertaut. Tidak (jika oracleReaderQuery atau OracleSource ditentukan)

Properti Aktivitas Penyalinan

Untuk daftar lengkap bagian dan properti yang tersedia untuk menentukan aktivitas, lihat Membuat alur.

Properti seperti nama, deskripsi, tabel input dan output, dan kebijakan tersedia untuk semua jenis aktivitas.

Catatan

Aktivitas Penyalinan hanya membutuhkan satu input dan hanya menghasilkan satu output.

Properti yang tersedia di bagian aktivitas typeProperties berbeda-beda untuk setiap jenis aktivitas. Properti Aktivitas Penyalinan bervariasi tergantung pada jenis sumber data dan sink.

OracleSource

Di Salin Aktivitas, saat sumber data adalah jenis OracleSource, properti berikut ini tersedia di bagian typeProperties:

Properti Deskripsi Nilai yang diizinkan Diperlukan
oracleReaderQuery Gunakan kueri kustom untuk membaca data. String kueri SQL. Misalnya, "pilih * dari MyTable".

Jika tidak ditentukan, pernyataan SQL ini dijalankan: "pilih * dari MyTable"
Tidak
(jika tableName dari himpunan data ditentukan)

OracleSink

OracleSink mendukung properti berikut:

Properti Deskripsi Nilai yang diizinkan Diperlukan
writeBatchTimeout Waktu tunggu untuk operasi penyisipan batch selesai sebelum waktu habis. timespan

Contoh: 00:30:00 (30 menit)
Tidak
writeBatchSize Menyisipkan data ke dalam tabel SQL saat ukuran buffer mencapai nilai writeBatchSize. Bilangan bulat (jumlah baris) Tidak (default: 100)
sqlWriterCleanupScript Tentukan kueri untuk Aktivitas Penyalinan untuk menjalankan potongan data tertentu yang dibersihkan. Pernyataan kueri. Tidak
sliceIdentifierColumnName Menentukan nama kolom untuk Aktivitas Penyalinan untuk diisi dengan pengidentifikasi potongan otomatis. Nilai untuk sliceIdentifierColumnName digunakan untuk membersihkan data dari potongan tertentu saat dijalankan ulang. Nama kolom dari kolom yang memiliki jenis data biner(32) . Tidak

Contoh JSON untuk menyalin data ke dan dari Oracle Database

Contoh berikut ini menyediakan sampel definisi JSON yang bisa Anda gunakan untuk membuat alur dengan menggunakan Visual Studio atau Azure PowerShell. Pada contoh menunjukkan cara menyalin data dari atau ke database Oracle dan ke atau dari penyimpanan Azure Blob. Namun, data dapat disalin ke salah satu sink yang tercantum dalam Format dan penyimpanan data yang didukung dengan menggunakan Aktivitas Penyalinan di Azure Data Factory.

Contoh: Menyalin data dari Oracle ke penyimpanan Azure Blob

Sampel memiliki entitas Data Factory berikut:

Sampel menyalin data dari tabel dalam database Oracle lokal ke blob per jam. Untuk informasi selengkapnya tentang berbagai properti yang digunakan dalam sampel, lihat bagian yang mengikuti sampel.

Layanan Oracle tertaut

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

Layanan Penyimpanan Azure Blob tertaut

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

Himpunan data input Oracle

Sampel mengasumsikan bahwa Anda telah membuat tabel bernama MyTable di Oracle. Tabel ini berisi kolom yang disebut timestampcolumn untuk data time series.

Mengatur eksternal: ke true menginformasikan layanan Azure Data Factory bahwa himpunan data berada di luar pabrik data dan tidak diproduksi oleh aktivitas di pabrik data.

{
    "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
            }
        }
    }
}

Himpunan data output Azure Blob

Data ditulis ke blob baru setiap jam (frekuensi: jam, interval: 1). Jalur folder dan nama file untuk blob dievaluasi secara dinamis berdasarkan irisan waktu mulai yang sedang diproses. Jalur folder menggunakan bagian tahun, bulan, hari, dan jam dari waktu mulai.

{
    "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
        }
    }
}

Alur dengan Aktivitas Penyalinan

Alur berisi Aktivitas Penyalinan yang dikonfigurasi untuk menggunakan himpunan data input dan output dan dijadwalkan untuk berjalan setiap jam. Dalam definisi alur JSON, jenis sumber diatur ke OracleSource dan jenis sink diatur ke BlobSink. Kueri SQL yang Anda tentukan dengan menggunakan properti oracleReaderQuery memilih data dalam satu jam terakhir untuk disalin.

{
    "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"
                }
            }
        ]
    }
}

Contoh: Menyalin data dari penyimpanan Azure Blob ke Oracle

Contoh ini memperlihatkan cara menyalin data dari akun penyimpanan Azure Blob ke database Oracle lokal. Namun, Anda dapat menyalin data langsung dari salah satu sumber yang tercantum dalam penyimpanan dan format data yang didukung dengan menggunakan Aktivitas Penyalinan di Azure Data Factory.

Sampel memiliki entitas Data Factory berikut:

Sampel menyalin data dari blob ke tabel dalam database Oracle lokal setiap jam. Untuk informasi selengkapnya tentang berbagai properti yang digunakan dalam sampel, lihat bagian yang mengikuti sampel.

Layanan Oracle tertaut

{
    "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>"
        }
    }
}

Layanan Penyimpanan Azure Blob tertaut

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

Himpunan data input Azure Blob

Data diambil ke blob baru setiap jam (frekuensi: jam, interval: 1). Jalur folder dan nama file untuk blob dievaluasi secara dinamis berdasarkan irisan waktu mulai yang sedang diproses. Jalur folder menggunakan bagian tahun, bulan, dan bagian hari waktu mulai. Nama file menggunakan bagian jam dari waktu mulai. Pengaturan eksternal: ke true menginformasikan layanan Azure Data Factory bahwa himpunan data berada di luar pabrik data dan tidak diproduksi oleh aktivitas di pabrik data.

{
    "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
            }
        }
    }
}

Himpunan data output Oracle

Sampel mengasumsikan Anda telah membuat tabel bernama MyTable di Oracle. Buat tabel di Oracle dengan jumlah kolom yang sama seperti yang Anda harapkan untuk dimuat file CSV Blob. Baris baru ditambahkan ke tabel setiap jam.

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

Alur dengan Aktivitas Penyalinan

Alur berisi aktivitas penyalinan yang dikonfigurasi untuk menggunakan himpunan data input dan output dan dijadwalkan untuk berjalan setiap jamnya. Dalam definisi alur JSON, jenis sumber diatur ke BlobSource dan jenis sink diatur ke 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"
                }
            }
        ]
    }
}

Tips Pemecahan Masalah

Masalah 1: .NET Framework Data Provider

Pesan kesalahan

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

Kemungkinan Penyebabnya

  • Penyedia Data .NET Framework untuk Oracle tidak diinstal.
  • Penyedia Data .NET Framework untuk Oracle diinstal ke .NET Framework 2.0 dan tidak ditemukan di folder .NET Framework 4.0.

Resolusi

  • Jika Anda belum memasang Penyedia .NET untuk Oracle, pasang Penyedia .NET, lalu coba lagi skenarionya.
  • Jika Anda melihat pesan kesalahan bahkan setelah Anda memasang penyedia, selesaikan langkah-langkah berikut:
    1. Buka file konfigurasi mesin untuk .NET 2.0 dari folder <sistem disk>:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config.
    2. Cari Oracle Data Provider untuk .NET. Anda harus dapat menemukan entri seperti yang ditunjukkan dalam sampel berikut di bawah 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" />
  • Salin entri ini ke file machine.config di folder .NET 4.0 berikut: <sistem disk>:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config. Kemudian, ubah versi menjadi 4.xxx.x.x.
  • Pasang <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].

Masalah 2: Pemformatan tanggal/waktu

Pesan kesalahan

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,'.

Resolusi

Anda mungkin perlu menyesuaikan string kueri dalam aktivitas penyalinan Anda berdasarkan bagaimana tanggal dikonfigurasi dalam database Oracle Anda. Berikut ini contohnya (menggunakan fungsi to_date):

"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)"

Mengetik pemetaan untuk Oracle

Seperti disebutkan dalam artikel aktivitas pergerakan data, Aktivitas Penyalinan melakukan konversi jenis otomatis dari jenis sumber ke jenis sink dengan menggunakan pendekatan dua langkah berikut:

  1. Konversi dari jenis sumber asli menjadi jenis .NET.
  2. Konversi dari jenis .NET ke tipe sink asli.

Saat Anda memindahkan data dari Oracle, pemetaan berikut digunakan dari jenis data Oracle ke jenis .NET dan sebaliknya:

Jenis data Oracle Jenis data .NET Framework
BFILE Byte[]
BLOB Byte[]
(hanya didukung pada Oracle 10g dan versi terbaru saat Anda menggunakan driver Microsoft)
CHAR String
CLOB String
TANGGAL DateTime
FLOAT Desimal, String (jika presisi > 28)
INTEGER Desimal, Karakter (jika presisi > 28)
INTERVAL YEAR TO MONTH Int32
INTERVAL DAY TO SECOND TimeSpan
LONG String
LONG RAW Byte[]
NCHAR String
NCLOB String
NUMBER Desimal, Karakter (jika presisi > 28)
NVARCHAR2 String
RAW Byte[]
ROWID String
TIMESTAMP DateTime
TIMESTAMP WITH LOCAL TIME ZONE DateTime
TIMESTAMP WITH TIME ZONE DateTime
UNSIGNED INTEGER Telepon
VARCHAR2 String
XML String

Catatan

Tipe data INTERVAL YEAR TO MONTH dan INTERVAL DAY TO SECOND tidak didukung saat Anda menggunakan driver Microsoft.

Memetakan sumber untuk kolom sink

Untuk mempelajari selengkapnya tentang pemetaan kolom di himpunan data sumber ke kolom di himpunan data sink, lihat Memetakan kolom himpunan data di Azure Data Factory.

Bacaan yang dapat diulang dari sumber relasional

Saat menyalin data dari penyimpanan data relasional, ingatlah pengulangan untuk menghindari hasil yang tidak diinginkan. Di Azure Data Factory, Anda dapat menjalankan ulang potongan secara manual. Anda juga dapat mengonfigurasi kebijakan percobaan kembali untuk himpunan data sehingga potongan dijalankan ulang saat kegagalan terjadi. Saat potongan dijalankan, baik secara manual atau dengan kebijakan percobaan kembali, pastikan bahwa data yang sama dibaca seberapa banyak pun potongan dijalankan. Untuk informasi selengkapnya, lihat Bacaan yang dapat diulang dari sumber relasional.

Performa dan penyetelan

Lihat Panduan penyetelan dan performa Aktivitas Penyalinan, yang menjelaskan faktor-faktor utama memengaruhi performa pergerakan data (Aktivitas Penyalinan) di Azure Data Factory. Anda juga dapat mempelajari berbagai cara untuk mengoptimalkannya.