您的位置:首页 > 数据库

dataguard 主库DML等SQl操作迅速在备库应用

2017-12-31 19:22 162 查看
概述:如何使得主库的DML等SQL操作能够立即在备库等到应用?oracle  dataguard 按照官方文档刚刚搭建完成备库应用的是归档日志文件也就是需要主库触发日志文件归档后才能够使得备库和主库同步,这样主备库就会存在误差,而11g开始备库是可以作为查询供业务使用的,这样就会导致如果读写分离的情况下,备库查询数据将会比主库慢而导致查询结果的不准确;本文就对主备库的实时查询等功能就行测试;

实验步骤:

1、主备库添加redo standby 日志

2、开启实时接收日志应用

3、测试

实验:

主库新建表:

[root@cube ~]# su - oracle

[oracle@cube ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Sun Dec 31 16:35:05 2017

Copyright (c) 1982, 2013, Oracle.  All rights reserved

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> grant connect,resource to cube identified by cube ;         

Grant succeeded.

SQL> conn / as sysdba

Connected.

SQL> create table cube.cube1 as select * from scott.emp;

Table created.

SQL> conn cube/cube

Connected.

Connected.

SQL> select count(*) from cube1;

  COUNT(*)

----------

        14

备库查询:

[oracle@jakki ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Sun Dec 31 16:39:50 2017

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select count(*) from cube.cube1;

select count(*) from cube.cube1

                          *

ERROR at line 1:

ORA-00942: table or view does not exist

主备切换日志或者归档当前日志:

SQL> conn / as sysdba

Connected.

SQL> alter system switch logfile;  或者 alter system archive log current;

System altered.、

备库再次查询:

SQL> select count(*) from cube.cube1;

  COUNT(*)

----------

        14

添加standby logfile,如果只是为了使得备库能够实时应用而不考虑后期一旦主库变为备库的实时应用的话 可以只在备库添加standby logfile; 一般添加standby logfile文件的大小跟redo log文件的大小相同,组数比redo log多一组。

建议主备库都添加吧。

主库:

SQL>  col member for a60 

SQL> select f.member,l.bytes/1024/1024 from v$log l,v$logfile f where l.group#=f.group#;

MEMBER                                                       L.BYTES/1024/1024

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

/u01/app/oracle/oradata/CUBE/redo03.log                                     50

/u01/app/oracle/oradata/CUBE/redo02.log                                     50

/u01/app/oracle/oradata/CUBE/redo01.log                                     50

SQL> alter database add standby logfile '/u01/app/oracle/oradata/CUBE/redo04.log' size 50M;

Database altered.

SQL>  alter database add standby logfile '/u01/app/oracle/oradata/CUBE/redo05.log' size 50M;

Database altered.

SQL>  alter database add standby logfile '/u01/app/oracle/oradata/CUBE/redo06.log' size 50M;

Database altered.

SQL>  alter database add standby logfile '/u01/app/oracle/oradata/CUBE/redo07.log' size 50M;

Database altered.

备库:

SQL> recover managed standby database cancel;

Media recovery complete.

SQL> alter database add standby logfile '/u01/app/oracle/oradata/JAKKI/redo05.log' size 50M;

Database altered.

SQL> alter database add standby logfile '/u01/app/oracle/oradata/JAKKI/redo04.log' size 50M;

Database altered.

SQL> alter database add standby logfile '/u01/app/oracle/oradata/JAKKI/redo06.log' size 50M;

Database altered.

SQL> alter database add standby logfile '/u01/app/oracle/oradata/JAKKI/redo07.log' size 50M;

Database altered.

备库开启实时应用:

SQL> recover managed standby database using current logfile disconnect;

Media recovery complete.

主库创建一张表并且插入数据commit,查看归档日志保证没有使用归档应用。

SQL> select group#,thread#,status from v$log; 

    GROUP#    THREAD# STATUS

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

         1          1 ACTIVE
         2          1 CURRENT

         3          1 INACTIVE

SQL> create table cube.t1 (id number);

Table created.

备库查看:

SQL> select * from cube.t1;

no rows selected

主库插入一行数据提交

SQL> insert into cube.t1 values (1);

1 row created.

SQL> commit;

Commit complete.

SQL> select group#,thread#,status from v$log; 

    GROUP#    THREAD# STATUS

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

         1          1 ACTIVE
         2          1 CURRENT

         3          1 INACTIVE

备库查看:

 select * from cube.t1;

        ID

----------

         1

至此实时应用的实验完成,上面测试了ddl 创建一张表以及dml 插入一条语句,其他测试请自行测试

总结:11g的实时adg功能可以使得业务读写分离,减轻了主库的查询压力,新功能可以多行测试后可以推广到日常的业务应用中。话说12C的ADG 将变得更加牛逼备库支持DML操作了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 11g 数据库