[Oracle] 테이블스페이스 삭제하기

·2025년 9월 2일

오라클 관리

목록 보기
76/163


ㄴ 이런식으로 잘 안함


[이론1] 테이블스페이스를 drop 하면 테이블스페이스에 있던 모든 객체들(table, index, sequence, synonym, view, procedure, 함수, trigger 등)이 모두 같이 삭제됨


[실습1] ts01 테이블 스페이스를 drop 하시오

SYS @ ORA19 >  @ts
TS01       /u01/app/oracle/oradata/ORA19/ts01.dbf                       10
TS01       /u01/app/oracle/oradata/ORA19/ts01b.dbf                      30

SYS @ ORA19 > drop  tablespace ts01;
drop  tablespace ts01
*
1행에 오류:
ORA-01549: 테이블스페이스가 비어있지 않으므로 INCLUDING CONTENTS 옵션을 사용해
주십시오

SYS @ ORA19 > drop tablespace ts01 including contents;

테이블스페이스가 삭제되었습니다.

SYS @ ORA19 >
[oracle@ora19c ~]$ cd /u01/app/oracle/oradata/ORA19
[oracle@ora19c ORA19]$
[oracle@ora19c ORA19]$ ls
backup         redo03.log    test_big.dbf  ts02b.dbf  ts04c.dbf
control01.ctl  sysaux01.dbf  ts01.dbf      ts03.dbf   ts07.dbf
redo01.log     system01.dbf  ts01b.dbf     ts04a.dbf  undotbs01.dbf
redo02.log     temp01.dbf    ts02.dbf      ts04b.dbf  users01.dbf
[oracle@ora19c ORA19]$
[oracle@ora19c ORA19]$ rm ts01.dbf
[oracle@ora19c ORA19]$ rm ts01b.dbf
[oracle@ora19c ORA19]$

SYS @ ORA19 > @ts.sql

TS02       /u01/app/oracle/oradata/ORA19/ts02.dbf                       20
TS02       /u01/app/oracle/oradata/ORA19/ts02b.db

SYS @ ORA19 > drop tablespace ts02 including contents and datafiles;

테이블스페이스가 삭제되었습니다.

drop tablespace ts02 including contents and datafiles;
--> rm ts02.dbf까지 같이 된 것


문제1. 테이블 스페이스 중에서 ts 로 시작하는 테이블 스페이스를 모두 drop 하시오

오렌지에서 하기

select 'drop tablespace ' || tablespace_name
        || ' including contents and datafiles cascade constraints;'
 from dba_tablespaces
 where tablespace_name like 'TS%';

drop tablespace TS03 including contents and datafiles cascade constraints;
drop tablespace TS04 including contents and datafiles cascade constraints;
drop tablespace TS07 including contents and datafiles cascade constraints;
drop tablespace TS400 including contents and datafiles cascade constraints;
drop tablespace TS500 including contents and datafiles cascade constraints;
drop tablespace TS708 including contents and datafiles cascade constraints;
drop tablespace TSBLOCK16 including contents and datafiles cascade constraints;
drop tablespace TSBLOCK32 including contents and datafiles cascade constraints;
drop tablespace INDEX_TS01 including contents and datafiles cascade constraints;

ORA-02449: 외래 키에 의해 참조되는 고유/기본 키가 테이블에 있습니다
위의 경우에는
SYS @ ORA19 > drop tablespace ts07 including contents and datafiles cascade constraints;
이렇게 cascade constraints를 붙여주면 됨


문제2. hr 계정의 모든 객체들을 가지고 있는 덤프파일을 다운로드 받으시오

[oracle@ora19c ORA19]$ exp hr/hr owner=hr file=hr.dmp

Export: Release 19.0.0.0.0 - Production on92 15:13:51 2025
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.


다음에 접속됨: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
AL32UTF8 문자 설정과 AL16UTF16 NCHAR 문자 설정에서 익스포트가 종료되었습니다
. 스키마 이전 단계의 객체와 작업을 엑스포트합니다\r

