

# 在 Amazon RDS for SQL Server 中支持带有 Oracle OLEDB 的链接服务器
<a name="Appendix.SQLServer.Options.LinkedServers_Oracle_OLEDB"></a>

RDS for SQL Server 上带有 Oracle Provider for OLEDB 的链接服务器可让您访问 Oracle 数据库上的外部数据来源。您可以从远程 Oracle 数据来源读取数据，并对您的 RDS for SQL Server 数据库实例之外的远程 Oracle 数据库服务器运行命令。使用带有 Oracle OLEDB 的链接服务器，您可以：
+ 直接访问 SQL Server 以外的数据来源
+ 使用相同的查询对不同的 Oracle 数据来源进行查询，无需移动数据
+ 对整个企业生态系统中的数据来源发出分布式查询、更新、命令和事务
+ 在 Microsoft 商业智能套件（SSIS、SSRS、SSAS）中集成与 Oracle 数据库的连接
+ 从 Oracle 数据库迁移到 RDS for SQL Server

您可以在现有或新的 RDS for SQL Server 数据库实例上激活一个或多个适用于 Oracle 的链接服务器。然后，您可以将外部 Oracle 数据来源与您的数据库实例集成。

**Contents**
+ [支持的版本和区域](#LinkedServers_Oracle_OLEDB.VersionRegionSupport)
+ [限制和建议](#LinkedServers_Oracle_OLEDB.Limitations)
+ [激活适用于 Oracle 的链接服务器](#LinkedServers_Oracle_OLEDB.Enabling)
  + [为 OLEDB\$1ORACLE 创建选项组](#LinkedServers_Oracle_OLEDB.OptionGroup)
  + [将 `OLEDB_ORACLE` 选项添加到选项组](#LinkedServers_Oracle_OLEDB.Add)
  + [将 `OLEDB_ORACLE` 版本选项修改为另一个版本](#LinkedServers_Oracle_OLEDB.Modify)
  + [将选项组与数据库实例关联](#LinkedServers_Oracle_OLEDB.Apply)
+ [修改 OLEDB 提供程序属性](#LinkedServers_Oracle_OLEDB.ModifyProviderProperties)
+ [修改 OLEDB 驱动程序属性](#LinkedServers_Oracle_OLEDB.ModifyDriverProperties)
+ [停用适用于 Oracle 的链接服务器](#LinkedServers_Oracle_OLEDB.Disable)

## 支持的版本和区域
<a name="LinkedServers_Oracle_OLEDB.VersionRegionSupport"></a>

在以下版本上，对于 SQL Server 标准版和企业版，RDS for SQL Server 在所有区域中支持带有 Oracle OLEDB 的链接服务器：
+ SQL Server 2022，所有版本
+ SQL Server 2019，所有版本
+ SQL Server 2017，所有版本

以下 Oracle Database 版本支持带有 Oracle OLEDB 的链接服务器：
+ Oracle Database 21c，所有版本
+ Oracle Database 19c，所有版本
+ Oracle Database 18c，所有版本

以下 OLEDB Oracle 驱动程序版本支持带有 Oracle OLEDB 的链接服务器：
+ 21.7
+ 21.16

## 限制和建议
<a name="LinkedServers_Oracle_OLEDB.Limitations"></a>

请记住以下适用于带有 Oracle OLEDB 的链接服务器的限制和建议：
+ 通过在每个 RDS for SQL Server 数据库实例的安全组中添加适用的 TCP 端口来允许网络流量。例如，如果您在 EC2 Oracle 数据库实例和 RDS for SQL Server 数据库实例之间配置链接服务器，则必须允许来自 EC2 Oracle 数据库实例的 IP 地址的流量。您还必须允许 SQL Server 用于侦听数据库通信的端口上的流量。有关安全组的更多信息，请参阅[使用安全组控制访问权限](Overview.RDSSecurityGroups.md)。
+ 在打开、关闭或修改选项组中的 `OLEDB_ORACLE` 选项后，重启 RDS for SQL Server 数据库实例。选项组状态对于这些事件显示 `pending_reboot` 且是必需的。对于启用了 AlwaysOn 或镜像选项的 RDS for SQL Server 多可用区实例，在新实例创建或还原后重启实例时，预计会进行失效转移。
+ Oracle 数据来源的用户名和密码仅支持简单身份验证。
+ 不支持开放式数据库连接（ODBC）驱动程序。仅支持上面列出的 OLEDB 驱动程序版本。
+ 支持分布式事务（XA）。要激活分布式事务，请为您的数据库实例开启选项组中的 `MSDTC` 选项，并确保 XA 事务处于开启状态。有关更多信息，请参阅 [RDS for SQL Server 中的 Microsoft 分布式事务处理协调器支持](Appendix.SQLServer.Options.MSDTC.md)。
+ 不支持创建用作连接字符串的快捷方式的数据来源名称（DSN）。
+ 不支持 OLEDB 驱动程序跟踪。您可以使用 SQL Server 扩展事件来跟踪 OLEDB 事件。有关更多信息，请参阅[在 RDS for SQL Server 中设置扩展事件](https://aws.amazon.com/blogs/database/set-up-extended-events-in-amazon-rds-for-sql-server/)。
+ 不支持使用 SQL Server Management Studio（SSMS）访问 Oracle 链接服务器的目录文件夹。

## 激活适用于 Oracle 的链接服务器
<a name="LinkedServers_Oracle_OLEDB.Enabling"></a>

通过在 RDS for SQL Server 数据库实例中添加 `OLEDB_ORACLE` 选项来激活适用于 Oracle 的链接服务器。使用以下过程：

1. 创建新的选项组或选择现有的选项组。

1. 将 `OLEDB_ORACLE` 选项添加到该选项组。

1. 选择要使用的 OLEDB 驱动程序的版本。

1. 将选项组与数据库实例相关联。

1. 重启数据库实例。

### 为 OLEDB\$1ORACLE 创建选项组
<a name="LinkedServers_Oracle_OLEDB.OptionGroup"></a>

要使用适用于 Oracle 的链接服务器，请创建或修改与您计划使用的 SQL Server 版本和数据库实例版本对应的选项组。要完成此过程，请使用 AWS 管理控制台或 AWS CLI。

#### 控制台
<a name="LinkedServers_Oracle_OLEDB.OptionGroup.Console"></a>

以下过程创建适用于 SQL Server 标准版 2019 的选项组。

**创建选项组**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择**创建组**。

1. 在**创建选项组**窗口中，执行以下操作：

   1. 对于**名称**，输入选项组的名称，该名称在 AWS 账户内具有唯一性，例如 **oracle-oledb-se-2019**。此名称只能包含字母、数字和连字符。

   1. 对于**描述**，输入选项组的简要描述，例如 **OLEDB\$1ORACLE option group for SQL Server SE 2019**。此说明用于显示说明。

   1. 对于**引擎**，选择 **sqlserver-se**。

   1. 对于 **Major engine version**（主引擎版本），选择 **15.00**。

1. 选择**创建**。

#### CLI
<a name="LinkedServers_Oracle_OLEDB.OptionGroup.CLI"></a>

以下过程创建适用于 SQL Server 标准版 2019 的选项组。

**创建选项组**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds create-option-group \
      --option-group-name oracle-oledb-se-2019 \
      --engine-name sqlserver-se \
      --major-engine-version 15.00 \
      --option-group-description "OLEDB_ORACLE option group for SQL Server SE 2019"
  ```

  对于：Windows

  ```
  aws rds create-option-group ^
      --option-group-name oracle-oledb-se-2019 ^
      --engine-name sqlserver-se ^
      --major-engine-version 15.00 ^
      --option-group-description "OLEDB_ORACLE option group for SQL Server SE 2019"
  ```

### 将 `OLEDB_ORACLE` 选项添加到选项组
<a name="LinkedServers_Oracle_OLEDB.Add"></a>

接下来，使用 AWS 管理控制台或 AWS CLI 将 `OLEDB_ORACLE` 选项添加到您的选项组。

#### 控制台
<a name="LinkedServers_Oracle_OLEDB.Add.Console"></a>

**添加 OLEDB\$1ORACLE 选项**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择您刚刚创建的选项组（本例中为 **oracle-oledb-se-2019**）。

1. 选择**添加选项**。

1. 在 **Option details**（选项详细信息）下，为 **Option name**（选项名称）选择 **OLEDB\$1ORACLE**。

1. 在**版本**下，选择要安装的 OLEDB Oracle 驱动程序版本。

1. 在 **计划 (Scheduling)** 下，选择是立即添加选项还是在下一个维护时段添加选项。

1. 选择**添加选项**。

#### CLI
<a name="LinkedServers_Oracle_OLEDB.Add.CLI"></a>

**添加 OLEDB\$1ORACLE 选项**
+ 将 `OLEDB_ORACLE` 选项添加到该选项组。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds add-option-to-option-group \
      --option-group-name oracle-oledb-se-2019 \
      --options OptionName=OLEDB_ORACLE, OptionVersion=21.16 \
      --apply-immediately
  ```

  对于：Windows

  ```
  aws rds add-option-to-option-group ^
      --option-group-name oracle-oledb-se-2019 ^
      --options OptionName=OLEDB_ORACLE, OptionVersion=21.16 ^
      --apply-immediately
  ```

### 将 `OLEDB_ORACLE` 版本选项修改为另一个版本
<a name="LinkedServers_Oracle_OLEDB.Modify"></a>

要将 `OLEDB_ORACLE` 选项版本修改为另一个版本，请使用 AWS 管理控制台或 AWS CLI。

#### 控制台
<a name="LinkedServers_Oracle_OLEDB.Modify.Console"></a>

**修改 OLEDB\$1ORACLE 选项**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择具有 `OLEDB_ORACLE` 选项的选项组（在前面的示例中为 **oracle-oledb-se-2019**）。

1. 选择 **Modify option**（修改选项）。

1. 在 **Option details**（选项详细信息）下，为 **Option name**（选项名称）选择 **OLEDB\$1ORACLE**。

1. 在**版本**下，选择要使用的 OLEDB Oracle 驱动程序版本。

1. 在**计划**下，选择是立即修改选项，还是在下一个维护时段修改选项。

1. 选择 **Modify option**（修改选项）。

#### CLI
<a name="LinkedServers_Oracle_OLEDB.Add.CLI"></a>

要修改 `OLEDB_ORACLE` 选项版本，请使用 [https://docs.aws.amazon.com/cli/latest/reference/rds/add-option-to-option-group.html](https://docs.aws.amazon.com/cli/latest/reference/rds/add-option-to-option-group.html) AWS CLI 命令来处理要使用的选项组和选项版本。

**修改 OLEDB\$1ORACLE 选项**
+   
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds add-option-to-option-group \
      --option-group-name oracle-oledb-se-2019 \
      --options OptionName=OLEDB_ORACLE, OptionVersion=21.7 \
      --apply-immediately
  ```

  对于：Windows

  ```
  aws rds add-option-to-option-group ^
      --option-group-name oracle-oledb-se-2019 ^
      --options OptionName=OLEDB_ORACLE, OptionVersion=21.7 ^
      --apply-immediately
  ```

### 将选项组与数据库实例关联
<a name="LinkedServers_Oracle_OLEDB.Apply"></a>

要将 `OLEDB_ORACLE` 选项组和参数组与数据库实例关联，请使用 AWS 管理控制台或 AWS CLI 

#### 控制台
<a name="LinkedServers_Oracle_OLEDB.Apply.Console"></a>

要完成激活适用于 Oracle 的链接服务器，请将您的 `OLEDB_ORACLE` 选项组与新的或现有的数据库实例关联：
+ 对于新数据库实例，请在启动实例时将其关联。有关更多信息，请参阅“[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)”。
+ 对于现有数据库实例，请通过修改实例将其关联。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

#### CLI
<a name="LinkedServers_Oracle_OLEDB.Apply.CLI"></a>

您可以将 `OLEDB_ORACLE` 选项组和参数组与新的或现有的数据库实例关联。

**使用 `OLEDB_ORACLE` 选项组和参数组创建实例**
+ 指定创建选项组时使用的相同数据库引擎类型和主要版本。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds create-db-instance \
      --db-instance-identifier mytestsqlserveroracleoledbinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 15.0.4236.7.v1 \
      --allocated-storage 100 \
      --manage-master-user-password \
      --master-username admin \
      --storage-type gp2 \
      --license-model li \
      --domain-iam-role-name my-directory-iam-role \
      --domain my-domain-id \
      --option-group-name oracle-oledb-se-2019 \
      --db-parameter-group-name my-parameter-group-name
  ```

  对于：Windows

  ```
  aws rds create-db-instance ^
      --db-instance-identifier mytestsqlserveroracleoledbinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 15.0.4236.7.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --domain-iam-role-name my-directory-iam-role ^
      --domain my-domain-id ^
      --option-group-name oracle-oledb-se-2019 ^
      --db-parameter-group-name my-parameter-group-name
  ```

**修改实例并关联 `OLEDB_ORACLE` 选项组**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-instance \
      --db-instance-identifier mytestsqlserveroracleoledbinstance \
      --option-group-name oracle-oledb-se-2019 \
      --db-parameter-group-name my-parameter-group-name \
      --apply-immediately
  ```

  对于：Windows

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier mytestsqlserveroracleoledbinstance ^
      --option-group-name oracle-oledb-se-2019 ^
      --db-parameter-group-name my-parameter-group-name ^
      --apply-immediately
  ```

## 修改 OLEDB 提供程序属性
<a name="LinkedServers_Oracle_OLEDB.ModifyProviderProperties"></a>

您可以查看和更改 ODB 提供程序的属性。只有 `master` 用户才能执行此任务。在数据库实例上创建的所有适用于 Oracle 的链接服务器都使用该 OLEDB 提供程序的相同属性。调用 `sp_MSset_oledb_prop` 存储过程以更改 OLEDB 提供程序的属性。

更改 OLEDB 提供程序属性

```
				
USE [master]
GO
EXEC sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'AllowInProcess', 1 
EXEC sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'DynamicParameters', 0
GO
```

可以修改以下属性：


****  

| 属性名称 | 建议的值（1 = 开启，0 = 关闭） | 说明 | 
| --- | --- | --- | 
| `Dynamic parameter` | 1 | 在参数化查询中允许 SQL 占位符（以“?”表示）。 | 
| `Nested queries` | 1 | 允许在 `FROM` 子句中嵌套 `SELECT` 语句，例如子查询。 | 
| `Level zero only` | 0 | 仅针对此提供程序调用基级 OLEDB 接口。 | 
| `Allow inprocess` | 1 | 如果开启，Microsoft SQL Server 允许将提供程序实例化为进程内服务器。将此属性设置为 1 可使用 Oracle 链接服务器。 | 
| `Non transacted updates` | 0 | 如果不为零，则 SQL Server 允许更新。 | 
| `Index as access path` | False | 如果不为零，则 SQL Server 会尝试使用提供程序的索引来获取数据。 | 
| `Disallow adhoc access` | False | 如果已设置，则 SQL Server 不允许对 OLEDB 提供程序运行传递查询。虽然可以选中此选项，但有时运行传递查询是合适的。 | 
| `Supports LIKE operator` | 1 | 表示提供程序支持使用 LIKE 关键字进行查询。 | 

## 修改 OLEDB 驱动程序属性
<a name="LinkedServers_Oracle_OLEDB.ModifyDriverProperties"></a>

在创建适用于 Oracle 的链接服务器时，可以查看和更改 OLEDB 驱动程序的属性。只有 `master` 用户才能执行此任务。驱动程序属性定义了在使用远程 Oracle 数据来源时 OLEDB 驱动程序如何处理数据。驱动程序属性特定于在数据库实例上创建的每个 Oracle 链接服务器。调用 `master.dbo.sp_addlinkedserver` 存储过程以更改 OLEDB 驱动程序的属性。

示例：创建链接服务器并更改 OLEDB 驱动程序 `FetchSize` 属性

```
	
EXEC master.dbo.sp_addlinkedserver
@server = N'Oracle_link2',
@srvproduct=N'Oracle',
@provider=N'OraOLEDB.Oracle',
@datasrc=N'my-oracle-test.cnetsipka.us-west-2.rds.amazonaws.com:1521/ORCL',
@provstr='FetchSize=200'
GO
```

```
	
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'Oracle_link2',
@useself=N'False',
@locallogin=NULL,
@rmtuser=N'master',
@rmtpassword='Test#1234'
GO
```

**注意**  
作为安全最佳实践，请指定除此处所示提示以外的密码。

## 停用适用于 Oracle 的链接服务器
<a name="LinkedServers_Oracle_OLEDB.Disable"></a>

要停用适用于 Oracle 的链接服务器，请从其选项组中删除 `OLEDB_ORACLE` 选项。

**重要**  
删除此选项不会删除数据库实例上现有的链接服务器配置。您必须手动删除它们，才能将其从数据库实例中删除。  
删除后，您可以重新激活 `OLEDB_ORACLE` 选项，以重用先前在数据库实例上配置的链接服务器配置。

### 控制台
<a name="LinkedServers_Oracle_OLEDB.Disable.Console"></a>

以下过程删除 `OLEDB_ORACLE` 选项。

**从其选项组中删除 OLEDB\$1ORACLE 选项**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择具有 `OLEDB_ORACLE` 选项的选项组（在前面的示例中为 `oracle-oledb-se-2019`）。

1. 选择 **Delete option (删除选项)**。

1. 在 **Deletion options**（删除选项）下，为 **Options to delete**（待删除的选项）选择 **OLEDB\$1ORACLE**。

1. 在 **Apply immediately**（立即应用）下，选择 **Yes**（是）可立即删除选项，选择 **No**（否）可在下一个维护时段删除它。

1. 选择**删除**。

### CLI
<a name="LinkedServers_Oracle_OLEDB.Disable.CLI"></a>

以下过程删除 `OLEDB_ORACLE` 选项。

**从选项组中删除 OLEDB\$1ORACLE 选项**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds remove-option-from-option-group \
      --option-group-name oracle-oledb-se-2019 \
      --options OLEDB_ORACLE \
      --apply-immediately
  ```

  对于：Windows

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name oracle-oledb-se-2019 ^
      --options OLEDB_ORACLE ^
      --apply-immediately
  ```