曲折的dump导入及问题分析(r5笔记第47天)
今天下午的时候得到反馈,说开发在导入一个dump的时候报了错误,他们尝试连接数据库,发现连接都有问题,让我们赶紧看看。
这是一个测试环境的库,在服务器上同时还跑着十多个数据库不同应用的数据库实例。
> sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Mon May 25 14:28:50 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
ERROR:
ORA-09817: Write to audit file failed.
Linux-x86_64 Error: 28: No space left on device
Additional information: 12
ORA-01075: you are currently logged on
看这个错误是audit的部分无法写入了,可能是audit表占用的空间较大,也可能是系统空间不足导致。
尝试登陆其它的几个库,也是类似的问题,这个时候问题一下子变得严重起来,需要赶紧修复。
使用sysdba都无法登录,所以直接定位到日志目录还是有点困难的,这个时候我们可以借助参数文件,这个路径是固定的 $ORACLE_HOME/dbs下面,直接查看init.ora文件找到diagnostic_dest对应的路径。
简单定位后,发现所在的分区系统空间不足了,发现归档文件占用了大部分的空间,这个时候需要尽快释放这部分的空间,一种思路就是把修改归档路径,但是这种方式可行但不值得提倡,这个环境会有很多人来维护,其中的参数和配置信息基本都是统一的,如果随意修改,后续的人来支持就会遇到一些问题,如此反复,简单的一个小问题就可能导致一些复杂潜在的问题,这个时候还是建议保留原值,但是可以考虑创建一个链接直接链接到空间比较充足的分区下。
比如下面的例子就是创建一个链接 arc, 链接到 /oravl20/oradata/CNVxxxx/arc下面。
ln -s /oravl20/oradata/CNVxxxx/arc arc
然后把归档文件就顺势都挪过去了。这样原有的分区空间马上级释放了,而且还不需要修改参数文件的配置,空间问题很快就解决了。所以看似是audit日志的问题,很可能不是,不要被误导。
但是不一会儿,开发反馈导入dump的时候出错了。
错误信息类似下面的形式。
The following error occurred: error occurred during batching: ORA-02298: cannot validate (AAAPPO1.CSM_BEN_1FK) - parent keys not found这个错误比较明显,基本可以判定是由于数据问题导致的,但是数据抽取工具抽取的数据都是严格按照抽取逻辑来执行的,应该不会出现这种错误。这种问题一般来说DBA都不会直接确认都会直接交给开发自己去确认这类数据问题,今天因为问题比较急,就顺带查了一下。
因为提供的日志信息有限,所以就马上连接到这套环境,找到对应的外键对应关系,做了两个简单的查询。
SQL> select count(*)from csm_ben;
COUNT(*)
----------
248
SQL> select count(*)from csm_account;
COUNT(*)
----------
0
这个时候看问题就比较明显了,很显然在外键列所在的表csm_account中竟然没有数据,为什么会出现这种问题,我也怀疑是不是dump出问题了,而只是从开发提供的一个ORA错误还是所知甚少。需要更多的信息来佐证。
我们可以直接尝试把数据导入csm_account,做一个尝试,看看dump中是否丢失了这个表的数据。
imp xxxx/xxxx file=test_data.dmp statistics=none grants=n indexes=n ignore=Y buffer=9102000 tables=csm_account
结果就出错了,发现是由于一个表中的字段丢失造成的。
IMP-00058: ORACLE error 904 encountered
ORA-00904: "L9_xxxxxx_NO": invalid identifier
Import terminated successfully with warnings
问题真是层出不穷,而且解决问题的思路都是类似的,为什么会出现这个问题,接下来改做些什么,开发会这么问我,我也会自问。
最后排查得知,这套环境的版本很低,和现有的生产环境的版本相去甚远,所以这些额外的变更就不存在,这个时候就可以和开发确认,为什么要选用这套很老的环境,最后他们确认后,找了一套版本比较新的环境就没有问题了。
从这个问题的处理来看,问题本身比较简单,处理思路也很简单,感觉每个问题都是一些很常规的处理方式,但是带给我们的反思就是很多简单的问题凑在一块儿,就可能是一个严重的问题,在问题的处理过程中,也需要明确分工和职责,有时候仅仅得到一个ora错误就去做全面的分析是远远不够的,还得结合环境和具体的场景,上面两个简单的问题从表面来看似乎都很明显,但是结合具体的处理场景来分析发现原因和错误提示信息还是有比较大的出入。
- redis配置详解(中英文)
- 我所理解的Remoting(1):Marshaling & Activation[下篇]
- 5分钟短视频,带你走进日志易SPL,助你日志分析更容易
- Unity Application Block 1.2 for Silverlight - December 2008
- 算法学堂 - 二分查找及其变形
- Zookeeper权限管理与Quota管理
- 刘鹏:保大还是保小?无人汽车也将面临这样的道德窘境
- 浅谈DNS
- silverlight寻奇 - Graphite
- 程序运算性能测量
- 2018年比特币的真正瓶颈在这里
- 玩转 React 服务器端渲染
- WCF版的PetShop之二:模块中的层次划分[提供源代码下载]
- 我的WCF之旅(3):在WCF中实现双工通信
- 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 数组属性和方法
- Android碎片fragment实现静态加载的实例代码
- android异步消息机制 源码层面彻底解析(1)
- /undefinedcss/modules/layer/default/layer.css?v=3.1.1找不到的问题
- Android实现渐变启动页和带有指示器的引导页
- the input device is not a TTY. If you are using mintty, try prefixing the comma
- 【STM32F407】第13章 RL-TCPnet V7.X之创建多个TCP客户端
- RecyclerView实现列表倒计时
- wsl设置默认账户为root(ubuntu18.04)
- LeetCode No.14 最长公共前缀
- android异步消息机制 从源码层面解析(2)
- beego解决跨域问题:options请求、axios post请求跨域问题
- Android ListView列表实现倒计时
- [-Flutter 自组篇-] 蛛网图+绘制+动画实践
- Kotlin类型系统竟如此简单
- 以人为本 | Android 11 的消息通知