테이블/ 링크/ 시퀀스/ 인덱스 등의 정보를 조회할 때 쓰는 쿼리들
---- **** ORACLE DATA DICTIONARY VIEW(오라클 데이터 사전 뷰) **** ----
show user;
-- USER이(가) "SYS"입니다.-데이터베이스 sys로 바꿈
-- 먼저 index 공부를 할때 trace(자동추적) 때문에 아래와 같이 HR에게 부여했던 SELECT ANY DICTIONARY 권한을 회수하겠습니다.
revoke SELECT ANY DICTIONARY from HR;
-- Revoke을(를) 성공했습니다.
revoke SELECT_CATALOG_ROLE from HR;
-- Revoke을(를) 성공했습니다.
show user;
-- USER이(가) "HR"입니다. -데이터베이스 hr로 바꿈
select *
from dictionary;
-- 또는
select *
from dict;
/*
----------hr의 경우 테이블----------
USER_CONS_COLUMNS
ALL_CONS_COLUMNS
*/
--- ===== SYS 로 접속한 것 시작 ===== ---
show user;
-- USER이(가) "SYS"입니다.
select *
from dictionary;
-- 또는
select *
from dict;
/*
----------sys의 경우 테이블----------
USER_CONS_COLUMNS
ALL_CONS_COLUMNS
DBA_CONS_COLUMNS
*/
/*
DBA_로 시작하는 것
==> 관리자만 조회 가능한 것으로 "모든" 오라클 사용자 정보, 모든 테이블, 모든 인덱스, 모든 데이터베이스 링크 등등등의 정보가 다 들어있는 것.
USER_로 시작하는 것
==> 소유주: 현재 오라클서버(hr / sys등)에 접속한 사용자
==> 오라클서버(hr / sys등)에 접속한 사용자 소유의 자신의오라클사용자정보, 자신이만든테이블, 자신이만든인덱스, 자신이만든데이터베이스링크 등등등 의 정보가 다 들어있는 것.
ALL_로 시작하는 것
==> 오라클서버에 접속한 사용자 소유의 즉, 자신의오라클사용자정보, 자신이만든테이블, 자신이만든인덱스, 자신이만든데이터베이스링크 등등등 의 정보가 다 들어있는 것
과(와)
자신의 것은 아니지만 조회가 가능한 다른사용자의오라클사용자정보, 다른사용자소유의테이블, 다른사용자소유의인덱스, 다른사용자소유의데이터베이스링크 등등등 의 정보가 다 들어있는 것.
*/
select *
from dba_tables
where owner in('HR', 'ORAUSER1');
--- ===== SYS 로 접속한 것 끝 ===== ---
-- hr의 경우 이 테이블이 존재하지 않기에 볼 수 없지만 , sys의 경우 관리자이므로 조회 가능
--- ===== HR 로 접속한 것 시작 ===== ---
show user;
-- USER이(가) "HR"입니다.
select *
from dba_tables;
-- 테이블 또는 뷰가 존재하지 않습니다
select *
from user_tables;
select *
from all_tables;
-- all_tables -> 내가 안 만들었지만 다른 사람들이 만든 테이블.(dual 등) 접근이 가능하다.
select *
from all_tables
where owner = 'ORAUSER1';
-- ORAUSER1이 만든 테이블에서 hr으로 접근가능한 테이블이 뭔지 알 수 있다.
select *
from ORAUSER1.TBL_SAWON;
-- *** 자신이 만든 테이블에 대한 모든 정보를 조회하고 싶다. 어디서 보면 될까요? *** --
select *
from dict -- 혹은 dictionary
where table_name like 'USER_%' and lower(comments) like '%table%';-- 자신이 만든 테이블을 조회하는 where절 / 코멘트는 대소문자가 섞여서 나오므로 다 소문자로 전환하는 lower 써줌,
-- USER_TABLES Description of the user's own relational tables
select *
from USER_TABLES;
-- *** USER_TABLES 에서 보여지는 컬럼에 대한 설명을 보고 싶으면 아래와 같이 하면 됩니다. *** --
select *
from dict_columns
where table_name = 'USER_TABLES';
-- *** 자신이 만든 테이블의 컬럼에 대한 모든 정보를 조회하고 싶다. 어디서 보면 될까요? *** --
-- 이 쿼리만 기억하면 된다!
select *
from dict -- 혹은 dictionary
where table_name like 'USER_%' and lower(comments) like '%column%';
select *
from user_tab_columns;
select *
from user_tab_columns
where table_name = 'EMPLOYEES';
-- *** USER_TAB_COLUMNS 에서 보여지는 컬럼에 대한 설명을 보고 싶으면 아래와 같이 하면 됩니다. *** --
select *
from dict_columns
where table_name = 'USER_TAB_COLUMNS';
-- *** 자신이 만든 테이블의 제약조건에 대한 모든 정보를 조회하고 싶다. 어디서 보면 될까요? *** --
-- 이 쿼리만 기억하면 된다!
select *
from dict -- 혹은 dictionary
where table_name like 'USER_%' and lower(comments) like '%constraint%';
select
*
from USER_CONSTRAINTS
where table_name = 'EMPLOYEES';
select
*
from USER_CONS_COLUMNS
where table_name = 'EMPLOYEES';
-- *** 자신이 만든 데이터베이스 링크에 대한 모든 정보를 조회하고 싶다. 어디서 보면 될까요? *** --
select *
from dict -- 혹은 dictionary
where table_name like 'USER_%' and lower(comments) like '%database link%';
select *
from USER_DB_LINKS;
-- *** 자신이 만든 시퀀스에 대한 모든 정보를 조회하고 싶다. 어디서 보면 될까요? *** --
select *
from dict -- 혹은 dictionary
where table_name like 'USER_%' and lower(comments) like '%sequence%';
select *
from USER_SEQUENCES;
-- *** 자신이 만든 인덱스에 대한 모든 정보를 조회하고 싶다. 어디서 보면 될까요? *** --
select *
from dict -- 혹은 dictionary
where table_name like 'USER_%' and lower(comments) like '%index%';
select *
from USER_INDEXES
where table_name = 'EMPLOYEES';
select *
from USER_IND_COLUMNS
where table_name = 'EMPLOYEES';
--- ==================== HR 로 접속한 것 끝 =================== ---