使用 Azure Data Factory 或 Azure Synapse Analytics 從 Amazon RDS for Oracle 複製資料

適用于: Azure Data Factory Azure Synapse Analytics

提示

試用 Microsoft Fabric 中的 Data Factory,這是適用于企業的單一分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告等所有專案。 瞭解如何 免費啟動新的試用版

本文概述如何使用 Azure Data Factory 中的複製活動,從 Amazon RDS for Oracle 資料庫複製資料。 它會以複製活動概觀 為基礎

支援的功能

下列功能支援此 Amazon RDS for Oracle 連接器:

支援的功能 IR
複製活動 (source/-) ① ②
查閱活動 ① ②

(1) Azure 整合執行時間 (2) 自我裝載整合執行時間

如需複製活動支援做為來源或接收的資料存放區清單,請參閱 支援的資料存放區 資料表。

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

  • 下列版本的 Amazon RDS for Oracle 資料庫:
    • Amazon RDS for Oracle 19c R1 (19.1) 和更新版本
    • Amazon RDS for Oracle 18c R1 (18.1) 和更新版本
    • Amazon RDS for Oracle 12c R1 (12.1) 和更新版本
    • Amazon RDS for Oracle 11g R1 (11.1) 和更新版本
  • 從適用于 Oracle 來源的 Amazon RDS 平行複製。 如需詳細資訊,請參閱 Amazon RDS for Oracle 的平行複製一節。

注意

不支援適用于 Oracle Proxy 伺服器的 Amazon RDS。

必要條件

如果您的資料存放區位於內部部署網路、Azure 虛擬網路或 Amazon Virtual Private Cloud 內,您必須設定 自我裝載整合執行時間 以連線到它。

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

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

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

整合執行時間提供內建的 Amazon RDS for Oracle 驅動程式。 因此,當您從 Amazon RDS for Oracle 複製資料時,不需要手動安裝驅動程式。

開始使用

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

使用 UI 建立 Amazon RDS for Oracle 的連結服務

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

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

  2. 搜尋 Amazon RDS for Oracle,然後選取 [Amazon RDS for Oracle 連接器]。

    Screenshot of the Amazon RDS for Oracle connector.

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

    Screenshot of linked service configuration for Amazon RDS for Oracle.

連線or 組態詳細資料

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

連結的服務屬性

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

屬性 描述 必要
type type 屬性必須設定為 AmazonRdsForOracle Yes
connectionString 指定連線到 Amazon RDS for Oracle 資料庫實例所需的資訊。
您也可以在 Azure 金鑰保存庫中放入密碼,並將組態從連接字串提取 password 出來。 如需詳細資訊,請參閱下列範例,並將 認證儲存在 Azure 金鑰保存庫

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

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

您可以根據您的案例,在連接字串中設定更多連線屬性:

屬性 說明 允許的值
[陣列大小] 連接器可以在單一網路來回行程中擷取的位元組數目。 例如: ArraySize=‭10485760‬

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

若要在 Amazon RDS 上啟用 Oracle 連線的加密,您有兩個選項:

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

  • 若要使用 TLS

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

      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 Amazon RDS 連接字串。 例如: Host=<host>;Port=<port>;Sid=<sid>;User Id=<username>;Password=<password>;EncryptionMethod=1;TrustStore=C:\\MyTrustStoreFile;TrustStorePassword=<trust_store_password>

範例:

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

範例:將密碼儲存在 Azure 金鑰保存庫

{
    "name": "AmazonRdsForOracleLinkedService",
    "properties": {
        "type": "AmazonRdsForOracle",
        "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"
        }
    }
}

資料集屬性

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

若要從 Amazon RDS for Oracle 複製資料,請將資料集的 type 屬性設定為 AmazonRdsForOracleTable 。 支援下列屬性。

屬性 描述 必要
type 資料集的 type 屬性必須設定為 AmazonRdsForOracleTable Yes
schema 架構的名稱。 No
table 資料表/檢視的名稱。 No
tableName 具有架構的資料表/檢視名稱。 這個屬性支援回溯相容性。 針對新的工作負載,請使用 schematable No

