2016-07-14 3 views
-1

Oracle PL/SQL에서 데이터베이스 링크를 사용하는 방법에 대한 질문이 있습니다. 현재 데이터베이스에 데이터베이스 링크 (Database2)가 만들어져 있고 두 번째 데이터베이스에 액세스하는 데 사용하고 있다고 가정 해 봅시다. 모든 작업이 성공적으로Oracle 데이터베이스가 롤을 부여/취소하는 링크

select *from [email protected]; 

Update [email protected] 
set Comment = 'Hello world!' 
where CustomerID = 123; 

이 예를 들면 다음과 같습니다.

그러나 Database2의 사용자에게 역할을 부여하거나 역할을 취소하려고한다고 가정 해 봅시다. 내 데이터베이스 링크를 통해이 작업을 수행 할 수 있습니까? 그렇다면 구문은 무엇입니까?

내가 DATABASE2에서 PL/SQL 세션을 열 경우, 구문은 다음과 같습니다 내 데이터베이스 링크를 사용하여 내 원래 데이터베이스에서이 작업을 수행 할 수있는 방법이

REVOKE some_role FROM bsmith; 

GRANT some_other_role TO rjones; 

있습니까?

+0

왜 데이터베이스 링크를 통해 DDL을 수행 할 것인가? 이는 일반적으로 허용되지 않으며 일반적으로 나쁜 아이디어입니다. Database2에서 원하는 DDL을 수행하고 데이터베이스 링크 사용자에게 해당 프로 시저에 대한 실행 권한을 부여하는 저장 프로 시저를 만들 수 있습니다. 또는 실제로 교부금을 수행하는 database2에서 실행하는 작업을 까다로워 질 수 있으며 꽤 복잡한 아키텍처입니다. –

+0

프로덕션 데이터베이스에서 특정 레코드 및 사용 권한을 가져 와서 내 개발 또는 테스트 데이터베이스로 복사하는 저장 프로 시저를 작성하고 있습니다. 레코드를 복사해도 문제는 없지만 권한을 부여하는 것은 훨씬 까다로울 수 있습니다. – MrMike

답변

0

당신은 원격 데이터베이스에 DBMS_SQL 패키지를 호출하여 DB 링크를 통해 DDL을 수행 할 수 있습니다

declare 
v_cursor NUMBER; 
v_ind  number; 
v_ret  varchar2(2000); 
BEGIN 
    v_cursor := [email protected]; 
    [email protected](v_cursor, 'create sequence xyz_seq', dbms_sql.native); 
    v_ind := [email protected](v_cursor); 
end; 
/
+0

좋은 아이디어. 고마워, 개리. – MrMike

+0

또는'[email protected]()'는 더 간단 할 수 있습니다 (테스트되지는 않았지만 20 년 전에 그것을 희미하게 기억합니다). –