设为首页 收藏本站
查看: 605|回复: 0

[经验分享] Oracle学习之DATAGUARD(五) 创建logic standby

[复制链接]

尚未签到

发表于 2018-9-9 10:20:09 | 显示全部楼层 |阅读模式
  逻辑备库与物理备库不同,它并不是Primary数据库的一个精确的copy。同一rowid,在逻辑备库上返回的值并不是相同的。有些数据类型或者对象,逻辑备库并不支持同步。在创建逻辑备库之前,你首先要确认,哪些schema及对象是不被SQL-APPLY支持的。
  1. 查询不被同步的schema 。
SQL> set pagesize 200  
SQL> SELECT OWNER FROM DBA_LOGSTDBY_SKIP WHERE STATEMENT_OPT = 'INTERNAL SCHEMA';
  
OWNER
  
-------------------------------
  
SYS
  
SYSTEM
  
OUTLN
  
MGMT_VIEW
  
MDSYS
  
ORDSYS
  
EXFSYS
  
DBSNMP
  
WMSYS
  
APPQOSSYS
  
APEX_030200
  
ORDDATA
  
CTXSYS
  
ANONYMOUS
  
SYSMAN
  
XDB
  
ORDPLUGINS
  
OWBSYS
  
SI_INFORMTN_SCHEMA
  
OLAPSYS
  
ORACLE_OCM
  
XS$NULL
  
DIP
  
23 rows selected.
  2. 查询哪些表是不被执行的。
SQL> SELECT DISTINCT OWNER,TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED ORDER BY OWNER,TABLE_NAME;  
no rows selected
  3. 如果上步返回数据,可以通过如下查询得知是哪些类型不被支持
SQL> SELECT COLUMN_NAME,DATA_TYPE FROM DBA_LOGSTDBY_UNSUPPORTED WHERE OWNER='OE' AND TABLE_NAME = 'CUSTOMERS';  
no rows selected
  4. 逻辑备库的SQL-APPLY是通过表的唯一标识进行的,也就是说表必须有主键或者唯一性索引。
SQL> col owner for a10  

  
SQL> col table_name for a30
  

  
SQL> SELECT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_NOT_UNIQUE;
  

  
OWNER    TABLE_NAME
  

  
---------- ------------------------------
  

  
SCOTT    BONUS
  

  
SCOTT    SALGRADE
  

  
SCOTT    T1
  如果表没有主键或唯一约束怎么办?Oracle会在日志文件中写入supplemental logging 。也就是会写入大量的附加信息,用所有的column的值以构建update时的唯一性。
  当然也有一些表是无法构建唯一性的,可以通过如下语句查询
SELECT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_NOT_UNIQUE  
WHERE (OWNER, TABLE_NAME) NOT IN
  
(SELECT DISTINCT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED)
  
AND BAD_COLUMN = 'Y';
  5. 关闭物理备库的日志应用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;  
Database altered.
  6. 构建创建逻辑备库必要的数据字典。
  转到主库上执行如下命令
SQL> EXECUTE DBMS_LOGSTDBY.BUILD;  
PL/SQL procedure successfully completed.
  此命令做了如下事情

  •   主库上开启supplemental logging功能。
  •   在主库上构建LogMiner的数据字典,使得逻辑备库知道如何处理主库发来的redo数据。
  •   记录一个scn号,从库上的SQL-APPLY方式日志应用从此scn号开始。
  7. 如果有主备切换的需求,那么必须先在standby数据库上手工开启supplemental logging。
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;  
Database altered.
  8. 在从库上应用切换成逻辑备库之前的redo
SQL> ALTER DATABASE RECOVER TO LOGICAL STANDBY "standby";  
ALTER DATABASE RECOVER TO LOGICAL STANDBY "standby"
  
*
  
ERROR at line 1:
  
ORA-19953: database should not be open
  

  
SQL> shutdown immediate
  
Database closed.
  
Database dismounted.
  
ORACLE instance shut down.
  
SQL> startup mount
  
ORACLE instance started.
  
Total System Global Area  839282688 bytes
  
Fixed Size      2233000 bytes
  
Variable Size    494931288 bytes
  
Database Buffers   339738624 bytes
  
Redo Buffers      2379776 bytes
  
Database mounted.
  
SQL> ALTER DATABASE RECOVER TO LOGICAL STANDBY "standby";
  
Database altered.
  9. 打开数据库
SQL> shutdown immediate  
ORA-01507: database not mounted
  

  
ORACLE instance shut down.
  
SQL> startup mount
  
ORACLE instance started.
  
Total System Global Area  839282688 bytes
  
Fixed Size      2233000 bytes
  
Variable Size    494931288 bytes
  
Database Buffers   339738624 bytes
  
Redo Buffers      2379776 bytes
  
Database mounted.
  
SQL> alter database open resetlogs;
  
Database altered.
  
SQL>
  10. 启动日志应该
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;  
Database altered.
  11. 验证数据同步
  主库
SQL> conn scott/tiger  
Connected.
  
SQL> select count(*) from t1;
  
  COUNT(*)
  
----------
  
14
  
SQL> insert into t1 select * from t1;
  
14 rows created.
  
SQL> commit;
  
Commit complete.
  从库上查询数据
SQL> conn scott/tiger  
Connected.
  
SQL> select count(*) from t1;
  
  COUNT(*)
  
----------
  
28
  从库也能建立表,修改数据等。
SQL> conn / as sysdba  
Connected.
  
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
  
Database altered.
  
SQL> ALTER SESSION DISABLE GUARD;
  
Session altered.
  
SQL> create table scott.t2 as select * from scott.t1;
  
Table created.
  
SQL> ALTER SESSION ENABLE GUARD;
  
Session altered.
  
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
  
Database altered.
SQL> conn / as sysdba  
Connected.
  
SQL>  ALTER SESSION DISABLE GUARD;
  
Session altered.
  
SQL> insert into scott.t1 select * from scott.t1;
  
28 rows created.
  
SQL> commit;
  
Commit complete.
  
SQL> alter session enable guard;
  
Session altered.
  被DataGuard传输的表,也能被修改数据,这个还蛮危险的,两边的数据就不一致啦。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-568621-1-1.html 上篇帖子: oracle中instr函数的调用 下篇帖子: Oracle中的系统权限管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表