Oracle DG物理备库转换为逻辑备库和快照备库

Oracle DG备库的三种类型:
(1)物理备用数据库
(2)逻辑备用数据库
(3)快照备用数据库

1、物理备用数据库(就是一般常用的DG,这里不再描述)

物理备用数据库是主数据库精确到块对块的副本。

2、逻辑备用数据库

通过将日志文件中的数据转换为SQL语句,然后在逻辑备用数据库上执行SQL语句,Oracle DG自动将归档重做日志文件或备用重做日志文件中的信息应用到逻辑备用数据库。
因为逻辑备用数据库是使用SQL语句更新的,所以它必须保持打开状态。
尽管逻辑备用数据库是以读/写模式打开的,但其用于重新生成的SQL的目标表仅可用于只读操作。
在更新这些表时,可以同时将它们用于其他任务,如报告、汇总和查询。
逻辑备用数据库对数据类型、表类型以及DDL和DML操作的类型有一些限制。

2.1 支持的数据类型

(1)抽象的数据类型(ADT)和ADT表
ADT不能包含任何不支持作为顶级列类型的数据类型(如:嵌套表,PKREF,BFILE,不支持的不透明类型)。
对于要支持ADT列的表,必须有一个主键(或至少一个唯一约束或唯一索引),它只包含标量顶级列(标量ADT属性不能是这种候选键的一部分)。
(2)BINARY_DOUBLE
(3)BINARY_FLOAT
(4)BLOB,CLOB和NCLOB存储为BasicFile和SecureFiles。
SecureFiles可以进行压缩,加密或重复数据删除。
SecureFiles支持要求主数据库以11.2或更高的兼容性运行。
(5)CHAR
(6)DATE
(7)INTERVAL YEAR TO MONTH
(8)INTERVAL DAY TO SECOND
(9)LONG
(10)LONG RAW
(11)NCHAR
(12)NUMBER
(13)NVARCHAR2
(14)存储为VARRAY的对象(集合除外)
(15)Oracle Text
(16)RAW
(17)Multimedia:ORDAudio、ORDDataSource (内部)、ORDDicom、ORDDoc、ORDImage、ORDSource (内部)、ORDVideo
(18)Spatial
(19)TIMESTAMP
(20)TIMESTAMP WITH TIMEZONE
(21)TIMESTAMP WITH LOCAL TIMEZONE
(22)VARCHAR AND VARCHAR2
(23)所有存储 XMLType 的数据
以CLOB格式存储的XMLType要求主数据库以11.0或更高的兼容性设置运行。
以对象关系格式或二进制XML格式存储的XMLType要求主数据库运行Oracle Database 11g第2版(11.2.0.3)或更高版本,重做兼容性设置为11.2.0.3或更高版本。

2.2 不支持的数据类型

(1)ROWID,UROWID
仅支持逻辑的UROWID列,检测到非逻辑的UROWID列,会跳过DML。
(2)嵌套表
(3)具有嵌套表的对象
(4)Identity columns

2.3 默认情况下,SQL Apply会自动跳过某些SQL语句

ALTER DATABASE
ALTER MATERIALIZED VIEW
ALTER MATERIALIZED VIEW LOG
ALTER SESSION
ALTER SYSTEM
CREATE CONTROL FILE
CREATE DATABASE
CREATE DATABASE LINK
CREATE PFILE FROM SPFILE
CREATE MATERIALIZED VIEW
CREATE MATERIALIZED VIEW LOG
CREATE SCHEMA AUTHORIZATION
CREATE SPFILE FROM PFILE
DROP DATABASE LINK
DROP MATERIALIZED VIEW
DROP MATERIALIZED VIEW LOG
EXPLAIN
LOCK TABLE
PURGE DBA_RECYCLEBIN
PURGE INDEX
SET CONSTRAINTS
SET ROLE
SET TRANSACTION

2.4 支持的DDL语句

👉查看支持的DDL语句

2.5 逻辑备用数据库转换步骤

2.5.1 创建物理备用数据库

创建步骤略,物理备用数据库已搭建完成。

2.5.2 在物理备用数据库停止重做应用

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

2.5.3 准备主数据库以支持逻辑备用数据库(切换时会用到)

--设置参数
alter system set log_archive_dest_3='location=/arch/logic valid_for=(standby_logfiles,standby_role) db_unique_name=ORCL';
alter system set log_archive_dest_state_3=ENABLE;
此参数仅在主库转换为逻辑备用角色时生效。

--设置专属表空间(可选)
SQL> create tablespace logmnrtbs datafile '/data/orcl/logmnrtbs1.dbf' size 500M autoextend on;
SQL> execute dbms_logmnr_d.set_tablespace('logmnrtbs');
--构建LogMiner字典
SQL> EXECUTE DBMS_LOGSTDBY.BUILD;

--构建字典时,会自动设置补充日志等,如未设置成功或未自动同步至物理备库,需手动设置
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;
SQL> select SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UI from v$database;

