이 페이지의 이전 버전을 보고 있습니다. 현재 버전 보기.

현재와 비교 페이지 이력 보기

버전 1 현재 »

데이터 펌프는 10g R1에서 추가된 기능으로, 기존의 EXP, IMP 유틸리티의 강화판이라 생각하면 편할 것이다. 기존 EXP, IMP 유틸리티가 제공해주던 기능을 모두 포함하고 있을 뿐더러 동작 속도 또한 훨씬 빠르며, REMAP_SCHEMA와 같은 유용한 옵션들도 추가로 지원된다. 또한 데이터 펌프 파일 자체를 External Table로 활용하는 것도 가능하게 되었다.

데이터 펌프 파일은 일반 덤프 파일과 달리 저장되는 구조자체가 변경되었다. 일반 덤프 파일을 strings툴로 열어보면 아래와 같이 나타날 것이다.

[oracle@localhost expdp]$ strings exp.dmp 
iEXPORT:V10.02.01
DSYSTEM
RTABLES
8192
Wed Feb 1 17:55:55 2012./exp.dmp
#G#G
#G#G
+09:00
BYTE
UNUSED
INTERPRETED
DISABLE:ALL
METRICST
TABLE "MINHANG_IMSI"
CREATE TABLE "MINHANG_IMSI" ("A" NUMBER(1, 0)) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 327680 NEXT 1048576 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "SYSTEM" LOGGING NOCOMPRESS
INSERT INTO "MINHANG_IMSI" ("A") VALUES (:1)
...
...
...

 

CREATE TABLE로 시작하는 테이블 생성 구문이 그대로 덤프파일 안에 저장되어 있음이 확인 가능하다.

하지만 데이터 펌프 파일의 경우 아래와 같이 약간 다른 형태를 띄고 있다.

[oracle@localhost expdp]$ strings exter.dmp
"SYSTEM"."SYS_EXPORT_TABLE_01"
x86_64/Linux 2.4.xx
AL32UTF8
LBB EMB GHC JWD SD EBE WMF DDG JG SJH SRH JGK CL EGM BJM RAP RLP RP KR PAR MS MRS JLS CET HLT
10.02.00.05.00
i<?xml version="1.0"?><ROWSET><ROW>
<STRMTABLE_T><VERS_MAJOR>1</VERS_MAJOR><VERS_MINOR>0 </VERS_MINOR><VERS_DPAPI>3</VERS_DPAPI><ENDIANNESS>2</ENDIANNESS><CHARSET>AL32UTF8</CHARSET><NCHARSET>AL16UTF16</NCHARSET><DBTIMEZONE>+09:00</DBTIMEZONE><FDO>0000006001240F050B0C030C0C0504050D0609070805050505050F05050505050A050505050504050607080823472347081123081141B0470083036907D00300000000000000000000000000000000000000000000000000000000000000000000000000</FDO><OBJ_NUM>58667</OBJ_NUM><OWNER_NAME>SYSTEM</OWNER_NAME><NAME>MINHANG_IMSI</NAME><PROPERTY>536870912</PROPERTY><COL_LIST><COL_LIST_ITEM><OBJ_NUM>58667</OBJ_NUM><COL_NUM>1</COL_NUM><INTCOL_NUM>1</INTCOL_NUM><SEGCOL_NUM>1</SEGCOL_NUM><PROPERTY>0</PROPERTY><NAME>A</NAME><TYPE_NUM>2</TYPE_NUM><LENGTH>22</LENGTH><PRECISION_NUM>1</PRECISION_NUM><SCALE>0</SCALE><NOT_NULL>0</NOT_NULL><CHARSETID>0</CHARSETID><CHARSETFORM>0</CHARSETFORM><CHARLENGTH>0</CHARLENGTH></COL_LIST_ITEM></COL_LIST></STRMTABLE_T>
</ROW></ROWSET>
i<?xml version="1.0"?><ROWSET><ROW>
<STRMTABLE_T><VERS_MAJOR>1</VERS_MAJOR><VERS_MINOR>0 </VERS_MINOR><VERS_DPAPI>3</VERS_DPAPI><ENDIANNESS>2</ENDIANNESS><CHARSET>AL32UTF8</CHARSET><NCHARSET>AL16UTF16</NCHARSET><DBTIMEZONE>+09:00</DBTIMEZONE><FDO>0000006001240F050B0C030C0C0504050D0609070805050505050F05050505050A050505050504050607080823472347081123081141B0470083036907D00300000000000000000000000000000000000000000000000000000000000000000000000000</FDO><OBJ_NUM>58668</OBJ_NUM><OWNER_NAME>SYSTEM</OWNER_NAME><NAME>SYS_EXPORT_TABLE_01</NAME>
...
...
...

 


