使用 Azure Data Factory 或 Azure Synapse Analytics 將資料從 Oracle 複製至 Oracle

適用於:Azure Data Factory Azure Synapse Analytics

本文概述如何使用 Azure Data Factory 中的複製活動,從 Oracle 資料庫複製資料及將資料複製到 Oracle 資料庫。 本文是以複製活動概觀為依據。

支援的功能

下列活動支援此 Oracle 連接器:

您可以將資料從 Oracle 資料庫複製到任何支援的接收資料存放區。 您也可以從任何支援的來源資料存放區將資料複製到 Oracle 資料庫。 如需複製活動所支援作為來源或接收器的資料存放區清單,請參閱支援的資料存放區表格。

具體而言,此 Oracle 連接器支援:

  • 下列 Oracle 資料庫版本:
    • Oracle 19c R1 (19.1) 和更新版本
    • Oracle 18c R1 (18.1) 和更新版本
    • Oracle 12c R1 (12.1) 和更新版本
    • Oracle 11g R1 (11.1) 和更新版本
    • Oracle 10g R1 (10.1) 和更新版本
    • Oracle 9i R2 (9.2) 和更新版本
    • Oracle 8i R3 (8.1.7) 和更新版本
    • Oracle Database Cloud Exadata Service
  • 從 Oracle 來源平行複製。 如需詳細資訊,請參閱 Oracle 的平行複製 一節。

注意

不支援 Oracle Proxy 伺服器。

必要條件

如果您的資料存放區位於內部部署網路、Azure 虛擬網路或 Amazon 虛擬私人雲端中,則必須設定自我裝載整合執行階段以與其連線。

如果您的資料存放區是受控雲端資料服務,則可使用 Azure Integration Runtime。 如果只能存取防火牆規則中核准的 IP,您可以將 Azure Integration Runtime IP 新增至允許清單。

您也可以使用 Azure Data Factory 中的受控虛擬網路整合執行階段功能來存取內部部署網路,而不需要安裝和設定自我裝載整合執行階段。

如需 Data Factory 支援的網路安全性機制和選項的詳細資訊,請參閱資料存取策略

整合執行階段提供內建的 Oracle 驅動程式。 因此,當您從 Oracle 複製資料或將資料複製到該處時,不需要手動安裝驅動程式。

開始使用

若要透過管線執行複製活動,您可以使用下列其中一個工具或 SDK:

使用 UI 建立連結服務至 Oracle

使用下列步驟,在 Azure 入口網站 UI 中建立 Oracle 的連結服務。

  1. 瀏覽至 Azure Data Factory 或 Synapse 工作區中的 [管理] 索引標籤,並選取 [連結服務],然後按一下 [新增]:

  2. 搜尋 Oracle 並選取 Oracle 連接器。

    Screenshot of the Oracle connector.

  3. 設定服務詳細資料、測試連線,然後建立新的連結服務。

    Screenshot of linked service configuration for Oracle.

連接器設定詳細資料

下列各節提供屬性的相關詳細資料,這些屬性是用來定義 Oracle 連接器專屬的實體。

連結服務屬性

Oracle 連結服務支援下列屬性:

屬性 描述 必要
type type 屬性必須設定為 Oracle
connectionString 指定連線到 Oracle 資料庫執行個體所需的資訊。
您也可以將密碼放在 Azure Key Vault 中,並從連接字串中提取 password 組態。 如需詳細資訊,請參閱 Azure 金鑰保存庫中的下列範例和Microsoft Store認證

支援的連線類型:您可以使用 [Oracle SID] 或 [Oracle 服務名稱] 來識別您的資料庫:
- 如果您使用 SID:Host=<host>;Port=<port>;Sid=<sid>;User Id=<username>;Password=<password>;
- 如果您使用服務名稱:Host=<host>;Port=<port>;ServiceName=<servicename>;User Id=<username>;Password=<password>;
針對進階 Oracle 原生連線選項,您可以選擇在 TNSNAMES 中新增專案。Oracle 伺服器上的 ORA 檔案,並在 Oracle 連結服務中選擇使用 Oracle 服務名稱連線類型,並設定對應的服務名稱。
connectVia 用來連線到資料存放區的整合執行階段。 深入了解必要條件一節。 如果未指定,則會使用預設的 Azure Integration Runtime。