2.5.4 主库查看不被支持的表

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';

2.5.5 将物理备用数据库转换到逻辑备用数据库

SQL> select name,database_role from v$database;
NAME DATABASE_ROLE
---- ----------------------
ORCL PHYSICAL STANDBY

--mount下转换
SQL> alter database recover to logical standby ljorcl; --如长时间卡住,主库再次执行构建LogMiner字典

SQL> shutdown immediate
SQL> startup mount
SQL> select name,database_role from v$database;
NAME   DATABASE_ROLE
------ -----------------------
LJORCL LOGICAL STANDBY

--RAC关闭除一个实例外的所有实例
SQL> ALTER SYSTEM SET CLUSTER_DATABASE=FALSE SCOPE=SPFILE;
SQL> SHUTDOWN ABORT;
SQL> STARTUP MOUNT EXCLUSIVE;
SQL> ALTER SYSTEM SET CLUSTER_DATABASE=TRUE SCOPE=SPFILE;

2.5.6 调整逻辑备库参数

--主库归档接收路径
SQL> alter system set log_archive_dest_1='location=/arch/orcldg valid_for=(standby_logfiles,standby_role) db_unique_name=ORCLDG';

--本地生成归档路径
SQL> alter system set log_archive_dest_3='location=/arch/ljorcl VALID_FOR=(online_logfiles, all_roles) DB_UNIQUE_NAME=ORCLDG';

2.5.7 打开逻辑备用数据库

ALTER DATABASE OPEN RESETLOGS;
ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

2.5.8 验证逻辑备用数据库是否正常运行

SQL> SET LINE 9999 PAGESIZE 9999
COL FILE_NAME FORMAT A50
SELECT THREAD#,SEQUENCE#,FILE_NAME,APPLIED,TIMESTAMP FROM DBA_LOGSTDBY_LOG D WHERE D.SEQUENCE# >=(SELECT MAX(SEQUENCE#)-3 FROM DBA_LOGSTDBY_LOG NB WHERE NB.THREAD#=D.THREAD# AND NB.APPLIED='YES' ) ORDER BY THREAD#,D.SEQUENCE#;

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
SQL> SELECT APPLIED_TIME,APPLIED_SCN,MINING_TIME, MINING_SCN FROM V$LOGSTDBY_PROGRESS;

SQL> SELECT STATUS FROM V$LOGSTDBY_PROCESS WHERE TYPE = 'READER';

3、快照备用数据库

快照备用数据库是一种可更新的备用数据库,它为主数据库提供完全数据保护。
快照备用数据库从其主数据库接收重做数据并存档,但不应用这些数据。
在丢弃对快照备用数据库的所有本地更新后,将快照备用数据库转换回物理备用数据库时,将应用从主数据库接收的重做数据。
快照备用数据库的本地更新会导致其他分歧。但是,主数据库中的数据受到完全保护,因为快照备用数据库可以随时转换回物理备用数据库,然后应用从主数据库接收的重做数据。
创建备用快照、测试、与生产重新同步,然后再次创建备用快照和测试,这是一个可以根据需要重复的循环。

优点:
(1)为开发和测试目的提供了生产数据库的精确副本,同时始终保持数据保护。
(2)通过转换为物理备用并重新同步,可以轻松的刷新它以包含当前的生产数据。

3.1 将物理备用数据库转换为快照备用数据库

3.1.1 停止重做应用

alter database recover managed standby database cancel;

3.1.2 确保数据库mount

SQL> select open_mode from v$database;
OPEN_MODE
---------
MOUNTED

3.1.3 确保已配置快速恢复区域,但不必启用闪回数据库

SQL> alter system set db_recovery_file_dest_size=2g;
SQL> alter system set db_recovery_file_dest='/flashback/ORCLDG';
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------
NO

--查看闪回区域的使用情况
set line 200
SELECT * FROM V$FLASH_RECOVERY_AREA_USAGE;

3.1.4 执行转换

ALTER DATABASE CONVERT TO SNAPSHOT STANDBY;

3.1.5 以读写模式打开快照备用数据库

ALTER DATABASE OPEN READ WRITE;

3.2 将快照备用数据库转换为物理备用数据库

注:快照备用数据库必须在读写模式下至少打开一次,然后才能转换为物理备用数据库。

3.2.1 RAC环境,关闭除一个实例外的所有实例

3.2.2 确保数据库mount

SQL> select open_mode from v$database;
OPEN_MODE
---------
MOUNTED

3.2.3 执行转换

ALTER DATABASE CONVERT TO PHYSICAL STANDBY;

4、参考文档

https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/creating-oracle-data-guard-logical-standby.html#GUID-2A3EDE02-DE51-4813-891C-248AA5F1C027

https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/getting-started-with-oracle-data-guard.html#GUID-140A83DB-6189-489C-ADF3-F84FA801B9E1

https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/managing-oracle-data-guard-physical-standby-databases.html#GUID-CE30E2D6-5B53-4389-8B02-FC0F341C8C1A
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值