Oracle通过LogMiner实现数据同步迁移

下面我将就「Oracle通过LogMiner实现数据同步迁移」提供完整攻略。

概述

Oracle数据库中提供了一个LogMiner工具,可以监听数据库中的redo日志进行解析,从而在当前数据库中进行数据库同步迁移操作,类似于MySQL中的binlog。LogMiner实时解析redo日志,然后生成SQL语句以便可以通过Database Link将数据迁移到目标数据库中。

实现步骤

  1. 首先,我们需要在目标数据库中创建一个Database Link,以便连接源数据库。

sql
CREATE DATABASE LINK link_name CONNECT TO username IDENTIFIED BY password USING 'tns_alias';

  • link_name:上述链接名字,连接源数据库和目标数据库时要用到。
  • username:连接源数据库的账号。
  • password:连接源数据库的密码。
  • tns_alias:TNS服务别名,该别名指向源数据库的实例。

示例如下:

sql
CREATE DATABASE LINK orcl_link CONNECT TO scott IDENTIFIED BY tiger USING 'orcl';

  1. 在目标数据库中创建一个LogMiner对象,该对象将用于实时解析redo日志。

sql
EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS => DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);

  1. 开启LogMiner对象监听来源数据库中的redo日志。

sql
EXECUTE DBMS_LOGMNR.START_LOGMNR(STARTTIME => SYSDATE, ENDTIME => SYSDATE + 10/1440, OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + DBMS_LOGMNR.CONTINUOUS_MINE);

  • STARTTIME:指定LogMiner从什么时候开始监听,此处指定为系统当前时间。
  • ENDTIME:指定LogMiner监听结束时间,此处指定为系统当前时间10分钟后。
  • OPTIONS:

    • DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG:从在线目录中提取字典信息。
    • DBMS_LOGMNR.CONTINUOUS_MINE:持续监听日志,实时更新。
  • 使用LogMiner对象查询指定时间范围内修改的表,获取修改的SQL语句。

sql
SELECT SQL_REDO FROM V$logmnr_contents WHERE SEG_OWNER = 'SCOTT' AND SEG_NAME = 'TEST' AND OPERATION = 'UPDATE';

  • SEG_OWNER:修改表的用户名,此处指定为SCOTT用户。
  • SEG_NAME:修改的表名,此处指定为TEST表。
  • OPERATION:操作类型,此处指定为UPDATE。

示例如下:

```sql
SELECT SQL_REDO FROM V$logmnr_contents WHERE SEG_OWNER = 'SCOTT' AND SEG_NAME = 'TEST' AND OPERATION = 'UPDATE';

SQL_REDO


update "SCOTT"."TEST" set "NAME" = 'test2' where ROWID = 'AAAEjwAABAAAAHmAAQ';

```

  1. 使用查询出来的SQL语句连接Database Link进行同步操作:

sql
INSERT INTO scott.test@orcl_link SELECT * FROM scott.test WHERE ROWID='AAAEjwAABAAAAHmAAQ';

  • scott.test@orcl_link:指定通过orcl_link连接远程的scott下的test表,达到迁移同步的目的。
  • WHERE ROWID='AAAEjwAABAAAAHmAAQ':是指定同步的行,此处使用前面查询出来的SQL语句。

示例如下:

sql
INSERT INTO scott.test@orcl_link SELECT * FROM scott.test WHERE ROWID='AAAEjwAABAAAAHmAAQ';

示例

给出两个示例:

  1. 源数据库用户为scott,密码为tiger;目标数据库用户为test,密码为test,中间使用链接名为orcl_link的链接进行相关操作

```sql
CREATE DATABASE LINK orcl_link CONNECT TO scott IDENTIFIED BY tiger USING 'orcl';

EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS => DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);

EXECUTE DBMS_LOGMNR.START_LOGMNR(STARTTIME => SYSDATE, ENDTIME => SYSDATE + 10/1440, OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + DBMS_LOGMNR.CONTINUOUS_MINE);

SELECT SQL_REDO FROM V$logmnr_contents WHERE SEG_OWNER = 'SCOTT' AND SEG_NAME = 'TEST' AND OPERATION = 'UPDATE';

INSERT INTO test.test@orcl_link SELECT * FROM scott.test WHERE ROWID='AAAEjwAABAAAAHmAAQ';
```

  1. 源数据库名为source_db,实例名为orcl;目标数据库名为target_db,实例名为orcl,中间使用链接名为orcl_link的链接进行相关操作

