利用rman duplicate重建oracle dataguard standby数据库
问题背景
- 适用情况:
操作系统: redhat 6.5
数据库: oracle 11g r2
问题描述: failover后原主库无法恢复和启动或者丢失主备关系
- 优点
- 不需要对primary数据库停机
- 执行简单
- 实施前准备工作
1.测试dumplicate
2.测试环境数据库利用dumplicate重建stanby数据库
实施步骤
- 备份新主库
注意备份脚本,应该备份到服务器的本地磁盘而不是带库。
rman_backup.sh备份本地脚本:
#!/bin/sh
#oracle environment...........
export ORACLE_BASE=/data/oracle/app
export ORACLE_HOME=$ORACLE_BASE/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=orcl_stby
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
day=`date -u +%Y%m%d `
cd /data/bak/rman_backup
rman target / nocatalog log=/data/bak/rman_backup/rman_backup$day.log <<EOF
crosscheck archivelog all;
crosscheck backup;
delete noprompt expired archivelog all;
delete noprompt expired backup;
run{ allocate channel c1 type disk;
allocate channel c2 type disk;
backup database format '/data/bak/rman_backup/%d_full_%T%s%p.bck';
sql "alter system archive log current";
backup archivelog all format '/data/bak/rman_backup/%d_arc_%T%s%p.bck';
backup current controlfile format = '/data/bak/rman_backup/controlfile%T%s%p.bck';
release channel c1;
release channel c2;
}
exit;
EOF
- 删除原主库
这一步以后,后面步骤都约定改原主库叫“备库”,新主库叫“主库”。
1.关闭数据库;
SQL>shutdown immediate;
2.以restrict方式重新打开数据库,并启动到mount状态;
sqlplus / as sysdba
SQL>startup restrict mount; --> # 只有拥有sysdba角色权限的用户才可以登录数据库,普通用户则不可以(防止有其他用户对数据库进行访问)
3.再次确认数据库名,以防止误删除,本次要删除的是orcl;
SQL>select name from v$database;
4.使用drop database语句;
SQL>drop database; --> # (10g及以后版本适用)
# 它只删除了数据库文件(控制文件、数据文件、日志文件、spfile),但并不删除$ORACLE_BASE/admin/$ORACLE_SID目录下的文件 也不会删除初始化参数文件及密码文件,归档日志也不会被删掉。
SQL> shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@uatecsdb ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Wed Aug 23 14:52:03 2017
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup restrict mount;
ORACLE instance started.
Total System Global Area 6747725824 bytes
Fixed Size 2213976 bytes
Variable Size 5100275624 bytes
Database Buffers 1610612736 bytes
Redo Buffers 34623488 bytes
Database mounted.
SQL> select name from v$database;
NAME
---------
ORCL
SQL> drop database;
Database dropped.
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> exit
[oracle@uatecsdb ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Wed Aug 23 14:56:20 2017
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to an idle instance.
SQL>
- 备库准备startup nomount
准备pfile配置文件,最好是原来构建DataGuard时创建的的pfile。
注意把pfile改成init$ORACLE_SID.ora的格式(initorcl.ora),并且放到/data/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/目录下:
SQL>startup nomount;
- rman连接主库和备库
执行RMAN连接前,先确认以下几项是否有问题:
1.防火墙关闭
2.tnsnames.ora,各自服务器须能监听对方
3.sys密码最好一致
4.db_file_name_convert和log_file_name_convert,若目录不一致,pfile需要制定这两个参数
由于之前都构建过DataGuard所以,这几项在生产环境不受影响.
rman target sys/yourpassword@orcl_stby auxiliary sys/yourpassword@orcl
使用duplicate命令重建standby数据库
因为主备库的路径相同,使用下面命令:
RMAN>duplicate target database for standby from active database nofilenamecheck;
- 验证数据库
打开备库:
SQL>alter database open; #这一步可能报错,暂时不管,最后再测试是否可以open
SQL>CREATE SPFILE FROM PFILE='/data/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/initorcl.ora';
SQL>select status from v$instance;
SQL>select open_mode from v$database;
查看主库:
SQL>select status from v$instance;
SQL>select open_mode from v$database;
查看GAP_STATUS
SQL>SELECT STATUS, GAP_STATUS FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID = 2;
如果状态是DEFER
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2='ENABLE' SCOPE=BOTH;
启动实时同步:
SQL>alter database recover managed standby database using current logfile disconnect from session;
SQL>select process,thread#,status from v$managed_standby;
SQL>SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG;
SQL>SELECT SWITCHOVER_STATUS FROM V$DATABASE;
- 恢复DMGRL关系
DGMGRL>show database verbose orcl;
查询数据库状态还是Database Status:SHUTDOWN
登录备库,启动dg_broker:
SQL> show parameter dg_broker_start;
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
dg_broker_start boolean FALSE
SQL> alter system set dg_broker_start = true scope=both;
System altered.
SQL>!ps -ef|grep dmon

- 遗留疑问
本次测试仅仅持续了3个多小时,导致新归档了15个归档日志,duplicat完成后,启用LOG_ARCHIVE_DEST_STATE_2,只恢复了6个,虽然LOG各项指标检查没有问题,数据库也可以open,但是数据是否会存在一致性问题?
生产环境因为一个小时一个归档,整个操作来说3个小时就可以完成,所以倒不用担心日志缺失的问题。
- 生产过程正式实施新发现和解决的问题
1.生产实施的时候发现主库log_archive_dest_2状态是INACTIVE,应该是上回failover后没有完整完成,所以导致主库丢失了log_archive_dest_2
SQL> SELECT STATUS, GAP_STATUS FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID = 2;
STATUS GAP_STATUS
--------- ------------------------
INACTIVE
然后执行以下SQL,补回log_archive_dest_2参数即可:
alter system set log_archive_dest_2='SERVICE=orcl LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl' scope=both;

gap状态变为RESOLVABLE GAP,切换日志后,即变为NO GAP。
2.BROKER主备数据库状态配置都不对,需要重建BROKER
a.删除原来的configuration
DISABLE FAST_START FAILOVER FORCE;
(1)观察器上
disable configuration;
remove database orcl;
remove database orcl_stby;
remove configuration;
(2)在两个库上
alter system set dg_broker_start = false scope=both;
show parameter broker;
重命名/data/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/下的
dr1orcl_stby.dat和dr2orcl_stby.dat文件
(3)在两个库上
alter system set dg_broker_start = true scope=both;
b.重建configuration
DGMGRL> create configuration DG_orcl as primary database is orcl_stby connect identifier is orcl_stby;
DGMGRL> add database orcl as connect identifier is orcl maintained as physical;
DGMGRL> show database orcl_stby;
DGMGRL> show database orcl;
DGMGRL> show database verbose orcl_stby;
DGMGRL> edit database 'orcl' set property 'ArchiveLagTarget'='0';
DGMGRL> edit database 'orcl' set property 'LogArchiveMinSucceedDest'='1';
DGMGRL> edit database 'orcl_stby' set property 'DelayMins'='0';
DGMGRL> edit database 'orcl' set property 'DelayMins'='0';
DGMGRL> enable configuration;
DGMGRL> show configuration;
c.启用FAST_START FAILOVER
DGMGRL> EDIT CONFIGURATION SET PROPERTY FastStartFailoverLagLimit=1800;
DGMGRL> EDIT CONFIGURATION SET PROPERTY FastStartFailoverThreshold = 15;
GMGRL> EDIT DATABASE orcl_stby SET PROPERTY FastStartFailoverTarget='orcl';
Property "faststartfailovertarget" updated
DGMGRL> EDIT DATABASE orcl SET PROPERTY FastStartFailoverTarget='orcl_stby';
Property "faststartfailovertarget" updated
SHOW DATABASE ORCL LOGXPTMODE
SHOW DATABASE ORCL_STBY LOGXPTMODE
EDIT DATABASE ORCL SET PROPERTY LOGXPTMODE='SYNC';
EDIT DATABASE ORCL_STBY SET PROPERTY LOGXPTMODE='SYNC';
EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;
ENABLE FAST_START FAILOVER;
SHOW FAST_START FAILOVER;
SHOW CONFIGURATION VERBOSE;
利用rman duplicate重建oracle dataguard standby数据库的更多相关文章
- [Oracle][DataGuard]Standby数据库文件有损坏时的处理方法
需要参考: [Oracle]Recovering the primary database's datafile using the physical standby, and vice versa ...
- Oracle Dataguard Standby Redo Log的两个实验
在Data Guard环境中,Standby Redo Log是一个比较特殊的日志类型.从最新的DG安装指导中,都推荐在Primary和Standby端,都配置Standby Redo Log. 简单 ...
- duplicate命令创建physical standby数据库报RMAN-03015 ORA-17628
The following error is reported trying to create a Physical Standby database using "duplicate f ...
- Oracle 11gR2 使用RMAN Duplicate复制数据库
Oracle 11gR2 使用RMAN Duplicate复制数据库 前言: 上周刚做完一个项目,用户要求RAC的数据库可以自己主动备份到另外一个单节点上,单节点可以正常拿起来就能用. ...
- Oracle Dataguard的原理与基本配置
最近集团在做灾备方案,用于Oracle的高可用性,在不影响主库性能的前提下,我们选择使用DG的"最大性能"模式. DG是Oracle数据库自带的数据同步功能,其基本原理是将日志 ...
- Oracle DataGuard搭建(二)
三.配置备库 创建catalog数据库 用dbca创建数据库,用oracle自带模板,不用em,启用归档,同一管理密码oracle,global name:dbcat1.node249.gewara, ...
- Oracle DataGuard 11g 双机实验
|操作系统 | release 6.7 | release 6.7 | |主机名 | stuaapp01 | stuaapp02 ||IP | 192.168.20.234 | 192.168.20. ...
- 9. Oracle DataGuard的介绍
一. Oracle DataGuard简介 Oracle DataGuard:简称DG.是由一个Primary Database(主库)和一个或者多个Standby Database(备库)组成.对O ...
- ORACLE Physical Standby DG搭建
主库: 一:强制force logging: alter database force logging; 二:开启主库的归档模式 三:主库添加standby redo log,比redo日志组多一组: ...
随机推荐
- Windows MySQL测试数据库employees的导入
一: 首先下载employees测试数据库 https://launchpad.net/test-db/ 二:用文本编辑器打开其中的employees.sql文件,将第38行的set storage_ ...
- Tensorflow描述张量的维度:阶,形状以及维数
张量 TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量可以在图中的节点之间流通. 阶 在TensorFl ...
- IIs实验,中间件漏洞
实验一.IIS实验 1.修改端口 开始→管理工具→Internet 信息服务(IIS)管理器,属性,将端口改为 8080 如图: 2. IP 地址绑定 前面步骤同第一题一样,将 Ip 改为本 ...
- c/c++ 栈与队列实现车库的出入与收费
/* 设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列 (大门在最南端,最先到达的第一辆车停放在车场的最北段),若停车厂内 ...
- iOS证书申请及使用详细说明
iOS 证书申请和使用详解(详细版)阅读 对于iOS开发者来说,apple开发者账号肯定不会陌生.在开发中我们离不开它.下面我简单的为大家分享一下关于iOS开发中所用的证书相关知识. 第一部分:成 ...
- ifeve.com 南方《JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码》
https://blog.csdn.net/defonds/article/details/52598018 多次拉取 JStack,发现很多线程处于这个状态: at jrockit/vm/Al ...
- matplot画图kill问题,形成思路
很多小伙伴刚学matplot的时候 看着代码就想敲 可是你应该现有概念啊 熟悉这两个再看下面的代码,下面的解决了一些人问中文字体的问题,满足了一般人的设置需求 代码注释很详细,我就不多哔哔了. 完全 ...
- abaqus python库变强变大233333333333333
有没有小伙伴想在 至于怎么安装pip 度小娘一位大神提供了办法 https://jingyan.baidu.com/article/7e4409533f32092fc0e2ef24.html 如有需 ...
- mininet的学习之一
mininet命令 (1)--topo (2)--switch (3)--controller (4)--mac 内部交互命令 添加主机 添加链路 添加接口 添加IP 确定是否创建成功 用h1 pin ...
- Ubuntu网络不通解决办法
如下问题: 尝试和Host主机互ping也不通, Ubuntu: vmware 桥接模式 IP:192.168.1.202/24 gateway:192.168.1.1 Host主机:网络正常 IP: ...