이 작업을 수행하려면 ORA-02069 global_names 매개 변수를 TRUE로 설정해야 합니다.
몇 가지 해결책을 찾아봤습니다.그 중 하나는 다음과 같습니다.
Cause 문의 원격 매핑이 필요하지만 global_names를 TRUE로 설정해야 하기 때문에 수행할 수 없습니다.
작업 문제 세션 변경 set global_names = 가능한 경우 true
그런데 왜 global_names 매개 변수를 설정해야 하는지 이해할 수 없습니다...원격 매핑에서 global_names 매개 변수를 사용하는 이유는 무엇입니까?제발, 설명 좀 해주실래요?
추신: global_names 매개 변수를 설정하면 글로벌 명명 규칙이 발생하며, 데이터베이스 링크 이름은 원격 데이터베이스 이름과 같아야 합니다.또한 <DB_NAME>과 같은 데이터베이스 이름에 도메인 이름을 추가합니다.<DB_DOMAIN> 다른 것은 무엇입니까?
정답은 다음과 같습니다. http://dba010.wordpress.com/2011/01/05/oracle-errorsora/ #ORA-02069
링크가 작동하지 않는 경우:
오류:
ORA-02069: 이 작업을 수행하려면 global_names 매개 변수를 TRUE로 설정해야 합니다.
원인:
로컬 기능을 사용하여 원격 데이터베이스에서 DML 작업을 수행하려고 합니다.
이것은 "오라클 버그"입니다. 작동해야 하지만 작동하지 않습니다.
예(더 잘 이해하기 위해):
–DB1과 DB2 두 개의 데이터베이스가 있다고 가정합니다.
–DB1에는 재미있는 기능이 있습니다1
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;
- DB2의 경우 원격 데이터베이스에 데이터베이스 링크를 만듭니다. 이 링크 이름은 데이터베이스 DB1을 참조합니다(global_names 매개 변수를 true로 설정하려면 링크 이름이 필요하므로 데이터베이스 글로벌 이름과 동일해야 합니다).
–DB2에서
Create database link DB1 connect to <username> identified by <password>
using ‘DB1’;
이제 작동해야 하지만, 데이터베이스 링크를 만드는 것이 선호되지 않을 수도 있다는 것을 언급해야 합니다.
보안이 되지 않기 때문입니다. (왜 그런지는 짐작하실 수 있습니다. 이렇게 하면 데이터베이스 링크를 통해 어떤 사용자와 DB1에 연결할 수 있기 때문입니다. 괜찮으시다면 J를 사용하십시오.)
솔루션 2:
- 로컬 데이터베이스에 임시 테이블을 작성합니다.
- 임시 테이블에 행을 삽입합니다.
- 임시 테이블의 임시 행을 원격 데이터베이스에 삽입합니다.
- 임시 행을 삭제합니다.이 솔루션은 첫 번째 솔루션보다 느립니다.그러나 문제를 해결하고 훨씬 더 안전합니다.
Kupa의 답변은 훌륭한 설명과 좋은 솔루션을 제공하지만, 만약 여러분이 하나 또는 두 개의 솔루션을 따르고 싶지 않거나 따를 수 없다면, 여기에서 솔루션 2를 확인해 보는 것이 좋습니다: http://dbtricks.com/ ?p=263.
이것은 변수를 만들고 로컬 함수의 값을 할당한 다음 원격 테이블을 참조하는 sql 문의 변수를 사용하는 것으로 저에게 효과가 있었습니다.
이것이 나에게 도움이 되었으니 누군가에게 도움이 되기를 바랍니다!
이 스레드 인용:
...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)
원격 SELECT 문에서 로컬 함수를 사용하는 경우 WHERE 절에 "rownum <> 0"을 추가하십시오.그 정도면 충분합니다.
데이터베이스 링크를 통해 원격 테이블에 액세스하는 동안 동일한 오류가 발생했습니다.로컬 데이터베이스가 도커에 있고 메타데이터를 사용하여 원래 연결된 데이터베이스의 하위 집합을 구축하려고 합니다.원격 테이블의 열을 가져오려고 합니다.
select *
from all_tab_cols@remotedb r
where r.table_name = 'SOME_TABLE'
ORA-02069를 생산합니다.을 사용하여 입니다.create table as select * ...
는 저어떤칼이의 .LONG
형식을 전송할 수 없습니다.사실은 필요 없었어요*
한 형태의 으로.
select r.table_name, r.column_name, r.column_id
from all_tab_cols@remotedb r
where r.table_name = 'SOME_TABLE'
오류가 사라졌습니다.
언급URL : https://stackoverflow.com/questions/4688685/ora-02069-global-names-parameter-must-be-set-to-true-for-this-operation
'programing' 카테고리의 다른 글
파이썬에서 파일이 심볼릭 링크인지 확인하는 방법은 무엇입니까? (0) | 2023.07.25 |
---|---|
if 문 정수 (0) | 2023.07.25 |
JavaScript에서 동적(변수) 문자열을 정규식 패턴으로 사용 (0) | 2023.07.25 |
동일 원산지 정책 - AJAX & 공용 API 사용 (0) | 2023.07.25 |
장고: 테이블이 존재하지 않습니다. (0) | 2023.07.25 |