11g备库搭建碰到自己给自己埋的坑(r7笔记第63天)
记得之前在《一半技术一半生活》中分享过一个设计,因为业务的需求,为了提高业务的处理效率,采用了根据业务的拆库拆表的方式,类似下面的图示。
开发团队也很给力,帮我们协调了好的机器,加了内存,也在新业务2的环境上同步了表结构,抽取了部分数据,然后业务2就开始了紧张的测试,
通过这几天的测试,发现系统的性能逐步稳定下来。忙完了这茬,赶紧来考虑搭建备库。
自己也算是搭建过很多dataguard环境了,一般的环境中检测dataguard搭建成功与否的一种方式就是使用dg broker来验证,一条简单的show configuration命令如果显示SUCCESS则基本意味着备库搭建成功。所以新申请的机器也没有做过多的改动,感觉都是现成的了。
这个环境有一些特殊,特殊之处就是主库为ASM存储,备库为普通文件系统,所以主要的工作就是设置两个convert参数了。使用dg broker能够给予我们非常多的便利。这也是越来越依赖dg broker的原因,搭建备库还是采用最经典的active dupliate方式。
> rman target sys@testbi auxiliary sys@stestbi nocatalog
>duplicate target database for standby from active database nofilenamecheck;
同步很快就完成了,然后我就开始设置dg broker的配置。
create configuration dg_testbi as
primary database is testbi
connect identifier is testbi;
add database stestbi as
connect identifier is stestbi
maintained as physical;
设置完毕,手工检查show configuartion为success
DGMGRL> enable configuration;
Enabled.
DGMGRL> show configuration;
Configuration - dg_testbi
Protection Mode: MaxPerformance
Databases:
testbi - Primary database
stestbi - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
看起来一切都在计划和控制之中。准备手工,但是发现一个比较奇怪的问题,就是备库是11gR2的,但是无法启动到open阶段。
手工尝试启动直接报错。
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-10458: standby database requires recovery
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1:
'/home/U01/app/oracle/oradata/testbi/datafile/system.407.899224793'
看这个情况是备份集出现了问题。
这个时候再次查看dg broker的状态就会有错误 Error: ORA-16724: cannot resolve gap for one or more standby databases
DGMGRL> show configuration;
Configuration - dg_testbi
Protection Mode: MaxPerformance
Databases:
testbi - Primary database
Error: ORA-16724: cannot resolve gap for one or more standby databases
stestbi - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
ERROR
如此一来这个备库还是有一些问题,尝试查看fal_client,fal_servre的设置也没有发现任何问题。但是侥幸重新设置配置,竟然又成功了。
DGMGRL> remove configuration;
Removed configuration
DGMGRL> create configuration dg_testbi as
primary database is testbi
connect identifier is testbi;
Configuration "dg_testbi" created with primary database "testbi"
DGMGRL> add database stestbi as
connect identifier is stestbi
maintained as physical;
Database "stestbi" added
DGMGRL> enable configuration;
Enabled.
DGMGRL> show configuration;
Configuration - dg_testbi
Protection Mode: MaxPerformance
Databases:
testbi - Primary database
stestbi - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
然后再次open,问题依旧,这可是11gR2的库,ADG也要求不高,问题依旧是 Error: ORA-16724: cannot resolve gap for one or more standby databases
当然设置显示为SUCCESS,我使用verbose的方式查看备库的情况,发现已经有了近4个半小时的延时。
DGMGRL> show database stestbi;
Database - stestbi
Role: PHYSICAL STANDBY
Intended State: APPLY-ON
Transport Lag: (unknown)
Apply Lag: 4 hours 29 minutes 48 seconds
Real Time Query: OFF
Instance(s):
testbi
Database Status:
SUCCESS
DGMGRL> DGMGRL> exit
这部分日志就是不应用,从后台日志也可以看出,只用RFS工作,查看MRP也没有抛出什么错误来。
当然这个问题看起来蛮奇怪,还是需要反复验证,尝试取消日志应用,然后把备库开启到read only状态,11gR2默认会把它再设置为real time apply的方式,从日志里也可以看出。
备库中的alert日志内容如下:
Managed Standby Recovery starting Real Time Apply
Media Recovery Waiting for thread 1 sequence 101
Wed Dec 30 23:00:34 2015
Standby crash recovery need archive log for thread 1 sequence 101 to continue.
Please verify that primary database is transporting redo logs to the standby database.
Wait timeout: thread 1 sequence 101
Standby crash recovery aborted due to error 16016.
Errors in file /home/U01/app/oracle/diag/rdbms/stestbi/testbi/trace/testbi_ora_3241.trc:
ORA-16016: archived log for thread 1 sequence# 101 unavailable
Recovery interrupted!
Completed standby crash recovery.
Signalling error 1152 for datafile 1!
Errors in file /home/U01/app/oracle/diag/rdbms/stestbi/testbi/trace/testbi_ora_3241.trc:
ORA-10458: standby database requires recovery
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1: '/home/U01/app/oracle/oradata/testbi/datafile/system.407.899224793'
ORA-10458 signalled during: alter database open...
可以发现原来备库中已经接收不到序列号为101的归档了。
在备库中查看,确实只有102开头的归档了,那么101的归档呢。
这个时候回过头来再看,发现主库竟然默默在运行着一个crontab 任务。而且触发频率较高。
0,15,30,45 * * * * $HOME/dbadmin/scripts/rm_archive.sh
查看这个脚本的内容,已经让我心灰意冷。这个脚本本身还是存在一些问题,算是直接删除归档的节奏。也没有判断是否应用到备库。
#!/bin/bash
. ~oracle/.bash_profile
rman target / < CONFIGURE ARCHIVELOG DELETION POLICY TO none;
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog until time "sysdate-1/12";
exit
EOF
当然我们需要修改一下。
至少得让归档应用到备库去。
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog until time "sysdate-1";
看来自己真是给自己埋了一个坑,自己也毫不犹豫就跳了进去,等回过头来,发现又是一场白忙活,因为库不是很大,如果统计库几个T,几十个T,那就绝对会被耗掉意志。
- 如何重置Cloudera Manager的admin密码
- 如何在CDH集群安装Anaconda&搭建Python私有源
- 如何使用Python Impyla客户端连接Hive和Impala
- 如何在Windows Server2008搭建DNS服务并配置泛域名解析
- 如何通过CM API优雅的获取元数据库密码
- CM启动报InnoDB engine not found分析
- 如何在Hue中使用Sentry
- 如何在Redhat中配置R环境
- 如何在Redhat中安装R的包及搭建R的私有源
- 什么是sparklyr
- 如何利用Dnsmasq构建小型集群的本地DNS服务器
- Cloudera Labs中的Phoenix
- 如何在CDH中使用Phoenix
- Java 8 时间 API 快速入门
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 蛇形矩阵
- 【SpringBoot WebFlux 系列】 header 参数解析
- URL 去重的 6 种方案!(附详细实现代码)
- 原生JS封装拖动验证滑块你会吗?
- 企业远程视频会议云服务EasyRTC-SFU版本支持 https 功能设计逻辑
- python之编码解码、字符串常用方法
- python之列表
- 一文带你深入理解Mysql索引底层数据结构与算法
- CGI & FastCGI
- 可输出sql的PrepareStatement封装
- spring mvc基础配置
- spring 事务管理方式及配置
- spring 整合 ActiveMQ
- Spring 配置请求过滤器,编码格式设为UTF-8,避免中文乱码
- ntopng网络监控-远程协助/访问