Oracle10gR2流复制操作简明手册.doc_第1页
Oracle10gR2流复制操作简明手册.doc_第2页
Oracle10gR2流复制操作简明手册.doc_第3页
Oracle10gR2流复制操作简明手册.doc_第4页
Oracle10gR2流复制操作简明手册.doc_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Oracle10gR2 流复制流复制 简明操作手册简明操作手册 作者 夏明伟作者 夏明伟 二二 OO 八年十月八年十月 夏明伟第 1 页2020 2 3 目目 录录 一 一 ORACLE10GR2 STREAMS 概念与原理概念与原理 4 二 二 准备流复制环境准备流复制环境 5 2 1 创建流复制实验用的源目数据库创建流复制实验用的源目数据库 6 2 2 源数据库置于归档模式源数据库置于归档模式 6 2 3 修改初始化参数修改初始化参数 6 2 4 创建流复制管理员创建流复制管理员 7 2 5 创建数据库链路创建数据库链路 7 三 三 数据库级复制设置数据库级复制设置 7 3 1 配置配置 directory 7 3 2 在源库端执行在源库端执行 maintain global 8 3 3 验证复制是否成功验证复制是否成功 9 四 四 用户级复制设置用户级复制设置 9 4 1 在源库端创建用户在源库端创建用户 9 4 2 配置配置 directory 10 4 3 在存放日志文件端执行在存放日志文件端执行 maintain schemas 10 4 4 验证复制是否成功验证复制是否成功 11 五 五 表级复制设置表级复制设置 11 5 1 在源库端创建测试表在源库端创建测试表 11 5 2 配置配置 directory 11 5 3 在存放日志文件端执行在存放日志文件端执行 maintain tables 11 5 4 验证复制是否成功验证复制是否成功 12 六 六 记录或字段级复制设置记录或字段级复制设置 13 6 1 单向表级流复制中使用子集规则和转换规则的例子单向表级流复制中使用子集规则和转换规则的例子 13 6 1 1手工建立手工建立 Capture Apply 和和 Propagation 流及相应的队列流及相应的队列 13 6 1 2案例案例 1 考虑队列间的迁移的水平分割复制 考虑队列间的迁移的水平分割复制 16 6 1 3案例案例 2 不考虑队列间的迁移的水平分割复制 不考虑队列间的迁移的水平分割复制 17 6 1 4案例案例 3 使用 使用 Rule base Transformation 的垂直分割复制的垂直分割复制 18 七 七 流复制的监控流复制的监控 21 夏明伟第 2 页2020 2 3 7 1 查看数据库对补充日志的设置情况查看数据库对补充日志的设置情况 21 7 2 获取数据库的全局名获取数据库的全局名 21 7 3 获取数据库的核心初始化参数值获取数据库的核心初始化参数值 21 7 4 查询数据库中所有流的规则定义查询数据库中所有流的规则定义 22 7 5 查询流进程对应的正 负向规则集和规则查询流进程对应的正 负向规则集和规则 22 7 6 查询流进程是否存在空规则集查询流进程是否存在空规则集 22 7 7 查询数据库中定义的所有队列查询数据库中定义的所有队列 22 7 8 查询所有包含有转换函数的规则及规则集查询所有包含有转换函数的规则及规则集 22 7 9 查询所有包含有查询所有包含有 handle 的应用及库表的应用及库表 23 7 10 查询所有设置了补充日志的表查询所有设置了补充日志的表 23 7 11 查询所有设置了补充日志的列查询所有设置了补充日志的列 23 7 12 查询流复制的警告信息查询流复制的警告信息 23 7 13 查询与流有关的数据对象的建立时间查询与流有关的数据对象的建立时间 23 7 14 检查执行检查执行 MAINTAIN TABLE SCHEMA GLOBAL 脚本的错误语句脚本的错误语句 23 7 15 检查执行检查执行 MAINTAIN TABLE SCHEMA GLOBAL 脚本时的错误信息脚本时的错误信息 23 7 16 检查检查 MAINTAIN 脚本的每一步脚本的每一步 forward 语句和语句和 undo 语句及状态语句及状态 23 7 17 查询所有队列当前缓存的记录数及累计入列记录数查询所有队列当前缓存的记录数及累计入列记录数 24 7 18 查询流复制不支持的表查询流复制不支持的表 24 7 19 查询流复制处理的数据量查询流复制处理的数据量 24 7 20 查询已定义的捕获流状态及对应的捕获规则查询已定义的捕获流状态及对应的捕获规则 24 7 21 查询已定义的捕获进程的状态查询已定义的捕获进程的状态 24 7 22 查询捕获进程中的查询捕获进程中的 SCN 情况及状态和错误信息情况及状态和错误信息 24 7 23 查询捕获进程的参数设置情况查询捕获进程的参数设置情况 25 7 24 查询为捕获进程注册的日志文件查询为捕获进程注册的日志文件 25 7 25 查询被捕获的表及其上补充日志的设置情况查询被捕获的表及其上补充日志的设置情况 25 7 26 查询被捕获的用户及其上补充日志的设置情况查询被捕获的用户及其上补充日志的设置情况 25 7 27 查询被捕获的数据库及其上补充日志的设置情况查询被捕获的数据库及其上补充日志的设置情况 25 7 28 查询定义的传播流状态及对应的传播规则查询定义的传播流状态及对应的传播规则 25 7 29 查询定义的应用流状态及对应的应用规则查询定义的应用流状态及对应的应用规则 25 7 30 查询定义的应用进程的状态查询定义的应用进程的状态 25 7 31 查看应用进程的参数值查看应用进程的参数值 26 7 32 查询应用进程的最新应用时间查询应用进程的最新应用时间 26 7 33 查询流应用时的报错信息查询流应用时的报错信息 26 7 34 查询表级序列化的查询表级序列化的 SCN 值值 26 7 35 查询数据库 用户级序列化的查询数据库 用户级序列化的 SCN 值值 26 7 36 待定待定 26 八 八 流复制的维护流复制的维护 27 8 1 启动启动 Apply Propagation 和和 Capture 进程的语句进程的语句 27 8 2 停止停止 Apply Propagation 和和 Capture 进程的语句进程的语句 27 8 3 删除删除 Apply Propagation 和和 Capture 流及队列和相应的规则集和规则的语句流及队列和相应的规则集和规则的语句 27 8 4 在本地数据库中清除整个流配置在本地数据库中清除整个流配置 28 8 5 数据库级实例化过程数据库级实例化过程 28 夏明伟第 3 页2020 2 3 8 6 用户级实例化过程用户级实例化过程 28 8 7 库表级实例化过程库表级实例化过程 29 8 8 用用 rman 进行数据库复制进行数据库复制 29 8 9 修改应用进程参数的方法修改应用进程参数的方法 30 8 10 调整捕获进程的并行度调整捕获进程的并行度 30 8 11 调整调整 LogMiner 使用的内存空间使用的内存空间 30 8 12 调整检查点频率调整检查点频率 31 8 13 优化应用时的优化应用时的 update 语句语句 31 8 14 通过通过 MAINTAIN 脚本自动创建流复制失败后断点续建的方法脚本自动创建流复制失败后断点续建的方法 31 8 15 通过通过 MAINTAIN 脚本自动创建流复制失败后回退的方法脚本自动创建流复制失败后回退的方法 31 8 16 为日志挖掘建立独立的表空间为日志挖掘建立独立的表空间 31 8 17 在源库端建立心跳表的方法在源库端建立心跳表的方法 31 8 18 智能启动某流进程的例子智能启动某流进程的例子 31 8 19 清除指定应用进程的错误队列清除指定应用进程的错误队列 32 8 20 清除错误队列中指定应用事务的错误清除错误队列中指定应用事务的错误 32 8 21 重新应用错误队列中指定的出错事务重新应用错误队列中指定的出错事务 32 8 22 重新应用错误队列中所有出错事务重新应用错误队列中所有出错事务 32 8 23 查询应用错误队列中所有错误记录的值的方法查询应用错误队列中所有错误记录的值的方法 32 九 九 补充知识补充知识 37 9 1 规则集和流客户端行为一览表规则集和流客户端行为一览表 37 9 2 如何查看归档日志中的内容如何查看归档日志中的内容 37 夏明伟第 4 页2020 2 3 一 一 Oracle10gR2 Streams 概念与原理概念与原理 Streams 的原理其实很简单 通过 logmnr 技术从 oracle 的 10g 中解析出数据 然后传递到目标库并应用 从而将源库的数据复制到目标库 整个的复制过程可以分成三个步骤 捕获 capture 传播 propagation 和应用 apply 利用高级队列 advance queue 来将这三个步骤的数据串起来 通过在步骤中定义不同的规则 rule 来控制需要复制的数据 复制可以基 于全库 基于表空间 基于用户或者基于表 具有相当大的灵活性 捕获进程可以直接在源库捕获日志 也可以先将日志 归档日志或者联机日志 传递另外的库中进行捕获 这就是本地捕获 local capture 和异地捕获 downstream capture 对于异地捕获 根据是传递归档日志还是联机日 志 可以分为普通的异地捕获和实时异地捕获 日志的传递其实和 DataGuard 中是一样的机制 流复制的简单过程描述如下 首先捕获进程从日志解析出数据 封装在一个个的逻辑改变记录 LCR logical change record 中 将这些 lcr 压进捕获队列中 然后传播进程从捕获队列取得数据压进应用队列中 最后应用进程从应用队列取得 LCR 并应 用到目标库中 LCR 可以分为 row LCR DML 操作记录 和 DDL LCR DDL 操作记录 所以 streams 复制可以支 夏明伟第 5 页2020 2 3 持 DDL 操作的复制 Streams 复制需要先进行一次初始化建立基线 然后在此基础上复制增量数据 对于全库的初始化 可以使 用 RMAN 表空间复制的初始化可以使用 transport tablespace 而对于用户复制和表复制 则可以使用 exp imp 或者 expdb impdp Streams 配置和管理的相关 package dbms steams adm dbms capture adm dbms propagation adm dbms apply adm dbms rule adm Streams 主要相关数据字典 dba streams administrator dba capture dba capture parameters dba propagation dba registered archived log dba apply dba apply confict columns dba apply dml handlers dba apply enqueue dba apply error dba apply execute dba apply parameters dba apply progress dba rules dba rule sets dba rule set rules V STREAMS CAPTURE V STREAMS POOL ADVICE V STREAMS TRANSACTION V PROPAGATION RECEIVER V PROPAGATION SENDER V STREAMS APPLY COORDINATOR V STREAMS APPLY READER V STREAMS APPLY SERVER 二 二 准备流复制环境准备流复制环境 夏明伟第 6 页2020 2 3 2 12 1 创建流复制实验用的源目数据库创建流复制实验用的源目数据库 注 源目数据库可以在同一台机器也可以在不同的机器 export DISPLAY local ip 0 0 在客户端启动 Xmanager xbrowser xstart dbca 在客户端的图形界面按提示进行 注 回退方法 export DISPLAY local ip 0 0 在客户端启动 Xmanager xbrowser xstart dbca 在客户端的图形界面按提示进行数据库删除操作 2 22 2 源数据库置于归档模式源数据库置于归档模式 注 如果是双向复制 则每个库都是源库 都需要处于归档模式 SQL archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination USE DB RECOVERY FILE DEST Oldest online log sequence 1527 Next log sequence to archive 1529 Current log sequence 1529 注 设置数据库处于归档模式的语句如下 SQL startup mount SQL alter database archivelog SQL alter database open 注 shutdown 时不能用 abort 2 32 3 修改初始化参数修改初始化参数 global names true 必须设置 global names 为 true 然后在后面创建 database link 时的名字必须使用 global name compatible 10 2 0 1 0 要使用 10gR2 版本的新特性 则必须设置 10 2 0 1 0 以上 streams pool size 200m streams pool 需要根据捕获进程 传播进程 应用进程和队列的数量和并行度来确定 如果 statistics level 设置为 typical 或者 all 运行一段时间后可以根据 v streams pool advice 来调整该参数 若使用自动内存管 理也可设为 0 job queue processes 4 aq tm processes 4 open links 4 夏明伟第 7 页2020 2 3 用如下语句设置 db domain 因 db domain 不可动态修改 故修改后需要重启数据库 若源目数据库都 没有设置db domain 也可不考虑设置 ALTER SYSTEM SET db domain net SCOPE SPFILE ALTER DATABASE RENAME GLOBAL NAME TO 注 1 有时可能还要修改 listener ora 加如下段 SID DESC SID NAME rep1 ORACLE HOME F oracle product 10 1 0 Db 2 GLOBAL NAME rep1 NET 注 1 GLOBAL NAME 改回来的语句如下 UPDATE SYS PROPS SET VALUE rep1 WHERE name GLOBAL DB NAME commit 源库与目标库的 tnsnames ora 配置 确保正确 可用 tnsping 通 参数设置查看语句如下 SELECT FROM v parameter WHERE NAME IN global names compatible streams pool size shared pool size sga max size job queue processes aq tm processes open links ORDER BY NAME 设置语句参考如下 ALTER SYSTEM SET aq tm processes 4 SCOPE BOTH ALTER SYSTEM SET global names true SCOPE BOTH 2 42 4 创建流复制管理员创建流复制管理员 在源库和目标库都需要创建 创建全库复制时流复制管理员用户不同步 SQLPLUS AS SYSDBA CREATE USER strmadm IDENTIFIED BY strmadm GRANT CONNECT RESOURCE DBA TO strmadm EXEC DBMS STREAMS AUTH GRANT ADMIN PRIVILEGE strmadm 赋予流管理特权 2 52 5 创建数据库链路创建数据库链路 注 若流复制是基于数据库级的此步可在数据库整库复制后再做一次 在流复制管理员用户下创建源库到目标库的 db link CREATE DATABASE LINK rep2 CONNECT TO strmadm IDENTIFIED BY strmadm USING rep2 在流复制管理员用户下创建目标库到源库的 db link CREATE DATABASE LINK rep1 CONNECT TO strmadm IDENTIFIED BY strmadm USING rep1 注 database link 名必须为 global name 名 否则不能访问 global name 是由 db name db domain 构成的 通 过如下语句可得到数据库的 global name select from global name 三 三 数据库级复制设置数据库级复制设置 夏明伟第 8 页2020 2 3 3 13 1 配置配置 directorydirectory strmadm rep1 sql CREATE DIRECTORY dir source AS data strmadm rep2 sql CREATE DIRECTORY dir dest AS data rman 注 主要用于存放 Data Pump export 文件 并使 strmadm 用户对此目录可读写 如用下面的过程可以传送 整数逻辑块的文件 exec dbms file transfer put file source directory object DIR SOURCE source file name export hr dmp destination directory object DIR DEST destination file name export hr dmp destination database rep2 3 23 2 在源库端执行在源库端执行 maintain globalmaintain global 注注 要在要在strmadm用户下执行 以下语句表示实现源目数据库整库间流复制 复制方式为双向 一般执行下用户下执行 以下语句表示实现源目数据库整库间流复制 复制方式为双向 一般执行下 面的语句后把面的语句后把maintain global sql文件手工执行较为安全 手工执行可用如下方式 文件手工执行较为安全 手工执行可用如下方式 sqlplus strmadm strmadm maintain global sql sqlplus strmadm strmadm rep1 BEGIN DBMS STREAMS ADM maintain global source directory object DIR SOURCE destination directory object DIR DEST source database rep1 destination database rep2 perform actions FALSE script name maintain global sql script directory object DIR SOURCE capture queue table capture queue name capture queue user apply queue table apply queue name apply queue user capture name propagation name apply name dump file name streams rep dmp bi directional TRUE include ddl TRUE instantiation DBMS STREAMS ADM instantiation full END 夏明伟第 9 页2020 2 3 手工执行可用如下方式手工执行可用如下方式 sqlplus strmadm strmadm maintain global sql 注 注 sys system ctxsys 始终不复制 perform actions true 直接执行配置 false 的话则生成配置脚本到 script directory object script name 参数指定的位置 instantiation 指定初始化的方式 其中 DBMS STREAMS ADM INSTANTIATION FULL expdp 全库导出然后 impdp 全库导入 DBMS STREAMS ADM INSTANTIATION FULL NETWORK 使用 data pump 直接通过网络导入的特性初始化 DBMS STREAMS ADM INSTANTIATION NONE 不执行初始化 这个选项只有在 perform actions false 的情 况下有效 也就是指定先生成脚本 手工初始化 然后再执行配置脚本 已创建了流队列再执行以上语句可能需要指定队列名称等 3 33 3 验证复制是否成功验证复制是否成功 在目标库上新建用户 STRMADM rep2 CREATE USER test user1 IDENTIFIED BY test user1 GRANT RESOURCE CONNECT DBA TO test user1 在源库上参看新建用户是否同步 在目标库上新建库表并插入数据 test user1 rep2 CREATE TABLE TEST NAME VARCHAR2 20 BYTE NULL insert into test values xmw test1 commit 在源库上参看新建库表及插入数据是否同步 反之再测一次 测试结论 一开始应用进程总是报 abort 导致不能同步 后执行如下语句修改参数后同步正常 但恢复此 参数后又不正常 最后只有保持 DISABLE ON ERROR 为 N BEGIN DBMS APPLY ADM set parameter apply name APPLY REP2 120 parameter DISABLE ON ERROR VALUE N END EXEC dbms apply adm start apply APPLY REP2 120 注 注 apply name 填具体的应用名 填具体的应用名 四 四 用户级复制设置用户级复制设置 4 14 1 在源库端创建用户在源库端创建用户 在源库上新建用户 STRMADM rep1 夏明伟第 10 页2020 2 3 CREATE USER test user1 IDENTIFIED BY test user1 GRANT RESOURCE CONNECT DBA TO test user1 注 要复制的用户 test user1 在目标库中不能已经存在 4 24 2 配置配置 directorydirectory strmadm rep1 sql CREATE DIRECTORY dir source AS data strmadm rep2 sql CREATE DIRECTORY dir dest AS data rman 注 主要用于存放 Data Pump export 文件 并使 strmadm 用户对此目录可读写 如用下面的过程可以传送 整数逻辑块的文件 exec dbms file transfer put file source directory object DIR SOURCE source file name export hr dmp destination directory object DIR DEST destination file name export hr dmp destination database rep2 4 34 3 在存放日志文件端执行在存放日志文件端执行 maintain schemasmaintain schemas 注注 要在要在strmadm用户下执行 以下语句表示实现源目数据库用户间流复制 复制方式为单向 一般执行下用户下执行 以下语句表示实现源目数据库用户间流复制 复制方式为单向 一般执行下 面的语句后把面的语句后把maintain schemas sql文件手工执行较为安全 手工执行可用如下方式 文件手工执行较为安全 手工执行可用如下方式 sqlplus strmadm strmadm maintain schemas sql sqlplus strmadm strmadm rep1 BEGIN DBMS STREAMS ADM maintain schemas schema names test user1 source directory object dir source destination directory object dir dest source database rep1 destination database rep2 perform actions FALSE script name maintain schemas sql script directory object DIR SOURCE dump file name export strmtest dmp capture queue table capture queue name capture queue user NULL apply queue table apply queue name apply queue user NULL capture name propagation name apply name log file export strmtest clg bi directional FALSE 夏明伟第 11 页2020 2 3 include ddl TRUE instantiation DBMS STREAMS ADM instantiation schema END 手工执行可用如下方式手工执行可用如下方式 sqlplus strmadm strmadm maintain schemas sql 注 参数含义基本同pre instantiation setup 中的参数含义 其中要同步的用户为 test user1 复制方式为单向 4 44 4 验证复制是否成功验证复制是否成功 在源库上新建库表并插入数据 test user1 rep1 CREATE TABLE TEST NAME VARCHAR2 20 BYTE NULL insert into test values xmw test1 commit 在目标库上参看新建库表及插入数据是否同步 测试结论 可以并且相对稳定 实现也很方便 五 五 表级复制设置表级复制设置 5 15 1 在源库端创建测试表在源库端创建测试表 test user1 rep1 sql CREATE TABLE BONUS ename VARCHAR2 10 BYTE NULL job VARCHAR2 9 BYTE NULL sal NUMBER NULL comm NUMBER NULL CREATE TABLE DEPT deptno NUMBER 2 NULL dname VARCHAR2 14 BYTE NULL loc VARCHAR2 13 BYTE NULL CREATE TABLE EMP empno NUMBER 4 NULL ename VARCHAR2 10 BYTE NULL job VARCHAR2 9 BYTE NULL mgr NUMBER 4 NULL hiredate DATE NULL sal NUMBER 7 2 NULL comm NUMBER 7 2 NULL deptno NUMBER 2 NULL 注 要复制的表在目标库中不能已经存在 5 25 2 配置配置 directorydirectory strmadm rep1 sql CREATE DIRECTORY dir source AS data 注 主要用于存放脚本文件 使 strmadm 用户对此目录可读 5 35 3 在存放日志文件端执行在存放日志文件端执行 maintain tablesmaintain tables 注注 要在要在strmadm用户下执行 以下语句表示实现源目数据库表间流复制 复制方式为单向 一般执行下面用户下执行 以下语句表示实现源目数据库表间流复制 复制方式为单向 一般执行下面 的语句后把的语句后把maintain tables sql文件手工执行较为安全 手工执行可用如下方式 文件手工执行较为安全 手工执行可用如下方式 sqlplus strmadm strmadm maintain tables sql sqlplus strmadm strmadm rep1 DECLARE 夏明伟第 12 页2020 2 3 TABLES DBMS UTILITY UNCL ARRAY BEGIN TABLES 1 SCOTT BONUS TABLES 2 SCOTT DEPT TABLES 3 SCOTT EMP DBMS STREAMS ADM maintain tables table names TABLES capture queue table CAPTURE CAP1 QT capture queue name CAPTURE CAP1 QN capture queue user NULL apply queue table APPLY APP1 QT apply queue name APPLY APP1 QN apply queue user NULL capture name CAPTURE CAP1 CN propagation name PROPAGATION PROP1 PN apply name APPLY APP1 AN source directory object NULL destination directory object NULL source database rep1 destination database rep2 perform actions FALSE script name maintain tables sql script directory object DIR SOURCE bi directional FALSE include ddl TRUE instantiation DBMS STREAMS ADM instantiation table network END 手工执行可用如下方式手工执行可用如下方式 sqlplus strmadm strmadm maintain tables sql 注 参数含义基本同pre instantiation setup 中的参数含义 其中要同步的库表为 TEST USER1 BONUS TEST USER1 DEPT TEST USER1 EMP 复制方式为单向 如果等了足够长的时间发现数据没有复制过来 仔细检查 capture propagation apply 各进程的状态 看是否 有异常 有人在使用 maintain tts maintain schemas maintain tables 试验表空间复制 用户复制 表复制的时候遇到 过所有的东西看起来都是正常的 但是数据就是过不去 后来开了个 tar 问 oracle 经过一个星期的折腾 最后 oracle 给的答复是修改一个隐含参数 alter system set job queue interval 1 scope spfile 并且将 aq tm processes 参数改为 1 原来是为 10 alter system set aq tm processes 1 scope both 改完后重启 发现数据就可以去了 这个隐含参数只是控制对 job 队列的检查频率 默认 5 秒 复制正常 后再将这个参数改回默认值 重新配置 streams 复制也一切正常了 我本人也碰到过一个问题 同样一切正常但数据过不来 后来发现是 由于空间的问题系统无法归档成功 夏明伟第 13 页2020 2 3 后改变归档路径 alter system set db recovery file dest data flash recovery area scope both 归档成功 重新 实例化 但流同步数据还是过不来 后来重建捕获队列及捕获流 可以同步数据了 因为发现错误提示中捕获 的日志文件路径还是改变前的 总之 流复制技术变数还是很多的 要想完全驾驭它需要具备丰富的实践经验 5 45 4 验证复制是否成功验证复制是否成功 在源库上插入测试数据 test user1 rep1 INSERT INTO BONUS ename VALUES xmw SQL commit 稍等片刻在目标库查询 test user1 rep2 select from scott BONUS 测试结论 可以并且相对稳定 实现也很方便 六 六 记录或字段级复制设置记录或字段级复制设置 在 Oracle Stream Replication 中有一个子集 SubSet 的概念 通过它可以把一个 Table 的数据进行水平分割来 实现数据的同步 我们也可以采用转换规则 Rule base Transformation 来实现把一个 Table 的数据进行垂直分割来实现数据 的同步 6 16 1 单向表级流复制中使用子集规则和转换规则的例子单向表级流复制中使用子集规则和转换规则的例子 6 1 16 1 1 手工建立手工建立 CaptureCapture ApplyApply 和和 PropagationPropagation 流及相应的队列流及相应的队列 注 手工创建只是为了展示流复制的底层创建原理 若觉得麻烦也可以通过上面的数据库级 用户级 表 级流复制方法先建立流复制 然后再配置子集规则或转换规则 源库端执行源库端执行 对需要同步的表建立补充日志 ALTER TABLE SCOTT BONUS ADD SUPPLEMENTAL LOG DATA PRIMARY KEY FOREIGN KEY UNIQUE INDEX COLUMNS 创建一个队列 用于捕获数据并入列待传 BEGIN dbms streams adm set up queue queue table capture db1 qt queue name capture db1 qn queue user strmadm END 注 若需要清除这个队列及相应的队列表用如下语句 exec DBMS AQADM STOP QUEUE queue name capture db1 qn exec DBMS AQADM DROP QUEUE queue name capture db1 qn exec DBMS AQADM DROP QUEUE TABLE queue table capture db1 qt 创建一个传播流 用于把队列 1 中的数据传播到队列 2 中 BEGIN dbms streams adm add table propagation rules 夏明伟第 14 页2020 2 3 table name SCOTT BONUS streams name prop db1 to db2 strm source queue name capture db1 qn destination queue name apply db2 qn orcl dest include dml TRUE include ddl TRUE include tagged lcr TRUE source database orcl source inclusion rule TRUE and condition NULL END 注 1 include tagged lcr 设为 true 表 lcr 记录中含 tag 标签 缺省为 null false 表 lcr 记录中不含 tag 标签 标签值可在应用时加入 当然也可在其他环节加入 一般可为应用流的 id 这样就可明确是对某源库的应用 数据回到某源库时 源库的捕获流过滤掉这些记录以防循环应用 因此 tag 标签主要是用在有环流的流复制环 境下以防循环应用 也可以在多源复制中解决冲突 捕获时的过滤条件参考 and condition lcr get tag HEXTORAW 注 2 若需要清除这个传播流及相应队列及队列表用如下语句 exec dbms propagation adm drop propagation propagation name prop db1 to db2 strm drop unused rule sets TRUE exec DBMS AQADM STOP QUEUE queue name capture db1 qn exec DBMS AQADM DROP QUEUE queue name capture db1 qn exec DBMS AQADM DROP QUEUE TABLE queue table capture db1 qt 使这传播流暂时失效 BEGIN dbms aqadm disable propagation schedule queue name capture db1 qn destination orcl dest destination queue NULL END 创建一个流 用于把某用户里的数据放入某队列中 并设定为正向规则 BEGIN dbms streams adm add table rules table name SCOTT BONUS streams type CAPTURE streams name capture db1 strm queue name capture db1 qn include dml TRUE include ddl TRUE include tagged lcr TRUE source database orcl source inclusion rule TRUE END 夏明伟第 15 页2020 2 3 注 若需要清除这个捕获 传播流及相应队列及队列表用如下语句 exec dbms capture adm stop capture capture db1 strm exec dbms capture adm drop capture capture db1 strm exec dbms propagation adm drop propagation propagation name prop db1 to db2 strm drop unused rule sets TRUE exec DBMS AQADM STOP QUEUE queue name capture db1 qn exec DBMS AQADM DROP QUEUE queue name capture db1 qn exec DBMS AQADM DROP QUEUE TABLE queue table capture db1 qt 目标库端执行 目标库端执行 创建一个队列 用于接收数据并出列应用 BEGIN dbms streams adm set up queue queue table apply db2 qt queue name apply db2 qn queue user strmadm END 注 若需要清除这个队列及相应的队列表用如下语句 exec DBMS AQADM STOP QUEUE queue name apply db2 qn exec DBMS AQADM DROP QUEUE queue name apply db2 qn exec DBMS AQADM DROP QUEUE TABLE queue table apply db2 qt 创建一个流 用于把某队列的数据复制到某用户里 BEGIN dbms streams adm add table rules table name SCOTT BONUS streams type APPLY streams name apply db2 strm queue name apply db2 qn include dml TRUE include ddl TRUE include tagged lcr TRUE source database orcl source inclusion rule TRUE END 注 若需要清除这个应用流及相应队列及队列表用如下语句 EXEC dbms apply adm stop apply apply db2 strm EXEC dbms apply adm drop apply apply db2 strm EXEC DBMS AQADM STOP QUEUE queue name apply db2 qn EXEC DBMS AQADM DROP QUEUE queue name apply db2 qn EXEC DBMS AQADM DROP QUEUE TABLE queue table apply db2 qt 特别申明 如果错误队列中有数据可能没法清除 我在做清除时由于碰到有错误数据没法清除时做了 特别申明 如果错误队列中有数据可能没法清除 我在做清除时由于碰到有错误数据没法清除时做了 夏明伟第 16 页2020 2 3 一些手工删除动作 不知是顺序不对还是不该任意删除某些队列 反正最后即无法恢复流正常也没法清除任何一些手工删除动作 不知是顺序不对还是不该任意删除某些队列 反正最后即无法恢复流正常也没法清除任何 队列 到最后想队列 到最后想 drop user stramadm cascade 都不行 后来只有重建数据库并把数据导入才解决 都不行 后来只有重建数据库并把数据导入才解决 又回到源库端执行 又回到源库端执行 对库表 SCOTT BONUS 在目标端进行实例化 DECLARE iscn NUMBER Variable to hold instantiation SCN value BEGIN iscn DBMS FLASHBACK get system change number DBMS APPLY ADM set table instantiation scn orcl dest source object name SCOT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论