提示

如果您收到錯誤「ORA-01025: UPI 參數超出範圍」,而 Oracle 版本為 8i,請新增 WireProtocolMode=1 至您的連接字串。 然後再試一次。

如果您有多個 Oracle 實例進行容錯移轉案例,您可以建立 Oracle 連結服務,並在主要主機、埠、使用者名稱、密碼等中填入,並以屬性名稱作為 AlternateServers 和 值 (HostName=<secondary host>:PortNumber=<secondary port>:ServiceName=<secondary service name>) 新增新的「其他連線屬性」,請勿遺漏括弧,並注意冒號 (:) 作為分隔符號。 例如,下列替代伺服器的值會定義兩部替代資料庫伺服器以進行連線容錯移轉: (HostName=AccountingOracleServer:PortNumber=1521:SID=Accounting,HostName=255.201.11.24:PortNumber=1522:ServiceName=ABackup.NA.MyCompany)

您可以針對每個案例在連接字串中設定更多連線屬性:

屬性 描述 允許的值
ArraySize 連接器可以在單一網路來回行程中擷取的位元組數目。 例如,ArraySize=‭10485760‬

較大的值可藉由減少透過網路擷取資料的次數來增加輸送量。 較小的值會增加回應時間,因為等候伺服器傳輸資料的延遲較少。
從 1 到 4294967296 (4 GB) 的整數。 預設值為 60000。 值 1 不會定義位元組數目,但表示只配置一個資料列的空間。

若要啟用 Oracle 連線加密,您有兩個選項:

  • 若要在 Oracle 伺服器端使用 三重 DES 加密 (3DES) 和進階加密標準 (AES) ,請移至 Oracle 進階安全性 (OAS) 並設定加密設定。 如需詳細資訊,請參閱此 Oracle 檔。 Oracle 應用程式開發架構 (ADF) 連接器會自動交涉加密方法,以在建立 Oracle 連線時使用您在 OAS 中設定的加密方法。

  • 若要使用 TLS

    1. 取得 TLS/SSL 憑證資訊。 取得 TLS/SSL 憑證的 可辨別編碼規則 (DER) 編碼憑證資訊,並將輸出儲存 (-----開始憑證...結束憑證-----) 為文字檔。

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

      例子: 從 DERcert.cer 擷取憑證資訊,然後將輸出儲存至cert.txt。

      openssl x509 -inform DER -in DERcert.cer -text
      Output:
      -----BEGIN CERTIFICATE-----
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      XXXXXXXXX
      -----END CERTIFICATE-----
      
    2. 建置 keystoretruststore 。 下列命令會 truststore 以 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
      

      例子: 使用密碼建立名為 MyTrustStoreFile 的 PKCS12 truststore 檔案。

      openssl pkcs12 -in cert.txt -out MyTrustStoreFile -passout pass:ThePWD -nokeys -export  
      
    3. truststore 檔案放在自我裝載 IR 電腦上。 例如,將檔案放在 C:\MyTrustStoreFile。

    4. 在服務中,使用 和對應的 TrustStore/TrustStorePassword 值來設定 Oracle 連接字串。 EncryptionMethod=1 例如: Host=<host>;Port=<port>;Sid=<sid>;User Id=<username>;Password=<password>;EncryptionMethod=1;TrustStore=C:\\MyTrustStoreFile;TrustStorePassword=<trust_store_password>

範例︰

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

範例:在 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"
        }
    }
}

資料集屬性

本節提供 Oracle 資料集所支援的屬性清單。 如需定義資料集的區段和屬性完整清單,請參閱資料集

若要將資料從 和 複製到 Oracle,請將資料集的 type 屬性設定為 OracleTable 。 以下是支援的屬性。

屬性 描述 必要
type 資料集的類型屬性必須設定為 OracleTable
結構描述 結構描述的名稱。 否 (來源);是 (接收)
資料表 資料表/檢視的名稱。 否 (來源);是 (接收)
tableName 具有結構描述的資料表/檢視名稱。 支援此屬性是基於回溯相容性。 對於新的工作負載,請使用 schematable 否 (來源);是 (接收)

