天萃荷净

深入研究Oracle坏块obj$导致exp/expdp不能执行导出的原因

上篇(案例:Oracle出现obj$坏块exp/expdp导出不能导出的解决办法ORA-01578 ORA-01110),验证了在obj$有坏块的情况下,不能执行exp/expdp操作,这篇是说明是什么原因导致在obj$有坏块的情况下exp不能正常执行

一.启动Oracle数据库级别会话跟踪

[oracle@node1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Sun Jan 15 11:37:07 2012

Copyright (c) 1982, 2011, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, Oracle Label Security, OLAP, Data Mining,

Oracle Database Vault and Real Application Testing options

SQL> create pfile='/tmp/pfile' from spfile;

File created.

--------------------------------------------------

在pfile中添加

event='10046 trace name context forever,level 12'

--------------------------------------------------

SQL> startup pfile='/tmp/pfile' force

ORACLE instance started.

Total System Global Area 622149632 bytes

Fixed Size 2230912 bytes

Variable Size 398460288 bytes

Database Buffers 213909504 bytes

Redo Buffers 7548928 bytes

Database mounted.

Database opened.

二.执行table单表导出,找到trace文件

[oracle@node1 trace]$ exp "'/ as sysdba'" tables=chf.t1 file=/tmp/xifenfei.dmp \

> log=/tmp/xifenfei.log INDEXES =n  COMPRESS =n CONSISTENT =n GRANTS =n \

> STATISTICS =none TRIGGERS =n CONSTRAINTS =n

Export: Release 11.2.0.3.0 - Production on Sun Jan 15 11:48:50 2012

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, Oracle Label Security, OLAP, Data Mining,

Oracle Database Vault and Real Application Testing option

Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set

Note: grants on tables/views/sequences/roles will not be exported

Note: indexes on tables will not be exported

Note: constraints on tables will not be exported

About to export specified tables via Conventional Path ...

Current user changed to CHF

. . exporting table                             T1

--另外会话观察

Tasks: 241 total,   1 running, 240 sleeping,   0 stopped,   0 zombie

Cpu(s):  8.9%us,  1.2%sy,  0.0%ni, 85.1%id,  4.8%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:   8165060k total,  7168288k used,   996772k free,   266028k buffers

Swap:  8289500k total,      168k used,  8289332k free,  4653408k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

4829 oracle    18   0 69812  12m 9144 S 51.1  0.2   0:03.64 exp               tables=chf.t1 file=/tmp/xifenfei.dmp log=/tmp/xifenfei.log INDEXES =n COMPRESS

4830 oracle    18   0  829m  62m  58m D 27.9  0.8   0:03.85 oraclechf (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

[oracle@node1 trace]$ ll |grep 4830

-rw-r----- 1 oracle oinstall 14101447 01-15 11:49 chf_ora_4830.trc

-rw-r----- 1 oracle oinstall    75398 01-15 11:49 chf_ora_4830.trm

1

三.阅读Oracle跟踪trace文件

因为是obj$对象出现坏块,导致exp不能执行,如果是使用了obj$表的index,那么不会每次都报错,而我测试了多次都报错,所以怀疑是对obj$表进行全表扫描导致该错误发生,而使得exp不能继续下去。所以这次查找trace文件,重点是关注obj$表的全表扫描操作,经过耐心查找,终于发现了一个对obj$全表扫描的操作

1

PARSING IN CURSOR #46986932266584 len=41 dep=0 uid=0 oct=3 lid=0 tim=1326599330636591 hv=2311813821 ad='7be773c8' sqlid='ftx7dd64wqypx'

SELECT COUNT(*)      FROM   SYS.EXU81JAVT

END OF STMT

PARSE #46986932266584:c=2999,e=2938,p=5,cr=23,cu=0,mis=1,r=0,dep=0,og=1,plh=23986678,tim=1326599330636590

WAIT #46986932266584: nam='SQL*Net message to client' ela= 3 driver id=1650815232 #bytes=1 p3=0 obj#=91 tim=1326599330636682

WAIT #46986932266584: nam='SQL*Net message from client' ela= 42 driver id=1650815232 #bytes=1 p3=0 obj#=91 tim=1326599330636738

EXEC #46986932266584:c=0,e=21,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=23986678,tim=1326599330636788

WAIT #46986932266584: nam='SQL*Net message to client' ela= 2 driver id=1650815232 #bytes=1 p3=0 obj#=91 tim=1326599330636810

WAIT #46986932266584: nam='SQL*Net message from client' ela= 91 driver id=1650815232 #bytes=1 p3=0 obj#=91 tim=1326599330636913

WAIT #46986932266584: nam='SQL*Net message to client' ela= 9 driver id=1650815232 #bytes=1 p3=0 obj#=91 tim=1326599330668126

FETCH #46986932266584:c=30995,e=31256,p=0,cr=989,cu=0,mis=0,r=1,dep=0,og=1,plh=23986678,tim=1326599330668198

STAT #46986932266584 id=1 cnt=1 pid=0 pos=1 obj=0 op='SORT AGGREGATE (cr=989 pr=0 pw=0 time=31173 us)'

STAT #46986932266584 id=2 cnt=1 pid=1 pos=1 obj=90724 op='TABLE ACCESS FULL OBJ$ (cr=989 pr=0 pw=0 time=31156 us cost=220 size=18270 card=522)'

WAIT #46986932266584: nam='SQL*Net message from client' ela= 76 driver id=1650815232 #bytes=1 p3=0 obj#=91 tim=1326599330668403

CLOSE #46986932266584:c=0,e=10,dep=0,type=0,tim=1326599330668452

WAIT #0: nam='SQL*Net message to client' ela= 1 driver id=1650815232 #bytes=1 p3=0 obj#=91 tim=1326599330668481

WAIT #0: nam='SQL*Net message from client' ela= 113 driver id=1650815232 #bytes=1 p3=0 obj#=91 tim=1326599330668606

四.对EXU81JAVT对象深究

SQL> select object_type from dba_objects where object_name='EXU81JAVT';

OBJECT_TYPE

-------------------

VIEW

SQL> set long 1000

SQL> select TEXT from dba_views where view_name='EXU81JAVT';

TEXT

------------------------------------------------------

SELECT obj#

FROM sys.obj$

WHERE name LIKE '%DbmsJava' AND

type# = 29 AND

owner# = 0 AND

status = 1

SQL> SELECT obj#

2 FROM sys.obj$

3 WHERE name LIKE '%DbmsJava' AND

4 type# = 29 AND

5 owner# = 0 AND

6 status = 1 ;

OBJ#

----------

17671

SQL> select name from obj$ where obj#=17671;

NAME

------------------------------

oracle/aurora/rdbms/DbmsJava

现在稳定已经定位到,是因为exp判断是否使用了java,是去找”/oracle/aurora/rdbms/DbmsJava”.这个对象的,如果java enabled,那么它就会使用dbms_java做一些转换,实际上oracle是查找视图exu81javt来确定DbmsJava的。

这里的EXU81JAVT是查询obj$而是通过name LIKE ‘%DbmsJava’,导致index不能正常使用,从而使得obj$全表扫描,而obj$有坏块,从而使得exp在obj$有坏块的情况下,不能正常执行

--------------------------------------ORACLE-DBA----------------------------------------

最权威、专业的Oracle案例资源汇总之学习笔记:Oracle数据库坏块 深入研究obj$坏块导致exp/expdp不能执行原因

oracle protocol=beq 不可用,学习笔记:Oracle数据库坏块 深入研究obj$坏块导致exp/expdp不能执行原因...相关推荐

  1. oracle修改asm参数文件,学习笔记:Oracle RAC参数文件管理 修改创建asm中的spfile文件...

    天萃荷净 Oracle rac创建修改asm中的spfile文件内容 create spfile to asm --查看sid SQL> show parameter instance_name ...

  2. oracle in查询 一直等待,学习笔记:Oracle awr 分析解决inactive transaction branch等待事件...

    天萃荷净 通过Oracle AWR报告分析inactive transaction branch等待事件的原因 分析一份awr,发现不太熟悉的等待事件"inactive transactio ...

  3. oracle protocol=beq 不可用,Oracle BEQ方式连接配置

    Oracle BEQ方式连接配置服务端和客户端在同一台机器上,可以使用BEQ连接,BEQ连接可以理解为进程间直接通信,不需要走网络监听,性能更高.可以参考MOS:How To Connect Usin ...

  4. oracle拆分分区语法详解大全_学习笔记:Oracle分区表 添加 删除 合并 删除 交换 拆分等分区表的操作案例...

    天萃荷净 Oracle分区表管理,记录关于Oracle分区表的管理案例:创建.删除.合并.拆分.交换.更改分区表的操作方法 1.添加创建分区表 1.1)增加分区(add partition) 语法是: ...

  5. ngss for oracle,学习笔记:Oracle bbed工具在Windows平台上兼容9i 10g 11g 12c运

    天萃荷净 配置使用在Windows操作系统中中运行Oracle bbed程序兼容9i 10g 11g 12c 学习ORACLE三剑客:互联网,ORACLE资料,交流.今天在朋友的帮助下,了结了一个心结 ...

  6. Oracle数据二进制传输,学习笔记:Oracle数值函数 十进制与二进制相互转换的函数使用案例...

    天萃荷净 ORACLE 十进制与二进制互转函数,开发DBA向我咨询数值转换的方法,Oracle数值转换函数NUMBER_TO_BIT等函数可用 1.Oracle数值转换之十进制转换二进制 CREATE ...

  7. oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...

    天萃荷净 oracle之数据导入,汇总开发DBA在向表中导入大量数据的案例,如:单线程向数据库中插入数据,多线程向数据表中插入数据,使用sql loader数据表中导入数据案例 1.Oracle数据库 ...

  8. oracle 最大值及其_学习笔记:Oracle优化 SQL查询最大值 最小值时的优化方法案例...

    天萃荷净 select max(id),min(id) from table优化,分享开发DBA需求,在SQL语句查询最大值.最小值数据时的优化方式案例 1.查看数据库版本 SQL> selec ...

  9. oracle查看表空间的内容,学习笔记:Oracle查看object对象 表空间 表 索引 数据文件的使用空间...

    天萃荷净 运维DBA咨询想要查看Oracle的object对象的使用空间大小,包括表空间 表 索引 数据文件的使用空间 1.查看Oracle表空间大小 Select Tablespace_Name,S ...

最新文章

  1. 我与编程:十载寒冰,难凉热血
  2. SBO应用技术一则-格式化
  3. 单链表排序----快排 归并排序
  4. 东尼•博赞的思维导图丛书之一 《大脑使用说明书》
  5. mysql打包备份数据到_thinkPHP使用pclzip打包备份mysql数据库的方法
  6. 如何解决高并发,秒杀问题
  7. STM32上使用JSON
  8. ffmpeg解码流程 turorial5详解
  9. wordpress安装jquery插件失败_Contact Form 7插件_WordPress表单插件安装使用教程
  10. 【深度优先搜索】计蒜客:踏青
  11. php起点小说小偷程序,PHP 简单的小偷程序
  12. python最优投资组合_4计算投资组合最优比例
  13. eclipse为什么文件夹路径真实存在但运行显示路径不存在
  14. linux 查看内网IP和外网IP
  15. 解决a start job is running for dev-disk-by启动错误
  16. 2020第六届“美亚杯”团队赛WP
  17. 环保设备物联网远程监控维护解决方案
  18. 悬赏 50 XIN token 诚征 C# 区块链 SDK
  19. GIT修改账号密码重新登录和保存密码
  20. darknet 框架中.cfg文件的参数详解,以yolov3为例

热门文章

  1. C/C++之学习笔记
  2. 1.SharePoint2010初接触
  3. ubuntu下为opera26.0安装flash
  4. Codeforces 264B Good Sequences ★ (分解素因子+DP)
  5. java取number长度_Java中常用方法(NumberMath)
  6. 静态库调用_静态链接和动态链接对比简析
  7. android7.1开机监听广播,Android7.1 Audio Debug相关方法
  8. 计算机期末考试操作题简单,计算机期末考试操作题及答案计算机期末考试操作题及答案.doc...
  9. 深度学习和目标检测系列教程 17-300: 3 个类别面罩检测类别数据集训练yolov5s模型
  10. 为了OFFER,花了几个小时,刷下Leetcode链表算法题