Параметр global_names ORA-02069 должен быть установлен в TRUE для этой операции - PullRequest
9 голосов
/ 14 января 2011

Я искал пару решений. Одним из них является следующее:

Причина Удаленное сопоставление оператора требуется, но не может быть достигнуто, потому что для global_names должно быть установлено значение TRUE, чтобы его можно было достичь

Действие Выполните команду alter session set global_names = true, если это возможно

Но я не понимаю, зачем мне устанавливать параметр global_names ... Почему в удаленном сопоставлении используется параметр global_names? Пожалуйста, вы можете мне объяснить?

PS Я знаю, что при установке параметра global_names будут возникать глобальные правила именования, что имя ссылки на базу данных должно совпадать с именем удаленной базы данных ... А также оно добавляет имя домена к имени базы данных, например . что еще?

Ответы [ 3 ]

10 голосов
/ 30 октября 2013

Ответ обсуждается здесь: http://dba010.wordpress.com/2011/01/05/oracle-errorsora/#ORA-02069

В случае, если ссылка не работает:

Ошибка:

ORA-02069: для параметра global_names должно быть установлено значение TRUE для этой операции

Причина:

Вы пытаетесь выполнить операцию DML на удаленной базе данных с помощью локальной функции.

Это «ошибка Oracle», она должна работать, но это не так.

Пример (для лучшего понимания):

- предположим, что у нас есть две базы данных DB1 и DB2

- На DB1 у нас есть функция fun1

create function fun1 return number is
begin
return 1;
end;

- На DB1 у нас есть ссылка на базу данных, ссылающаяся на DB2, которая для простоты называется DB2.

–Проверьте, работает ли он.

select *
from dual@DB2

- Если вывод следующий, то он работает.

DUMMY
-----
X

–Позволяет создать тестовую таблицу в DB2 (подключиться к базе данных DB2)

create table tesTable(
id         number,
testColumn number
);

- позволяет выполнить некоторую операцию DML, которая должна вызвать эту ошибку ORA-02069.

insert into testable@DB2(id,testColumn)
values(1, fun1);



“ORA-02069: global_names parameter must be set to TRUE for this operation”

Теперь, когда вы уже знаете, в какой ситуации возникает эта ошибка, давайте напишем решение. У него есть два решения:

Решение первое:

  1. Установите для параметра global_names значение true, это можно сделать на системном уровне или уровне сеанса (учитывая, что уровень сеанса иногда недоступен)

- на DB1

alter session set global_names=true;
  1. Создайте ссылку на базу данных в удаленной базе данных, в нашем случае на DB2, которая будет ссылаться на базу данных DB1 (сделайте имя ссылки таким же, как глобальное имя базы данных, потому что для параметра global_names в значение true это требуется).

–на DB2

Create database link DB1 connect to <username> identified by <password>
using ‘DB1’;

Теперь это должно работать, но я должен отметить, что создание ссылки на базу данных может быть не предпочтительным,

потому что это небезопасно (вы должны догадаться почему, потому что, если вы сделаете это, вы сможете подключитесь к DB1 с каким-либо пользователем через ссылку на базу данных ... если это не имеет значения для вас, используйте ееJ).

Решение второе:

  1. Создать временную таблицу в локальной базе данных.
  2. Вставить строку во временную таблицу.
  3. Вставить временную строку из временной таблицы в удаленную базу данных.
  4. Удалить временную строку. Обратите внимание, что это решение медленнее, чем первое. Но это также решает проблему и является намного более безопасным.
2 голосов
/ 10 августа 2016

Ответ Купы предлагает отличное объяснение и хорошие решения, однако, если вы не хотите или не можете выполнить решение одно или два, я предлагаю проверить решение 2 здесь: http://dbtricks.com/?p=263.

Это сработало для меня, создав переменную и присвоив ей значение локальной функции, затем используя переменную в операторе sql, который ссылался на удаленную таблицу.

Надеюсь, это поможет кому-то, так же как и мне!

0 голосов
/ 23 августа 2013

Цитирование этой темы :

...in the past Oracle used .world as a default domain if domain 
part was not specified in global db name, they changed it (I 
believe in 10g R1, but I'm not sure)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...