Oracle Datapump
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ์ ์์ด์ ๋ฐ์ดํฐ ์ด๋์ ํ์์ ์ผ๋ก ๊ผญ ์์์ผํ๋ ๊ธฐ์ ์ ๋๋ค. ์ค๋ผํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ Export(exp)์ Import(imp) ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํด์ Data Migration ์์ ์ ํ์๋๋ฐ์, 10g๋ถํฐ Datapump๋ฅผ ์ฌ์ฉํด์ ๊ธฐ์กด ์ ํธ๋ฆฌํฐ๋ณด๋ค 20๋ฐฐ๊ฐ๋ ๋น ๋ฅด๊ฒ ์์ ์ ์๋ฃํ ์ ์๋ค๊ณ ํ๋ค์.
๊ธฐ์กด exp, imp ์ ํธ๋ฆฌํฐ์์ ์ฐจ์ด์
Datapump๊ฐ ๋น ๋ฅด๊ฒ ์์ ์ ์งํํ ์ ์๋ ์ด์ ๋ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฉ์ปค๋์ฆ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ธฐ์กด์ ๋ฐฉ๋ฒ๊ณผ๋ ๋๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ์ด๋ํ์ง๋ง ์ฒ๋ฆฌ ๋ฐฉ์์ ๋ฐ๋ผ ์๋๊ฐ ๋ค๋ฅด๊ฒ ์ธก์ ๋ฉ๋๋ค. ์ ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ด๋์ํฌ๋๋ Export์ Import ์ ํธ๋ฆฌํฐ๊ฐ ๋ ๋น ๋ฆ ๋๋ค. ์๋ฌด๋๋ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ทจ๊ธํ ๋ Datapump๋ฅผ ์ฌ์ฉํ๊ณ ์์ง exp์ imp ์ ํธ๋ฆฌํฐ๋ ๊ณ์ ์ฌ์ฉํ ์ ์์ผ๋ ์ ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ ์ํฌ๋๋ ๊ธฐ์กด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
์๋ ์ด์ธ๋ฟ๋ง ์๋๋ผ ์ ์ด๋ฐฉ์ ๋ํ ๋ณ๊ฒฝ๋์์ต๋๋ค. ๊ธฐ์กด์๋ ํด๋ผ์ด์ธํธ ๋จ์์ ์ ์ด๊ฐ๋๋ ํด์ด์๋ค๋ฉด Datapump๋ ์ค๋ผํด ์๋ฒ์์ ์ ์ด๊ฐ ๋๋ ํด์ ๋๋ค. ๊ทธ๋์ Datapump์ ๊ฒฝ์ฐ Directory ์ค๋ธ์ ํธ๋ฅผ์์ฑํ์ฌ ์ฌ์ฉํ๊ณ export import ์์ ์ ์งํํ๋ ์ ์ ์๊ฒ ํด๋น ์ค๋ธ์ ํธ์ ๋ํด ์ฝ๊ธฐ, ์ฐ๊ธฐ ๊ถํ์ ๋ถ์ฌํด์ค์ผํฉ๋๋ค.
์ค์ตํ๊ฒฝ
OS : Red Hat Enterprise Linux Server release 6.10
DB : Oracle 11.2.0.1
SID : orcl(export), newdb(import)
host : 601d2fce71dc
์ค์ต๋ชฉํ
-orcl ๋ฐ์ดํฐ๋ฒ ์ด์ค hr ์ ์ ์ employees, departments ํ ์ด๋ธ์ export --> newdb ๋ฐ์ดํฐ๋ฒ ์ด์ค scott ์คํค๋ง๋ก import
-orcl ๋ฐ์ดํฐ๋ฒ ์ด์ค scott ์คํค๋ง export --> newdb ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก import
Export expdp ์ค์ต
[oracle@601d2fce71dc ~]$ mkdir /opt/oracle/datapump
์ด๋ํ ๋ฐ์ดํฐ์ ํ์ผ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
[oracle@601d2fce71dc ~]$ sqlplus / as sysdba
SYS@orcl> create directory pump_dir as '/opt/oracle/datapump';
Directory created.
Elapsed: 00:00:00.04
SYS@orcl> grant read, write on directory pump_dir to hr;
Grant succeeded.
๋๋ ํ ๋ฆฌ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ export ์์ ์ ํ ์ ์ ์๊ฒ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค.
[oracle@601d2fce71dc ~]$ expdp -help
help ๋ช ๋ น์ด๋ฅผ ํตํด์ expdp๊ฐ ์ฌ์ฉํ ์ ์๋ ์ต์ ์ ์ ๋ถ ํ์ธํ ์ ์์ต๋๋ค. ์ด๋ฒ ์ค์ต์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๋ ์ต์ ๋ช๊ฐ์ง๋ฅผ ํ์ฉํด์ ํ ์ด๋ธ๊ณผ ์คํค๋ง๋ฅผ exportํ๋ ์ค์ต์ ํด๋ณด๊ฒ ์ต๋๋ค.
table export
[oracle@601d2fce71dc ~]$ expdp hr/hr dumpfile=hr.dmp directory=pump_dir tables=employees,departments
๊ฐ์ฅ ๊ธฐ๋ณธ์ด๋๋ export ๋ฐฉ๋ฒ์ ๋๋ค.
SYS@orcl>
select
username
,default_tablespace
,temporary_tablespace
from dba_users
where username = 'HR';
import ์์ ์ tablespace์ ๋ช ์นญ์ด ๋ค๋ฅด๋ฉด remap ์์ ์ด ํ์ํ์ฌ ๋ฏธ๋ฆฌ ํ์ธํ๊ฒ ์ต๋๋ค.
schema export
[oracle@601d2fce71dc ~]$ expdp system/oracle dumpfile=scott.dmp directory=pump_dir schemas=scott
์คํค๋ง export๋ system ๊ณ์ ์ผ๋ก ์งํํ์ต๋๋ค. ์ฐธ์กฐ๊ณ expdp์ impdp์ ๋ง์คํฐ ๊ณ์ ์ sys๊ฐ ์๋ system์ ๋๋ค. export ์์ ์ ์ฌ์ฉํ๋ ์ต์ ๋ ๊ทธ๋ ๊ฒ ๋ง์ง ์๊ณ ํฌ๊ฒ ๋ฌธ์ ๊ฐ ๋๋ ์ผ์ ์์ ๊ฒ๋๋ค.
import ์์ ์ ํ ์ด๋ธ ํน์ ํ ์ด๋ธ์คํ์ด์ค์ ์ด๋ฆ์ด ๋ค๋ฅด๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. remap ์์ ์ ์ํด ๋ฏธ๋ฆฌ orcl ๋ฐ์ดํฐ๋ฒ ์ด์ค์ scott ์คํค๋ง์ ๋ํ ์ ๋ณด๋ค์ ํ์ธํ๊ฒ ์ต๋๋ค.
SYS@orcl>
select
username
,default_tablespace
,temporary_tablespace
from dba_users
where username = 'SCOTT';
SYS@orcl> select table_name from dba_tables where owner = 'SCOTT';
Import impdp ์ค์ต
Import ์์ ์ ๊ธฐ์กด์ ๋ง๋ newdb ์์ ์์ ํ๊ฒ ์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ dbca๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก ๋ง๋ค๊ฑฐ๋ ์ปค๋งจ๋๋ก ์๋์ผ๋ก ์์ฑํ๋ ์์ ์ ์งํํ๋ฉด ๋ฉ๋๋ค. ์๋ ์์ฑ์์ ์ ์๋ ๋งํฌ ์ฐธ์กฐ.
[oracle@601d2fce71dc ~]$ . oraenv
ORACLE_SID = [orcl] ? newdb
The Oracle base for ORACLE_HOME=/opt/oracle/app/product/11.2.0/dbhome_1 is /opt/oracle/app
[oracle@601d2fce71dc ~]$ sqlplus / as sysdba
ํ๊ฒฝ๋ณ์ ๋ณ๊ฒฝ ์์ ๊ณผ sys ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ๊ฒ ์ต๋๋ค.
SYS@newdb> select username from dba_users;
์๋์ผ๋ก ์์ฑํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ผ ์คํค๋ง๊ฐ ๊ฑฐ์ ์์ต๋๋ค. ๊ทธ๋ผ exportํ๋ scott schema๋ถํฐ import ์์ ์ ํด๋ณด๊ฒ ์ต๋๋ค.
SYS@newdb> create directory pump_dir as '/opt/oracle/datapump';
newdb ์ชฝ์์๋ ๋๋ ํ ๋ฆฌ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํด์ค๋๋ค.
impdp ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ ๋ expdp์๋ ๋ฌ๋ฆฌ ์์ฃผ ์ฌ์ฉํ๊ฒ๋๋ remap ์ต์ ์ด ์์ต๋๋ค. export ํ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก import๋ฅผ ํ๊ธฐ ๋๋ฌธ์ tablespace๋ schema์ ๋ช ์นญ์ด ๋ค๋ฅผ ๋ remap ์์ ์ ๊ผญ ํด์ค์ผํฉ๋๋ค.
schema import
SYS@newdb> select tablespace_name, contents from dba_tablespaces;
Schema import ์์ ์ export ํ์๋์ ์ ๋ณด๋ค๊ณผ ๋ช ์นญ์ด ๋ค๋ฅด๋ฉด remap ์์ ์ ํด์ค์ผํฉ๋๋ค. scott ๊ณ์ ์ import ํ๊ธฐ์ํด์ default tablespace์ default temporary tablespace์ ๋ช ์นญ์ ๋ง์ถฐ์ค์ผํ๋ ๋ฏธ๋ฆฌ ํ์ธํด๋ดค์ต๋๋ค. ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ tablespace๋ ๋ง๋ค์ด์ฃผ๊ฒ ์ต๋๋ค.
SYS@newdb> create tablespace dump datafile '/opt/oracle/app/oradata/newdb/dump01.dbf' size 200m;
์คํค๋ง์ ๊ธฐ๋ณธ ํ ์ด๋ธ์คํ์ด์ค๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์คฌ์ต๋๋ค. ์ด์ import ์์ ์ ์งํํด๋ณด๊ฒ ์ต๋๋ค.
[oracle@601d2fce71dc ~]$ impdp system/oracle dumpfile=scott.dmp directory=pump_dir remap_tablespace=users:dump
์คํค๋ง๋ฅผ importํ๋ ์์ ์ผ๋ก system ๊ณ์ ์ผ๋ก ์ ์ํด์ ์์ ํ์ต๋๋ค. ๊ธฐ๋ณธ ์ต์ ์ผ๋ก directory์ dumpfile์ exportํ ํ์ผ์ ์ ๋ณด๋ก ์ค์ ํ๊ณ default temporay tablespace์ ๋ช ์นญ์ ๊ฐ์ ๊ทธ๋๋ก ์งํํ๊ณ default tablespace์ ์ ๋ณด๊ฐ ๋ฌ๋ผ remap ์์ ์ ํด์คฌ์ต๋๋ค.
SYS@newdb> alter user scott identified by tiger account unlock;
User altered.
Elapsed: 00:00:00.01
SYS@newdb> conn scott/tiger
Connected.
์คํค๋ง๊ฐ unlock๋์ด ์๋ ์ํ์์ export ํ์ต๋๋ค. account unlockํ๊ณ ์ ์ํด๋ณด๊ฒ ์ต๋๋ค.
SCOTT@newdb> select table_name from tabs;
TABLE_NAME
------------------------------
SALGRADE
BONUS
EMP
DEPT
Elapsed: 00:00:01.36
SCOTT@newdb> select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
์ด์์์ด ๋ฐ์ดํฐ๊ฐ ์ด๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
table import
[oracle@601d2fce71dc ~]$ impdp system/oracle dumpfile=hr.dmp directory=pump_dir remap_schema=hr:scott remap_tablespace=examples:dump
ํ ์ด๋ธ๋ง importํ๊ฒ ๋๋ฉด ํด๋น ํ ์ด๋ธ์ ๋ํ ๊ถํ์ ์๋ ์ ์ ์๊ฒ ๋ถ์ฌํ๊ฑฐ๋ ์๋ ํ ์ด๋ธ๊ณผ์ ์ ์ฝ์กฐ๊ฑด ๋ฑ๋ฑ์ ์ด์ ๋ก ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ ๋ชจ๋ ๋ค์ด๊ฐ๋๋ผ๋ ๋ค๋ฅธ ์ค๋ธ์ ํธ์์ ๊ด๊ณ์ ์ํ ์ค๋ฅ๋ ์ํฉ์ ๋ง๊ฒ ๋ก๊ทธํ์ธํ๋ฉด์ ํด๊ฒฐํด์ฃผ๋ฉด ๋ฉ๋๋ค.
SCOTT@newdb> select table_name from tabs;
ํ ์ด๋ธ์ด ๋ชจ๋ import๋์ด ๋ค์ด๊ฐ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๋๊ธ