ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 有关TOAD

有关TOAD

原创 Linux操作系统 作者:orchidllh 时间:2004-11-25 00:00:00 0 删除 编辑

有关TOAD

现象:用户说db1用户用TOAD时提示ORA_000942错误,内容是表或视图不存在。并指出db2用户就可以。


处理:db2果然可以,用db1.system也没有出现问题,但是db1的应用用户登陆、看表、视图等操作时都报错

跟踪进程,看看到底是找不到啥。

db1:

[oracle@bj udump]$ ps -ef

UID        PID  PPID  C STIME TTY          TIME CMD

。。。。。

oracle    6279     1  0 16:31 ?        00:00:01 oracle* (LOCAL=NO)

。。。。。

oracle    6375     1  0 17:34 ?        00:00:00 oracle* (LOCAL=NO)

oracle    6376  6189  0 17:34 pts/0    00:00:00 ps –ef

因为我是刚刚登陆的,所以基本上最后一个进程肯定是我了。

[oracle@bj udump]$ sqlplus "/as sysdba"

SQL*Plus: Release 10.1.0.3.0 - Production on Thu Nov 25 17:34:40 2004

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

Connected to:

Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL> SELECT SID, SERIAL#, USERNAME, MACHINE

  2  FROM V$SESSION B

  3  WHERE b.paddr = (SELECT addr

  4    FROM v$process c

  5    WHERE c.spid = '&pid');

Enter value for pid: 6375

old   5:   WHERE c.spid = '&pid')

new   5:   WHERE c.spid = '6375')

       SID    SERIAL# USERNAME

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

MACHINE

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

       254        489 *

WORKGROUP*

SQL> exec dbms_system.set_sql_trace_in_session(254,489,true);

PL/SQL procedure successfully completed.

现在去TOAD操作,打开,察看表,操作越少越好,要不日志看花眼了。

SQL> exec dbms_system.set_sql_trace_in_session(254,489,false);

PL/SQL procedure successfully completed.

结束跟踪,察看日志:

 [oracle@bj udump]$ ls -l

total 22096

。。。。

-rw-r-----    1 oracle   oinstall     9636 Nov 25 17:35 *_ora_6375.trc

刚发现,原来文件名的最后就是进程号,刚才没有发现。

[oracle@bj udump]$ cat *_ora_6375.trc

出错找到了:

=====================

PARSE ERROR #2:len=164 dep=0 uid=68 oct=3 lid=68 tim=1075561829230574 err=942

select  distinct tabs.table_name, tabs.owner

, partitioned, iot_type

, TEMPORARY, table_type, table_type_owner

from DBA_ALL_TABLES tabs

 where tabs.owner = :own

=====================

pl/sql中执行,果然报错。

现在看看db2为什么不报错呢,操作的步骤是一样的:

=====================

PARSING IN CURSOR #1 len=163 dep=0 uid=61 oct=3 lid=61 tim=1075563026235086 hv=2174029675 ad='85f6d454'

select  distinct tabs.table_name, tabs.owner

, partitioned, iot_type

, TEMPORARY, table_type, table_type_owner

from ALL_ALL_TABLES tabs

 where tabs.owner = :own

END OF STMT

PARSE #1:c=20000,e=16847,p=0,cr=6,cu=0,mis=1,r=0,dep=0,og=1,tim=1075563026235076

=====================

以上是db2用户对应的取数方法,可以看到对应的视图不同,如果db1用户也从all_all_tables取是没有问题的,昏倒,为什么会这样呢,在TOAD的菜单上找了半天,也没有找到有可以配置的地方,现在两个数据库的区别在于db2数据库是10.1.0.2的,db1的数据库是10.1.0.3的,是不是跟打的patch有关系呢,而且当初安装TOAD的时候我曾经错误把TOAD的资料库安装在db2的数据库上了,会不会跟这个也有关系呢。

现在不研究了,我只要让db1用户可以取到它想要的视图就行了。所以给用户付了以下几个权限:

  GRANT SELECT ANY TABLE TO *;

  GRANT SELECT ANY SEQUENCE TO *;

  GRANT SELECT ANY DICTIONARY TO *;

  GRANT SELECT ANY TRANSACTION TO *;

sql/plus中测试,取dba_all_tables可以执行,打开TOAD登陆没有再报错,至此,问题解决。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/51862/viewspace-180542/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-02-21

  • 博文量
    180
  • 访问量
    848476