dg的奇怪问题终结和分区问题答疑 (r7笔记第77天)

今天来说几个问题,一个是对昨天《让我焦灼的四个问题》的升华,不能起博眼球的题目,技术分析给大家兜底了,你们看看有没有类似的问题。 还有几个小问题说说今天的感受和网友的问题解答。 首先是让我焦灼的dataguard问题,说起来惭愧,一个dataguard搞了很多天,不是搭建麻烦,是中间碰到了不少的坑和问题,当然自己能够说服 自己是第一步,虽然最后找到一个bug来对这个问题终结,但是还有一个疑点一直没让我释怀,就是主库redhat 6.3+ASM,备库redhat 5.3+FS,其实这个组合虽然看起来有些牵强,但是搭建备库从技术设计上看起来还是能够实现的,本来11g已经开始部分支持异构平台的dg了,跨操作系 统版本应该还是可以的,但是这套环境就是不行,当然最后又一个redhat 5和bmr相关的一个bug,但是说服不了自己的是这个环境之前也有一套灾备环境,从以前的历史日志来看,是没有问题的,所以一直没想明白到底了哪里出了 问题。当时临时把备库建在了一台备机上,这台机器就留下来琢磨了好几天,也是运气好,本来昨天就pxe格式化成6.3版本了,昨天的文章中亦远邦给了我私 信回复,当然他的分析真是一针见血,让我竖大拇指的地方就是我文章里没有提供的信息他也猜到了,他说可能和一个参数 filesystemmio_options可能有关,如果在ext4上,那么就是一个os级的kernel bug了。因为我的文章中从来没有提及这个参数,一直在从数据库层面进行分析,当他一提到这个参数,我是有种顿悟的感觉,所以一宿都在做梦忙着修复这个问 题,真是累啊。 当然我们早上也进行了进一步沟通,向他学了不少干货,首先这个问题在mos上可以搜到,不过搜索的关键字是zero ext4可以找到对应的bug,文章为: ORA-1578 ORA-353 ORA-19599 Corrupt blocks with zeros when filesystemio_options=SETALL on ext4 file system using Linux (Doc ID 1487957.1) 所以这样一来对于这个问题总算有了结论,我之前的疑虑终于消除了,对于异步IO的这个问题,在kernel版本中(目前我的是在 2.6.18-194.el5)开启会有一些问题,也不是说redhat 6就一定没有问题,而是需要在对应的基线内核版本范围之内,从oracle的建议来看,要不设置为none,要不开directIO,要不开 async_IO,不能setall 当然还聊了不少,理论的铺垫已经有了,自己还是实践一下,实践也略微有些曲折,是因为我竟然又碰到了好几个小问题,有些在mos上还查到是bug,如果在备库环境设置filesystemmio_optinos为none之后,重启数据库,会报出下面的错误。

alert_testbi.log
ORA-17629: Cannot connect to the remote database server
ORA-17627: ORA-01017: invalid username/password; logon denied
ORA-17629: Cannot connect to the remote database server
ORA-17627: ORA-01017: invalid username/password; logon denied
ORA-17629: Cannot connect to the remote database server
ORA-17627: ORA-01017: invalid username/password; logon denied
ORA-17629: Canno
Wed Jan 13 09:55:18 2016
Recovery interrupted!
Hex dump of (file 9, block 1048240) in trace file /home/U01/app/oracle/diag/rdbms/s2testbi/testbi/trace/testbi_pr00_15736.trc
Corrupt block relative dba: 0x024ffeb0 (file 9, block 1048240)
Completely zero block found during in-flux buffer recovery
Reading datafile  '/home/U01/app/oracle/oradata/testbi/datafile/mbi_data.274.899314747'  for corruption at rdba: 0x024ffeb0 (file 9, block 1048240)
Reread (file 9, block 1048240) found same corrupt data (no logical check)
Hex dump of (file 9, block 1048241) in trace file /home/U01/app/oracle/diag/rdbms/s2testbi/testbi/trace/testbi_pr00_15736.trc
。。。
Reading datafile  '/home/U01/app/oracle/oradata/testbi/datafile/mbi_data.274.899314747'  for corruption at rdba: 0x024ffe9f (file 9, block 1048223)
Reread (file 9, block 1048223) found same corrupt data (no logical check)
Incomplete read from log member  '/home/U01/app/oracle/fast_recovery_area/S2testBI/archivelog/2016_01_11/o1_mf_1_450_c96vv7d1_.arc'.  Trying next member.
Recovered data files to a consistent state at change 414943405
Wed Jan 13 09:55:18 2016
Recovery Slave PR0C previously exited with exception 17627
MRP0: Background Media Recovery process shutdown (testbi)
Wed Jan 13 10:08:32 2016