. HR 사용자를 위해 외래 함수 라이브러리 이름을 엑스포트합니다
. PUBLIC 유형 동의어 익스포트 중
. 전용 유형 동의어 익스포트 중
. HR 사용자의 객체 유형 정의를 익스포트합니다.
HR의 객체를 익스포트하려고 합니다 ...
. 데이터베이스 링크 익스포트 중
. 순차 번호 익스포트 중
. 클러스터 정의 익스포트 중
. HR의 테이블을 익스포트하려고 합니다 via 규정 경로...
. .                       COUNTRIES 테이블 익스포트 중         25 행이 엑스포트됨
. .                     DEPARTMENTS 테이블 익스포트 중         27 행이 엑스포트됨
. .                       EMPLOYEES 테이블 익스포트 중        107 행이 엑스포트됨
. .                            JOBS 테이블 익스포트 중         19 행이 엑스포트됨
. .                     JOB_HISTORY 테이블 익스포트 중         10 행이 엑스포트됨
. .                       LOCATIONS 테이블 익스포트 중         23 행이 엑스포트됨
. .                         REGIONS 테이블 익스포트 중          4 행이 엑스포트됨
. 동의어 익스포트 중
. 뷰 익스포트 중
. 저장 프로시저 익스포트 중
. 작업을 엑스포트합니다
. 참조 무결성 제약조건 익스포트 중
. 트리거 익스포트 중
. 인덱스유형을 엑스포팅합니다
. 비트맵, 함수, 기능과 확장 가능한 인덱스들을 엑스포트합니다
. 이후 테이블 처리 익스포트 중
. 구체화된 뷰 익스포트 중
. 스냅샷 로그 익스포트 중
. 작업 대기열 익스포트 중
. 새로고침 그룹과 하위 그룹 익스포트 중
. 차원을 엑스포트합니다
. 스키마 이후 단계의 객체와 작업을 엑스포트합니다\r

. 통계를 엑스포트합니다
익스포트가 경고 없이 정상적으로 종료되었습니다.
[oracle@ora19c ORA19]$
[oracle@ora19c ORA19]$
[oracle@ora19c ORA19]$ ls -l hr.dmp

문제3. hr.dmp 를 /home/oracle 밑에 올리고 import 를 하시오

hr.dmp 파일 모바텀에 올리기

SYS @ ORA19 > drop user hr cascade;

사용자가 삭제되었습니다.

SYS @ ORA19 > create user hr
              identified by hr;

사용자가 생성되었습니다.

SYS @ ORA19 > grant dba to hr;

권한이 부여되었습니다.

SYS @ ORA19 > exit;
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0에서 분리되었습니다.


[oracle@ora19c ~]$

[oracle@ora19c ~]$ imp hr/hr file=hr.dmp fromuser=hr touser=hr

Import: Release 19.0.0.0.0 - Production on92 15:28:52 2025
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.


다음에 접속됨: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

익스포트 파일은 규정 경로를 거쳐 EXPORT:V19.00.00 에 의해 생성되었습니다
AL32UTF8 문자집합과 AL16UTF16 NCHAR 문자 집합에 임포트가 완성되었습니다
IMP-00403:

경고: 이 임포트는 권한 문제로 인해 실패한 DDL이 포함된 개별 SQL 파일 "import_sys"() 생성했습니다.

. . 테이블                    "COUNTRIES"()을 임포트 중         25 행이 임포트되었습니다
. . 테이블                  "DEPARTMENTS"()을 임포트 중         27 행이 임포트되었습니다
IMP-00017: 다음 명령이 실패하고 ORACLE 14063 오류가 발생했습니다:
 "ALTER TABLE "DEPARTMENTS" ADD  CONSTRAINT "DEPT_ID_PK" PRIMARY KEY ("DEPART"
 "MENT_ID") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 TABLESPACE "SYSAUX"
 "" LOGGING"
IMP-00003: ORACLE 오류 14063() 발생했습니다.
ORA-14063: 고유/기본 키 제약조건에 사용되지 않은 인덱스가 존재합니다
IMP-00017: 다음 명령이 실패하고 ORACLE 14048 오류가 발생했습니다:
 "ALTER INDEX "DEPT_ID_PK" UNUSABLE ENABLE "
IMP-00003: ORACLE 오류 14048() 발생했습니다.
ORA-14048: 분할영역 유지 작업이 다른 작업과 결합할 수 없습니다
. . 테이블                    "EMPLOYEES"()을 임포트 중        107 행이 임포트되었습니다
. . 테이블                         "JOBS"()을 임포트 중         19 행이 임포트되었습니다
IMP-00017: 다음 명령이 실패하고 ORACLE 14063 오류가 발생했습니다:
 "ALTER TABLE "JOBS" ADD  CONSTRAINT "JOB_ID_PK" PRIMARY KEY ("JOB_ID") USING"
 " INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 TABLESPACE "SYSAUX" LOGGING"
