programing

다른 스키마에 있는 DBLINK를 사용하여 Oracle에서 선택하는 방법은 무엇입니까?

magicmemo 2023. 7. 20. 21:51
반응형

다른 스키마에 있는 DBLINK를 사용하여 Oracle에서 선택하는 방법은 무엇입니까?

Oracle DBMS(11g)와 다음과 같은 구성이 있습니다.

  • DB 사용자 "MYUSER"
  • 두 개의 스키마 "MYUSER" 및 "SCHEMA_B"
  • 사용자 "MYUSER"가 "SCHEMA_B"에 액세스할 수 있으며 테이블에 대한 읽기 권한이 있습니다.
  • "SCHEMA_B"에 위치한 공용 DB 링크 "DB_LINK"
  • DB_LINK는 DB 사용자 "SCHEMA_B"를 직접 사용할 때 작동합니다.

질문:"MYUSER"로 로그온한 경우 "SCHEMA_B"의 DB 링크를 사용하여 테이블에 액세스하는 올바른 구문은 무엇입니까?그렇게 하는 것이 가능합니까?

저는 이미 여러 별자리를 시도해 보았지만 모두 효과가 없었습니다.

select * from dual@"DB_LINK"
select * from dual@"SCHEMA_B"."DB_LINK"
select * from dual@SCHEMA_B."DB_LINK"
select * from dual@SCHEMA_B.DB_LINK
select * from SCHEMA_B.dual@DB_LINK
select * from "SCHEMA_B".dual@DB_LINK

수신되는 오류 메시지는 ORA-02019입니다.00000 - "원격 데이터베이스에 대한 연결 설명을 찾을 수 없습니다."

어떤 제안이든 감사합니다!

둘 이상의 사용자 간에 데이터베이스 링크를 공유할 수는 없지만 모두 공유할 수는 있다고 생각합니다.개인(한 사용자만) 또는 공용(모든 사용자만)입니다.

이 문제를 해결하는 좋은 방법은 데이터베이스 링크를 통해 액세스할 테이블을 표시하는 SCHEMA_B 보기를 만드는 것입니다.또한 보기에 대한 액세스를 제어할 수 있으므로 데이터베이스 링크에서 선택할 수 있는 사용자를 잘 제어할 수 있습니다.

다음과 같이 수행:

create database link db_link... as before;
create view mytable_view as select * from mytable@db_link;
grant select on mytable_view to myuser;

위에서 제안한 솔루션을 사용한 것과 동일한 문제가 있었습니다. 동의어를 삭제하고 동의어와 동일한 이름의 VIEW를 만들었습니다.dblink를 사용한 셀렉트가 있었고, 다른 스키마에 GRANT SELECT를 주었습니다. 잘 작동했습니다.

또한 Dblink 쿼리를 가리키는 SCHEMA B에서 뷰를 작성할 수 있습니다.물론 당신은 약간의 특권이 필요하겠지만 그것은 당신의 문제를 해결할 수 있습니다.아래의 보기 스크립트를 확인하십시오.

create view SCHEMA_B.mytable_view as select * from mytable@db_link;
GRANT SELECT ON SCHEMA_B.mytable_view to MYUSER;

이제 SCHEMA_B.mytable_view에서 데이터를 선택할 수 있습니다.

언급URL : https://stackoverflow.com/questions/12624291/how-to-select-in-oracle-using-a-dblink-located-in-a-different-schema

반응형