DB/오라클
[ORACLE]데이터사전
에크키키
2022. 7. 19. 23:46
데이터사전
- 사용자와 DB자원을 효율적으로 관리 위해 다양한 정보를 저장하는 시스템 테이블 집합
- 사용자가 테이블을 생성하거나 사용자를 변경하는 등의 작업을 할 떄
- 'DB 서버'에 의해 자동 갱신되는 테이블 user_constraintS
- 사용자가 직접 수정X, 삭제X -> '읽기전용 뷰'로 사용자에게 정보를 제공함(즉, select문만 허용)
USER_데이터 사전 : USER_로 시작~S(복수)로 끝남
- 현재 자신의 계정이 소유한 객체 조회 가능 (※객체:테이블,시퀀스,인덱스,뷰 등)
- 사용자와 가장 밀접하게 관련된 뷰
- 자신이 생성한 테이블, 시퀀스, 뷰, 인덱스, 동의어 등의 객체나 해당 사용자에게 권한 정보제공
select *
from USER_tableS;--사용자(system)가 소유한 '테이블' 정보
select *
from USER_sequenceS;--사용자(system)가 소유한 '시퀀스'정보
select *
from USER_indexES;--사용자(system)가 소유한 '인덱스'정보 pk에는 자동으로 index가 만들어져있음
select view_name
from USER_viewS;--사용자(system)가 소유한 '뷰'정보
--USER_CONSTRAINTS : 자기 계정의 제약 조건 확인
select table_name, constraint_name, constraint_type--P(=PK 기본키), R(=FK 참조키),C(=NOT NULL)
from USER_constraintS --사용자(system)가 소유한 '제약조건'정보
where table_name in('EMPLOYEE','DEPARTMENT');--★테이블 이름은 대문자로 검색
--USER_TAB_COLUMNS 자기 계정의 테이블 구성 칼럼 목록 확인
select *
from USER_TAB_COLUMNS;
--USER_TAB_COMMENTS 자기 계정의 테이블의 코멘트 확인
select *
from USER_TAB_COMMENTS;
ALL_데이터사전
- 권한 있는 테이블 목록 확인 , 접속한 상태에 따라 볼수있는 정보가 다르다.
- 자신의 계정으로 접근할 수 있는 객체와 다른 계정에 접근 가능한 권한을 가진 모든 객체 조회 가능
- 전체 사용자와 관련된 뷰, 사용자가 접근할 수 있는 모든 객체 정보 조회
- ALL_TABLES : 권한 있는 테이블 목록 확인
- owner: 조회중인 객체가 누구의 소유인지 확인
--사용자 : system 일 때 - 결과 500row (SYS와 SYSTEM 사용자(HR) 포함된 상태로 결과가 나옴),dba권한
-- : hr 일 때- 결과 79row (사용자(hr)와 SYS와 SYSTEM 포함한 다른사용자들 결과로 나옴)
select owner, table_name
from all_tables;
--where owner in ('SYSTEM') or table_name in('EMPLOYEE','DEPARTMENT');
--where owner in ('SYSTEM') and table_name in('EMPLOYEE','DEPARTMENT');
select owner, table_name
from all_tables
where owner In ('HR'); --현재 system 접속한 상황에서 owner가 HR인 테이블목록들을 볼 수 있음.
--(2.).ALL_CONSTRAINTS : 권한 있는 제약 조건 확인
select *
from ALL_CONSTRAINTS;-- 현재 system 접속한 상황의 제약조건 확인 hr로 접속시 목록이 더 줄어든다.
DBA_데이터 사전
- 데이터베이스의 모든 객체 조회 가능(DBA_는 시스템 접근 권한)
- 시스템 관리와 관련된 뷰, DBA나 시스템 권한을 가진 사용자만 접근가능
- hr 계정으로 (dba권한 없음)로 접속시 조회권한이 없으므로 사전을 볼수 없음
- system이 DBA_데이터사전을 볼 수 있는 권한을 가졌으면 조회가능
- DBA_TABLES: 모든 테이블 목록 확인
select *
from DBA_tableS
where owner IN ('HR');
--dba_tables로 테이블에 대한 정보조회하기
select owner,table_name
from dba_tables;