範例︰

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

複製活動屬性

本節提供 Oracle 來源和接收所支援的屬性清單。 如需可用來定義活動的區段和屬性完整清單,請參閱管線

Oracle 作為來源

提示

若要使用資料分割有效率地從 Oracle 載入資料,請從 Oracle 平行複製深入瞭解。

若要從 Oracle 複製資料,請將複製活動中的來源類型設定為 OracleSource 。 複製活動的 [來源] 區段支援下列屬性。

屬性 描述 必要
type 複製活動來源的類型屬性必須設定為 OracleSource
oracleReaderQuery 使用自訂 SQL 查詢來讀取資料。 例如 "SELECT * FROM MyTable"
當您啟用分割載入時,您必須攔截查詢中任何對應的內建分割區參數。 如需範例,請參閱 Oracle 的平行複製 一節。
partitionOptions 指定用來從 Oracle 載入資料的資料分割選項。
允許的值為:None (預設值)、PhysicalPartitionsOfTableDynamicRange
啟用分割區選項時, (不是 None) ,則從 Oracle 資料庫並行載入資料的平行處理原則程度是由複製活動上的 設定所控制 parallelCopies
partitionSettings 指定資料分割的設定群組。
當分割選項不是 None 時套用。
partitionNames 需要複製的實體分割區清單。
當分割選項是 PhysicalPartitionsOfTable 時套用。 如果您使用查詢來取出來源資料,請在 WHERE 子句中加上 ?AdfTabularPartitionName。 For an example, see the Parallel copy from Oracle section.
partitionColumnName 指定整數類型來源資料行的名稱,供平行複製的範圍分割使用。 如果未指定,則會自動偵測資料表的主索引鍵作為分割資料行。
當分割選項是 DynamicRange 時套用。 如果您使用查詢來取出來源資料,請在 WHERE 子句中加上 ?AdfRangePartitionColumnName。 For an example, see the Parallel copy from Oracle section.
partitionUpperBound 從分割資料行複製出資料時的最大值。
當分割選項是 DynamicRange 時套用。 如果您使用查詢來取出來源資料,請在 WHERE 子句中加上 ?AdfRangePartitionUpbound。 For an example, see the Parallel copy from Oracle section.
partitionLowerBound 從分割資料行複製出資料時的最小值。
當分割選項是 DynamicRange 時套用。 如果您使用查詢來取出來源資料,請在 WHERE 子句中加上 ?AdfRangePartitionLowbound。 For an example, see the Parallel copy from Oracle section.

範例:使用不含分割區的基本查詢來複製資料

"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 作為接收器

若要將資料複製到 Oracle,請將複製活動中的接收類型設定為 OracleSink 。 複製活動的 [接收] 區段支援下列屬性。

屬性 描述 必要
type 複製活動接收的 type 屬性必須設定為 OracleSink
writeBatchSize 當緩衝區大小達到 writeBatchSize 時,將資料插入SQL資料表。
允許的值為整數 (資料列數目)。
否 (預設值為 10000)
writeBatchTimeout 在逾時前等待批次插入作業完成的時間。
允許的值為時間範圍。 範例是 00:30:00 (30 分鐘)。
preCopyScript 在每次執行中將資料寫入 Oracle 之前,請指定複製活動的SQL查詢。 您可以使用此屬性來清除預先載入的資料。
 maxConcurrentConnections 活動執行期間,建立與資料存放區的並行連線上限。 僅在想要限制並行連線時,才需要指定值。  否

範例︰

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

從 Oracle 平行複製

Oracle 連接器提供內建的資料分割,以平行方式從 Oracle 複製資料。 您可以在複製活動的 [來源] 索引標籤上找到資料分割選項。

Screenshot of partition options

當您啟用分割複製時,服務會針對 Oracle 來源執行平行查詢,以依分割區載入資料。 平行程度由複製活動的 parallelCopies 設定所控制。 例如,如果您設定 parallelCopies 為四,服務會根據指定的分割區選項和設定,同時產生並執行四個查詢,而每個查詢都會從 Oracle 資料庫擷取一部分資料。