위에서 확인하실 수 잇는 것 처럼 XML 구조로 되어 있다. REMAP_DATAFILE, REMAP_SCHEMA, REMAP_TABLESPACE와 같은 추가 기능이 제공될 수 있었던 것 또한 이러한 구조상의 변경이 있었기 때문인 것이다. 식별 태그가 군데군데 들어있는 덕분에, impdp 유틸리티가 내부적으로 <OWNER_NAME>SYSTEM</OWNER_NAME>과 같은 부분들을 <OWNER_NAME>MINHANG</OWNER_NAME>이라는 식으로 쉽게 변경하여 사용이 가능한 것이다.


다음은 데이터 펌프 파일을 External Table로 사용하는 예제를 살펴보겠다. (이번 챕터는 데이터 펌프 기능을 설명하는 챕터가 아니고 파일을 설명하는 챕터이다. 따라서 상세한 사용법이 없이 간단한 소개만 할 것이다. 이 내용들은 15챕터에 다시 나올 것이다.)

[oracle@localhost ~]$ mkdir imsi
[oracle@localhost ~]$ sqlplus / AS sysdba
SQL*Plus: RELEASE 10.2.0.5.0 - Production ON Thu Feb 2 10:51:46 2012
Copyright (c) 1982, 2010, Oracle. ALL Rights Reserved.

Connected TO:
Oracle DATABASE 10g Enterprise Edition RELEASE 10.2.0.5.0 - 64bit Production
WITH the Partitioning, Data Mining AND REAL Application Testing options
sys@CATDB> CREATE DIRECTORY imsi AS '/home/oracle/imsi';
DIRECTORY created.

 

데이터 펌프 기능을 사용하기 위해서는 디렉토리 객체를 생성해주어야 한다. 디렉토리 객체란 OS상의 특정 디렉토리를 DB상에 연결지어주는 객체이다. 데이터 펌프를 사용할 때에 디렉토리를 명시해 주어야 하며, 펌프가 생성하는 파일은 해당 디렉토리에 생성되게 된다. 디렉토리 객체를 생성해주기 위해서 실제 OS상에서 imsi라는 디렉토리를 만들어 주었고, 오라클에 접속하여 해당 디렉토리에 연결되는 imsi라는 디렉토리 객체를 생성해주었다.