IMP-00003: ORACLE 오류 14063() 발생했습니다.
ORA-14063: 고유/기본 키 제약조건에 사용되지 않은 인덱스가 존재합니다
IMP-00017: 다음 명령이 실패하고 ORACLE 14048 오류가 발생했습니다:
 "ALTER INDEX "JOB_ID_PK" UNUSABLE ENABLE "
IMP-00003: ORACLE 오류 14048() 발생했습니다.
ORA-14048: 분할영역 유지 작업이 다른 작업과 결합할 수 없습니다
. . 테이블                  "JOB_HISTORY"()을 임포트 중         10 행이 임포트되었습니다
IMP-00017: 다음 명령이 실패하고 ORACLE 14063 오류가 발생했습니다:
 "ALTER TABLE "JOB_HISTORY" ADD  CONSTRAINT "JHIST_EMP_ID_ST_DATE_PK" PRIMARY"
 " KEY ("EMPLOYEE_ID", "START_DATE") USING INDEX PCTFREE 10 INITRANS 2 MAXTRA"
 "NS 255 TABLESPACE "SYSAUX" LOGGING"
IMP-00003: ORACLE 오류 14063() 발생했습니다.
ORA-14063: 고유/기본 키 제약조건에 사용되지 않은 인덱스가 존재합니다
IMP-00017: 다음 명령이 실패하고 ORACLE 14048 오류가 발생했습니다:
 "ALTER INDEX "JHIST_EMP_ID_ST_DATE_PK" UNUSABLE ENABLE "
IMP-00003: ORACLE 오류 14048() 발생했습니다.
ORA-14048: 분할영역 유지 작업이 다른 작업과 결합할 수 없습니다
. . 테이블                    "LOCATIONS"()을 임포트 중         23 행이 임포트되었습니다
IMP-00017: 다음 명령이 실패하고 ORACLE 14063 오류가 발생했습니다:
 "ALTER TABLE "LOCATIONS" ADD  CONSTRAINT "LOC_ID_PK" PRIMARY KEY ("LOCATION_"
 "ID") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 TABLESPACE "SYSAUX" LOG"
 "GING"
IMP-00003: ORACLE 오류 14063() 발생했습니다.
ORA-14063: 고유/기본 키 제약조건에 사용되지 않은 인덱스가 존재합니다
IMP-00017: 다음 명령이 실패하고 ORACLE 14048 오류가 발생했습니다:
 "ALTER INDEX "LOC_ID_PK" UNUSABLE ENABLE "
IMP-00003: ORACLE 오류 14048() 발생했습니다.
ORA-14048: 분할영역 유지 작업이 다른 작업과 결합할 수 없습니다
. . 테이블                      "REGIONS"()을 임포트 중          4 행이 임포트되었습니다
IMP-00017: 다음 명령이 실패하고 ORACLE 14063 오류가 발생했습니다:
 "ALTER TABLE "REGIONS" ADD  CONSTRAINT "REG_ID_PK" PRIMARY KEY ("REGION_ID")"
 " USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 TABLESPACE "SYSAUX" LOGGING"
IMP-00003: ORACLE 오류 14063() 발생했습니다.
ORA-14063: 고유/기본 키 제약조건에 사용되지 않은 인덱스가 존재합니다
IMP-00017: 다음 명령이 실패하고 ORACLE 14048 오류가 발생했습니다:
 "ALTER INDEX "REG_ID_PK" UNUSABLE ENABLE "
IMP-00003: ORACLE 오류 14048() 발생했습니다.
ORA-14048: 분할영역 유지 작업이 다른 작업과 결합할 수 없습니다
IMP-00017: 다음 명령이 실패하고 ORACLE 2270 오류가 발생했습니다:
 "ALTER TABLE "DEPARTMENTS" ADD CONSTRAINT "DEPT_LOC_FK" FOREIGN KEY ("LOCATI"
 "ON_ID") REFERENCES "LOCATIONS" ("LOCATION_ID") ENABLE NOVALIDATE"
IMP-00003: ORACLE 오류 2270() 발생했습니다.
ORA-02270: 이 열목록에 대해 일치하는 고유 또는 기본 키가 없습니다.
IMP-00017: 다음 명령이 실패하고 ORACLE 2270 오류가 발생했습니다:
 "ALTER TABLE "JOB_HISTORY" ADD CONSTRAINT "JHIST_JOB_FK" FOREIGN KEY ("JOB_I"
 "D") REFERENCES "JOBS" ("JOB_ID") ENABLE NOVALIDATE"
