2009-04-09 4 views
1

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

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

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, test - 9.2.0.7)
  • после первоначального импорта проблема problemTable была видна в каталоге объектов (и инструментах разработки базы данных), но при попытке SELECT из этого таблицы, мы вернули «недопустимый идентификатор». После этого таблицы были повторно импортированы, и теперь мы можем выбрать SELECT, но не для того, чтобы создавать их виды.

Любые идеи?

ОБНОВЛЕНИЕ: Похоже, ситуация еще более странная. При использовании одного оракула сеанса можно выбрать данные из этой таблицы, в другой сессии Oracle (с использованием того же пользователя для входа!), Мы получаем «ORA-00904: недопустимый идентификатор»

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

Matra

+0

Можете ли вы рассказать нам название проблемной таблицы? Он содержит странные символы или иностранные символы? Кроме того, вы уверены, что это недостаточные привилегии? – Petros

+0

Имя таблицы не содержит символов начального уровня. Имя ADSLMANUALCHECK. О привилегиях: как описано выше, иногда я могу выбрать SELECT из этой таблицы, но в других случаях (используя одного и того же пользователя) я не могу этого сделать, и я возвращаюсь ORA-009004. – 2009-04-10 05:03:49

+0

Итак, TEST2 владеет таблицей и пытается создать представление? –

ответ

3

ли пользователь создает вид предоставивший отборное на проблемном таблице через роль? Если да, попробуйте предоставить явный грант на таблицу.

От Oracle:

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

+0

Мы не используем специальные РОЛИ. select * from SESSION_ROLES возвращает CONNECT, PLUSTRACE, RESOURCE. Пользователь является владельцем схемы. См. Также ОБНОВЛЕНИЕ # 2. – 2009-04-10 05:06:04

+0

Есть ли что-нибудь из этих проблемных таблиц? После импорта вы получаете ту же ошибку, если вручную выполняете инструкцию create view? Выстрелы в темноте ... – DCookie

+0

Они не отличаются от других таблиц, которые были импортированы OK. Обычное: имена таблиц начинаются с «A» (но есть и другие таблицы «A», которые в порядке). Эти таблицы были одним из первых созданных в этой БД несколько лет назад. Я попытался заново создать представления вручную (см. Оригинальный вопрос), но без успеха. – 2009-04-10 17:59:30

0

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

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

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

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

+0

Я думал о том, чтобы указывать вам на журнал предупреждений для экземпляра, но думал «нет, наверное, ничего там». Ошибки в пространстве должны появляться там. – DCookie

+0

Странно, что в журнале импорта не было ошибок/предупреждений. Спасибо, в любом случае. – 2009-04-15 04:39:43

Смежные вопросы