MRP会先启动,然后在一大堆错误之后默默down掉。
尝试了坏块修复,发现ASM归档格式的映射和文件系统的映射存在一些问题。
All non-current ORLs have been archived.
Media Recovery Log /home/U01/app/oracle/fast_recovery_area/S2TESTBI/archivelog/2016_01_11/o1_mf_1_450_c96vklfq_.arc
Error opening /home/U01/app/oracle/fast_recovery_area/S2TESTBI/archivelog/2016_01_11/o1_mf_1_450_c96vklfq_.arc
Attempting refetch
MRP0: Background Media Recovery terminated with error 308
Errors in file /home/U01/app/oracle/diag/rdbms/s2testbi/testbi/trace/cyoubi_pr00_16345.trc:
ORA-00308: cannot open archived log  '/home/U01/app/oracle/fast_recovery_area/S2TESTBI/archivelog/2016_01_11/o1_mf_1_450_c96vklfq_.arc'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Recovery interrupted!
但是实际上归档在主库也是存在,在备库也有序列号为450的归档,但是归档格式不同。
主库为ASM,归档格式为:
ASMCMD> ls -lt
Type        Redund  Striped  Time             Sys  Name
ARCHIVELOG  UNPROT  COARSE   JAN 12 10:00:00  Y    thread_1_seq_463.2224.900889823
..
ARCHIVELOG  UNPROT  COARSE   JAN 11 17:00:00  Y    thread_1_seq_450.2844.900866813
备库为文件系统,归档格式为:
$ ll /home/U01/app/oracle/fast_recovery_area/S2CYOUBI/archivelog/2016_01_11
total 349724
-rw-r----- 1 oracle oinstall 117709312 Jan 11 16:56 o1_mf_1_449_c96vkfv9_.arc
-rw-r----- 1 oracle oinstall  57289728 Jan 11 17:01 o1_mf_1_450_c96vv7d1_.arc
-rw-r----- 1 oracle oinstall  19244544 Jan 11 16:56 o1_mf_1_451_c96vkgbj_.arc
这个格式映射出现问题,当然手工改归档名肯定是不可以的,因为头部校验就会出错。
而且更为关键的是其实备库的序列号已经很新了。已经远远超过了450
SQL> select sequence#,status from v$log;
 SEQUENCE# STATUS
---------- --------------------------------
       502 CLEARING
       501 CLEARING
       503 CURRENT
这个找到一篇文章  Oracle Alert Log Is Reporting Archive Log Status Is Not  Available For Logs That Have Long Been Backed Up (Doc ID 1161573.1)
实际上如果观察前面的日志仔细,会发现刚好删除了450的归档。
Deleted Oracle managed file /home/U01/app/oracle/fast_recovery_area/S2TESTBI/archivelog/2016_01_11/o1_mf_1_450_c96vklfq_.arc
其实闪回区的使用率也就20%左右,离80%还远。
最后果断重新duplicate,当然花了几十分钟搞定。然后就没有看到任何的错误。看到下面的信息终于踏实了。
Wed Jan 13 13:05:49 2016
Media Recovery Log /home/U01/app/oracle/fast_recovery_area/S2testBI/archivelog/2016_01_13/o1_mf_1_508_c9cprvo5_.arc
Media Recovery Waiting for thread 1 sequence 509 (in transit)
Recovery of Online Redo Log: Thread 1 Group 4 Seq 509 Reading mem 0
  Mem# 0: /home/U01/app/oracle/oradata/testbi/onlinelog/group_4.302.899840531
  Mem# 1: /home/U01/app/oracle/fast_recovery_area/testbi/onlinelog/group_4.799.899840531
当然稍后还是要把它pxe格式化掉,改为6.3以上的版本。发现问题不作为感觉是在作假。也算给自己一个验证的机会吧,最后再次感谢远邦,中亦科技的小y,给予的无私帮助。
终于让我从苦海中脱离出来了,当然后面还有其它的苦海。:)