建議您使用資料分割來啟用平行複製,特別是當您從 Oracle 資料庫載入大量資料時。 以下針對各種情節的建議設定。 將資料複製到以檔案為基礎的資料存放區時,建議分成多個檔案來寫入資料夾 (僅指定資料夾名稱),這樣效能會比寫入單一檔案更好。

狀況 建議的設定
使用實體分割區從大型資料表完整載入。 分割選項:資料表的實體分割區。

在執行期間,服務會自動偵測實體分割區,並依分割區複製資料。
從大型資料表完整載入,不含實體分割區,同時在資料分割時包含整數資料行。 分割選項:動態範圍分割。
分割資料行:指定用來分割資料的資料行。 如果未指定,則會使用主索引鍵資料行。
使用自訂查詢載入大量資料,包含實體分割區。 分割選項:資料表的實體分割區。
查詢SELECT * FROM <TABLENAME> PARTITION("?AdfTabularPartitionName") WHERE <your_additional_where_clause>
分割區名稱:指定要從中複製資料的分割區名稱。 如果未指定,服務會自動偵測您在 Oracle 資料集中指定的資料表上的實體分割區。

在執行期間,服務會 ?AdfTabularPartitionName 以實際的分割區名稱取代,並傳送至 Oracle。
使用自訂查詢載入大量資料,不含實體分割區,同時包含整數資料行用於資料分割。 分割選項:動態範圍分割。
查詢SELECT * FROM <TABLENAME> WHERE ?AdfRangePartitionColumnName <= ?AdfRangePartitionUpbound AND ?AdfRangePartitionColumnName >= ?AdfRangePartitionLowbound AND <your_additional_where_clause>
分割資料行:指定用來分割資料的資料行。 您可以按照整數資料類型的資料行來分割。
分割上限分割下限:指定您是否想要篩選分割資料行,只取出下限範圍和上限範圍之間的資料。

在執行期間,服務會將 、 ?AdfRangePartitionUpbound?AdfRangePartitionLowbound 取代 ?AdfRangePartitionColumnName 為每個分割區的實際資料行名稱和值範圍,並傳送至 Oracle。
例如,如果分割資料行 "ID" 已設定下限 1 和上限 80,而平行複製設定為 4,則服務會分成 4 個分割區來取出資料。 識別碼的範圍分別為 [1,20]、[21, 40]、[41, 60] 和 [61, 80]。

提示

從非資料分割資料表複製資料時,您可以使用 [動態範圍] 資料分割選項,針對整數資料行進行分割。 如果您的來源資料沒有這類資料行類型,您可以利用來源查詢中的 ORA_HASH 函式來產生資料行,並將其當做資料分割資料行使用。

範例:使用實體分割區進行查詢

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

範例:使用動態範圍分割進行查詢

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

Oracle 的資料類型對應

當您將資料從 和 複製到 Oracle 時,服務內會使用下列過渡期資料類型對應。 若要了解複製活動如何將來源結構描述和資料類型對應至接收,請參閱結構描述和資料類型對應

Oracle 資料類型 過渡資料類型
BFILE Byte[]
BLOB Byte[]
(僅 Oracle 10g 及更高版本可支援)
CHAR String
CLOB String
日期 Datetime
FLOAT 十進位,如果精確度 > 為 28) ,則字串 (
INTEGER 十進位,如果精確度 > 為 28) ,則字串 (
LONG String
LONG RAW Byte[]
NCHAR String
NCLOB String
NUMBER (p,s) p 28) 時 > ,字串 (
沒有有效位數和小數位數的數位 Double
NVARCHAR2 String
RAW Byte[]
ROWID String
timestamp Datetime
TIMESTAMP WITH LOCAL TIME ZONE String
TIMESTAMP WITH TIME ZONE String
不帶正負號的整數 數字
VARCHAR2 String
XML String

注意

不支援 INTERVAL YEAR TO MONTH 和 INTERVAL DAY TO SECOND 資料類型。

查閱活動屬性

若要了解關於屬性的詳細資料,請參閱查閱活動

後續步驟

如需複製活動支援作為來源與接收器的資料存放區清單,請參閱支援的資料存放區