[Oracle] Pump를 이용한 데이터 이행4 (TABLESPACE 레벨)

·2025년 9월 12일

오라클 관리

목록 보기
135/163
         ORA19  ------------------------------------>  ora19dw
위치:   /home/oracle/pump_ora19                     /home/oracle/pump_ora19dw
디렉토리명:  datapump_dir                                ora19dw_dir
테이블 :      emp                                        emp
유져:         scott                                     jones
테이블스페이스: ts700                                    ts450

💡 테이블스페이스 레벨로 데이터 이행할 때 주의할 사항

export 할 db의 character set 과 import 할 db의 character set 이 동일해야함

select *
 from database_properties
 where property_name='NLS_CHARACTERSET';
 
 select *
 from database_properties
 where property_name='NLS_NCHAR_CHARACTERSET';

mswin949나 ksc5601
💡 19c 이전에 예전 버전의 CHARACTERSET이 mswin949나 ksc5601 등으로 되어있음


[실습1] ora19 쪽에서 ts20000 으로 테이블 스페이스를 생성합니다.

select file_name from dba_data_files;

create tablespace ts20000
datafile '/u01/app/oracle/oradata/ORA19/ts20000.dbf' size 20m;

[실습2] ora19쪽에서 scott 으로 접속해서 ts20000에 emp와 dept 테이블을 생성하시오

alter session set nls_Date_format='RR/MM/DD';
drop table emp;
drop table dept;


CREATE TABLE DEPT
       (DEPTNO number(10),
        DNAME VARCHAR2(14),
        LOC VARCHAR2(13) )
        tablespace ts20000;


INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO DEPT VALUES (20, 'RESEARCH',   'DALLAS');
INSERT INTO DEPT VALUES (30, 'SALES',      'CHICAGO');
INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON');

CREATE TABLE EMP (
 EMPNO               NUMBER(4) NOT NULL,
 ENAME               VARCHAR2(10),
 JOB                 VARCHAR2(9),
 MGR                 NUMBER(4) ,
 HIREDATE            DATE,
 SAL                 NUMBER(7,2),
 COMM                NUMBER(7,2),
 DEPTNO              NUMBER(2) )
   tablespace ts20000;


INSERT INTO EMP VALUES (7839,'KING','PRESIDENT',NULL,'81-11-17',5000,NULL,10);
INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER',7839,'81-05-01',2850,NULL,30);
INSERT INTO EMP VALUES (7782,'CLARK','MANAGER',7839,'81-05-09',2450,NULL,10);
INSERT INTO EMP VALUES (7566,'JONES','MANAGER',7839,'81-04-01',2975,NULL,20);
INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,'81-09-10',1250,1400,30);
INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,'81-02-11',1600,300,30);
INSERT INTO EMP VALUES (7844,'TURNER','SALESMAN',7698,'81-08-21',1500,0,30);
INSERT INTO EMP VALUES (7900,'JAMES','CLERK',7698,'81-12-11',950,NULL,30);
INSERT INTO EMP VALUES (7521,'WARD','SALESMAN',7698,'81-02-23',1250,500,30);
INSERT INTO EMP VALUES (7902,'FORD','ANALYST',7566,'81-12-11',3000,NULL,20);
INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,'80-12-09',800,NULL,20);
INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST',7566,'82-12-22',3000,NULL,20);
INSERT INTO EMP VALUES (7876,'ADAMS','CLERK',7788,'83-01-15',1100,NULL,20);
INSERT INTO EMP VALUES (7934,'MILLER','CLERK',7782,'82-01-11',1300,NULL,10);


commit;

select table_name, tablespace_name
 from user_tables;

[실습3] ts20000 테이블스페이스를 read only 로 변경하시오

alter  tablespace  ts20000 read only;


[실습4] ts20000 테이블스페이스를 export pump 하시오

ora19에서

expdp  directory=datapump_dir  dumpfile=ts20000.dmp  transport_tablespace=y tablespaces=ts20000

사용자 이름: sys as sysdba
비밀번호:

[실습5] ts20000.dbf 를 ora19dw 쪽 data file 있는 쪽으로 복사합니다.

cp /u01/app/oracle/oradata/ORA19/ts20000.dbf   /home/oracle/ts20000.dbf

[실습6] ts20000.dmp 파일을 ora19dw 쪽의 pump directory 에 복사합니다

cp /home/oracle/pump_ora19/ts20000.dmp /home/oracle/pump_ora19dw/ts20000.dmp

[실습7] ora19dw 쪽에 ts20000 테이블 스페이스를 import 합니다.

SYS @ ora19dw > drop user scott cascade;

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

SYS @ ora19dw > create user scott identified by tiger;

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

SYS @ ora19dw > grant dba to scott;

impdp directory=ora19dw_dir dumpfile=ts20000.dmp transport_datafiles='/home/oracle/ts20000.dbf'

[oracle@ora19c ~]$ impdp directory=ora19dw_dir dumpfile=ts20000.dmp transport_datafiles='/home/oracle/ts20000.dbf'

Import: Release 19.0.0.0.0 - Production on912 15:22:32 2025
Version 19.3.0.0.0

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

사용자 이름: sys as sysdba
비밀번호:
.
.
.
"SYS"."SYS_IMPORT_TRANSPORTABLE_01" 작업이 금 912 15:22:40 2025 elapsed 0 00:00:03에서 성공적으로 완료됨

[실습8] ora19 와 ora19dw쪽에 ts20000 테이블 스페이스를 둘다 read write 로 변경하시오

alter  tablespace  ts20000 read write;

select count(*)
 from scott.emp;

📌 주의사항

이 작업이 테이블스페이스 작업이다 보니 데이터가 많아서 메모리 부족 오류가 발생할 수 있음
UDE-04031: operation generated ORACLE error 4031 ORA-04031: unable to allocate 16 bytes of shared memory ("shared pool","select obj#,type#,ctime,mtim...","SQLA","tmp")


위와 같이 메모리 오류가 나면 오라클 인스턴스 메모리 사이즈를 늘리고 해야합니다.

PROD(SYS) > alter  system  set  memory_max_target=1024m  scope=spfile;
PROD(SYS) > alter  system  set  memory_target=1024m  scope=spfile;
PROD(SYS) > shutdown immediate
PROD(SYS) > startup

0개의 댓글