配置 Oracle 数据库与 Aurora PostgreSQL-Compatible 之间的链接 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

配置 Oracle 数据库与 Aurora PostgreSQL-Compatible 之间的链接

创建者:Jeevan Shetty(AWS)、Bhanu Ganesh Gudivada(AWS)、Sushant Deshmukh(AWS)、Uttiya Gupta(AWS)和 Vikas Gupta(AWS)

环境:PoC 或试点

源:Oracle 数据库

目标:Aurora PostgreSQL-Compatible

R 类型:更换平台

工作负载:Oracle;开源

技术:迁移;数据库

Amazon Web Services:Amazon Aurora;Amazon EC2 Auto Scaling;Amazon Route 53

作为迁移到 Amazon Web Services(AWS)Cloud 的一部分,您可以对应用程序进行现代化改造,以使用云原生数据库。从 Oracle 数据库迁移到 Amazon Aurora PostgreSQL-Compatible Edition 就是朝着现代化迈出的这样一步。作为迁移的一部分,本地 Oracle 数据库链接也需要转换。 

使用数据库链接,一个数据库可以访问另一个数据库中的对象。从 Oracle 数据库迁移到 Aurora PostgreSQL-Compatible 后,从 Oracle 数据库服务器到其他 Oracle 数据库服务器的数据库链接必须转换为 PostgreSQL 到 Oracle 的数据库链接。 

此模式显示了如何设置从 Oracle 数据库服务器到 Aurora PostgreSQL-Compatible 数据库的数据库链接。由于数据库链接是单向的,因此该模式还包括将数据库链接从 PostgreSQL 数据库转换到 Oracle 数据库。

从 Oracle 数据库迁移并转换为 Aurora PostgreSQL-Compatible 数据库后,需要执行以下步骤来设置数据库之间的数据库链接:

  • 要设置以 Oracle 数据库为源、以 Aurora PostgreSQL-Compatible 为目标的数据库链接,必须将 Oracle 数据库网关配置为异构数据库之间的通信。

  • 如果您要将 Aurora PostgreSQL-Compatible 版本 12.6 及更早版本作为源数据库,将 Oracle 数据库作为目标数据库,在两者之间设置数据库链接,则该 oracle_fdw 扩展程序在本地不可用。相反,您可以在 Aurora PostgreSQL-Compatible 数据库中使用 postgres_fdw 扩展程序,并在 Amazon Elastic Compute Cloud(Amazon EC2)上创建的 PostgreSQL 数据库中配置 oracle_fdw。该数据库充当 Aurora PostgreSQL-Compatible 数据库与 Oracle 数据库之间的中介。此模式包括两个用于设置与 Aurora PostgreSQL 12.6 及更早版本的数据库链接的选项:

    • Amazon EC2 启动脚本更新了 Amazon Route 53 中的内部域名系统(DNS)条目,使用该脚本在 Amazon EC2 自动扩缩组中配置 EC2 实例。

    • 在 Amazon EC2 自动扩缩组中配置 EC2 实例,并使用网络负载均衡器实现高可用性(HA)。

如果您要设置 Aurora PostgreSQL-Compatible 版本 12.7 与更高版本之间的数据库链接,则可以使用 oracle_fdw 扩展程序。

先决条件

  • 虚拟私有云(VPC)中的 Amazon Aurora PostgreSQL-Compatible 数据库

  • Oracle 数据库与 Aurora PostgreSQL–Compatible 数据库之间的网络连接

限制

  • 目前,如果将 Amazon Relational Database Service(Amazon RDS)for Oracle 作为源数据库,将 Aurora PostgreSQL-Compatible 作为目标数据库,则无法设置数据库链接。

产品版本

  • Racle Database 11g 及更高版本

  • Aurora PostgreSQL-Compatible 11 及更高版本

源技术堆栈

在迁移之前,Oracle 源数据库可以使用数据库链接访问其他 Oracle 数据库中的对象。它可以在本地或 Amazon Web Services Cloud 中的 Oracle 数据库之间进行原生运行。

目标技术堆栈

选项 1

  • Amazon Aurora PostgreSQL 兼容版

  • Amazon EC2 实例上的 PostgreSQL 数据库

  • Amazon EC2 自动扩缩组

  • Amazon Route 53

  • Amazon Simple Notification Service (Amazon SNS)

  • AWS Identity and Access Management (IAM)

  • AWS Direct Connect