问题答疑
还有个问题是最近还有几个网友在问我。
1)如果需要在非分区列上创建唯一索引呢?只能全局吧?
2)怎么在非分区建上建立通过约束建立本地唯一索引 并不是在分区键或者带着分区键 比如我的分区键是时间列range分 但我要按照ID列来建本地唯一索引 怎么办?
其实对于这个问题,可以做个小实验。创建一个分区表。为了日期格式简单,我用Number代替。
create table test (id number,name varchar2(30),rdate number)
partition by range( rdate)
(
partition p1 values less than(2014),
partition p2 values less than(2015),
partition p3 values less than(2016)
);

创建本地唯一索引
SQL> create unique index ind_test_id_uq on test(id) local;
create unique index ind_test_id_uq on test(id) local
                                      *
ERROR at line 1:
ORA-14039: partitioning columns must form a subset of key columns of a UNIQUE index
这个时候这个错误也是合理的,如果已经做了唯一性判断,那还要分区的rdate有什么用呢。
可以根据你的需要创建prefix local index或者组合索引都可以。
比如。
SQL> create unique index ind_test_id_uq on test(rdate,id) local;
Index created.
再次基础上创建约束即可。
SQL> alter table test add constraint con_test_id_uq unique(rdate,id);
Table altered.
这个地方可以思考一下,如果单纯在id上建唯一性索引,这个分区的简直rdate就没什么用了,做本地索引就没有了分区的基准。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2016-01-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏简书专栏

Python数据持久化-csv、excel篇

2018年7月4日笔记 学习目标: 1.会使用Python第三方模块操作CSV文件 2.会使用Python第三方模块操作EXCEL文件

19020
来自专栏源哥的专栏

SaaS行业命名规范

    很多企业在启动软件开发的时候,完成没有命名规范,导致代码的可读性极差。而业界对于命名,却没有一个统一的命名规范,比如说,获取客户列表,Java类的方法是...

20530
来自专栏cmazxiaoma的架构师之路

蛋疼的ElasticSearch(四)之基本用法、高级查询

ElasticSearch系列文章: 1.蛋疼的ElasticSearch(一)之安装ElasticSearch 2.蛋疼的ElasticSearch(二)...

10140
来自专栏JadePeng的技术博客

HTML5录音控件

最近的项目又需要用到录音,年前有过调研,再次翻出来使用,这里做一个记录。 HTML5提供了录音支持,因此可以方便使用HTML5来录音,来实现录音、语音识别等功能...

1.8K50
来自专栏Python中文社区

怎样用Python实现地理编码

怎样用Python实现地理编码 专栏作者:时空Drei ❈ 时空Drei,德国德累斯顿工业大学在读博士生,个人的擅长领域为:利用Python进行空间数据(遥感G...

44970
来自专栏编程之旅

iOS开发 —— Swift版地址选择器

已经有二十多天没有更新自己的博客了,这段时间经历了很多事情,离开了生活了六七年的杭州,从离职再入职,忙的是一塌糊涂。

13620
来自专栏蓝天

养成良好的编程习惯

4.从源头避免版本不一致问题(当同一个文件在不同目录下出现拷贝时,容易出现其中某个未同步更新的问题)

12430
来自专栏北京马哥教育

给Python新人练手准备的十个简单趣味脚本

? 01. 目录文件分类 前言 有时候,想要对一个目录里的文件进行搜索或者分类操作往往是一件痛苦的事情,下面这个程序的目的是将目录下的文件树以某种分类规则进行...

520100
来自专栏施炯的IoT开发专栏

Windows 10 IoT Serials 5 - 如何为树莓派应用程序添加语音识别与交互功能

    都说语音是人机交互的重要手段,虽然个人觉得在大庭广众之下,对着手机发号施令会显得有些尴尬。但是在资源受限的物联网应用场景下(无法外接鼠标键盘显示器),如...

220100
来自专栏杨建荣的学习笔记

GoldenGate数据迁移的问题总结(二)(r10笔记第85天)

昨天使用GoldenGate同步数据,数据量玩得有些大了。最后发现很多小问题变得更加严峻,比如空间问题。 而且由于没有更多的经验,导致这个问题被我引入了另外一个...

34690

扫码关注云+社区

领取腾讯云代金券