Logical Standby配置:
以下数据类型不被支持:
NCLOB
LONG
LONG RAW
BFILE
ROWID
UROWID
检查不被支持的表:
SQL> SELECT DISTINCT OWNER,TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED ORDER BY OWNER,TABLE_NAME;
以下操作不被支持:
ALTER DATABASE
ALTER SESSION
ALTER SNAPSHOT
ALTER SNAPSHOT LOG
ALTER SYSTEM SWITCH LOG
CREATE CONTROL FILE
CREATE DATABASE
CREATE DATABASE LINK
CREATE PFILE FROM SPFILE
CREATE SCHEMA AUTHORIZATION
CREATE SNAPSHOT
CREATE SNAPSHOT LOG
CREATE SPFILE FROM PFILE
CREATE TABLE AS SELECT FROM A CLUSTER TABLE
DROP DATABASE LINK
DROP SNAPSHOT
DROP SNAPSHOT LOG
EXPLAIN
LOCK TABLE
RENAME
SET CONSTRAINTS
SET ROLE
SET TRANSACTION
高级队列的管理和物化视图的刷新不被支持(DBMS_AQADM ,DBMS_MVIEW_REFRESH)
Logical Standby要求每张表应该有Primary key 或者Unique index ,如果必须有没有唯一性标示的表,那么可以激活Primary库的supplemental logging属性,但是这样将会在redo log中记录该表中每一条记录的所有字段作为标示,会大大增加redo log的记录量。
检查没有唯一性标示的表:
SQL> SELECT OWNER, TABLE_NAME,BAD_COLUMN FROM DBA_LOGSTDBY_NOT_UNIQUE WHERE TABLE_NAME NOT IN (SELECT TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED);
如果可以确认表中有唯一标示的字段,但是又不想真正创建主键或者索引来增加更新的开销,那么可以创建disabled RELY类型的约束,比如:
SQL> ALTER TABLE mytab ADD PRIMARY KEY (id, name) RELY DISABLE;
检查supplemental logging是否已经被激活。
SQL> SELECT SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE;
用以下方法激活Primary库的supplemental logging属性:
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;
激活supplemental logging属性以后,作一次日志切换,保证当前日志中不包含非追加日志数据(nonsupplemental log)。
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
创建一个新的表空间,用于LogMiner,否则Logical Standby需要的对象将默认创建在SYSTEM表空间中。
SQL> CREATE TABLESPACE logmnrts DATAFILE '/disk1/oracle/dbs/logmnrts.dbf' SIZE 25M AUTOEXTEND ON MAXSIZE UNLIMITED;
SQL> EXECUTE DBMS_LOGMNR_D.SET_TABLESPACE('logmnrts');
关闭Primary,备份所有数据文件,传到Standby
启动Primary,创建logical standby database的数据字典
SQL> EXECUTE DBMS_LOGSTDBY.BUILD;
检查需要上传到Standby上的归档日志信息
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE (SEQUENCE#=(SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE DICTIONARY_BEGIN = 'YES' AND STANDBY_DEST= 'NO'));
NAME
--------------------------------------------------------------------------------
/opt/oracle/oradata/orcl/archive/1_29.dbf
修改Primary和Standby上的tnsnames.ora和listener.ora,配置方法跟Physical Standby中一样。
修改Standby上初始化参数中的fal_server和fal_client值。
设置Standby数据库
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE GUARD ALL;
SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE ‘/opt/oracle/oradata/orcl/archive/1_29.dbf‘;
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY INITIAL;
初次启动Standby需要APPLY INITIAL,以后直接运行以下SQL启动和关闭Standby日志应用。
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;
在Primary作日志归档,测试整个环境是否设置成功。
检查Standby的日志应用情况:
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, DICT_BEGIN, DICT_END FROM DBA_LOGSTDBY_LOG ORDER BY SEQUENCE#;