选项 2

  • Amazon Aurora PostgreSQL 兼容版

  • Amazon EC2 实例上的 PostgreSQL 数据库

  • Amazon EC2 自动扩缩组

  • 网络负载均衡器

  • Amazon SNS

  • Direct Connect

选项 3

  • Amazon Aurora PostgreSQL 兼容版

  • Direct Connect

目标架构

选项 1

下图显示了使用 oracle_fdwpostgres_fdw 扩展程序设置的数据库链接,HA 由 Amazon EC2 Auto Scaling 和 Route 53 提供。

通过 Direct Connect 将企业数据中心和 AWS 云连接起来的七步流程。
  1. 带有 postgres_fdw 扩展程序的 Aurora PostgreSQL-Compatible 实例连接到 Amazon EC2 上的 PostgreSQL 数据库。

  2. 带有 oracle_fdw 扩展程序的 PostgreSQL 数据库位于自动扩缩组中。

  3. Amazon EC2 上的 PostgreSQL 数据库使用 Direct Connect 连接到本地的 Oracle 数据库。

  4. Oracle 数据库配置了 Oracle 数据库网关,用于从 Oracle 数据库到 AWS 上的 PostgreSQL 数据库的连接。

  5. IAM 向 Amazon EC2 授予更新 Route 53 记录的权限。

  6. Amazon SNS 会针对自动扩缩操作发送警报。

  7. 在 Route 53 中配置的域名指向 PostgreSQL Amazon EC2 实例 IP 地址。

选项 2

下图显示了使用 oracle_fdwpostgres_fdw 扩展程序设置的数据库链接,HA 由自动扩缩组和网络负载均衡器提供。

包含网络负载均衡器的六步流程。
  1. 带有 postgres_fdw 扩展程序的 Aurora PostgreSQL-Compatible 实例连接到网络负载均衡器。

  2. 网络负载均衡器将在 Amazon EC2 上分发从 Aurora PostgreSQL-Compatible 数据库到 PostgreSQL 数据库的连接。

  3. 带有 oracle_fdw 扩展程序的 PostgreSQL 数据库位于自动扩缩组中。

  4. Amazon EC2 上的 PostgreSQL 数据库使用 Direct Connect 连接到本地的 Oracle 数据库。

  5. Oracle 数据库配置了 Oracle 数据库网关,用于从 Oracle 数据库到 AWS 上的 PostgreSQL 数据库的连接。

  6. Amazon SNS 会针对自动扩缩操作发送警报。

选项 3

下图显示了在 Aurora PostgreSQL-Compatible 数据库中使用该 oracle_fdw 扩展程序设置数据库链接。

使用 oracle_fwd 扩展名的轻量级两步流程。
  1. 带有 oracle_fdw 扩展程序的 Aurora PostgreSQL-Compatible 实例使用 Direct Connect 连接到 Oracle 数据库。

  2. 在 Oracle 服务器上设置的 Oracle 数据库网关允许通过 Direct Connect 连接到 Aurora PostgreSQL-Compatible 数据库。

Amazon Web Services

  • Amazon Aurora PostgreSQL 兼容版是一个完全托管的、与 ACID 兼容的关系数据库引擎,可帮助您建立、运行和扩展 PostgreSQL 部署。

  • AWS Direct Connect 通过标准的以太网光纤电缆将内部网络链接到 Direct Connect 位置。通过此连接,您可以直接创建连接到公有 Amazon Web Services 的虚拟接口,同时绕过网络路径中的互联网服务提供商。

  • Amazon Elastic Compute Cloud (Amazon EC2) 在 Amazon Web Services Cloud 中提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器,并快速扩展或缩减它们。在这种模式中,选项 1 和选项 2 使用 EC2 实例来托管 PostgreSQL 数据库。

  • Amazon EC2 Auto Scaling 可帮助您保持应用程序的可用性,并允许您根据自己定义的条件自动添加或删除 Amazon EC2 实例。

  • AWS Identity and Access Management (AWS IAM) 通过控制验证和授权使用您 AWS 资源的用户,帮助您安全地管理对您 AWS 资源的访问。

  • Amazon Route 53 是一种可用性高、可扩展性强的 DNS Web 服务。

  • Amazon Simple Notification Service (Amazon SNS) 可帮助您协调和管理发布者与客户端(包括 Web 服务器和电子邮件地址)之间的消息交换。

  • 弹性负载均衡(ELB)将传入的应用程序或网络流量分发到多个目标。例如,您可以将流量分发到一个或多个可用区中的 Amazon Elastic Compute Cloud(Amazon EC2)实例、容器以及 IP 地址。此模式使用网络负载均衡器。

