export/import를 이용하여 데이터를 옮기거나 space를 정리할 때 table index를 각각 다른 테이블스페이스에 분리하여 저장하기도 한다. 이러한 방법은 Oracle의 속도를 향상시키는 데 많은 도움을 준다.

 

import할 때 table index를 생성시켰던 script를 가지고 있으면 편리하게 이 작업을 할 수 있다. 먼저 import할 때 indexes=N 옵션을 사용하여 Index를 제외한 나머지 object들을 import하고, index script에서 테이블스페이스를 지정한 후 SQL file을 실행시켜서 생성하면 된다.

index 생성 script를 가지고 있지 않을 때는
import 옵션중에서 indexfile 옵션을 사용하여 index script를 만들어 낼 수가 있다. 이 방법은 indexfile만 만들기 때문에 속도가 빠르고, Index 뿐만이 아니라 table script도 만들어 지기 때문에 결과적으로 table script도 활용할 수 있다. 다음과 같이 만들 수 있다.

 

다음 작업은 scott user의 모든 데이터 test user로 옮기기 위해서 export/import를 이용하는 작업이다. import시에 table index 테이블스페이스를 다르게 하여 저장한다.

 

 

 

1. 다음과 같이 scott user export 받는다.

 

    $ exp  scott/tiger  file=scott.dmp

 

 

2. export받은 file에서 index를 제외한 나머지만 import한다.

 

    $ imp  system/manager  file=scott.dmp  fromuser=scott  touser=test  indexes=n  commit=y

 

    위와 같이 실행하면 test user에는 index를 제외한 나머지 object import된다.

 

 

3. 그리고 다음과 같이 indexfile 옵션을 이용하여 index script를 만든다.

 

    $ imp  system/manager  file=scott.dmp  indexfile=index.sql

 

 

 

위와 같이 명령을 실행하면 실제로 데이터 import되지 않고 index.sql이라는 파일만 만들어진다. 그리고 파일을 vi 등으로 열어서 확인해보면 create table 문장과 create index 문장이 있고 create table 문장은 REM으로 막혀 있어서 결과적으로 create index문만 실행할 수 있도록 되어있다.

이 화일에서 create index문의 테이블스페이스만 바꾸어서 다음과 같이 SQL*Plus에서 실행시킨다.

 

$  sqlplus test/test

SQL>  @index

 

이렇게 하여 table index를 다른 테이블스페이스로 분리하여 저장할 수 있다.

indexfile 옵션 index만이 아니라 table 생성문장이 필요할 때도 유용하게 사용하여 활용할 수 있다.




Posted by 하이안
,