【赵渝强老师】在PostgreSQL中访问Oracle

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
简介: 本文介绍了如何在PostgreSQL中使用oracle_fdw扩展访问Oracle数据库数据。首先需从Oracle官网下载三个Instance Client安装包并解压,设置Oracle环境变量。接着从GitHub下载oracle_fdw扩展,配置pg_config环境变量后编译安装。之后启动PostgreSQL服务器,在数据库中创建oracle_fdw扩展及外部数据库服务,建立用户映射。最后通过创建外部表实现对Oracle数据的访问。文末附有具体操作步骤与示例代码。

b225.png

在PostgreSQL数据库中,oracle_fdw是PostgreSQL数据库支持的外部扩展。通过使用oracle_fdw扩展可以读取到Oracle数据库中的数据。它是一种非常方便且常见的PostgreSQL与Oracle的同步数据的方法。使用oracle_fdw扩展需要依赖Oracle的Instance Client环境。视频讲解如下:


下面通过具体的步骤来演示如何使用oracle_fdw扩展。

(1)从Oracle官方网站下载以下3个Oracle Instance Client安装包,如下图所示。

instantclient-basic-linuxx64.zip 
instantclient-sdk-linuxx64.zip
instantclient-sqlplus-linuxx64.zip

image.png


(2)解压三个文件包。

unzip instantclient-basic-linuxx64.zip 
unzip instantclient-sdk-linuxx64.zip
unzip instantclient-sqlplus-linuxx64.zip


(3)解压后会生成instantclient_21_10目录,将其更名为instantclient。

mv instantclient_21_10 instantclient


(4)设置Oracle环境变量。

export ORACLE_HOME=/home/postgres/tools/instantclient
export OCI_LIB_DIR=$ORACLE_HOME
export OCI_INC_DIR=$ORACLE_HOME/sdk/include
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH


(5)从GitHub上下载oracle_fwd扩展,并解压安装包,如下图所示。

image.png


(6)设置pg_config的环境变量,并编译oracle_fdw扩展。

export PATH=/home/postgres/training/pgsql/bin:$PATH
cd oracle_fdw-ORACLE_FDW_2_5_0/
make
make install


(7)使用root用户添加Oracle依赖的库信息,添加完成后切换回postgres用户。

su -
echo "/home/postgres/tools/instantclient/" >> /etc/ld.so.conf
ldconfig
su - postgres


(8)启动PostgreSQL数据库服务器,并登录PostgreSQL数据库实例创建oracle_fdw扩展。

postgres=# create extension oracle_fdw;


(9)查看当前PostgreSQL数据库中已安装的扩展。

postgres=# \dx
# 输出的信息如下:
List of installed extensions
-[ RECORD 1 ]---------------------------------------------------
Name        | file_fdw
Version     | 1.0
Schema      | public
Description | foreign-data wrapper for flat file access
-[ RECORD 2 ]---------------------------------------------------
Name        | oracle_fdw
Version     | 1.2
Schema      | public
Description | foreign data wrapper for Oracle access
-[ RECORD 3 ]---------------------------------------------------
Name        | plpgsql
Version     | 1.0
Schema      | pg_catalog
Description | PL/pgSQL procedural language
-[ RECORD 4 ]---------------------------------------------------
Name        | postgres_fdw
Version     | 1.0
Schema      | public
Description | foreign-data wrapper for remote PostgreSQL servers


(10)创建基于oracle_fdw的外部数据库服务。

postgres=# create server oracle_fdw foreign data wrapper 
     oracle_fdw options(dbserver '//192.168.79.173:1521/orcl');
# 这里创建的外部数据库服务名称叫oracle_fdw,
# 并通过参数dbserver指定了外部Oracle数据库的地址信息。


(11)查看当前数据库中移创建的外部服务。

postgres=# \des+
# 输出的信息如下:
List of foreign servers
-[ RECORD 1 ]--------+----------------------------------------
Name                 | foreign_server
Owner                | postgres
Foreign-data wrapper | postgres_fdw
Access privileges    | 
Type                 | 
Version              | 
FDW options       | (host '192.168.79.178', port '5432', dbname 'scott')
Description          | 
-[ RECORD 2 ]--------+----------------------------------------
Name                 | oracle_fdw
Owner                | postgres
Foreign-data wrapper | oracle_fdw
Access privileges    | 
Type                 | 
Version              | 
FDW options          | (dbserver '//192.168.79.173:1521/orcl')
Description          | 
-[ RECORD 3 ]--------+-----------------------------------------------
Name                 | service_file
Owner                | postgres
Foreign-data wrapper | file_fdw
Access privileges    | 
Type                 | 
Version              | 
FDW options          | 
Description          |


(12)创建PostgreSQL和Oracle之间的用户映射。

postgres=# create user mapping for postgres server oracle_fdw 
    options (user 'c##scott', password 'tiger');
# 该语句为本地postgres用户创建了一个访问
# 远程服务器oracle_fdw时的用户映射,
# 也就是使用用户名c##scott和密码 tiger连接远程服务器。


(13)查看用户映射信息。

postgres=# \deu+
# 输出的信息如下:
List of user mappings
-[ RECORD 1 ]------------------------------------------
Server      | foreign_server
User name   | postgres
FDW options | ("user" 'postgres', password 'Welcome_1')
-[ RECORD 2 ]------------------------------------------
Server      | oracle_fdw
User name   | postgres
FDW options | ("user" 'c##scott', password 'tiger')


(14)在PostgreSQL数据库中创建外部表访问Oracle中的数据。