其他服务

任务描述所需技能

创建一个 EC2 实例并配置 oracle_fdw PostgreSQL 扩展程序。

  1. 使用 Amazon Linux 2 操作系统创建 EC2 实例。

  2. 要安装 PostgreSQL,请以 ec2-user 身份登录 EC2 实例,然后运行以下命令。

    sudo su - root sudo tee /etc/yum.repos.d/pgdg.repo<<EOF [pgdg12] name=PostgreSQL 12 for RHEL/CentOS 7 - x86_64 baseurl=https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-7-x86_64 enabled=1 gpgcheck=0 EOF sudo yum install -y postgresql12-server sudo yum install postgresql12-devel sudo /usr/pgsql-12/bin/postgresql-12-setup initdb sudo systemctl enable postgresql-12 sudo systemctl start postgresql-12
  3. 从中下载oracle_fdw源代码 GitHub。

    mkdir -p /var/lib/pgsql/oracle_fdw/ cd /var/lib/pgsql/oracle_fdw/ wget https://github.com/laurenz/oracle_fdw/archive/refs/heads/master.zip unzip master.zip
  4. 安装 Oracle 即时客户端并设置 Oracle 环境变量。

    yum install https://download.oracle.com/otn_software/linux/instantclient/1912000/oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64.rpm
    yum install https://download.oracle.com/otn_software/linux/instantclient/1912000/oracle-instantclient19.12-devel-19.12.0.0.0-1.x86_64.rpm
    export ORACLE_HOME=/usr/lib/oracle/19.12/client64export LD_LIBRARY_PATH=/usr/lib/oracle/19.12/client64/lib:$LD_LIBRARY_PATH
  5. 务必验证 pg_config 是否引用了正确版本。

    which pg_config
  6. 编译 oracle_fdw

    cd /var/lib/pgsql/oracle_fdw/oracle_fdw-master make make install

    注意:如果您收到提示缺失 oci.h 的错误,请在 Makefile 中添加以下内容:

    • 对于 PG_CPPFLAGS,添加 -I/usr/include/oracle/19.12/client64

    • 对于 SHLIB_LINK,添加 -L/usr/lib/oracle/19.12/client64/lib

    有关更多信息,请参阅 oracle_fdw repository

  7. 登录 PostgreSQL 数据库并创建 oracle_fdw 扩展程序。

    sudo su - postgres psql postgres create extension oracle_fdw;
  8. 创建一个将拥有外部表的 PostgreSQL 用户。

    CREATE USER pguser WITH PASSWORD '<password>'; GRANT CONNECT ON DATABASE postgres TO pguser;
  9. 创建外部数据包装程序。使用 Oracle 数据库服务器详细信息替换以下值:

    • <Oracle DB Server IP>

    • <Oracle DB Port>

    • <Oracle_SID>

    create server oradb foreign data wrapper oracle_fdw options (dbserver '//<Oracle DB Server IP>:<Oracle DB Port>/<Oracle_SID>'); GRANT USAGE ON FOREIGN SERVER oradb TO pguser;
  10. 要创建用户映射和映射到 Oracle 表的外部表,请以 pguser 身份连接到 PostgreSQL 数据库,然后运行以下命令。请注意,在示例代码中,DMS_SAMPLE 用作包含 NAME_DATA 表的 Oracle 架构,并且 dms_sample 是其密码。如有必要,请替换它们。

    create user mapping for pguser server oradb options (user 'DMS_SAMPLE', password 'dms_sample');

    注意:以下示例在 PostgreSQL 中为 Oracle 数据库中的表创建了一个外部表。必须为每个需要从 PostgreSQL 实例访问的 Oracle 表创建一个类似的外部表。

    CREATE FOREIGN TABLE name_data(         name_type CHARACTER VARYING(15) NOT NULL,         name CHARACTER VARYING(45) NOT NULL     ) SERVER oradb OPTIONS (schema 'DMS_SAMPLE', table 'NAME_DATA'); select count(*) from name_data;
  11. 在 EC2 实例上配置 PostgreSQL 数据库,使其能够在 PostgreSQL 数据库启动期间找到 Oracle 库。这是 oracle_fdw 扩展程序要求的。

    sudo systemctl stop postgresql-12

    注意:编辑 /usr/lib/systemd/system/postgresql-12.service 文件以包含环境变量,以便 systemctl 启动时可以找到 oracle_fdw 所需 Oracle 库。

    # Oracle Environment Variables Environment=ORACLE_HOME=/u01/app/oracle/product/12.2.0.1/db_1 Environment=LD_LIBRARY_PATH=/u01/app/oracle/product/12.2.0.1/db_1/lib:/lib:/usr/lib sudo systemctl start postgresql-12
