Невозможно создать простое представление таблицы Oracle - PullRequest
1 голос
/ 10 апреля 2009

Внешний администратор БД экспортировал производственную базу данных и импортировал ее в тестовую среду. Мы используем Oracle 9.2. Большинство импортированных объектов базы данных (таблицы, представления, idexes, пакеты, ...) работают нормально, но у нас есть проблемы с тремя конкретными таблицами: мы можем сделать SELECT, UPDATE, DELETE для этих таблиц, но мы не можем создавать представления для этого таблицы.

Другими словами, следующие работы:

 create or replace view v_test_view as select 1 x from dual; // we can create views
 create or replace view v_test_view  as select 1 x from someTable;
 select * from problematicTable; // we can select data from problematic table

Но это НЕ работает:

 create or replace view v_test_view  as select 1 x from problematicTable;
--> ORA-01031: insufficient privileges

Справочная информация:

  • Администратор базы данных использовал утилиту импорта / экспорта для копирования схемы базы данных
  • версия производственного и тестового Oracle не совпадают (производство 9.2.0.8, тестовое 9.2.0.7)
  • после первоначального импорта проблематичная таблица была видна в каталоге объектов (и инструментах разработки баз данных), но при попытке ВЫБРАТЬ из этой таблицы мы получили «недопустимый идентификатор». После этого таблицы были повторно импортированы, и теперь мы можем выбирать из них, но не создавать на них представления

Есть идеи?

UPDATE: Похоже, ситуация еще более странная. При использовании одного сеанса оракула мы можем ВЫБРАТЬ данные из этой таблицы, а в другом сеансе Oracle ( используя того же пользователя для входа в систему! ) мы получаем «ORA-00904: неверный идентификатор»

UPDATE # 2: Данные для экспорта, из которых использовался импорт, успешно использовались для импорта данных в другую тестовую среду (назовем ее TEST1), которая находится на том же месте Oracle, что и проблемная (TEST2). Разница между этими двумя средами заключается в том, что TEST1 использует того же пользователя (имя схемы), что и производственный, но TEST2 использует другого пользователя (таким образом, объекты были импортированы в другое имя схемы). У проблемных таблиц нет специальных свойств безопасности, которые отличаются от таблиц, которые работают нормально.

Matra

Ответы [ 2 ]

3 голосов
/ 10 апреля 2009

Является ли пользователь, создающий представление, выбранным для проблемной таблицы через ROLE? Если это так, попробуйте дать явное разрешение на стол.

Из Oracle:

"Чтобы создать представление в схеме, эта схема должна иметь права, необходимые для выбора, вставки, обновления или удаления строк из всех таблиц или представлений, на которых основано представление. Владелец представления должен быть предоставил эти привилегии напрямую, а не через роль. Причина в том, что привилегии, предоставленные ролям, не могут наследоваться через объекты. "

0 голосов
/ 14 апреля 2009

Похоже, что-то не так с импортом. Итак, что наш администратор БД сделал, чтобы решить эту проблему:

  • сбросить проблемные таблицы
  • reimport структура проблемных таблиц (столбцы, ограничения, индексы)
  • после того, как структура была воссоздана, он повторно импортировал данные
  • он также играл с CREATE TABLE AS SELECT, чтобы копировать данные туда и обратно

Когда он заново создавал структуру таблицы, он обнаружил, что в текущей схеме заканчивается свободное пространство (не было установлено автоматическое увеличение). Странно то, что первый импорт не пожаловался на недостаток места.

Таким образом, теоретически, именно недостаточное пространство было причиной повреждения словаря данных.

...