Export/Import를 이용하여 Data를 옮기거나 Space를 정리할 때 Table과 Index를 각각 다른 Tablespace에 분리하여 저장하기도 한다. 이러한 방법은 Oracle의 속도를 향상시키는 데 많은 도움을 준다.
Import할 때 Table과 Index를 생성시켰던 Script를 가지고 있 면 편리하게 이 작업을 할 수 있다.
먼저 Import할 때 Indexes=N option을 사용하여 Index를 제외한 나머지 Object를 Import하고, Index는 Script에서 Tablespace를 지정한 후 SQL file을 실행시켜서 생성하면 된다. 그러나 Index Script를 가지고 있지 않을 때는 문 가 복잡해진다.
그러한 경우에 Import Option중에서 Indexfile Option을 사용하여 Index script를 만들어 낼 수가 있다. 이 방법은 Indexfile만 만들기 때문에 속도가 빠르고, Index 뿐만이 아니라 Table Script도 만들어 지기 때문에 결과적으로 Table Script도 활용할 수 있다. 다음과 같이 만들 수 있다.
다음 작업은 Scott User의 모든 Data를 Test User로 옮기기 위해서 Export/Import를 이용하려고 한다. Import시에 Table과 Index는 Tablespace를 다르게하여 저장한다.
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 Option을 이용하여 Index Script를 만든다.
$ imp system/manager file=scott.dmp indexfile=index.sql
위와 같이 명령을 실행하면 실제로 Data는 Import되지 않고, index.sql이라는 File만 만들어진다. 그리고 화일을 VI 등으로 열어서 확인해 보면 create table 문장과 create index문장이 있고 Create Table 문장은 REM으로 막혀 있어서 결과적으로 Create Index문만 실행할 수 있도록 되어 있다.
이 화일에서 Create Index문의 Tablespace만 바꾸어서 다음과 같이 SQL*Plus에서 실행시킨다.
$ sqlplus test/test
SQL> @index
이렇게 하여 Table과 Index를 다른 Tablespace로 분리하여 저장할 수 있다.
이 Indexfile option은 Index만이 아니라 Table 생성문장이 필요할 때도 유용하게 사용하여 활용할 수 있다.