云管理员、数据库管理员
任务描述所需技能

在 Amazon Route 53 中设置私有托管区。

  1. 在 Amazon Route 53 中创建私有托管区。记下将与 EC2 实例关联的域名

  2. 使用解析到包含 oracle_fdw PostgreSQL 扩展程序的 EC2 实例 IP 地址的简单路由策略添加“A”记录。

  3. 保存“A”记录后,记下步骤 1 中域名的托管区 ID。这将用于创建相应的 IAM policy。

数据库管理员、云管理员

创建将附加到 EC2 实例的 IAM 角色。

要创建将附加到 EC2 实例的 IAM 角色,请使用以下策略。将 <Hosted zone ID> 替换为上一个情节中捕捉的信息。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "route53:ChangeResourceRecordSets", "Resource": "arn:aws:route53:::hostedzone/<Hosted zone ID>" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "route53:ListHostedZones", "Resource": "*" } ] }
云管理员、数据库管理员

创建 EC2 启动模板。

  1. 创建包含 oracle_fdw PostgreSQL 扩展程序的 EC2 实例的 AMI。

  2. 使用 AMI 创建 EC2 启动模板。

  3. 要允许从 Aurora PostgreSQL-Compatible 实例连接到 EC2 实例上的 PostgreSQL 数据库,请关联您之前创建的 IAM 角色并附加安全组。

  4. 用户数据部分中,添加以下命令,将 Hosted zone IDDomain Name 更改为相应的值。然后选择创建启动模板

    #!/bin/bash v_zone_id='Hosted zone ID' v_domain_name='Domain Name' v_local_ipv4=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4) aws route53 change-resource-record-sets --hosted-zone-id $v_zone_id --change-batch '{"Changes":[{"Action":"UPSERT","ResourceRecordSet":{"Name":"'$v_domain_name'","Type":"A","TTL":10,"ResourceRecords":[{"Value":"'$v_local_ipv4'"}]}}]}'
云管理员、数据库管理员

设置自动扩缩组。

  1. 要设置自动扩缩组,请使用您在上一步中创建的启动模板。

  2. 配置将用于启动 EC2 实例的相应的 VPC 和子网。选项 1 安装程序不使用负载均衡器

  3. 扩展策略下将所需容量、最小容量和最大容量均设置为 1。

  4. 要向操作团队发送警报,请添加诸如“启动”或“终止”之类的事件的通知。

  5. 查看配置,然后选择创建自动扩缩组

完成后,自动扩缩组启动包含 oracle_fdw PostgreSQL 扩展程序的 EC2 实例,该实例连接到 Oracle 数据库。

注意:当您需要访问新的 Oracle 表或更改 Oracle 表的结构时,这些更改必须反映在 PostgreSQL 外部表中。实施更改后,必须创建 EC2 实例的新 AMI 并使用它来配置启动模板。

云管理员、数据库管理员

在 Aurora PostgreSQL-Compatible 实例中配置 postgres_fdw 扩展程序。

  1. 在 Aurora PostgreSQL-Compatible 实例中配置 postgres_fdw。它连接到 Amazon EC2 上的 PostgreSQL 数据库,该数据库充当 Aurora PostgreSQL-Compatible 实例与 Oracle 数据库之间的中间节点。

  2. 连接到 Aurora PostgreSQL-Compatible 实例并运行以下命令。

    create extension postgres_fdw; CREATE SERVER pgoradb FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbname 'postgres', host 'Domain Name', port '5432'); CREATE USER MAPPING for postgres SERVER pgoradb OPTIONS (user 'pguser', password '<password>'); CREATE FOREIGN TABLE data_mart.name_data(     name_type CHARACTER VARYING(15) NOT NULL,     name CHARACTER VARYING(45) NOT NULL ) SERVER pgoradb OPTIONS (schema_name 'public', table_name 'name_data'); select count(*) from data_mart.name_data;

