2010-05-18 7 views
4

나는 우리가 어떤 문서도 가지고 있지 않은 오라클 데이터베이스를 담당하고 있습니다. 지금 내가 을 알아야 할 때 테이블이 채워지는 중입니다.데이터베이스 테이블을 채우는 위치를 어떻게 알 수 있습니까?

이 테이블에서 데이터를 가져 오는 절차, 트리거 또는 다른 소스를 어떻게 알 수 있습니까?

+4

테이블이 Oracle DB 외부의 다른 서버 (예 : 다른 서버의 ODBC 연결)에 의해 채워지는 것은 물론 가능합니다. –

+0

참. 어떻게 채워지는지 알아내는 것이 어려울 경우 : – Tami

+3

@Tami, 프로덕션 시스템이 아닌 경우 TRIGGER-에서 사용자 정의 메시지를 사용하여 INSERT하기 전에 사용자 정의 예외를 발생 시키거나 LOCK INSERT에서 테이블을 가져 와서 삽입하려고 시도하는 응용 프로그램을 살펴 봅니다. 하지만 네, 많은 화난 사람들로부터 전화를받을 수 있습니다. – Guru

답변

5

그것은 당신이 모든 절차, 기능을 가지고 있습니다 출력에서 ​​

SELECT * FROM USER_SOURCE WHERE TEXT LIKE '%NAME_OF_YOUR_TABLE%'; 

;-) 매우 간단, 등등, THER 몸에 호출하는 것이 테이블이 NAME_OF_YOUR_TABLE이라고합니다.

8

테이블을 USER_ 또는 테이블로 쿼리하십시오. 어떤 오브젝트가 그 오브젝트에 의존하고 있으며, 누가 그것을 소유하고 있는지를 알아야합니다.

select owner, name, type, referenced_owner 
from dba_dependencies 
where referenced_name = 'YOUR_TABLE' 

는 그리고 그래, 당신은에서 일어나는는 INSERT가 있는지 확인하기 위해 개체를 통해 볼 필요가있다. 또한이

, 위 내 댓글에서.

는 생산 시스템이 아닌 경우에, 나는 일부 사용자 지정 메시지 에 삽입하기 전에 리거의 사용자 정의 예외를 올리거나 INSERT에서 테이블을 잠그고있는 시도 삽입 응용 프로그램을 통해 볼을 제안 그들에게 실패합니다. 하지만 그래, 당신은 또한 많은 화난 사람들로부터 전화를받을 수도 있습니다.

2

또 다른 생각은 v $ sql을 쿼리하여 업데이트를 수행하는 구문을 찾는 것입니다. 모듈/액션 (또는 10g progam_id 및 program_line #)에서 무언가를 얻을 수 있습니다.

1

는 소리.

에 대한
AUDIT ALL ON ::TABLE::; 

은 또한 테이블에 DBMS_FGA 정책을 적용하고 클라이언트 프로그램, 사용자를 수집하고 어쩌면 호출 스택이 너무 사용할 수 있습니다 얼마나

.

0

파티에 늦음!

제 2의 Gary의 v $ sql 언급. 쿼리가 플러시되지 않는 한 빠른 응답을 얻을 수 있습니다.

현재 인스턴스에서 그 사실을 알고 있다면 위에 사용 된 것들의 조합을 좋아합니다. 동적 SQL이 없으면 xxx_Dependencies가 작동하고 잘 작동합니다.

성가신 동적 SQL을 얻으려면 xxx_Source에 참여하십시오.

우리는 또한 SQL * Plus 복사 명령 (조심스럽게! deprecated!)을 사용하여 dev 인스턴스에 데이터를 가져 오지만 데이터는 imp 또는 impdp로도 도입 될 수 있습니다. xxx_Directories에서 데이터를 가져오고 나가기 위해 축복받은 디렉토리를 확인하십시오.

관련 문제