Import 방법


Import Option

Import 를 수행하기 위해서는 반드시 export 한 dump file 이 존재해야 하며, export 할 당시의 option 에 따라 import 가 제약을 가진 다. 즉, table 만 export 받은 dump file 로는 table 만 import 할 수 있지 index 나 constraints 는 import 할 수 없다.


Import 를 수행할 때에 자주 사용되는 option 은 다음과 같다.


$imp userid=user/passwd


* file : export 받은 dump file 을 지정

* log : import 받을 때 log file 을 지정하여 import 의 수행결과 확인

* indexfile : data 를 import 하지 않고 create index 문장의 sql 을 저장한 file생성

* rows : data 를 import 할 것인지의 여부를 선택. Default 는 y

* indexes : index 를 import 할 것인지의 여부를 선택. Default 는 y

* fromuser : 다른 user 에게 export file 을 import 하고자 할 때, export 한 user를 지정

* touser : import 할 user 를 지정

* buffer : import 할 때 한번에 import 되는 row 의 최대 수를 지정

* commit : import 시에 table 별로 commit 을 할 것인가 (value n), row ( buffer )별로 commit 할 것인가를 지정 (value y). Default n

* full : full export 한 file 에 대하여 DBA 권한이 있는 user 로 database 전체를 import 할 때 사용. Default y

* feedback : import 시에 얼마만큼의 data 가 import 되었는지를 보여준다.

지정된 수자만큼 data 가 import 되면, ‘.’ 이 display 된다.




Import Process Sequence

1. Create table ... 명령이 실행되어서 new table 이 생성된다. constraints 가 작성된다.

2. Create index ... 명령이 실행된다.

3. Data 가 import 되고 index 가 update 된다.

4. Trigger 가 import 되고, integrity constraints 가 enable 된다.




효율적인 import 방법

System의 downtime 을 줄이기 위해 먼저 data 를 import 를 하여서, database 를 사용자에게 먼저 open 한 후에 index 를 creation 한다. 이렇게 하면 실제 database를 사용자에게 open 후에 application 이 full table scan 을 하여서 성능이 저하되기는 하지만, 빠른 시간내에 database 를 open 할 수 있다는 장점이 있다.


< 1 단계 >

전체 database 를 export 한다.

$ exp system/manager file=fullexp0220.dmp log=fullexp0220.log full=y


< 2 단계 >

data 만을 import 한다.

$ imp system/manager file=fullexp0220.dmp log=fullimp0220.log full=y indexes=n


< 3 단계 >

import option 중에 indexfile 을 사용하여 index 를 생성하는 script 를 생성한다.

$ imp system/manager file=fullexp0200.dmp indexfile=index.sql full=y


< 4 단계 >

<2 단계>, <3 단계> 가 성공적으로 수행되고 나면, database 를 사용자에게 open한다.


< 5 단계 >

<3 단계> 에서 생성된 index creation script 인 index.sql 를 sqlplus 에서 돌려준다.

SQL> @index







'DBMS > 오라클기타' 카테고리의 다른 글

오라클데이터베이스 구조  (0) 2013.05.20
오라클 EXPORT  (0) 2013.05.17
Cluster  (0) 2013.05.12
SubQuery  (0) 2013.05.12
view  (0) 2013.05.12

- 튜닝의 가장 큰 적은 Disk I/O

- Disk I/O를 줄이기 위해 Partition Table이 나오고,  스캔방식의 경우에는 다량의 데이터 범위에서 성능저하가 발생하므로 연산에 의한 데이터 검색 Bitmap 인덱스, 연산에 의한 Join방식인 Hash Join이 나옴.


- Cluster는 Cluster Key로 지정한 값을 기준으로 데이터를 그룹화 해놓은것.

Cluster Key로 지정된 컬럼은 단 하나의 값만 저장.


- 인덱스나 테이블과 같은 별도의 저장공간을 가지는 object.

- 테이블에 데이터를 저장하거나 인덱스를 생성하면 테이블스페이스내에 Random하게 저장된다. 찾고자 하는 데이터가 일정지역에 모여있을수도 있고, 흩어져 있을수도 있다. Disk를 여러번 스캔할수 있으므로, 작업량 증가.

DBA는 일년에 한두번  테이블 Reorganization작업을 한다.

- Cluster를 만들고 테이블을 만들면 Cluster Key가 중심이 되어 데이터를 그룹화 저장. 스캔의 부하 발생하지 않고, 저장공간 절약.

'DBMS > 오라클기타' 카테고리의 다른 글

오라클 EXPORT  (0) 2013.05.17
오라클 IMPORT  (0) 2013.05.17
SubQuery  (0) 2013.05.12
view  (0) 2013.05.12
Nested Loop Join  (0) 2013.05.05
  • Main에 종속되는 하위Query. 집합과 집합간의 연결을 통해 데이터를 추출하는 기법
  • Join의 경우는 Join되는 집합의 데이터를 추출에 사용할수 있는 반면, Sub Query는 Main Query의 결과를 추출하기 위한 상수조건 또는 체크조건으로 참여하게 된다.
  • 주종의 관계 : Sub Query가 종으로 먼저 수행된 후 Main Query의 결과를 줄여주는 역할로 참여
                       Main Query는 Sub Query의 존재와 관계없이 독자실행 가능하며, 단지 Sub Query는 범위를 줄여주는 역할.
  • 동일한 조건의 체크관계: 주종관계가 아닌 Main과 Sub가 동일한 레벨의 상태.
                       Main Query만으로 안되며, Sub Query 도 독립적 결과 를 추출할수 없다.




1. 주종관계를 가지는 Sub Query 

; Sub Query가 먼저 실행.

