最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

ORACLE11G之DATAGUARD搭建逻辑standby

来源:懂视网 责编:小采 时间:2020-11-09 16:29:28
文档

ORACLE11G之DATAGUARD搭建逻辑standby

ORACLE11G之DATAGUARD搭建逻辑standby:Oracle Data Guard逻辑备库是利用主库的一个备份首先建立一个物理备库,然后再将其转换为逻辑备库。这之后主库将日志传递到备库,备库利用logminer从主库的日志中解析出主库所执行过的SQL,在备库上重新执行一遍,从而保证与主库的数据在逻辑上保持一致。与
推荐度:
导读ORACLE11G之DATAGUARD搭建逻辑standby:Oracle Data Guard逻辑备库是利用主库的一个备份首先建立一个物理备库,然后再将其转换为逻辑备库。这之后主库将日志传递到备库,备库利用logminer从主库的日志中解析出主库所执行过的SQL,在备库上重新执行一遍,从而保证与主库的数据在逻辑上保持一致。与
SQL> select name,open_mode,database_role,protection_mode from v$database;
  • Primary库

  • Physical备库

  • 1.1 Step-by-Step Instructions for Creating a Logical Standby Database

    由于逻辑Standby是通过SQL应用来保持与Primary数据库的同步。SQL应用与REDO应用是有很大的区别,REDO应用实际上是在物理Standby端进行RECOVER;SQL应用则是分析重做日志文件中的REDO信息,并将其转换为SQL语句,在逻辑Standby端执行,因此需要确认操作的对象和语句是否能被逻辑Standby支持。

  • 检查primary数据库是否有不被逻辑standby支持的对象
  • SQL> SELECT * FROM DBA_LOGSTDBY_UNSUPPORTED;

  • 查看primary数据库中不含有主键或唯一键索引的表
  • SQL> SELECT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_NOT_UNIQUE
    
     2> WHERE (OWNER, TABLE_NAME) NOT IN
    
     3> (SELECT DISTINCT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED)
    
     4> AND BAD_COLUMN = 'Y';

    注意BAD_COLUMN列值,该列有两个值:

    Y :表示该表中有采用大数据类型的字段,比如LONG啦,CLOB啦之类。如果表中除log列某些行记录完全匹配,则该表无法成功应用于逻辑standby。standby会尝试维护这些表,不过你必须保证应用不允许。

    N :表示该表拥有足够的信息,能够支持在逻辑standby的更新,不过仍然建议你为该表创建一个主键或者唯一索引/约束以提高log应用效率。

    假设在某张表中你可以确认数据是唯一的,但是基于效率方面的考虑,不想为其创建主键或唯一约束,怎么办呢?没关系,Oracle早想到了这一点,你可以创建一个DISABLE的Primary-Key Rely约束。

    Add a disabled primary-key RELY constraint.(摘自君三思)

    维护逻辑standby与primary的数据库同步是通过sql应用实现,SQL应用转换的SQL语句在执行时,对于insert还好说,对于update,delete操作则必须能够唯一定位到数据库待更新的那条记录。如果primary库中表设置不当,可能就无法确认唯一条件。所以,Oracle 建议为表创建一个主键或非空的唯一索引/约束,以尽可能确保sql应用能够有效应用redo数据,更新逻辑standby数据库。

    如果能够确认表中的行是唯一的,那么可以为该表创建rely的主键,RELY约束并不会造成系统维护主键的开销,主你对一个表创建了rely约束,系统则会假定该表中的行是唯一,这样能够提供sql应用时的性能。但是需要注意,由于rely的主键约束只是假定唯一,如果实际并不唯一的话,有可能会造成错误的更新哟。

    创建rely的主键约束非常简单,只要在标准的创建语句后加上RELY DISABLE即可,例如:

    SQL> ALTER TABLE mytab ADD PRIMARY KEY (id, name) RELY DISABLE;

    注 意:创建了Rely约束后,Oracle会假定该列是唯一的(给DBA足够的信任),不过并不会对该列的值进行唯一性的验证,因此该列是否唯一只能由DBA来主动维护。

    1.1.1 Create a Physical Standby Database

    参详物理standby创建

    1.1.2 Stop Redo Apply on the Physical Standby Database

    Physical备库切换到logical备库,需要在primary库构建LogMiner字典及开启supplemental日志,在这之前应先停用physical备库的MRP进程,以避免提前应用含LogMiner字典的REDO数据,造成转换为逻辑Standby后,SQL应用时没有LogMiner字典数据的REDO数据而影响到逻辑Standby与Primary的正常同步。

    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

    备库恢复传输redo:

    SQL> recover managed standby database disconnect from session;

    1.1.3 Prepare the Primary Database to Support a Logical Standby Database

  • 一是将主库LOG_ARCHIVE_DEST_1参数中的VALID_FOR属性改为仅仅联机重做日志有效,而不包括备用重做日志。当primary为主库时,用于存放primary产生的arch,当primary被切换为备库角色后,用于存放自身作为备库产生的归档。

  • LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary'
  • 二是专门为备用重做日志添加一个新的归档路径LOG_ARCHIVE_DEST_3,也就是说联机日志与备用日志分开,仅当primary库转为备库时有效,当primary库为备库角色时,用于存放从primary库接收到的STANDBY_LOGFILES。

  • LOG_ARCHIVE_DEST_3='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=primary'
    
    LOG_ARCHIVE_DEST_STATE_3=ENABLE
  • 生成LogMiner字典
  • 生成LogMiner字典,这样redo日志中的变化才能被LogMiner字典的SQL Apply组件正确解析。

    SQL> EXECUTE DBMS_LOGSTDBY.BUILD;

    另外主键和唯一约束/索引列的supplemental日志是自动生成的,The supplemental logging information ensures each update contains enough information to logically identify each row that is modified by the statement.对于11.2以上的版本,supplemental日志会随primary库传至physical备库,而这之前的版本需要检查primary库与physical 备库是否生成supplemental日志,如果没有则主库通过如下语句生成,然后再执行switchover 或 failover传至physical 备库。

    SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;
    

    1.1.4 Transition to a Logical Standby Database

  • physical备库转logical备库
  • 若physical备库为RAC模式,则需先进行:

    SQL> ALTER SYSTEM SET CLUSTER_DATABASE=FALSE SCOPE=SPFILE;
    
    SQL> SHUTDOWN ABORT;
    
    SQL> STARTUP MOUNT EXCLUSIVE;

    转physical备库为logical备库:

    SQL> ALTER DATABASE RECOVER TO LOGICAL STANDBY db_name;
  • 备库参数配置
  • SQL> SHUTDOWN;
    
    SQL> STARTUP MOUNT;
    
    LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby'

    与physical备库所不同的是,logical备库被open后会产生自己的重做日志(redo),因此我们需要配置参数LOG_ARCHIVE_DEST_n。对于逻辑备库,此时存在三种日志文件,即online redo log,archived redo log,standby redolog。

    LOG_ARCHIVE_DEST_3='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=standby';
    
    LOG_ARCHIVE_DEST_STATE_3=ENABLE

    1.1.5 Open the Logical Standby Database

  • 由于逻辑standby与primary数据库事务并不一致,因此第一次打开时必须指定resetlogs子句
  • SQL> ALTER DATABASE OPEN RESETLOGS;
  • 应用redo数据
  • SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
  • 查询数据库状态
  • SQL> select name,open_mode,database_role,protection_mode from v$database; 

    1.2 Verify the Logical Standby Database Is Performing Properly Standby

  • Primary库NN用户T1表插入数据

  • Logical standby库查询


  • 至此,ORACLE 11G 之DATAGUARD搭建逻辑standby成功!




    声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文档

    ORACLE11G之DATAGUARD搭建逻辑standby

    ORACLE11G之DATAGUARD搭建逻辑standby:Oracle Data Guard逻辑备库是利用主库的一个备份首先建立一个物理备库,然后再将其转换为逻辑备库。这之后主库将日志传递到备库,备库利用logminer从主库的日志中解析出主库所执行过的SQL,在备库上重新执行一遍,从而保证与主库的数据在逻辑上保持一致。与
    推荐度:
    标签: 11 逻辑 搭建
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top