在 SYS 模式中有V_ $ SQL视图。在 public 模式中,我为其使用同义词v $ sql。如果我使用用户 dbuser 连接到DB,并且尝试从v $ sql中获取某些信息,则它会起作用。问题是,当我将架构更改为 SYS (但我仍然是dbuser)并尝试再次使用v $ sql时,我的同义词不起作用。我收到错误消息
[42000][942] ORA-00942: table or view does not exist
如果我使用V_ $ SQL而不是v $ sql,它可以工作。为什么更改架构后我的同义词不起作用?
答案 0 :(得分:2)
当您将当前架构设置为“ SYS”时,V$SQL
会解析为SYS.V$SQL
,您无权访问。
“但是,我检查了DBA_OBJECTS,并且 没有SYS.V $ SQL !!!”
SYS.V$SQL
是固定表。它不会显示在DBA_OBJECTS中。您可以在V $ FIXED_TABLE中看到它。
select * from v$fixed_table
where name like 'V$SQL';
+-------+------------+------+-----------+--------+ | NAME | OBJECT_ID | TYPE | TABLE_NUM | CON_ID | +-------+------------+------+-----------+--------+ | V$SQL | 4294951148 | VIEW | 65537 | 0 | +-------+------------+------+-----------+--------+
SYS
模式是特殊且怪异的,仅供Oracle使用。最好不要弄乱它。