首页 > 代码库 > 搭建逻辑备库
搭建逻辑备库
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或者failover后DG就是失效,需要重新配置逻辑备库
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_database为true
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.
搭建逻辑备库