这个操作目前可能不具有可行性,但是为了完整性还是在下面讲一下吧。如有兴趣的小伙伴,可以按照下面的操作方式去尝试。
一、需求
去除ArcMap连接空间数据库中多余的属性表。
PL/SQL中查询得到的内容
select privilege from dba_sys_privs where grantee = 'SDE'
二、解决方案
执行revoke select any table from sde就可以在ArcCatalog中看不到除了SDE以外的表格了。
三、由此带来的副作用
但是这样的直接操作可能会引起:打开sde中数据时提示ora-29900运算符连接不存在。
SDE.cq: 基础 DBMS 错误 [ORA-29900: 运算符连接不存在
ORA-06540: PL/SQL: 编译错误
ORA-06553: PLS-907: 无法加载库单元 SDE.ST_DOMAIN_OPERATORS (由 SDE.ST_ENVINTERSECTS 引用)
如下图所示:
产生原因:
SDE用户在升级数据库后,权限被注销,如:SELECT ANY TABLE权限被取消。
Oracle能够自动标记某些软件包,功能,和触发器无效的基于数据库对象性质的自动验证,但ST_GEOMETRY是基于这些非法对象无法编译因而产生绘制错误。
解决办法:
这个问题可以通过重新编译数据包,解决触发,并标记为无效的功能。这可以通过以下SQL命令以SYSDBA用户,重复为每个用户模式数据库执行相同的步骤。
Exec dbms_utility.compile_schema( 'SDE', compile_all => FALSE );
参考文章
sde执行revoke SELECT ANY TABLE from sde导致报ora-29900 运算符连接不存在错误