IMP-00003: ORACLE 오류 2270() 발생했습니다.
ORA-02270: 이 열목록에 대해 일치하는 고유 또는 기본 키가 없습니다.
IMP-00017: 다음 명령이 실패하고 ORACLE 2270 오류가 발생했습니다:
 "ALTER TABLE "JOB_HISTORY" ADD CONSTRAINT "JHIST_DEPT_FK" FOREIGN KEY ("DEPA"
 "RTMENT_ID") REFERENCES "DEPARTMENTS" ("DEPARTMENT_ID") ENABLE NOVALIDATE"
IMP-00003: ORACLE 오류 2270() 발생했습니다.
ORA-02270: 이 열목록에 대해 일치하는 고유 또는 기본 키가 없습니다.
IMP-00017: 다음 명령이 실패하고 ORACLE 2270 오류가 발생했습니다:
 "ALTER TABLE "COUNTRIES" ADD CONSTRAINT "COUNTR_REG_FK" FOREIGN KEY ("REGION"
 "_ID") REFERENCES "REGIONS" ("REGION_ID") ENABLE NOVALIDATE"
IMP-00003: ORACLE 오류 2270() 발생했습니다.
ORA-02270: 이 열목록에 대해 일치하는 고유 또는 기본 키가 없습니다.
IMP-00017: 다음 명령이 실패하고 ORACLE 2270 오류가 발생했습니다:
 "ALTER TABLE "EMPLOYEES" ADD CONSTRAINT "EMP_DEPT_FK" FOREIGN KEY ("DEPARTME"
 "NT_ID") REFERENCES "DEPARTMENTS" ("DEPARTMENT_ID") ENABLE NOVALIDATE"
IMP-00003: ORACLE 오류 2270() 발생했습니다.
ORA-02270: 이 열목록에 대해 일치하는 고유 또는 기본 키가 없습니다.
IMP-00017: 다음 명령이 실패하고 ORACLE 2270 오류가 발생했습니다:
 "ALTER TABLE "EMPLOYEES" ADD CONSTRAINT "EMP_JOB_FK" FOREIGN KEY ("JOB_ID") "
 "REFERENCES "JOBS" ("JOB_ID") ENABLE NOVALIDATE"
IMP-00003: ORACLE 오류 2270() 발생했습니다.
ORA-02270: 이 열목록에 대해 일치하는 고유 또는 기본 키가 없습니다.
제약 조건을 사용으로 설정에 대한 정보...
IMP-00017: 다음 명령이 실패하고 ORACLE 2430 오류가 발생했습니다:
 "ALTER TABLE "DEPARTMENTS" ENABLE CONSTRAINT "DEPT_LOC_FK""
IMP-00017: 다음 명령이 실패하고 ORACLE 2430 오류가 발생했습니다:
 "ALTER TABLE "JOB_HISTORY" ENABLE CONSTRAINT "JHIST_JOB_FK""
IMP-00017: 다음 명령이 실패하고 ORACLE 2430 오류가 발생했습니다:
 "ALTER TABLE "JOB_HISTORY" ENABLE CONSTRAINT "JHIST_DEPT_FK""
IMP-00017: 다음 명령이 실패하고 ORACLE 2430 오류가 발생했습니다:
 "ALTER TABLE "COUNTRIES" ENABLE CONSTRAINT "COUNTR_REG_FK""
IMP-00017: 다음 명령이 실패하고 ORACLE 2430 오류가 발생했습니다:
 "ALTER TABLE "EMPLOYEES" ENABLE CONSTRAINT "EMP_DEPT_FK""
IMP-00017: 다음 명령이 실패하고 ORACLE 2430 오류가 발생했습니다:
 "ALTER TABLE "EMPLOYEES" ENABLE CONSTRAINT "EMP_JOB_FK""
경고와 함께 임포트가 정상 종료되었습니다.
[oracle@ora19c ~]$

문제4. import한 테이블과 인덱스의 갯수가 정확한지 확인하시오

select count(*)
 from dba_tables
 where owner='HR';   --- 7개
 
 select count(*)
  from dba_indexes
  where owner='HR';  --- 20개

문제5. 테이블의 건수가 어떻게 되는지 조회하시오

-- HR 계정의 통계정보를 수집 
exec dbms_stats.gather_schema_stats('HR');

-- 테이블 이름과 그 건수 확인
select  table_name, num_rows, last_analyzed
 from dba_tables
 where owner='HR'
 order by num_rows desc;

0개의 댓글