这样就完成了从 Aurora PostgreSQL-Compatible 到 Oracle 数据库的数据库链接的设置。

该解决方案提供了灾难恢复(DR)策略,以防托管 PostgreSQL 数据库的 EC2 实例出现故障。自动扩缩组启动一个新的 EC2 实例,并使用新 EC2 实例的 IP 地址更新 DNS。这样可以确保 Aurora PostgreSQL-Compatible 实例中的外部表无需手动干预即可访问 Oracle 表。

云管理员、数据库管理员
任务描述所需技能

创建 EC2 启动模板。

  1. 创建包含 oracle_fdw PostgreSQL 扩展程序的 EC2 实例的 AMI。

  2. 使用 AMI 创建 EC2 启动模板。

云管理员、数据库管理员

设置目标组、网络负载均衡器和自动扩缩组。

  1. 要创建目标组,请选择实例作为目标类型。对于协议,选择 TCP;对于端口,选择 5432。然后选择目标组所在的 VPC,并选择相应的运行状况检查

  2. 在 VPC 中创建内部网络负载均衡器。将负载均衡器配置为侦听协议:端口 TCP:5432。将默认操作设置为转发到,选择您创建的目标组。

  3. 使用您创建的启动模板设置自动扩缩组。

  4. 使用将用于启动 EC2 实例的相应的 VPC 和子网来配置自动扩缩组。 

  5. 对于负载均衡选项,选择连接到现有负载均衡器,然后选择您创建的目标组。对于运行状况检查,选择 ELB

  6. 扩展策略下方,根据需要将所需容量和最小容量设置为 2,并将最大容量设置为更高的数字,以支持高可用性负载。

  7. 要向操作团队发送警报,请添加诸如启动终止之类的事件的通知。

  8. 查看配置,然后选择创建自动扩缩组

完成后,自动扩缩组启动所需数量的包含 oracle_fdw PostgreSQL 扩展程序的 EC2 实例,这些实例连接到 Oracle 数据库。

注意:当您需要访问新的 Oracle 表或更改 Oracle 表的结构时,这些更改必须反映在 PostgreSQL 外部表中。实施更改后,必须创建 EC2 实例的新 AMI 并使用它来配置启动模板。

云管理员、数据库管理员

在 Aurora PostgreSQL-Compatible 实例中配置 postgres_fdw 扩展程序。

在 Aurora PostgreSQL-Compatible 实例中配置 postgres_fdw。它通过网络负载均衡器连接到 EC2 上的 PostgreSQL 数据库。EC2 上的 PostgreSQL 实例用作 Aurora PostgreSQL-Compatible 实例与 Oracle 数据库之间的中间节点。

连接到 Aurora PostgreSQL-Compatible 实例并运行以下命令。

create extension postgres_fdw; CREATE SERVER pgoradb FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbname 'postgres', host 'DNS name of Network Load Balancer', port '5432'); CREATE USER MAPPING for postgres SERVER pgoradb OPTIONS (user 'pguser', password '<password>'); CREATE FOREIGN TABLE data_mart.name_data( name_type CHARACTER VARYING(15) NOT NULL, name CHARACTER VARYING(45) NOT NULL ) SERVER pgoradb OPTIONS (schema_name 'public', table_name 'name_data'); select count(*) from data_mart.name_data;

这样就完成了从 Aurora PostgreSQL-Compatible 到 Oracle 数据库的数据库链接的设置。 

如果托管 PostgreSQL 数据库的 EC2 出现故障,网络负载均衡器会识别故障并停止流向出现故障的 EC2 实例的流量。自动扩缩组启动一个新的 EC2 实例,并将其注册到该负载均衡器。这样在原始 EC2 实例出现故障后,可以确保 Aurora PostgreSQL-Compatible 实例中的外部表无需手动干预即可访问 Oracle 表。

