2010-01-29 4 views
0

다른 테이블 스페이스에 개체를 업데이트 할 수 있습니다. (오라클 DB)트리거가 나는 테이블 T1</strong>에서 <strong>테이블 X 및 tabelspace의 T2</strong>에서 <strong>테이블 Y가

을 나는 테이블 T1의 트리거를 작성해야하는 테이블 X의 열 C를 업데이트하는 경우 테이블 Y (테이블 공간 T2)의 열 D를 업데이트 할 경우 이 표시됩니다.

다른 테이블 공간에 있기 때문에 첫 번째 질문은이 작업을 전혀 수행 할 수 있는가하는 것입니다.

그렇다면 어떻게 할 수 있습니까? 그런 일을하기 위해 어떤 특권이 필요합니까?

+0

"tablespace"란 실제로 "스키마"를 의미합니까? –

답변

0

테이블 공간과별로 관련이 없습니다. 그래도 테이블 (및 특정 컬럼)에 삽입하는 권한이 필요하며, 테이블 Y가 트리거가 아닌 다른 스키마에 있으면, 규정 된 테이블 이름을 사용해야합니다. 당신이 스키마와 테이블 사이의 구별에 익숙하지 않을 수도 나에게 발생
, 그래서 여기에있다 :

CREATE TRIGGER aur_x 
AFTER UPDATE OF c ON x 
FOR EACH ROW 
UPDATE schema_containing_y.Y SET D = ... 
; 

편집은 (오라클에서 스키마 명 개체를 소유하는 사용자의 이름입니다) 짧은 설명. 테이블 스페이스는 논리적 인 스토리지 컨테이너입니다. 데이터 파일, 성장 특성, 로깅 유형 등을 제거합니다. 테이블 스페이스는 스키마 객체 (테이블, 인덱스, 뷰 정의뿐만 아니라 패키지 및 저장 프로 시저 정의 등)와 연관된 데이터를 저장하는 데 사용될 수 있습니다.

스키마는 테이블, 뷰, pacakages 등과 같은 객체의 모음입니다. 이러한 객체는 사용자가 소유하며, 알고있는 한 Oracle에서 스키마는 소유 한 사용자와 동일한 이름을가집니다. 개체. 이러한 객체는 하나 이상의 테이블 스페이스에서 제공하는 스토리지에 의존하지만 테이블 스페이스 자체는 스키마 객체가 아닙니다.

일반적으로 스키마는 기능적으로 관련된 개체를 그룹화하는 데 사용됩니다. 예를 들어 일반적으로 한 응용 프로그램에 대해 하나의 스키마를 만듭니다. 특히 하나의 응용 프로그램의 모든 오브젝트를 저장하기 위해 테이블 ​​공간을 작성할 수도 있지만, 다른 특성을 가진 테이블에 대해 다른 테이블 공간을 작성할 수도 있습니다.

일반적으로 응용 프로그램 개발자는 테이블 공간에 대해 너무 많이 걱정해서는 안됩니다. DBA는 일반적으로 백업 계획과 같은 일에 편리한 방법으로이를 설정합니다.

+0

롤랜드, 먼저 짧은 시일 내에 답장을 보내 주셔서 감사합니다. 그러나 솔루션으로 문제가 해결되지 않았습니다. 상황은 X와 Y가 서로 다른 테이블 스페이스 (다른 스키마에도 있고 다른 사용자에 속함)에 있지만 동일한 데이터베이스 인스턴스에서 트리거를 정의한 방식으로 작동하지 않는다는 것입니다. 어쩌면 다른 테이블 공간의 트리거에서 한 테이블 스페이스의 테이블을 갱신하기위한 권한을 가져야합니다. – trivunm

+0

milostrivun : 내 대답의 두 번째 문장을 참조하십시오 : "당신은 테이블 (및 그 특정 열) int를 삽입하려면 prvileges 필요합니까"- INSERT 대신 UPDATE, 내 나쁜 쓴. 테이블 스페이스와 관련하여 : 오라클은 지적한 바와 같이 테이블에 대한 적절한 권한이있는 한 테이블 스페이스가 무엇인지 신경 쓰지 않습니다. 테이블 공간에 대한 특권은 테이블을 작성할 때만 필요합니다. –

+0

알았습니다! 특권에 관한 것이 었습니다. 바로 설정했을 때 그 것이 효과가있었습니다! 롤랜드 감사합니다. – trivunm