- 먼저 수행된다 는 것은 Sub Query가 먼저 수행되어 Main Query의 결과 추출에 참가한다는 것. 

 Main Query에 Sub Query의 조건이 상수가 되어 in 또는 = 조건으로 제공한다는 것.


Sub Query의 결과가 여러건이거나 여러건 중복이 되어 나오더라도 Sub Query의 결과를 정렬하여 Main Query 에 제공한다.
  Sub Query는 Main Query에 상수로 데이터를 제공하기 전에 데이터가 여러건이라면 Sort Unique 작업 후 제공한다.


ex>

SELECT a.code, a.name, a.deptno

   FROM tab1 a

  WHERE a.code IN ( SELECT code

                                 FROM tab2

                               WHERE gcode = '20'

                            )

; Sub Query로 범위를 줄임.

; Main Query의 상수로 데이터 제공.




2. 주종관계를 갖지 않는 Sub Query

; Main Query가 먼저 수행된 후 수행됨.


ex> 

SELECT a.code, a.name, a.deptno

   FROM tab1 a

  WHERE a.code IN ( SELECT code

                                 FROM tab2

                                WHERE deptno = a.deptno

                                    AND gcode = '20' )


; a의 deptno를 사용.

; Main Query 수행 --> Sub Query 수행 --> Main Query 수행.




3. 주종관계로 수행하는 조건

1) Sub Query 에 Main Query의 컬럼이 조건에 나오면 안됨.


2) Sub Query의 결과를 제공받는 Main Query 의 조건에 인덱스가 존재해야 한다.

   없다면 Nested loop join의 연결고리 이상으로 Full Table Scan 후 Sub Query와 연결하여 데이터를 추출할게 된다.



3) Exists를 이용한 Sub Query로의 전환

ex>

SELECT a.code, a.name, a.deptno

   FROM tab1 a

  WHERE a.code IN ( SELECT code

                                 FROM tab2

                               WHERE deptno = a.deptno

                                   AND gcode = '20'

                            )

-->


SELECT a.code, a.name, a.deptno

   FROM tab1 a

  WHERE Exists       ( SELECT code

                                 FROM tab2

                               WHERE deptno = a.deptno

                                   AND gcode = '20'

                            )



4) Not In의 성능개선


SELECT a.code, a.name

   FROM tab1 a

  WHERE a.code Not IN ( SELECT code

                                      FROM tab2

                                   WHERE gcode = a.code )

-->

SELECT a.code, a.name

   FROM tab1 a

  WHERE a.code IS NOT NULL

      AND a.code Not IN ( SELECT /*+ MERGE_AJ */

                                               deptno

                                      FROM tab2

                                   WHERE gcode = a.code 

                                        AND deptno IS NOT NULL )


; Not In을 사용하는 경우Hint를 이용하여 성능개선

; Oracle Optimizer Hint 중 /*+ MERGE_AJ */ /*+ HASH_AJ */

; 교집합의 데이터를 추출하는 것이 아니라 양쪽집합의 차집합을 추출하는 것. 

각각을 수행하여 병합에 실패한 데이터만 추출하는 Merge Anti Join이나 동시에 각각의 데이터를 추출하여 Hash Join의 실패한 데이터만 추출하는 Hash Anti Join

; 각 집합의 조건에 참여하는 부분이 Not Null이어야 한다.

; 조건에 Is Not Null이 반드시 있어야 한다.(필수)






'DBMS > 오라클기타' 카테고리의 다른 글

오라클 IMPORT  (0) 2013.05.17
Cluster  (0) 2013.05.12
view  (0) 2013.05.12
Nested Loop Join  (0) 2013.05.05
전체 범위 처리 & 부분 범위 처리  (0) 2013.05.05


  • view는 모든dbms에서 지원하는 object.
  • 특정한 저장공간을 가지지 않는다. 
  • 테이블이나 인덱스는 지정된 테이블 스페이스내에서 저장공간을 할당받아 증가되나 view는 sql문장만 데이터 dictionary상에 저장되어 호출시 sql문장을 실행하여 결과를 리턴한다.
  • Oracle8부터 view에 대한 제한적이나마 직접 DML 작업가능.
  • 보안관리, 사용상 편의, 수행속도 향상 목적


Oracle optimizer는 SQL문장의 FROM절에 기술된 테이블이나 VIEW내의 원격지의 데이터를 읽어오는 조건이 있는 것을 확인하고 원격지의 데이터를 먼저 읽어올려고 한다.








- 순차적으로 데이터를 추출하는 방식

- 1개이상의 테이블이 join에 참여할 경우 일정한 순서에 의해서 데이터를 추출하는 것

절차형 프로그램을 하듯이 특정 테이블, 특정 집합을 먼저 수행되고 수행된 결과를 가지고 다음 루틴이 수행되는 방식.

Table1이 선행 --> Table2와 Table3이 순차적으로 처리. 

Table1이 Driving 테이블이 됨.

- Driving테이블 : 다른 집합과 join이 이루어 지기 전 가장 먼저 수행되는 집합.



주의 사항 ]

- Driving 테이블 선정. 

  "처음 실행되는 조건"


- Driving되는 테이블의 처리 범위와 각 집합이 연결되는 고리 상태.

( 연결고리 이상 : 한쪽에 인덱스가 없는 경우. )

연결고리 이상이 발생하면 해당 테이블의 전체데이터를 각 건별로 Random Access Full Table Scan 하게 된다.



- 세개 이상의 테이블에서는 join성공률이 낮은 집합의 join이 먼저 일어나는 것이 유리함.


    join성공률 : join작업이 수행된 후 join조건을 만족하는 총row 수(성공된 Row)

 




+ Recent posts