Oracle学习之DATAGUARD(五) 创建logic standby

逻辑备库与物理备库不同,它并不是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传输的表,也能被修改数据,这个还蛮危险的,两边的数据就不一致啦。

时间: 2024-08-02 13:08:28

Oracle学习之DATAGUARD(五) 创建logic standby的相关文章

Oracle学习之DATAGUARD(六) 创建和启用Broker配置

DataGuard Broker是一个分布式管理架构用于自动创建.维护和监视dataguard配置.你可以使用OEM(图像化界面)或者DGMGRL(命令行方式)进行以下操作:1.创建和激活dataguard配置,包括设置redo transport services and log apply services2.可以在任何系统管理这个配置中的整个dataguard配置(所有的主库和备库)3.管理和监视包含RAC primary或standby数据库的dataguard配置4.简化角色切换操作,

Oracle 学习之RAC(五) 创建ASM磁盘组

以grid用户,运行asmcma命令 [[email protected] database]# su - grid 11grac1-> asmca 我们在安装Grid时已经建立了一个磁盘组,现在点击create按钮,建立其他的磁盘组 新建一个data组,磁盘为ORADATA,点击ok 再建立一个FRA的磁盘组,完成后结果如下

Oracle学习之DATAGUARD(十) 在同台机器上使用11g rman新特性创建DG

首先使用dbca建立一个数据库,db_name=primary . 2.   为两个数据库准备静态监听.及连接彼此的TNSNAME 11gdg1-> cat listener.ora tnsnames.ora  # listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora # Generated by Oracle configuration to

Oracle学习之DATAGUARD(四) 在同台机器上搭建DG

1. 建立一个primary数据库,db_name等都为primary. 2. 启用归档模式 SQL> archive log list Database log mode        No Archive Mode Automatic archival        Disabled Archive destination        USE_DB_RECOVERY_FILE_DEST Oldest online log sequence     1 Current log sequenc

Oracle学习之DATAGUARD(三) 使用11gRMAN新特性搭建standby

环境描述:有两台机器,11gdg1.11gdg2 .11gdg1上安装了数据库dgtst . 11gdg2上只安装了Oracle软件,并没有安装数据库.以下描述如何在11gdg2上建立一个standby 数据库. 一. standby 数据库准备 1.1 创建从库的静态监听. 11gdg2-> cat /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora  # listener.ora Network Configurati

Oracle学习之DATAGUARD(八) Switchover与failover

Switchover是将主从库角色切换,无损转换,通常是用户手动触发或者有计划的让其自动触发,比如硬件升级啦,软件升级啦之类的.而failover是当主库发生故障时,如何将从库切换成主库. 一.如何使用sql命令进行switchover . 检查主库是否支持switchover操作 登录数据库,执行如下查询 SQL> select switchover_status from v$database; SWITCHOVER_STATUS ------------------------------

Oracle学习之DATAGUARD(一) DG架构

DataGuard运行原理非常简单:传输日志.应用日志.下图表示了DG的基本架构 日志传输服务将主库产生的日志数据传到从库. 应用服务(Apply Service)验证日志数据,并且更新从库的数据文件. 主数据库的写进程更新数据文件,并不依赖于DataGuard架构. 当网络或者从库故障恢复时,DG自动重传已经被主库归档的日志数据. 日志传输服务Redo Transport Services Redo Transport Services协调主从库之间的日志传输.当主库LGWR写日志时,Log

Oracle学习之DATAGUARD(十一) snapshot database

Snapshot Standby,此功能可将备库置身于"可读写状态"用于不方便在生产环境主库中测试的内容,比如模拟上线测试等任务.当备库读写状态下任务完成后,可以非常轻松的完成Snapshot Standby数据库角色切换回备库角色,恢复与主库数据同步.在Snapshot Standby数据库状态下,备库是可以接受主库传过来的日志,但是不能够将变化应用在备库中. 物理备库要转换成Snapshot的前提条件 停止备库上的日志应用. 备库开启数据库闪回功能 下面演示,如果切换成snapsh

Oracle学习之DATAGUARD(二) DG架构--应用服务

DataGuard提供了两种不同的方法应用日志到standby数据库:Redo Apply (物理备库).SQL Apply(逻辑备库). DG的主要目标是保护数据库数据不会丢失.另一个目标是提供主从库之间的高度隔离. 物理备库: Redo Apply使用介质恢复的方法,从SRL中读出redo record放在内存中,然后直接应用change vectors恢复从库数据.主库和从库之间是块对块的物理复制品.介质恢复可以并发的对数据进行恢复,以提供更高的性能.在11g之间,物理备库的恢复只能在mo