最近因为业务需求,需要在两个数据库之间做双向实时同步,遂实践了一把Oracle的流复制,遇到了很多疑难问题,最终也貌似成功,现记录如下。

我是使用OEM来实现流复制的。

10.进行流复制的两个数据库的实例名不一样,于是我把其中一个数据库实例重装了,哭~~~

20.两个数据库都需要打开归档模式。

30.进行流复制配置前两台数据库需要同步的数据最好一模一样。否则在同步过程中可能会操作一些本库中不存在的数据从而导致同步错误。

40.使用sys用户登录,在数据移动->设置中创建流管理员用户,两个库都要创建。

50.使用流管理员用户登录,进入数据移动->设置。选择同步的方式。我这里选的是按方案同步。选择特定方案后,需填写目标服务器相关参数。然后在下一步中点开高级选项,勾选双向复制,然后下一步,再下一步即可。

55.当提交后,OEM生成了一个调度去做同步的准备工作。在我的电脑上运行了将近五分钟。在运行过程中可能会报错,这时正确的做法是回到数据移动->设置,按照上面的提示进行回滚或继续操作。如果直接删除相关调度或别的资源,可能会导致无法再次配置流复制。我后来只好通过闪回数据库的方式才实现操作回滚。

60.创建成功后,进入数据移动->管理复制中,可看观察捕获,传播,应用三个图表来获取当前同步信息。其中捕获是通过分析当前日志来获取数据结构与数据内容的变化。传播是将变化同步到目标机器上。应用是将获取的变化应用到本库中。

我在配置流复制时遇到了好几个错误,其中大部分是提示找不到目标服务器或对象。后来我通过在/etc/host里直接指定ip与机器名的对应关系,又试了几次后,居然成功了。其次,在OEM提示配置成功的同时,仍然报了好几个别的错,后来我试了试在两边分别操作数据,发现都能同步成功,索性就不管了。

在实际使用中,还发现了以下问题

10.在实际使用中发现流复制无法同步序列值的变化,后来采取了间隔步长来规避这个问题。

Stream为什么不同步sequence的取值

oracle stream不会同步sequence值的变化如何解决

Oracle Streams Conflict Resolution

20. ORA-26786错误。在报错的服务器上执行下面的脚本来覆盖冲突。例如

DECLARE
cols DBMS_UTILITY.NAME_ARRAY;
BEGIN
cols(1) := 'DQHJMC';
DBMS_APPLY_ADM.SET_UPDATE_CONFLICT_HANDLER(
object_name => 'LandSystem.LS_CASE_BWA',
method_name => 'OVERWRITE',
resolution_column => 'DQHJMC',
column_list => cols);
END;

其中cols表示需要执行的列,object_name表示表名,method_name表示解决策略,resolution_column表示判断依据列。

解决冲突后,把method_name设为null再执行一次删除这个策略。

Managing Oracle Streams Conflict Detection and Resolution

DBMS_APPLY_ADM.SET_UPDATE_CONFLICT_HANDLER (P)

streams双向复制冲突规则(SET_UPDATE_CONFLICT_HANDLER)

参考

ORA-23616: 执行块 11 时失败 (相对于脚本)

有用Oracle 11gR2(11.2.0.2.0)作Stream兄弟吗?看看我这个错误,能提供点文章参考吗?