sys@CATDB> CREATE TABLE pumptest_imsi
2 ORGANIZATION external
3 (TYPE oracle_datapump
4 DEFAULT DIRECTORY imsi
5 location('imsi.dmp') 
6 )
7 AS SELECT * FROM all_objects;
TABLE created.
-- 이와 같이 간단한 형태의 CTAS(Create Table ~ As Select ~) 구문을 입력한 것으로 External table이 생성된다. 펌프의 도입은 External table 기능에 대해서도 혁신이라 할 수 있다.
sys@CATDB> !ls -l /home/oracle/imsi
합계 4392
-rw-r--r-- 1 oracle dba 49 2월 2 10:53 PUMPTEST_IMSI_5745.log
-rw-r----- 1 oracle dba 4481024 2월 2 10:53 imsi.dmp
-- 위와 같이 External table이 사용할 외부 파일이 생성되었음을 확인 가능하다. 해당 파일은 데이터 펌프 형식의 파일이다.
sys@CATDB> !strings /home/oracle/imsi/imsi.dmp | head
x86_64/Linux 2.4.xx
AL32UTF8
LBB EMB GHC JWD SD EBE WMF DDG JG SJH SRH JGK CL EGM BJM RAP RLP RP KR PAR MS MRS JLS CET HLT
10.02.00.05.00
i<?xml version="1.0"?>
<ROWSET>
<ROW>
<STRMTABLE_T>
<VERS_MAJOR>1</VERS_MAJOR>
<VERS_MINOR>0 </VERS_MINOR>
-- 따라서 strings 명령으로 열어보면 이와 같은 내용이 확인 가능하다.
sys@CATDB> SELECT COUNT(*) FROM all_objects;
COUNT(*)
----------
45585
sys@CATDB> SELECT COUNT(*) FROM pumptest_imsi;
COUNT(*)
----------
45585
-- 데이터 또한 원본과 동일하게 들어가있다.
sys@CATDB> EXIT
Disconnected FROM Oracle DATABASE 10g Enterprise Edition RELEASE 10.2.0.5.0 - 64bit Production
WITH the Partitioning, Data Mining AND REAL Application Testing options
[oracle@localhost ~]$ cd /home/oracle/imsi
[oracle@localhost imsi]$ scp imsi.dmp oracle@192.168.0.210:~/
The authenticity OF host '192.168.0.210 (192.168.0.210)' can't be established.
RSA key fingerprint is 85:19:49:f7:b9:32:eb:a7:ee:9f:92:29:90:01:97:ff.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.210' (RSA) to the list of known hosts.
oracle@192.168.0.210's password: 
imsi.dmp 100% 4376KB 4.3MB/s 00:00
-- 이제 다른 서버에서도 이 파일을 그대로 이용하여 External table 연결이 가능한지 확인해보기 위해, DB접속을 끊고 해당 데이터 펌프 파일을 다른 서버에 복사해주었다. 참고로 펌프 파일을 생성한 오라클 서버의 버전은 10.2.0.5였고, 파일을 넘겨 받은쪽의 오라클 서버 버전은 11.2.0.2 버전이다.
[oracle@rac1 ~]$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:87:6B:D9 
inet addr:192.168.0.210 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe87:6bd9/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:151011 errors:0 dropped:0 overruns:0 frame:0
TX packets:84100 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000 
RX bytes:21433599 (20.4 MiB) TX bytes:8651708 (8.2 MiB)
eth1 Link encap:Ethernet HWaddr 00:0C:29:87:6B:E3 
inet addr:10.10.1.210 Bcast:10.10.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe87:6be3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:37133955 errors:0 dropped:0 overruns:0 frame:0
TX packets:40453291 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000 
RX bytes:43861323031 (40.8 GiB) TX bytes:20634811560 (19.2 GiB)
eth2 Link encap:Ethernet HWaddr 00:0C:29:87:6B:ED 
inet addr:10.10.2.210 Bcast:10.10.2.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe87:6bed/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6094 errors:0 dropped:0 overruns:0 frame:0
TX packets:13626 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000 
RX bytes:1011453 (987.7 KiB) TX bytes:5258742 (5.0 MiB)
eth2:1 Link encap:Ethernet HWaddr 00:0C:29:87:6B:ED 
inet addr:10.10.2.200 Bcast:10.10.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth2:3 Link encap:Ethernet HWaddr 00:0C:29:87:6B:ED 
inet addr:10.10.2.100 Bcast:10.10.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth3 Link encap:Ethernet HWaddr 00:0C:29:87:6B:F7 
inet addr:10.10.3.210 Bcast:10.10.3.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe87:6bf7/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:33947312 errors:0 dropped:0 overruns:0 frame:0
TX packets:27646272 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000 
RX bytes:17395510253 (16.2 GiB) TX bytes:9001557481 (8.3 GiB)
eth3:1 Link encap:Ethernet HWaddr 00:0C:29:87:6B:F7 
inet addr:169.254.108.237 Bcast:169.254.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback 
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:4872260 errors:0 dropped:0 overruns:0 frame:0
TX packets:4872260 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:8920204682 (8.3 GiB) TX bytes:8920204682 (8.3 GiB)
[oracle@rac1 ~]$ ls -l imsi.dmp
-rw-r----- 1 oracle oinstall 4481024 Feb 2 10:55 imsi.dmp

