[Oracle] 테이블스페이스와 현재 유저가 다른 테이블 찾는 방법. USER_TABLES, USER

이번 프로젝트에서는 각 계정이 동일한 이름의 테이블을 사용하면서도, 각 계정별로 독립적인 데이터를 저장해야 하는 구조로 데이터베이스를 설계하였습니다. 이러한 구조에서, 각 계정의 테이블스페이스 이름을 해당 계정의 이름과 동일하게 설정하기로 약속하였답니다.

즉, 계정 A에는 A라는 이름의 테이블스페이스를, 계정 B에는 B라는 이름의 테이블스페이스를 사용하여 계정별 데이터 구분을 명확히 하는 구조입니다.

이와 같은 설정에서 특정 계정의 테이블이나 인덱스가 해당 계정의 테이블스페이스에 잘못 저장되지 않았는지, 혹은 다른 계정의 테이블스페이스에 들어가 있지 않은지를 확인이 필요했어요.

그리하여 사전에 약속된 방식으로 테이블스페이스가 설정되었는지를 점검하는 참고용 쿼리를 만들어 보았습니다. 계정별로 테이블스페이스 이름을 동일하게 설정하기로 약속된 규칙을 확인하는 참고용으로 사용할 수 있을 거예요.

테이블스페이스 설정 확인용 쿼리

계정별 테이블 테이블스페이스 확인 쿼리

현재 계정의 테이블이 약속된 대로 해당 계정 이름과 동일한 테이블스페이스에 저장되어 있는지 확인하려면 다음 쿼리를 사용할 수 있어요.

-- 테이블 테이블스페이스 확인용 쿼리
SELECT *
  FROM USER_TABLES
 WHERE TABLESPACE_NAME IS NOT NULL
       AND TABLESPACE_NAME <> (SELECT USER FROM DUAL);

위 쿼리는 USER_TABLES 뷰를 통해 현재 계정의 테이블 중에서, 테이블스페이스 이름이 현재 계정의 이름과 다를 경우 해당 테이블을 조회합니다. 이를 통해 사전에 약속된 테이블스페이스 설정에 벗어난 테이블을 확인할 수 있습니다.

계정별 인덱스 테이블스페이스 확인 쿼리

마찬가지로, 인덱스가 현재 계정 이름과 동일한 테이블스페이스에 저장되어 있는지 점검할 수 있는 쿼리는 다음과 같아요.

-- 인덱스 테이블스페이스 확인용 쿼리
SELECT *
  FROM USER_INDEXES
 WHERE TABLESPACE_NAME IS NOT NULL
       AND TABLESPACE_NAME <> (SELECT USER FROM DUAL);

이 쿼리는 USER_INDEXES 뷰에서 인덱스가 현재 계정과 다른 테이블스페이스에 저장되어 있는지 확인합니다. 이를 통해 인덱스가 잘못된 테이블스페이스에 들어가 있는 경우를 쉽게 확인할 수 있습니다.

이전최근
댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