範例:

{
    "name": "AmazonRdsForOracleDataset",
    "properties":
    {
        "type": "AmazonRdsForOracleTable",
        "schema": [],
        "typeProperties": {
            "schema": "<schema_name>",
            "table": "<table_name>"
        },
        "linkedServiceName": {
            "referenceName": "<Amazon RDS for Oracle linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

複製活動屬性

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

Amazon RDS for Oracle 作為來源

提示

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

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

屬性 描述 必要
type 複製活動來源的 type 屬性必須設定為 AmazonRdsForOracleSource Yes
oracleReaderQuery 使用自訂 SQL 查詢來讀取資料。 例如 "SELECT * FROM MyTable"
當您啟用資料分割載入時,您需要在查詢中連結任何對應的內建分割區參數。 如需範例,請參閱 Amazon RDS for Oracle 的平行複製一節。
No
partitionOptions 指定用來從 Amazon RDS for Oracle 載入資料的資料分割選項。
允許的值為: None (預設值)、 PhysicalPartitionsOfTable DynamicRange
啟用資料分割選項時, None 平行處理原則的程度可從 Amazon RDS for Oracle 資料庫同時載入資料,是由複製活動上的設定所 parallelCopies 控制。
No
partition設定 指定資料分割的設定群組。
當資料分割選項不是 None 時套用。
No
partitionNames 需要複製的實體分割區清單。
當分割區選項為 PhysicalPartitionsOfTable 時套用。 如果您使用查詢來擷取來源資料,請在 WHERE 子句中勾點 ?AdfTabularPartitionName 。 如需範例,請參閱 Amazon RDS for Oracle 的平行複製一節。
No
partitionColumnName 以整數類型指定來源資料 行的名稱,此類型 將由範圍分割用於平行複製。 如果未指定,則會自動偵測資料表的主鍵,並當做資料分割資料行使用。
當分割區選項為 DynamicRange 時套用。 如果您使用查詢來擷取來源資料,請在 WHERE 子句中勾點 ?AdfRangePartitionColumnName 。 如需範例,請參閱 Amazon RDS for Oracle 的平行複製一節。
No
partitionUpperBound 要複製資料的資料分割資料行最大值。
當分割區選項為 DynamicRange 時套用。 如果您使用查詢來擷取來源資料,請在 WHERE 子句中勾點 ?AdfRangePartitionUpbound 。 如需範例,請參閱 Amazon RDS for Oracle 的平行複製一節。
No
partitionLowerBound 要複製資料的資料分割資料行最小值。
當分割區選項為 DynamicRange 時套用。 如果您使用查詢來擷取來源資料,請在 WHERE 子句中勾點 ?AdfRangePartitionLowbound 。 如需範例,請參閱 Amazon RDS for Oracle 的平行複製一節。
No

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

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

從 Amazon RDS for Oracle 平行複製

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

Screenshot of partition options.

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

建議您使用資料分割來啟用平行複製,特別是當您從 Amazon RDS for Oracle 資料庫載入大量資料時。 以下是針對不同案例的建議組態。 將資料複製到檔案型資料存放區時,會重新命令將資料夾寫入為多個檔案(僅指定資料夾名稱),在此情況下,效能優於寫入單一檔案。

案例 建議的設定
具有實體分割區的大型資料表完整載入。 資料分割選項 :資料表的實體分割區。

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

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

在執行期間,服務會將 ?AdfRangePartitionColumnName?AdfRangePartitionUpbound?AdfRangePartitionLowbound 取代為每個分割區的實際資料行名稱和值範圍,並傳送至 Amazon RDS for Oracle。
例如,如果您的分割區資料行 「ID」 設定為 1,而上限設定為 80,且平行複製集設為 4,則服務會依 4 個分割區擷取資料。 其識別碼分別介於 [1,20]、[21、40]、[41、60] 和 [61,80] 之間。

提示

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

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

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

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

"source": {
    "type": "AmazonRdsForOracleSource",
    "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>"
    }
}

查閱活動屬性

若要瞭解屬性的詳細資料,請檢查 查閱活動

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