```sql
CREATE DATABASE LINK orcl_link CONNECT TO source_user IDENTIFIED BY source_pwd USING 'source_db_orcl';

EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS => DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);

EXECUTE DBMS_LOGMNR.START_LOGMNR(STARTTIME => SYSDATE, ENDTIME => SYSDATE + 10/1440, OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + DBMS_LOGMNR.CONTINUOUS_MINE);

SELECT SQL_REDO FROM V$logmnr_contents WHERE SEG_OWNER = 'SCOTT' AND SEG_NAME = 'TEST' AND OPERATION = 'UPDATE';

INSERT INTO test.test@orcl_link SELECT * FROM source_db.scott.test WHERE ROWID='AAAEjwAABAAAAHmAAQ';
```

总结

通过上述步骤操作,我们可以实现对Oracle数据库的数据同步迁移。但是需要注意的是,迁移完成后,需及时关闭LogMiner监听,避免对系统资源造成过大负担。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Oracle通过LogMiner实现数据同步迁移 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • ubuntu 20.04上搭建LNMP环境的方法步骤

    以下是在Ubuntu 20.04上搭建LNMP环境的详细步骤: 步骤一:安装Nginx 首先,在终端中输入以下命令安装Nginx: sudo apt update sudo apt install nginx 安装完成后,输入以下命令启动Nginx: sudo systemctl start nginx 以上命令还可被简写为: sudo systemctl …

    database 2023年5月22日
    00
  • Python操作MySQL数据库实例详解【安装、连接、增删改查等】

    Python操作MySQL数据库实例详解 本文将以Python编程语言为例,介绍如何通过Python连接MySQL数据库实例,并进行增删改查等操作。 安装相关软件 在开始操作之前,需要安装一些相关软件,包括: Python3.x或以上版本【下载地址链接】 PyMySQL库:Python连接MySQL数据库的库,可通过pip install pymysql命令…

    database 2023年5月18日
    00
  • Mysql查询语句优化技巧

    MySQL查询语句是我们在开发中常用到的,当数据量上升时我们就需要使用优化技巧来提高查询效率,下面我将详细讲解Mysql查询语句优化技巧。 1. 索引优化 在MySQL中,索引可以大大提高数据检索的速度。索引会创建一个有序列表,它包含了表中所有值,并指明每一个值出现的位置。使用索引的优势在于可以快速的定位到某个值,从而快速的找到相关数据。 以下是索引优化的技…

    database 2023年5月19日
    00
  • 在Spring中用select last_insert_id()时遇到问题

    下面是“在Spring中用select last_insert_id()时遇到问题”的完整攻略: 问题描述 在使用Spring的ORM框架进行数据操作时,为了获取最后插入的自增ID(例如MySQL中的AUTO_INCREMENT类型),通常需要使用SELECT LAST_INSERT_ID()查询。但是在实际使用中,我们可能会遇到各种问题,例如返回值不正确、…

    database 2023年5月19日
    00
  • Windows 本地安装 Mysql8.0图文教程

    以下为 Windows 本地安装 Mysql8.0 的完整攻略。 准备工作 在开始安装 Mysql 之前,请确保你已经安装了最新版本的 Windows 系统,并已经为系统开启了 Hyper-V 和属于 MySQL 工作目录的相应权限。 下载安装包 首先,下载 MySQL 8.0 版本的安装包,官方下载地址为:https://dev.mysql.com/dow…

    database 2023年5月18日
    00
  • day01-Redis入门

    Redis入门 1.初始Redis 1.1认识NoSQL SQL(关系型数据库) NoSQL(非关系型数据库) 数据结构 结构化(Structured) 非结构化 数据关联 关联的(Relational) 无关联的 查询方式 SQL查询 非SQL 事务特性 ACID BASE 存储方式 磁盘 内存 扩展性 垂直 水平 使用场景 1.数据结构固定 2.相关业务…

    2023年4月16日
    00
  • 详解mysql 获取当前日期及格式化

    下面是 “详解mysql 获取当前日期及格式化” 的完整攻略: 1. 获取当前日期 MySQL 提供了 CURDATE() 函数来获取当前日期。它可以返回一字符串类型,代表当前日期(不包括时间)。例如: SELECT CURDATE(); 返回的结果为当前日期,例如 2021-01-01。 2. 格式化日期 如果你想以固定的格式显示日期,可以使用 DATE_…

    database 2023年5月22日
    00
  • 阿里巴巴 MySQL 数据库之建表规约(一)

    建表规约 强制部分 【强制】 表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint (1 表示是,0 表示否)。说明:任何字段如果为非负数,必须是 unsigned。正例:表达逻辑的字段名 is_deleted,1 表示删除,0 表示未删除。 【强制】 表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁…

    MySQL 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部