Использование синонима в базе данных Oracle в схеме SYS - PullRequest
0 голосов
/ 07 марта 2019

В схеме SYS имеется представление V_ $ SQL.В публичной схеме у меня есть синоним v $ sql.Если я подключаюсь к БД с моим пользователем dbuser и пытаюсь получить что-то из v $ sql, это работает.Проблема в том, что когда я меняю схему на SYS (но все же я dbuser) и пытаюсь снова использовать v $ sql, мой синоним не работает.Я получаю ошибку

[42000][942] ORA-00942: table or view does not exist

Если я использую V_ $ SQL вместо v $ sql, это работает.Почему после изменения схемы мой синоним не работает?

1 Ответ

2 голосов
/ 07 марта 2019

Если ваша текущая схема установлена ​​на '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. С этим лучше не связываться.

...