[oracle] DB의 모든 스키마를 나열하기위한 Oracle SQL 쿼리

오라클 DB에서 사용하지 않는 스키마를 삭제하고 싶었습니다.

모든 스키마 이름을 어떻게 쿼리 할 수 ​​있습니까?



답변

sqlplus 사용

sqlplus / as sysdba

운영:

고르다 *
dba_users에서

사용자 이름 만 원하는 경우 다음을 수행하십시오.

사용자 이름 선택
dba_users에서


답변

아마도 당신은

SELECT username
  FROM dba_users

그러면 시스템의 모든 사용자 (및 모든 잠재적 스키마)가 표시됩니다. “스키마”에 대한 정의가 스키마를 비워 두는 것을 허용하는 경우 원하는 것입니다. 그러나 사람들이 실제로 적어도 하나의 개체를 소유하고있는 경우에만 스키마를 호출하여 개체를 소유하지 않는 수백 개의 사용자 계정이 제외되도록하는 의미 적 차이가있을 수 있습니다. 그 경우

SELECT username
  FROM dba_users u
 WHERE EXISTS (
    SELECT 1
      FROM dba_objects o
     WHERE o.owner = u.username )

스키마를 생성 한 사람이 기본 테이블 스페이스 할당에 대해 현명하다고 가정하고 Oracle이 제공 한 스키마에 관심이 없다고 가정하면 default_tablespace, ie 에 조건자를 추가하여 해당 스키마를 필터링 할 수 있습니다.

SELECT username
  FROM dba_users
 WHERE default_tablespace not in ('SYSTEM','SYSAUX')

또는

SELECT username
  FROM dba_users u
 WHERE EXISTS (
    SELECT 1
      FROM dba_objects o
     WHERE o.owner = u.username )
   AND default_tablespace not in ('SYSTEM','SYSAUX')

사람이 잘못이 아닌 시스템 사용자는 주어진 한 시스템 건너에 몹시 드문 일이 아니다 default_tablespace의를 SYSTEM그렇게하지만, 가정은 오라클 전달 스키마에서 필터에이 방법을 시도하기 전에 보유 것을 확신합니다.


답변

SELECT username FROM all_users ORDER BY username;


답변

select distinct owner 
from dba_segments
where owner in (select username from dba_users where default_tablespace not in ('SYSTEM','SYSAUX'));


답변

어때 :

SQL> select * from all_users;

모든 사용자 / 스키마 목록, 해당 ID 및 DB에 생성 된 날짜를 반환합니다.

USERNAME                          USER_ID CREATED
------------------------------ ---------- ---------
SCHEMA1                         120 09-SEP-15
SCHEMA2                         119 09-SEP-15
SCHEMA3                         118 09-SEP-15


답변

아래 sql은 설치 후 생성되는 Oracle의 모든 스키마를 나열합니다. ORACLE_MAINTAINED = ‘N’은 필터입니다. 이 열은 12c에서 새로 추가되었습니다.

dba_users에서 고유 한 사용자 이름, ORACLE_MAINTAINED를 선택하십시오. 여기서 ORACLE_MAINTAINED = 'N';


답변

다음 SQL 중 하나는 Oracle DB의 모든 스키마를 반환합니다.

  1. select owner FROM all_tables group by owner;
  2. select distinct owner FROM all_tables;