云管理员、数据库管理员
任务描述所需技能

在 Aurora PostgreSQL-Compatible 实例中配置 oracle_fdw 扩展程序。

对于 Aurora PostgreSQL-Compatible 数据库版本 12.7 及更高版本,该 oracle_fdw 扩展程序是本地可用的。这样就无需在 EC2 实例上创建中间 PostgreSQL 数据库。Aurora PostgreSQL-Compatible 实例可以直接连接到 Oracle 数据库。

  1. 要创建 oracle_fdw 扩展程序,请登录 Aurora PostgreSQL-Compatible 实例,然后运行以下命令。

    create extension oracle_fdw;
  2. 创建外部数据包装程序。使用 Oracle 数据库服务器详细信息替换以下值:

    • <Oracle DB Server IP>

    • <Oracle DB Port>

    • <Oracle_SID>

    create server oradb foreign data wrapper oracle_fdw options (dbserver '//<Oracle DB Server IP>:<Oracle DB Port>/<Oracle_SID>');
  3. 要创建用户映射和映射到 Oracle 表的外部表,请运行以下命令。请注意,在示例代码中,DMS_SAMPLE 用作包含 NAME_DATA 表的 Oracle 架构,并且 dms_sample 是其密码。如有必要,请替换它们。 此外,必须在 Aurora PostgreSQL-Compatible 实例中创建外部表才能访问所有其他 Oracle 表。

    create user mapping for postgres server oradb options (user 'DMS_SAMPLE', password 'dms_sample'); CREATE FOREIGN TABLE name_data(     name_type character varying(15) OPTIONS (key 'true') NOT NULL,     name character varying(45)  OPTIONS (key 'true') NOT NULL )SERVER oradb OPTIONS (schema 'DMS_SAMPLE', table 'NAME_DATA');

    必须为每个需要从 PostgreSQL 实例访问的 Oracle 表创建一个类似的外部表。

云管理员、数据库管理员
任务描述所需技能

