从Oracle数据库过滤使用AWS DMS的用户交易 数据库博客
  • 34

使用 AWS DMS 从 Oracle 数据库中过滤用户交易

关键要点

在这篇文章中,我们将介绍如何使用 AWS 数据库迁移服务AWS DMS来过滤和识别来自特定用户的交易,并将持续变更从 Oracle 多租户数据库复制到 Amazon S3。通过借助转换规则,我们能够创建一个数据库复制任务,确保数据操作能够满足需求,从而支撑后续的数据处理和管道整合。

AWS DMS 允许用户以低延迟的方式从一个支持的源复制数据到另一个支持的目标。同时,它也支持 Oracle 数据库的多租户架构,在复制过程中过滤特定用户的交易。

解决方案概述

在本篇文章中,我们的目标是在 Oracle 多租户架构的数据库中设立一个数据湖,用于将源数据库中的变更持续复制到 Amazon S3。我们希望能够区分来自特定用户的交易,以便后续通过数据管道进行过滤或处理。例如,我们可能需要忽略由某个特定数据库用户发起的维护作业的所有交易。

为此,我们将使用 AWS DMS 从 Oracle 数据库复制数据到 Amazon S3。AWS DMS 原生支持通过设置额外的连接属性 filterTransactionsOfUser 来过滤来自 Oracle 数据库特定用户的交易。

在处理变更数据捕获CDC时,AWS DMS 提供了两种方法来读取重做日志:Oracle LogMiner 和 AWS DMS 二进制读取器。LogMiner 是用来读取在线重做日志和归档重做日志文件的 Oracle API。而二进制读取器则是直接从重做日志文件中读取和解析原始数据。在设置 Oracle 数据库的源端点时,当使用多租户结构作为源时,AWS DMS 要求使用二进制读取器。

从Oracle数据库过滤使用AWS DMS的用户交易 数据库博客

在本文中,我们将创建一个 AWS DMS CDC 任务,以 Oracle 多租户数据库作为源,并将 Amazon S3 作为目标。我们将使用 AWS DMS 的转换规则为每一行数据添加一个新列,作为标志,以指示该行交易是否需要被过滤或纳入后续的数据管道处理。

实施高层步骤

创建 Oracle 多租户数据库的源端点,并使用二进制读取器。创建 Amazon S3 的目标端点。创建 AWS 复制任务,并添加必要的转换规则。验证配置的资源和数据复制情况。

以下图示概述了所提议的解决方案架构。

前提条件

在开始之前,请完成以下步骤:

在 AWS 中为 AWS DMS 复制实例配置基础网络资源。创建 AWS DMS 复制实例。确保您有一个采用多租户架构的 Oracle 数据库,并具备支持 CDC 的必要条件。创建一个不公开访问的 S3 存储桶,与您的 AWS DMS 复制实例位于同一区域。

创建 AWS DMS 源端点以连接 Oracle 数据库

创建 AWS DMS端点,设置端点类型为源,连接到 Oracle 多租户数据库。为了支持多租户数据库中的 CDC,AWS DMS 需要使用二进制读取器配置源端点,并输入以下连接特性:

useLogminerReader=NuseBfile=Y

创建端点后,通过选择该端点和 AWS DMS 复制实例来测试连接。测试状态应该显示为 成功,才能继续操作。

创建 AWS DMS 目标端点以连接Amazon S3

创建 AWS DMS端点类型为目标的 Amazon S3 端点,并设置以下附加连接属性:

addColumnName=truebucketFolder=dmstargetbucketName=mybucketnamecompressionType=NONEcsvDelimiter=csvRowDelimiter=ndatePartitionEnabled=false

tk加速器

创建目标端点后,再次通过选择该端点和 AWS DMS 复制实例来测试连接。测试的状态应该显示为 成功,才能进行后续操作。

在本篇文章中,我们将使用不压缩的 CSV 文件格式。