postgres=# create foreign table oracle_emp(
  empno numeric(4,0) options (key 'true') not null,
  ename        varchar(10), 
  job          varchar(9) , 
  mgr          numeric(4,0), 
  hiredate     timestamp, 
  sal          numeric(7,2) , 
  comm         numeric(7,2), 
  deptno       numeric(2,0)
)server oracle_fdw 
options (schema 'C##SCOTT', table 'EMP');
# 注意,这里的'C##SCOTT'和'EMP'需要大写。


(15)现在可以在本地数据库中通过外部表访问Oracle数据库中对应的远程表。

postgres=# select * from oracle_emp;
# 输出的信息如下:
 empno | ename  |...|   sal   |  comm   | deptno 
-------+--------+---+---------+---------+--------
  7369 | SMITH  |...|  800.00 |         |     20
  7499 | ALLEN  |...| 1600.00 |  300.00 |     30
  7521 | WARD   |...| 1250.00 |  500.00 |     30
  7566 | JONES  |...| 2975.00 |         |     20
  7654 | MARTIN |...| 1250.00 | 1400.00 |     30
  7698 | BLAKE  |...| 2850.00 |         |     30
  7782 | CLARK  |...| 2450.00 |         |     10
  7788 | SCOTT  |...| 3000.00 |         |     20
  7839 | KING   |...| 5000.00 |         |     10
  7844 | TURNER |...| 1500.00 |    0.00 |     30
  7876 | ADAMS  |...| 1100.00 |         |     20
  7900 | JAMES  |...|  950.00 |         |     30
  7902 | FORD   |...| 3000.00 |         |     20
  7934 | MILLER |...| 1300.00 |         |     10
(14 rows)


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
关系型数据库 数据库 PostgreSQL
【赵渝强老师】在PostgreSQL中使用file_fdw访问外部文件系统
本文介绍了PostgreSQL的file_fdw扩展,它支持直接从数据库访问服务器文件系统中的文件,文件格式需为text、csv或binary。内容涵盖从编译安装扩展、配置postgresql.conf参数、重启数据库实例,到创建扩展、外部文件服务及外部表的完整流程,并通过具体示例展示如何查询外部表数据,同时附有视频讲解以帮助理解操作步骤。
81 22
|
30天前
|
关系型数据库 数据库 PostgreSQL
【赵渝强老师】使用postgre_fdw访问外部PostgreSQL
本文介绍了如何使用postgres_fdw扩展让PostgreSQL访问外部远端数据库数据。通过编译安装扩展、修改配置文件、重启数据库、创建扩展及外部服务器对象等步骤,最终实现本地数据库通过外部表访问远程数据。附带视频讲解,详细演示操作流程,并提醒需调整远端PostgreSQL配置以支持远程登录。
|
2月前
|
SQL 关系型数据库 数据库
【赵渝强老师】创建PostgreSQL的数据库
本文介绍了在PostgreSQL中通过SQL命令“create database”创建数据库的方法。首先查询系统目录pg_database以查看现有数据库集合,然后使用“create database”命令创建新数据库,并了解其在$PDATA/base目录下对应的文件夹生成。最后重新查询数据库集合确认创建结果,附带视频讲解便于理解操作步骤及注意事项。
|
2月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回数据库
Oracle闪回数据库功能类似于“倒带按钮”,可快速将数据库恢复至 earlier 状态,无需还原备份。本文介绍了闪回数据库的使用方法及实战案例:包括设置归档模式、开启闪回功能、记录SCN号、执行误操作后的恢复步骤等。通过具体 SQL 操作演示了如何利用闪回数据库恢复被误删的用户数据。注意,使用此功能前需确保数据库为归档模式。
|
2月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回数据归档
本文介绍了Oracle闪回数据归档(Flashback Data Archive)的功能与实现方法。闪回数据归档可将表中的历史数据进行归档,支持全面的历史数据查询,引入了“Oracle Total Recall”概念。文中通过具体实战步骤演示了如何创建和启用闪回数据归档:包括创建表空间、数据归档,设置默认归档,授予用户权限,开启表的归档功能,并展示了误操作后如何通过归档恢复数据。最后通过执行计划验证了数据来源于归档。
|
3月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle数据库的闪回表
本文介绍了Oracle数据库中的闪回表(Flashback Table)功能,它能够将表的数据快速恢复到特定时间点或系统改变号(SCN),无需备份。文章通过实战示例详细演示了如何使用闪回表恢复数据,包括授权、创建测试表、记录时间与SCN号、删除数据、启用行移动功能、执行闪回操作以及验证恢复结果等步骤。同时,还展示了如何通过触发器禁止插入操作,并在闪回过程中处理触发器的启用问题。文末附有视频讲解,帮助读者更好地理解闪回表的使用方法。
137 10
|
2月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回事务查询
Oracle数据库的闪回事务查询(Flashback Transaction Query)是闪回版本查询的扩充,可用于审计或撤销已提交的事务。通过`flashback_transaction_query`视图,可生成还原特定事务的SQL语句。本文介绍了其基本概念,并通过实战演示如何使用该功能:从授权、开启UNDO数据增强,到创建测试表和事务,最后利用闪回查询撤销已提交的事务,验证数据恢复效果。附带视频讲解,帮助深入理解。
|
2月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的闪回删除
本文介绍了Oracle数据库的闪回删除(Flashback Drop)功能,该功能可从回收站恢复已删除的对象至删除前状态。文章详细讲解了回收站的工作原理及操作步骤,包括检查回收站功能是否开启、删除表、查看回收站内容以及使用闪回删除恢复数据等实战操作。通过具体示例,演示了如何恢复被删除的员工表及其数据,并处理同名表冲突问题。文末还附有视频讲解,帮助读者更直观地理解操作流程。
|
关系型数据库 分布式数据库 PolarDB
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
456 0
|
存储 缓存 关系型数据库

推荐镜像

更多