在SYS模式中的Oracle DB中使用同义词

时间:2019-03-07 17:07:18

标签: database oracle oracle12c

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,它可以工作。为什么更改架构后我的同义词不起作用?

1 个答案:

答案 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使用。最好不要弄乱它。