나는 우리가 어떤 문서도 가지고 있지 않은 오라클 데이터베이스를 담당하고 있습니다. 지금 내가 을 알아야 할 때 테이블이 채워지는 중입니다.데이터베이스 테이블을 채우는 위치를 어떻게 알 수 있습니까?
이 테이블에서 데이터를 가져 오는 절차, 트리거 또는 다른 소스를 어떻게 알 수 있습니까?
나는 우리가 어떤 문서도 가지고 있지 않은 오라클 데이터베이스를 담당하고 있습니다. 지금 내가 을 알아야 할 때 테이블이 채워지는 중입니다.데이터베이스 테이블을 채우는 위치를 어떻게 알 수 있습니까?
이 테이블에서 데이터를 가져 오는 절차, 트리거 또는 다른 소스를 어떻게 알 수 있습니까?
그것은 당신이 모든 절차, 기능을 가지고 있습니다 출력에서
SELECT * FROM USER_SOURCE WHERE TEXT LIKE '%NAME_OF_YOUR_TABLE%';
;-) 매우 간단, 등등, THER 몸에 호출하는 것이 테이블이 NAME_OF_YOUR_TABLE이라고합니다.
테이블을 USER_
또는 테이블로 쿼리하십시오. 어떤 오브젝트가 그 오브젝트에 의존하고 있으며, 누가 그것을 소유하고 있는지를 알아야합니다.
select owner, name, type, referenced_owner
from dba_dependencies
where referenced_name = 'YOUR_TABLE'
는 그리고 그래, 당신은에서 일어나는는 INSERT가 있는지 확인하기 위해 개체를 통해 볼 필요가있다. 또한이
, 위 내 댓글에서.
는 생산 시스템이 아닌 경우에, 나는 일부 사용자 지정 메시지 에 삽입하기 전에 리거의 사용자 정의 예외를 올리거나 INSERT에서 테이블을 잠그고있는 시도 삽입 응용 프로그램을 통해 볼을 제안 그들에게 실패합니다. 하지만 그래, 당신은 또한 많은 화난 사람들로부터 전화를받을 수도 있습니다.
또 다른 생각은 v $ sql을 쿼리하여 업데이트를 수행하는 구문을 찾는 것입니다. 모듈/액션 (또는 10g progam_id 및 program_line #)에서 무언가를 얻을 수 있습니다.
DML 변경 사항은 * _TAB_MODIFICATIONS에 기록됩니다.
트리거를 만들지 않고 LOG MINER를 사용하여 모든 데이터 변경 사항과 세션을 찾을 수 있습니다.
트리거를 사용하면 SYS_CONTEXT 변수를 테이블에 기록 할 수 있습니다. 감사 할 같은
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions165.htm#SQLRF06117
는 소리.
에 대한AUDIT ALL ON ::TABLE::;
은 또한 테이블에 DBMS_FGA 정책을 적용하고 클라이언트 프로그램, 사용자를 수집하고 어쩌면 호출 스택이 너무 사용할 수 있습니다 얼마나
.
파티에 늦음!
제 2의 Gary의 v $ sql 언급. 쿼리가 플러시되지 않는 한 빠른 응답을 얻을 수 있습니다.
현재 인스턴스에서 그 사실을 알고 있다면 위에 사용 된 것들의 조합을 좋아합니다. 동적 SQL이 없으면 xxx_Dependencies가 작동하고 잘 작동합니다.
성가신 동적 SQL을 얻으려면 xxx_Source에 참여하십시오.
우리는 또한 SQL * Plus 복사 명령 (조심스럽게! deprecated!)을 사용하여 dev 인스턴스에 데이터를 가져 오지만 데이터는 imp 또는 impdp로도 도입 될 수 있습니다. xxx_Directories에서 데이터를 가져오고 나가기 위해 축복받은 디렉토리를 확인하십시오.
테이블이 Oracle DB 외부의 다른 서버 (예 : 다른 서버의 ODBC 연결)에 의해 채워지는 것은 물론 가능합니다. –
참. 어떻게 채워지는지 알아내는 것이 어려울 경우 : – Tami
@Tami, 프로덕션 시스템이 아닌 경우 TRIGGER-에서 사용자 정의 메시지를 사용하여 INSERT하기 전에 사용자 정의 예외를 발생 시키거나 LOCK INSERT에서 테이블을 가져 와서 삽입하려고 시도하는 응용 프로그램을 살펴 봅니다. 하지만 네, 많은 화난 사람들로부터 전화를받을 수 있습니다. – Guru