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

yizhihongxing

下面我将就「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日

相关文章

  • mysql 前几条记录语句之(limit)

    MySQL是一种流行的关系型数据库管理系统,其中LIMIT子句是MySQL SELECT查询语句的一部分,可用于限制返回结果的数量。在本文中,作者将详细讲解MySQL LIMIT子句的使用方法和示例。 什么是MySQL LIMIT语句 MySQL LIMIT语句用于限制返回结果集的数量。此语句通常与SELECT查询一起使用,以限制返回记录以进行更快的访问。L…

    database 2023年5月22日
    00
  • redis分布式锁redisson

    原文:https://blog.csdn.net/Kincym/article/details/78697472   关于redisson的源代码请参考官网:https://github.com/redisson/redisson redisson官方讲解参考:https://github.com/redisson/redisson/wiki/%E7%9B%…

    Redis 2023年4月11日
    00
  • redis主从,哨兵(windows版)

        一、下载 由于redis官方并不支持windows操作系统,所以官网上是下不到的,需要到gitlab上下载,下载地址如下: https://github.com/MicrosoftArchive/redis/releases 二、解压安装 将下载后的zip文件解压到本地磁盘,注意解压到的目录不能有中文和特殊字符,否则会出现很多奇葩的问题。解压后的目录…

    Redis 2023年4月11日
    00
  • access数据库用sql语句添加字段,修改字段,删除字段

    以下是使用SQL语句在Access数据库中添加、修改和删除字段的完整攻略: 1. 添加字段 要在Access数据库中添加字段,可以使用SQL命令的“ALTER TABLE”语法。以下是添加字段的示例语句: ALTER TABLE 表名 ADD COLUMN 字段名 字段类型; 其中,“表名”是要添加字段的表名,“字段名”是要添加的新字段的名称,“字段类型”是…

    database 2023年5月21日
    00
  • oracle截取字符(substr)检索字符位置(instr)示例介绍

    让我给您详细讲解一下关于“oracle截取字符(substr)检索字符位置(instr)示例介绍”的完整攻略。 什么是substr函数? substr函数是Oracle SQL语言中用来截取字符串子串的函数。其语法的基本格式如下: SUBSTR(string,position,length) 其中: string:要进行截取操作的字符串,可以是一个字段、变量…

    database 2023年5月21日
    00
  • SQL中From和Where子句的区别

    From和Where都是SQL语句中的子句,但它们用途不同,下面分别详细讲解它们的区别。 From子句 From子句用于指定一个或多个表的名称,这些表将被查询的数据所在。从语法上来看,From子句是SQL语句中最先出现的子句,它的格式如下: SELECT column1, column2, … FROM table_name 其中,table_name指…

    database 2023年3月27日
    00
  • Mybatis配置之别名配置元素解析

    下面是Mybatis配置之别名配置元素解析的完整攻略。 1. 简介 Mybatis中,可以通过配置元素来为Java类型指定别名。通过为Java类型指定别名,可以方便的在映射文件中使用指定的别名代替原来的Java类型名。 2. 配置方式 别名配置有两种方式: 2.1 package方式 在元素内,使用子元素指定一个Java包名。Mybatis会自动将指定包名下…

    database 2023年5月21日
    00
  • SQL 反向变换结果集

    当我们需要对一个结果集进行排序或者筛选时,可以使用SQL语句来实现。但是有时候,我们需要对结果集进行反向变换,即将升序排序变为降序排序,或将所有选中的行变为未选中,这时就需要使用反向变换操作。 SQL 反向变换结果集的攻略,包含以下几个部分: 反向排序 使用ORDER BY语句可以对某个或某几个字段进行升序或降序排列。如果要对现有的升序排序结果集进行反向排序…

    database 2023年3月27日
    00
合作推广
合作推广
分享本页
返回顶部