조회 수 25463 추천 수 0 댓글 0

No. 11000

EXPORT/IMPORT 를 이용하여 TABLE과 INDEX를 분리하는 방법
======================================================

테이블과 인덱스의 테이블스페이스를 분리하려고 하는 경우
PRIMARY KEY와 같이 CREATE INDEX로 생성된 것이 아니라, CREATE TABLE,
ALTER TABLE 등으로 생성된 CONSTRAINT는 IMPORT 시에 INDEXFILE 옵션을
주어서 분리할 수가 없다.  따라서 PRIMARY KEY, UNIQUE KEY 등의
CONSTRAINT 를 테이블과 분리하고자 하는 경우 IMPORT에서 제공하는
OPTION으로는 처리할 수가 없다.

이 문제는 다음과 같이 해결할 수 있다.

1. 우선 다음과 같이 해서 INDEX 생성 스크립트를 받는다.

imp userid/password file=expdat.dmp indexfile=indexes.sql


2. 위에서 생긴 indexes.sql을 열어보면 table을 생성하는 스크립트가
#으로 막힌 채 들어있는데 #을 푼 다음에 이 스크립트를 실행해서 테이블
을 만들어 줍니다. 단, index를 만드는 명령도 들어있으면 거기에서 원하
는 테이블 스페이스로 이름을 바꿔 준다음에 작업을 해야 한다.


3. 이제 primary key 등의 constraint를 생성하는 스크립트를 다음과
같이 해서 만든다.

strings expdat.dmp | grep "ALTER TABLE" > constraint.sql

이제 constraint.sql을 열어보면 ALTER TABLE 명령이 들어있는데, 여기서
PRIMARY KEY 등이 생성된다. 이 스크립트를 편집해서 돌려주면 primary key
등도 원하는 테이블스페이스에 생성할 수 있다.
--------------------------------------------------------------------
결국 primary key나 unique constraint에 의해 생성된 index는 다시 만들 수
밖에 없는데 이 다시 만드는 방법이 drop후 다시 create하는 것 외에
rebuild라는 것이 가능합니다.
index를 만드는 데는 sorting이 많은 시간을 차지하는데 rebuild를 사용하면
space는 다른 곳으로 옮기더라도 기존의 sorting된 data를 이용하기 때문에
sort하는데 걸리는 시간을 단축할 수가 있게 되는 것입니다.

rebuild하는 방법은 다음과 같습니다.

(1) index를 다른 tablespace로 옮기신 후에도 여전히 table과 같은
tablespace에 남아 있는 index를 찾습니다.
예를 들어 table은 users, index는 idxtbs에 들어간다고 가정하고

select index_name from user_indexes
where tablespace_name = 'USERS';

(2) 위에서 나온 각각의 index (예를 들어 dept_pk) 에 대해서 다음과
같이 작업하십시오.

alter index dept_pk rebuild tablespace idxtbs storage(initial 30m next 5m pctincrease 0);

여기에서 storage 안의 절은 원하시는 크기를 사용하시면 됩니다.
지정하지 않으시면 기존의 storage가 그대로 적용되므로 storage는
변경하고 싶지 않으시면 storage절을 빼시기 바랍니다.

 

No. 10338

IMPORT 시 TABLE과 INDEX를 분리하여 저장하는 방법
================================================


Purpose
-------

   I/O의 분산을 위해 Table과 Index를 다른 tablespace에 저장하는 경우가
   있다. Import 할 때 이렇게 Table과 Index를 분리하는 방법에 대해
   알아보자


Explanation
-----------

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도 활용할 수 있다.

단, 이렇게 하면 create index에 의해 만들어진 index는 분리되지만,
primary key나 unique constraint에 의해 만들어진 index는 그대로 data가
insert되는 tablespace 내에 포함된다.
이러한 제약 사항으로 인해 생성된 index도 다른 tablespace에 분리하고자
한다면, 다시 constaint를 using index 절을 이용하여 재생성하거나 rebuild
하여야 한다.

  다음과 같이 만들 수 있다.

 다음 작업은 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 log=scott.log
  
 위와 같이 실행하면 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 생성 문장이 필요할 때에
도 유용하게 사용하여 활용할 수 있다.

*** 참고로 primary key 같은 경우 import 후 rebuild하여
다른 tablespace에 생성하는 방법은 다음과 같다.

 alter index index_name rebuild tablespace tablespace_name;


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 Q&A Oracle관련 게시물만 Sean 2014.04.09 84911
159 Tip TEMP TABLESPACE 사용현황 조회하기 1 고구마 2010.05.19 43955
158 TM windows에서 Opatch 진행시 oci.dll 에러 조치 1 이현정 2012.03.26 37489
157 Tip 핫백업 디비올리기 유주환 2010.04.09 34982
156 Tip UDP Buffer Tuning 기법 3 김준호 2010.05.04 30959
155 Tip Log miner 사용방법 1 김준호 2010.04.06 29938
154 Tip 오라클 null값 정리 유주환 2010.04.18 29921
153 Tip (Diagnostics) Oracle10g DB 접속 안될때 sqlplus 에서 SYSTEMSTATE DUMP 받기 1 고구마 2011.05.18 29071
152 Tip shared pool wait event 2 file 유주환 2010.04.05 28883
151 Tip em 실행시 에러 발생 조치 1 dbkill 2010.12.15 27311
150 Tip 오라클11g에서 SE1,SE,EE제품의 옵션비교입니다. file perfstat 2012.03.07 27015
149 TM audit 관련 2 이현정 2012.03.29 26594
148 TM check whether crs auto start is enable or disable 담벼락 2012.10.12 26299
147 Tip EM 재구성 고구마 2010.04.09 26265
146 Tip 10g standard edition과 enterprise edition의 차이점 2 윤현 2011.05.16 26055
145 TM 오라클 디렉토리 변경 송기성 2010.12.16 25846
144 Tip Buffer Cahe 관련 대기 이벤트들 고구마 2010.04.28 25638
143 TM 테이블과 인덱스의 관계 및 인덱스 종류 및 생성 방법. Tech1 2012.03.28 25538
» Tip EXPORT/IMPORT 이용한 TABLE과 INDEX 분리하는 방법 고구마 2010.05.24 25463
141 Tip sysaux resize 유주환 2010.04.18 25299
Board Pagination Prev 1 2 3 4 5 6 7 8 Next
/ 8