다른 스키마에 있는 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
'programing' 카테고리의 다른 글
Firebase에서 확인 이메일을 보내는 방법은 무엇입니까? (0) | 2023.07.20 |
---|---|
데이터베이스에 암호를 저장하는 기본 방법 (0) | 2023.07.20 |
임시 테이블이 있는 경우 해당 테이블 삭제 (0) | 2023.07.20 |
저장된 R 객체를 새 객체 이름으로 로드할 수 있습니까? (0) | 2023.07.20 |
루비: 연결 없이 여러 줄의 문자열을 쓸 수 있습니까? (0) | 2023.07.20 |