在本地 Oracle 数据库服务器中配置网关。

  1. 以根用户身份安装最新的 UnixODBC 驱动程序管理器。

    sudo yum install unixODBC*
  2. 安装 PostgreSQL ODBC 驱动程序(psqlODBC)。

    sudo wget https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install pgdg-redhat-repo-latest.noarch.rpm sudo yum install postgresql12-odbc
  3. 为驱动程序创建 ODBC 数据来源名称(DSN)。

    UnixODBC 驱动程序管理器提供 odbcinstodbc_configisql 命令行实用程序,用于配置和测试驱动程序。使用 odbcinstodbc_config 实用程序,您可以找到 UnixODBC 驱动程序管理器文件以传递驱动程序信息,从而创建 DSN。

    odbcinst -j

    以下代码显示了示例输出。

    unixODBC 2.3.1 DRIVERS............: /etc/odbcinst.ini SYSTEM DATA SOURCES: /etc/odbc.ini FILE DATA SOURCES..: /etc/ODBCDataSources USER DATA SOURCES..: /root/.odbc.ini SQLULEN Size.......: 8 SQLLEN Size........: 8 SQLSETPOSIROW Size.: 8 odbc_config --odbcini --odbcinstini /etc/odbc.ini /etc/odbcinst.ini

    从示例输出中,您可以看到 odbcinst.iniodbc.ini 文件。基本上,odbcinst.ini 是环境中 ODBC 驱动程序的注册表和配置文件,而 odbc.ini 是 ODBC DSN 的注册表和配置文件。要启用驱动程序,您需要修 改这两个文件。

  4. 在 ODBC 驱动程序文件 /etc/odbcinst.ini 中配置 psqlODBC 驱动程序库,并在文件末尾添加以下几行。这些行为驱动程序提供了一个条目。

    [PostgreSQL] Description     = ODBC for PostgreSQL Driver          = /usr/lib/psqlodbcw.so Setup           = /usr/lib/libodbcpsqlS.so Driver64        = /usr/lib64/psqlodbcw.so Setup64         = /usr/lib64/libodbcpsqlS.so FileUsage       = 1
  5. 在 /etc/odbc.ini 文件中创建 DSN。驱动程序管理器读取此文件以确定如何使用 odbcinst.ini 中指定的驱动程序详细信息连接到数据库。将以下参数替换为实际值:

    • <PostgreSQL Port>

    • <PostgreSQL Database Name>

    • <Aurora PostgreSQL Endpoint>

    • <PostgreSQL username>

    • <PostgreSQL password>

    [pgdsn] Driver=/usr/pgsql-12/lib/psqlodbc.so Description=PostgreSQL ODBC Driver Database=<PostgreSQL Database Name> Servername=<Aurora PostgreSQL Endpoint> Username=<PostgreSQL username> Password=<PostgreSQL password> Port=<PostgreSQL Port> UseDeclareFetch=1 CommLog=/tmp/pgodbclink.log Debug=1 LowerCaseIdentifier=1
  6. 使用该 isql 实用程序,测试与您创建的 PostgreSQL 数据库 DSN 的 ODBC 连接(psqlODBC)。

    isql -v pgdsn

    以下代码显示了示例输出。

    +---------------------------------------+ | Connected!                        | |                                         | | sql-statement                    | | help [tablename]                | | quit                                   | |                                         | +---------------------------------------+ quit
  7. 使用 DSN 为 ODBC(HS)服务处理程序创建网关。

    oracle 用户身份在 $ORACLE_HOME/hs/admin 位置创建文件 initDSN.ora。在本例中,pgdsn 是 DSN,因此您需要创建一个名为 initpgdsn.ora 的文件。

    more initpgdsn.ora

    以下代码显示了示例输出。

    # This is a sample agent init file that contains the HS parameters that are # needed for the Database Gateway for ODBC # # HS init parameters # HS_FDS_CONNECT_INFO=pgdsn HS_FDS_TRACE_LEVEL=OFF HS_FDS_TRACE_FILE_NAME=/tmp/ora_hs_trace.log HS_FDS_SHAREABLE_NAME=/usr/lib64/libodbc.so HS_NLS_NCHAR=UCS2 HS_LANGUAGE=AMERICAN_AMERICA.AL32UTF8 # # ODBC specific environment variables # set ODBCINI=/etc/odbc.ini
  8. 通过在 SID_LIST_LISTENER 中添加 DSN 条目来调整侦听器($ORACLE_HOME/network/admin/listener.ora)。

    more $ORACLE_HOME/network/admin/listener.ora

    以下代码显示了示例输出。

    SID_LIST_LISTENER =   (SID_LIST =    (SID_DESC=     (SID_NAME = pgdsn)     (ORACLE_HOME = /u01/app/oracle/product/12.2.0.1/db_1)     (ENVS="LD_LIBRARY_PATH=/lib64:/usr/lib:/usr/lib64:/u01/app/oracle/product/12.2.0.1/db_1")     (PROGRAM=dg4odbc)    ) )
  9. 添加 DSN 条目来调整 tnsname$ORACLE_HOME/network/admin/tnsnames.ora)。

    more $ORACLE_HOME/network/admin/tnsnames.ora

    以下代码显示了示例输出。

    pgdsn=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SID=pgdsn))(HS=OK))
  10. 重新启动 Oracle 侦听器,以便联网文件中与 DSN 相关的条目可以生效,并使用相应的 Oracle 侦听器名称更改 <Listener Name>

    lsnrctl stop <Listener Name> lsnrctl start <Listener Name>

    重新启动 Oracle 侦听器后,它将创建一个带有 DSN(pgdsn)名称的 Oracle HS 处理程序。

  11. 使用 DSN 创建 Oracle 数据库链接,通过登录 Oracle 数据库来访问 PostgreSQL 数据库。

    create public database link pgdb connect to "postgres" identified by "postgres" using 'pgdsn';
  12. 使用创建的 Oracle 数据库链接访问 PostgreSQL 数据。

    select count(*) from "pg_tables"@pgdb;
数据库管理员

尽管该 oracle_fdw 扩展程序适用于 Aurora PostgreSQL-Compatible 版本 12.7 及更高版本,但这种模式包括适用于 Aurora PostgreSQL-Compatible 数据库的早期版本的解决方案,因为许多客户支持 Aurora PostgreSQL-Compatible 数据库的较旧版本,而升级数据库涉及多个级别的应用程序和性能测试。此外,数据库链接功能也获得广泛使用,本文的目的是为 Aurora PostgreSQL-Compatible 的所有版本提供选项。