关于查看dba_data_files的一个小问题(r7笔记第72天)

今天帮一个朋友看一个pl/sql的问题,他已经钻到一个死胡同里列,可能明眼人一看就知道哪里有问题,但是当局者迷,所以我抽空看了一下这个pl/sql块。 pl/sql的内容大体如下: declare TYPE new_type IS TABLE OF VARCHAR2(30) ; v_tab new_type:=new_type('DBIMISHLS','ICU','INFOCAST','INFOCAST_V2','MSG','NMS','TS_CONFIG','TS_DOC','TS_PATIENT','TS_WARD'); position varchar2(1000); v_sql_user varchar2(4000); v_sql_tablespace varchar2(4000); v_res_tablespace varchar2(4000); v_res_user varchar2(4000); begin select substr(file_name,1,29) into position from dba_data_files where rownum=1; for i in 1..v_tab.count loop v_sql_tablespace:='create tablespace '||v_tab(i)||' datafile '||''''||position||v_tab(i)||'01.dbf'||''''||' size 1G autoextend on;'; ---EXECUTE immediate v_sql_tablespace into v_res_tablespace; dbms_output.put_line(v_sql_tablespace); end loop; end; 当然简单调试了一下就可以了,看起来语法就没有任何问题了。其实是几个结束符的问题。 当然语句的问题改好了。为了保险起见,我得测试一下,刚好手头没有测试环境了,生产环境不能尝试,所以就在备库中进行了测试,发现是一台11gR2的备库。 运行的时候结果提示dba_data_files不存在 SQL> desc dba_data_files ERROR: ORA-04043: object dba_data_files does not exist 这个时候才意识到备库是在mount阶段。 然后把备库启动到open阶段,自动开启了read only with apply,这个时候运行那个Pl/sql还是有问题,这就奇怪了。 看报错是指到dba_data_files了,手工desc了一下,发现确实访问不了,这个时候就有些奇怪了。怎么会访问不了了,难道是备库有问题。 这个数据字典的信息不存在那就严重了。 SQL> desc dba_data_files ERROR: ORA-04043: object dba_data_files does not exist 这个测试做得我有点心虚,赶紧找了另外几套环境做比对,都没有问题。所以我初步怀疑,可能是碰到一个bug了。 当然有了基本的思路之后,查看mos,马上就锁定一篇文章 ORA-4043 On DBA_* Views If They Are Described In Mount Stage (Doc ID 296235.1) 确实有这么一个bug,2365821 如果在数据库mount阶段尝试使用desc访问dba_相关的数据字典,在open阶段就会抛出上面的错误信息。 当然解决方法也很简单,一个就是flush shared pool,另外一个就是重启。 当然在备库我还是愿意在线修复。 SQL> Alter system flush shared_pool; System altered. SQL> desc dba_data_files Name Null? Type ----------------------------------------- -------- ---------------------------- FILE_NAME VARCHAR2(513) FILE_ID NUMBER TABLESPACE_NAME VARCHAR2(30) BYTES NUMBER BLOCKS NUMBER STATUS VARCHAR2(9) RELATIVE_FNO NUMBER AUTOEXTENSIBLE VARCHAR2(3) MAXBYTES NUMBER MAXBLOCKS NUMBER INCREMENT_BY NUMBER USER_BYTES NUMBER USER_BLOCKS NUMBER ONLINE_STATUS VARCHAR2(7) 所以这个问题的分析就告一段落。所以这些细节真是很折磨人,最近和bug比较有缘,总是有意无意会碰到。

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏沃趣科技

数据库对象事件与属性统计 | performance_schema全方位介绍

上一篇《事件统计 | performance_schema全方位介绍》详细介绍了performance_schema的事件统计表,但这些统计数据粒度太粗,仅仅按...

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

通过shell脚本定位性能sql和生成报告(r2笔记37天)

oracle的sql monitor是一个很有用的工具集。但是通过sql命令和反复去调用dbms_tune来传入参数等等操作感觉挺费事的。 可以通过如下的脚本来...

30170
来自专栏沃趣科技

Log Miner 挖挖挖

Log Miner是Oracle自Oracle 8i以后推出的一个可以分析数据库redo log和archivelog内容的工具,可以通过日志分析所有对数据库的...

16650
来自专栏乐沙弥的世界

Oracle 基于用户管理恢复的处理

Oracle支持多种方式来管理数据文件的备份与恢复来保证数据库的可靠与完整。除了使用RMAN工具以及第三方备份与恢复工具之外,基于

7220
来自专栏机器学习实践二三事

ubuntu14.04+caffe2+OpenCV3.0安装的一些问题

好久不用Caffe了,今天要转换个caffemodel到tensorflow,所以需要caffe的环境,原先预备pull个Docker镜像,最后发现死活下载不下...

33080
来自专栏MYSQL轻松学

MySQL中,一条语句是否会被binlog记录以及以什么样的模式记录

Binlog官方 In MySQL 5.6, whether a statement is to be logged and thelogging mode t...

33990
来自专栏逸鹏说道

SQL Server 数据库清除日志的方法

SQLSERVER的数据库日志占用很大的空间,下面提供三种方法用于清除无用的数据库日志文件 方法一: 1、打开查询分析器,输入命令 BACKUP LOG d...

46250
来自专栏Java学习123

powerdesigner 15 如何导出sql schema

34370
来自专栏Hadoop实操

如何使用StreamSets实现Oracle中变化数据实时写入Kudu

1.1K50
来自专栏性能与架构

Phoenix - Hbase与SQL

Phoenix是什么 简单来说,Phoenix 是一个可以让我们通过SQL的方式操作HBase数据库的框架。 HBase是一个NoSQL数据库,shell客户端...

45360

扫码关注云+社区

领取腾讯云代金券