iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Oracle学习之DATAGUARD(五) 创建logic standby
  • 450
分享到

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

2024-04-02 19:04:59 450人浏览 泡泡鱼
摘要

      逻辑备库与物理备库不同,它并不是Primary数据库的一个精确的copy。同一rowid,在逻辑备库上返回的值并不是相同的。有些数据类型或者对象

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

 

您可能感兴趣的文档:

--结束END--

本文标题: Oracle学习之DATAGUARD(五) 创建logic standby

本文链接: https://www.lsjlt.com/news/35153.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle学习之DATAGUARD(五) 创建logic standby
          逻辑备库与物理备库不同,它并不是Primary数据库的一个精确的copy。同一rowid,在逻辑备库上返回的值并不是相同的。有些数据类型或者对象...
    99+
    2022-10-18
  • Oracle 学习之RAC(五) 创建ASM磁盘组
    以grid用户,运行asmcma命令[root@11grac1 database]# su - grid 11grac1-> asmca我们在安装Gr...
    99+
    2022-10-18
  • Oracle进阶学习之创建dblink
    本文笔者简单说明Oracle创建dblink,dblink就是在一个数据库中直接对另一个数据库进行操作,听起来很美妙,其实并不难实现,我们只需要在该数据库上创建一个dblink关联到另一个数据库就可以了,闲...
    99+
    2022-10-18
  • Oracle学习之DATAGUARD(十) 在同台机器上使用11g rman新特性创建DG
    首先使用dbca建立一个数据库,db_name=primary 。 2.   为两个数据库准备静态监听。及连接彼此的TNSNAME11gdg1-> cat&nb...
    99+
    2022-10-18
  • Oracle进阶学习之创建数据库
    写在前面:    Oracle在创建用户的时候默认使用的表空间为User,我们一般不建议这样做,因为默认表空间的大小是固定的,如果我们创建的所有用户都使用默认的表空间...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作