前提:
主库执行:
1. 放在Oracle内部schema下的用户表将不会被复制到备库,并且DBA_LOGSTDBY_UNSUPPORTED这里也查询不到
--查询Oracle内部的schema
SELECT OWNER FROM DBA_LOGSTDBY_SKIP WHERE STATEMENT_OPT = 'INTERNAL SCHEMA';
2.
--查询SQL Apply不支持的表
SELECT DISTINCT OWNER,TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED ORDER BY OWNER,TABLE_NAME;
3. 为了确保SQL Apply能有效应用update的redo数据到备库,建议主库的表都有主键或非空唯一索引
--查询没有唯一逻辑标识符的表
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';
如果上面的语句非常慢,建议直接执行:
SELECT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_NOT_UNIQUE
WHERE BAD_COLUMN = 'Y';
步骤:
一 、 首先创建好物理备库
参考上一篇Blog: http://blog.youkuaiyun.com/edcvf3/article/details/54288336
二、原物理备库上停止日志应用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
三、主库上设置支持逻辑备库的操作
1. 更改LOG_ARCHIVE_DEST_1,只归档在线日志,而不归档standby redo
SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=/bak2/archivelog/
VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=r5' scope=both;
2. 设置LOG_ARCHIVE_DEST_3,此参数仅当主库转换为逻辑备库角色时使用
SQL> alter system set LOG_ARCHIVE_DEST_3='LOCATION=/bak2/arch2/
VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)
DB_UNIQUE_NAME=r5' scope=both;
SQL> alter system set LOG_ARCHIVE_DEST_STATE_3=ENABLE scope=both;
注: 不能共用/bak2/archivelog/这个归档日志目录,应