Oracle 流复制实践笔记的更多相关文章

  1. oracle数据库基于(streams流复制)的双机热备配置手册

    ------------------------------------------------------------------------------- 主数据库: 操作系统:windows 2 ...

  2. 数据库周刊28│开发者最喜爱的数据库是什么?阿里云脱口秀聊程序员转型;MySQL update误操作;PG流复制踩坑;PG异机归档;MySQL架构选型;Oracle技能表;Oracle文件损坏处理……

    热门资讯 1.Stackoverflow 2020年度报告出炉!开发者最喜爱的数据库是什么?[摘要]2020年2月,近6.5万名开发者参与了 Stackoverflow 的 2020 年度调查,这份报 ...

  3. Java分享笔记:使用缓冲流复制文件

    [1] 程序设计 /*------------------------------- 1.缓冲流是一种处理流,用来加快节点流对文件操作的速度 2.BufferedInputStream:输入缓冲流 3 ...

  4. MS SQL到Oracle的数据迁移笔记

    MS SQL到Oracle的数据迁移笔记 一.任务背景 旧系统使用MS SQL Server数据库,新系统使用Oracle数据库,现在需要将旧系统中的数据迁移到新系统中,旧数据按照约定的规则转换后,能 ...

  5. Python编程从入门到实践笔记——操作列表

    Python编程从入门到实践笔记——操作列表 #coding=utf-8 magicians = ['alice','david','carolina'] #遍历整个列表 for magician i ...

  6. PostgreSQL流复制记录

    参考了别人的部分,添加了自己在实践中的内容,仅做记录. 1.同步流复制中 主机操作 1.1postgresql.conf wal_level = hot_standby # 这个是设置主为wal的主机 ...

  7. java IO流 复制图片

    (一)使用字节流复制图片 //字节流方法 public static void copyFile()throws IOException { //1.获取目标路径 //(1)可以通过字符串 // St ...

  8. Postgressql高可用(pgpool+异步流复制)

    文档结构: 由于博主之前是Oracle dba,oracle 高可用一般是rac,以及搭建ADG,一个是基于实例的高可用,一个是基于数据的容灾,甚至也有rac+adg的方式.Postgres有同步和异 ...

  9. 基于 Docker 和 GitLab 的前端自动化部署实践笔记

    基于 Docker 和 GitLab 的前端自动化部署 实践笔记 随着接触的项目越来越多,在部署测试流程上重复耗时工作也越来越多,所以对前端工作的CI/CD实现愈发迫在眉睫. 前端开发由于三大框架的崛 ...

随机推荐

  1. org.hibernate.hql.ast.QuerySyntaxException: XXX is not mapped

    因为 String sql2 = "select s from Student s where s.clazz.name=:name"; 此处的 Student 应该为类名.hql ...

  2. 模拟状态为active的日志损坏的数据恢复实验(不完全恢复)

    1查看当前日志状态 首先不完全恢复是会丢失数据的,由此在当前打开的数据中我们创建一些测试数据,用来验证当我们进行完不完全恢复后该数据是否还存在. 2模拟删除CURRENT状态的日志 3启动数据验证错误 ...

  3. thinkphp自定义权限管理之名称判断

    权限管理,就是给不同的用户分配不同的权限.当用户登录或者操作时候进行判断,来阻止用户进行权限以外的操作.本次讲的是当用户登录一刻,只显示权限开启的内容. 一.建立数据库. 1.权限表funcla.来存 ...

  4. jquery 温故而知新 Ul 相关的操作

    在UL中取得第一级的LI   <div id='demo1'> <ul> <li id='1'>1<li> <li id='2'>2< ...

  5. 20145337实验五Java网络编程及安全

    20145337实验五Java网络编程及安全 实验内容 掌握Socket程序的编写 掌握密码技术的使用 设计安全传输系统 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器 ...

  6. php中防盗链使用.htaccess

    下面开始讲解:比如你的图片都在img目录下,那就在该目录下放一个名为 .htaccess 的文件,内容如下: php代码: 以下为引用的内容:RewriteEngine onRewriteCond % ...

  7. asp.net mvc 控制器中操作方法重载问题 解决

    Controllers: public ActionResult Index() { return View(db.GuestBooks.ToList()); } // // GET: /Guest2 ...

  8. UIView 的autoresizingMask属性

    autoresizingMask属性的意思就是自动调整子控件与父控件中间的位置,宽高,定义如下: typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) ...

  9. Python开发【第六章】:Python面向对象

    编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种 ...

  10. awk 反过滤不想要的列 和循环列

    [root@elk_m ~]# awk '{print $0}' install.log.syslog |head -1 <86>Feb 29 02:58:28 groupadd[1598 ...