위에서 scp를 통해 파일을 복사해 넣은 192.168.0.210서버이다. 파일이 잘 복사되었음을 확인할 수 있다.

[oracle@rac1 ~]$ sqlplus / AS sysdba
SQL*Plus: RELEASE 11.2.0.2.0 Production ON Thu Feb 2 10:56:20 2012
Copyright (c) 1982, 2010, Oracle. ALL rights reserved.

Connected TO:
Oracle DATABASE 11g Enterprise Edition RELEASE 11.2.0.2.0 - 64bit Production
WITH the Partitioning, REAL Application Clusters, Automatic Storage Management, OLAP,
Data Mining AND REAL Application Testing options
-- 보시다싶이 더 상위 버전의 오라클 서버에 접속하였다.
SQL> CREATE DIRECTORY imsi AS '/home/oracle/';
DIRECTORY created.
-- 앞에서와 마찬가지로 디렉토리 객체를 먼저 생성해주었다.
SQL> CREATE TABLE ext_pump_test
2 (
3 OWNER VARCHAR2(30),
4 OBJECT_NAME VARCHAR2(30),
5 SUBOBJECT_NAME VARCHAR2(30),
6 OBJECT_ID NUMBER,
7 DATA_OBJECT_ID NUMBER,
8 OBJECT_TYPE VARCHAR2(19),
9 CREATED DATE,
10 LAST_DDL_TIME DATE,
11 TIMESTAMP VARCHAR2(19),
12 STATUS VARCHAR2(7),
13 TEMPORARY VARCHAR2(1),
14 GENERATED VARCHAR2(1),
15 SECONDARY VARCHAR2(1)
16 )
17 ORGANIZATION external
18 (
19 TYPE oracle_datapump
20 DEFAULT DIRECTORY imsi
21 location ('imsi.dmp')
22 );
TABLE created.
-- 그리고 방금 복사받은 파일을 이용하여 external table을 생성해주었다.
SQL> SELECT COUNT(*) FROM ext_pump_test;
COUNT(*)
----------
45585
SQL> SELECT * FROM ext_pump_test WHERE ROWNUM < 10;
OWNER OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP STATUS T G S
------------------------------ ------------------------------ ------------------------------ ---------- -------------- ------------------- ------------------ ------------------ ------------------- ------- - - -
SYS ICOL$ 20 2 TABLE 28-SEP-11 28-SEP-11 2011-09-28:18:07:00 VALID N N N
SYS I_USER1 44 44 INDEX 28-SEP-11 28-SEP-11 2011-09-28:18:07:00 VALID N N N
SYS CON$ 28 28 TABLE 28-SEP-11 28-SEP-11 2011-09-28:18:07:00 VALID N N N
SYS UNDO$ 15 15 TABLE 28-SEP-11 28-SEP-11 2011-09-28:18:07:00 VALID N N N
SYS C_COBJ# 29 29 CLUSTER 28-SEP-11 28-SEP-11 2011-09-28:18:07:00 VALID N N N
SYS I_OBJ# 3 3 INDEX 28-SEP-11 28-SEP-11 2011-09-28:18:06:59 VALID N N N
SYS PROXY_ROLE_DATA$ 25 25 TABLE 28-SEP-11 28-SEP-11 2011-09-28:18:07:00 VALID N N N
SYS I_IND1 39 39 INDEX 28-SEP-11 28-SEP-11 2011-09-28:18:07:00 VALID N N N
SYS I_CDEF2 51 51 INDEX 28-SEP-11 28-SEP-11 2011-09-28:18:07:00 VALID N N N
9 ROWS selected.
-- 이와 같이 로우 카운트도 동일하며 셀렉트도 잘 되는 것을 확인하실 수 있다.

 

 

레이블 (0)

  • 레이블 없음

댓글  (0)

첨부 파일  (0)

첨부 파일 추가하기
공유된 파일이 아직 없습니다.