有关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博客 ” ,链接:https://blog.itpub.net/51862/viewspace-180542/ ,如需转载,请注明出处,否则将追究法律责任。