创建 AWS DMS 任务以从 Oracle 数据库复制到 Amazon S3

由于 AWS DMS 不支持直接连接属性来识别或过滤来自特定用户的交易,因此我们使用 AWS DMS 转换规则为每一行添加一个标志列,用于指示该行是否属于特定用户。我们可以在下游的数据管道中使用这个标志,以便进行过滤或进一步处理。

在本方案中,我们引用以下 AWS DMS 头信息,来捕获源交易的信息:

ARHUSER 来源数据库中进行了更改的用户ARHOPERATION 指示来源数据库是执行的是 INSERT、UPDATE 还是 DELETE 操作

以下代码示例包含了 AWS DMS CDC 复制任务的映射规则。我们为每行数据添加了一个新列,使用 AWS DMS 表达式 ARHUSER 捕获交易的 USERNAME,通过表达式 ARHOPERATION 指示操作类型,并添加列 delflag 来标识交易是否来自特定用户并且操作的特定类型。在以下映射示例中,所有来自 ADMIN 用户并且操作类型为 DELETE 的交易将使得列 delflag 的值为 1,其他用户的交易或其他操作类型的交易则为 0。

json{ rules [ { ruletype transformation ruleid 635179331 rulename 635179331 ruletarget column objectlocator { schemaname tablename } ruleaction addcolumn value newop oldvalue null expression ARHOPERATION datatype { type string length 50 scale } } { ruletype selection ruleid 408810882 rulename 408810882 objectlocator { schemaname SCHEMANAME tablename MYTABLE } ruleaction include filters [] } { ruletype transformation ruleid 7 rulename 7 ruletarget column objectlocator { schemaname tablename } ruleaction addcolumn value transactuser expression ARHUSER datatype { type string length 25 } } { ruletype transformation ruleid 2 rulename 2 ruleaction addcolumn ruletarget column objectlocator { schemaname tablename } value delflag expression CASE WHEN ARHUSER=ADMIN AND ARHOPERATION=DELETE THEN 1 ELSE 0 END datatype { type string length 50 } } ]}

启动 AWS DMS 任务后,验证数据的 CDC 的确从源 Oracle 数据库复制到 Amazon S3。您将看到每一行被复制的数据中新增了三个列,分别指示执行该交易的用户、操作类型和标志位,以确认该交易是否来自特定用户且属于特定类型。

验证数据

在本文中,我们要识别 ADMIN 用户的 DELETE 类型的交易,以便能够在下游数据管道中进行过滤或进一步处理。

为了验证 AWS DMS CDC 复制任务是否成功将交易从 Oracle 复制到 Amazon S3,首先从 Amazon S3 下载包含数据的文件,其目录结构如下:

Amazon S3 存储桶名 gt 文件夹 gt 模式名 gt 表名

以下示例展示了来自两个不同用户 ADMIN 和 NEWADMIN 的文件数据。可以注意到,当交易类型为 DELETE 时,delflag 列的值对于这两位用户的交易都是 1。

清理

为避免持续产生费用,请清理您在本文中创建的相关资源。

结论

本文展示了如何利用 AWS DMS 转换规则和 CDC 复制任务将变化从 Oracle 多租户数据库复制到 Amazon S3,并识别来自特定用户的交易。这些数据可以被下游数据管道进一步处理和转化。

我们期待您在评论区留下反馈。

关于作者

Sharath Chandra Kampili 是亚马逊网络服务的数据库专家解决方案架构师,专注于商业数据库引擎,例如 Oracle。他直接与客户合作,提供数据库项目的指导和技术支持,帮助客户提高 AWS 使用解决方案的价值。

Venu Koneru 是 AWS 的数据库专家解决方案架构师,拥有 15 年丰富的 IT 行业经验。职业生涯中他担任过网页开发者、数据建模师、数据库管理员和数据库架构师,涉及教育、旅游和金融领域。目前在 AWS 的角色是与客户紧密合作,推动其云数据库的现代化改造。