#oracle #optimization
#Oracle #оптимизация
Вопрос:
У меня нет доступа к обновлению или вставке к определенной схеме. Я хочу иметь возможность запускать свой анализатор в одном регионе и размещать план в другом. Итак, что-то вроде этого:
Область 1 — это место, где находятся таблицы. Region2 — это место, где у меня есть доступ к таблице планов.
Я хочу запустить sql, подобный explain plan, В region2.plan_table для выбора * из region1.sometable
Но когда я выполняю приведенное выше утверждение, оно говорит, что region2.plan_table не существует.
Но если я сделаю это: alter session set current_schema=region2; выберите * из plan_table
Я вижу данные!
Есть мысли? Спасибо, Саро
Комментарии:
1. Какую версию Oracle вы используете? Что
SELECT object_name, object_type, owner where object_name = 'PLAN_TABLE'
возвращает? Последние версии Oracle по умолчанию и многие системы до того, как он стал стандартным, создавали центральнуюPLAN_TABLE
, предоставляли доступ к этой таблицеPUBLIC
и создавали для нее общедоступный синоним. Я не уверен, что последний запрос фактически выбирает из таблицыREGION2
схемы, а не из общедоступного синонима.2. Я использую 11g. Последний запрос наверняка выбирается из region2, потому что у меня была только одна запись, и я ее вставил. В вашем выборе отсутствует имя таблицы. Не уверен, что туда поместить. Спасибо
3. Извините, я имел в виду выбрать из
ALL_OBJECTS
. Как вы вставили 1 строку вREGION2.PLAN_TABLE
? Вы уверены, что не вставляли данные в общедоступный синоним?4. Я получаю: PLAN_TABLE СИНОНИМ ОБЩЕДОСТУПНОЙ ТАБЛИЦЫ PLAN_TABLE SCGFAD Первое, что я сделал, это изменил сеанс:alter session set current_schema=E517518; а затем я запустил запрос, обращающийся к схеме таблиц. выберите * из SCGFAD.Currencies; ВЫБЕРИТЕ PLAN_TABLE_OUTPUT ИЗ ТАБЛИЦЫ(DBMS_XPLAN.DISPLAY()); Это вернуло мне правильные значения. Если я не введу оператор alter, он не будет работать.