首页 > 代码库 > 搭建逻辑备库

搭建逻辑备库

1. 搭建物理备库

2. 在物理备库上停止重做应用,如果备库是RAC,则必须停止所有执行以下语句以外的实例

SQL> alter database recover managed standby database cancel;

 

Database altered.

3. 为角色转换准备主库

这一步仅在执行切换时有用

修改初始化参数:

alter system set LOG_ARCHIVE_DEST_1=‘LOCATION=/oradata/arch/ VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=primary‘ scope=spfile;

alter system set LOG_ARCHIVE_DEST_3=‘LOCATION=/oradata/logiclarch/ VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=primary‘ scope=spfile;

alter system set LOG_ARCHIVE_DEST_STATE_3=ENABLE;

 

参数介绍

 

primary库运行在主角色

primary库运行在逻辑备角色

LOG_ARCHIVE_DEST_1

归档主库在线日志文件的路径

归档逻辑备库在线日志的路径

LOG_ARCHIVE_DEST_3

不起作用

归档从主库接受的redo到本地的路径

4. 在重做数据中创logminer字典

SQL> execute dbms_logstdby.build;

 

PL/SQL procedure successfully completed.

 

注:在11g r2以后补充日志在物理备库中自动开启,如果数据库版本是11.2之前的,或者是由之前的版本升级到11.2以后,执行以下语句开启补充日志

sql>  alter database add supplemental log data (primary key, unique index) columns;

 

SQL> select SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI from v$database;

 

SUP SUP

--- ---

YES YES

 

参数没有开启的话,在发生switchover或者failoverDG就是失效,需要重新配置逻辑备库

5. 转化物理备库为逻辑备库

1. 单实例

SQL> alter database recover to logical standby test;

 

Database altered.

db_name指定一个与主库不同的名字来标识新的逻辑备库,可以不指定

2.RAC

先停止除了一个实例以外的任何实例,修改cluster_database参数为false,以exclusive模式启动备库到mount,再执行语句切换到逻辑备库

sql> alter system set cluster_database=false scope=spfile;

sql> shutdown abort;

sql> startup mount exclusive;

 

注:滚动升级的时候,需要以keep identity模式切换到逻辑备库,数据库版本要求:11.1之后

sql> alter database recover to logical standby keep identity;

 

执行切换logical standby语句时,语句会等待应用重做数据,直到在日志文件中找到logminer 字典,

如果logminer没有在主库执行成功,则语句会一直等待,另开一个会话,执行以下sql命令取消切换logical standby语句

sql> alter database recover mananged standby database cancel

 

因为db_name改变了,在打开logical standby前需要重建密码文件

$ cd $ORACLE_HOME/dbs

$ orapwd file=orapwtest password=oracle

6. 调整逻辑备库的初始化参数

RAC环境:设置cluster_databasetrue

sql> alter system set cluster_database=true scope=spfile;

 

关闭逻辑备库,启动到mount阶段,修改参数

alter system set LOG_ARCHIVE_DEST_1=‘LOCATION=/oradata/arch/ VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby‘ scope=spfile;

alter system set LOG_ARCHIVE_DEST_2=‘SERVICE=primary ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary‘ scope=spfile;

alter system set LOG_ARCHIVE_DEST_3=‘LOCATION=/oradata/logicalarch/ VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)DB_UNIQUE_NAME=standby‘ scope=spfile;

alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;

alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE;

alter system set LOG_ARCHIVE_DEST_STATE_3=ENABLE;

 

在备库上添加standby logfile

SQL> alter database add standby logfile group 8 ‘/oradata/orcl/standby08.log‘ size 50M,group 9 ‘/oradata/orcl/standby09.log‘ size 50M,group 10 ‘/oradata/orcl/standby10.log‘ size 50M;

 

SQL> select group#,thread#,bytes/1024/1024 M from v$standby_log;

 

    GROUP#    THREAD#          M

---------- ---------- ----------

 8            1              50

 9            1              50

10            1              50

 

重启备库使参数生效

 

参数介绍

 

standby库运行在主角色

standby库运行在逻辑备角色

LOG_ARCHIVE_DEST_1

归档主库的在线日志到本路径

归档逻辑备库的在线日志到本路径

LOG_ARCHIVE_DEST_2

传输redo到远程逻辑备库primary

不起作用

LOG_ARCHIVE_DEST_3

不起作用

归档从主库接受的redo到本地的路径

 

7. 打开逻辑备库

SQL> alter database open resetlogs;

 

Database altered.

 

8. 应用SQL应用到逻辑备库

SQL> alter database start logical standby apply immediate;

 

Database altered.

 

注:相同主机,需执行以下语句

SQL> execute dbms_logstdby.skip(‘alter tablespace‘);

9. 检验逻辑备库是否可用

在备库上查询,当前APPLIED_SCN和NEWEST_SCN一致,当前主库没有事务运行

SQL> select applied_scn,newest_scn from dba_logstdby_progress;

 

APPLIED_SCN NEWEST_SCN

----------- ----------

379385         379385

切换主库日志文件

SQL> alter system switch logfile;

 

System altered.

在备库查看APPLIED_SCN和NEWEST_SCN

日志应用中:

SQL> select applied_scn,newest_scn from dba_logstdby_progress;

 

APPLIED_SCN NEWEST_SCN

----------- ----------

382578         382581

 

如果主库一直有有新事务,则APPLIED_SCN会一致追赶NEWEST_SCN,当主库没有事务后,APPLIED_SCN追评NEWEST_SCN后,备库便应用完了主库的重做数据

 

 

查看主备库状态

可以看到,逻辑备库的DBID与主库的不一样,逻辑备库可以打开到读写模式

主库:

SQL> select name,dbid,database_role,open_mode from v$database;

 

NAME            DBID DATABASE_ROLE    OPEN_MODE

--------- ---------- ---------------- --------------------

ORCL      1387027022 PRIMARY          READ WRITE

备库:

SQL> select name,dbid,database_role,open_mode from v$database;

 

NAME            DBID DATABASE_ROLE    OPEN_MODE

--------- ---------- ---------------- --------------------

TEST      2158270330 LOGICAL STANDBY  READ WRITE

 

开始与停止逻辑备库的SQL应用

开始:

SQL> alter database start logical standby apply immediate;

 

Database altered.

停止:

SQL> alter database stop logical standby apply immediate;

 

Database altered.

 

搭建逻辑备库