一. 问题描述
通过DBLINK 访问远程数据库的表对象时,报:OCI-22303: type "SYS"."SDO_GEOMETRY" not found.
在远程数据库访问相同的表,没有任何问题.
二. 问题分析
SDO_GEOMETRY是MDSYS的对象,在本地库没有安装相关的数据库组件,不存在MDSYS用户,所以使用dblink访问远程的相关对象时,就会报OCI-22303对象找不到的错误.
开始的时候,通过两个脚本,想创建mdsys用户及其对象,脚本名称为:
?/ord/admin/ordinst.sql,创建用户
?/md/admin/mdinst.sql ,创建mdsys对象[@more@]
都使用sys用户执行上面的两个脚本,后来发现很多mdsys的对象都建立到了sys用户上.
仔细检查?/md/admin/mdinst.sql文档的开头说明,这个文档是需要system用户来运行的.
于是尝试重新创建这个用户,结果无法删除,操作如下:
SQL> drop user mdsys cascade;
drop user mdsys cascade
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-04098: trigger 'SYS.SDO_TOPO_DROP_FTBL' is invalid and failed re-validation
将SYS.SDO_TOPO_DROP_FTBL的状态设置为disable后,再次尝试删除mdsys,结果报了另外一个错误:
SQL> DROP USER MDSYS CASCADE;
DROP USER MDSYS CASCA