다른 Tablespace 로 Import 하기
|
#################################################################################
다른 Tablespace 로 Import 시키기
메타링크 원문 : 1012307.6
A. Table Level 로
B. User Level 로 [ 다른 디비로 동일 유저로 ]
C. From User A to user B 로 [ 동일 디비에서 다른 유저로 ]
#################################################################################
A. Table Level 로
1. Tablespace Check [ Export 할 Table 가 속한 ]
2.
2.1 충분한 공간이 확보 된다면, Import 전에,
Rename Table 및 Index Drop, 성공적으로 Import 후 삭제 조치
2.2 충분한 공간이 없다면, Import 전에, Table 을 Drop 하라.
# Dump 화일 정상 체크
imp username/password full=y file=expdat.dmp show=yes log=imp.log
==> 실제 Object 가 Create 되거나, Import 되어지지 않는다.
3. INDEXFILE=<filename> 을 가지고 Import 하라.
그리하여, create table 과 create index 문장을 획득하라.
4. Tablespace 절을 새로운 Tablespace 로 Editing 하라.
Import 속도를 위해서 Create Index 문장을 삭제 하라.
5. 새로운 Tablespace 에 대해서 Quota 를 부여하라.
6. Editing(4번) 한 Script 를 실행 하라
7. Import 하라 ( IGNORE = Y ), 해서 New Table 을 원하는 Tablespace 에
위치시키고, Index 를 생성하라.
fromuser=scott
touser=scott
commit=y
ignore=y
indexes=n
################################################################################
예제
From
SID : TESTDOM
Username : SCOTT
Table : EMP
SQL> create tablespace ts_tg_d datafile
'/u01/ORACLE/MIGDOM/MIGDOM/ts_tg_d_01.dbf'
size 100M autoextend on next 100m maxsize 500m
extent management local autoallocate
segment space management auto ;
SQL> create tablespace ts_tg_i datafile
'/u01/ORACLE/MIGDOM/MIGDOM/ts_tg_i_01.dbf'
size 100M autoextend on next 100m maxsize 500m
extent management local autoallocate
segment space management auto ;
To
SID : MIGDOM
Username : SCOTT
Table : EMP
SQL> create tablespace ts_mig_d datafile
'/u01/ORACLE/MIGDOM/MIGDOM/ts_mig_d_01.dbf'
size 100M autoextend on next 100m maxsize 500m
extent management local autoallocate
segment space management auto ;
SQL> create tablespace ts_mig_i datafile
'/u01/ORACLE/MIGDOM/MIGDOM/ts_mig_i_01.dbf'
size 100M autoextend on next 100m maxsize 500m
extent management local autoallocate
segment space management auto ;
SQL> create user scott identified by tiger
default tablespace users
temporary tablespace temp ;
SQL> grant connect, resource to scott ;
SQL> alter user scott default tablespace ts_mig_d ;
A.
A.1 EXPORT
more exp.par
userid=system@TESTDOM
buffer=10000
file=emp.dmp
log=emp.log
statistics=none
tables=('SCOTT.EMP')
exp parfile=exp.par
....
Export terminated successfully without warnings.
A.2 EXPORT 결과물 체크
imp system/oracle123 full=y file=emp.dmp show=y log=imp.log
A.3 INDEXFILE=<filename> 을 통한 Script 생성
imp system/oracle123 full=y file=emp.dmp indexfile=index.sql
A.4 Editing
cp index.sql table.sql
vi table.sql - tablespace 이름 변경, 인덱스 부분 제거
vi index.sql - 인덱스 생성 Tablespace 변경, Nologging, Parallel 로 생성 후
Logging, Noparallel 로 다시 변경을 포함
A.5 Tablespace 에 대한 권한 및 공간 체크
A.6 Create Table [ by A.4 ]
A.7 Import 수행 아래 Option 을 포함
fromuser=scott
touser=scott
commit=y
ignore=y
indexes=n
Index 생성
#################################################################################
B. User Level 로 [ 동일 유저를 타 디비로 이관 ]
1. 유저 Level 혹은 Database Level 로 Export 수행
2. Drop or Rename Objects
# Dump 화일 정상 체크
imp username/password full=y file=expdat.dmp show=yes log=imp.log
==> 실제 Object 가 Create 되거나, Import 되어지지 않는다.
3. Tablespace 관련 권한 조치
3.1 유저의 Default Tablespace 변경
ALTER USER <username> DEFAULT TABLESPACE <new tablespace>;
3.2 유저의 Old Tablespace QUOTA 를 "0"으로 조치
ALTER USER <username> QUOTA 0 ON <old tablespace>;
3.3 신규 Tablespace 에 대한 QUOTA 설정
ALTER USER <username> QUOTA <bytes> ON <new tablespace>;
3.4 "RESOURCE" 권한이 부여됐다면, "UNLIMITED TABLESPACE" 를 REVOKE 하라.
SELECT GRANTED_ROLE FROM DBA_ROLE_PRIVS
WHERE GRANTEE='SCOTT'
-- RESOURCE 가 RETUNN 된다면 아래와 같이 진행
REVOKE UNLIMITED TABLESPACE FROM SCOTT ;
-- DBA 가 RETURN 된다면 아래와 같이 진행
REVOKE DBA FROM SCOTT ;
4. 기존 Tablespace 에 Table 을 생성 할 수 없는지 다시 한번 체크 하라 .
CREATE TABLE JUNK (A NUMBER) TABLESPACE <old tablespace>;
ORA-01950 이 Return 되면 성공
5. User Level 로 Import 를 진행하라 .
6. 작업을 위해서 한시적으로 Revoke 하였던 Resource, DBA 권한을 원복 하라.
3. INDEXFILE=<filename> 을 가지고 Import 하라.
그리하여, create table 과 create index 문장을 획득하라.
#################################################################################
예제
...
#################################################################################
C. From User A to user B 로 [동일 디비내에서 다른 유저로 이관 ]
Import 되어지는 유저의 Default Tablespace 와 상관없이 Export 되어질때의
Tablespace 로 Import 된다.
FROMUSER=USER_A(USER_A_TS) TOUSER=USER_B(USER_B_TS)
환경에서 Import 를 진행 하면, USER_A_TS 로 IMPORT 되어진다.
1. USER_A 의 User Level 로 Export 진행
2.
2.1USER_B 의 USER_A_TS, USER_B_TS 의 QUOTA 를 체크
USER_A_TS - QUOTA 를 "0" 으로
SELECT * FROM DBA_TS_QUOTAS where username = 'USER_B';
ALTER USER USER_B QUOTA 0 ON TABLESPACE USER_A_TS;
2.2 RESOUCE ROLE 이 있다면 REVOKE UNLIMITED TABLESPACE 하라.
SELECT GRANTED_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTEE='USER_B';
REVOKE UNLIMITED TABLESPACE from USER_B ;
3. USER_A_TS 에 대해서 더이상 권한이 없음을 확인 하라
CREATE TABLE JUNK (A NUMBER) TABLESPACE <USER_A_TS>;
4. Import 수행
5. 권한 원복 수행
ALTER USER <userB> QUOTA nn ON TABLESPACE <USER_A_TS>;
!! 테스트 하진 않았지만,
요점은 원래의 Tablespace 가 있어야 한다는 것으로 보여진다.
있지만, 권한이 없다면 USER_B 의 Default Tablespace 로 Import 되어질것으로
예상된다.
################################################################################
요약
- TABLE LEVEL 시에는 INDEXFILE=<indexfile> 을 통한 editing 을 통해서 제어
- 시나리오 B,C 는 별차이가 없다.
- DEFAULT TABLESPACE 변경 및 원래의 TABLESPACE 에 대해서는 QUOTA "0" 조치
################################################################################
다른 Tablespace 로 Import 시키기
메타링크 원문 : 1012307.6
A. Table Level 로
B. User Level 로 [ 다른 디비로 동일 유저로 ]
C. From User A to user B 로 [ 동일 디비에서 다른 유저로 ]
#################################################################################
A. Table Level 로
1. Tablespace Check [ Export 할 Table 가 속한 ]
2.
2.1 충분한 공간이 확보 된다면, Import 전에,
Rename Table 및 Index Drop, 성공적으로 Import 후 삭제 조치
2.2 충분한 공간이 없다면, Import 전에, Table 을 Drop 하라.
# Dump 화일 정상 체크
imp username/password full=y file=expdat.dmp show=yes log=imp.log
==> 실제 Object 가 Create 되거나, Import 되어지지 않는다.
3. INDEXFILE=<filename> 을 가지고 Import 하라.
그리하여, create table 과 create index 문장을 획득하라.
4. Tablespace 절을 새로운 Tablespace 로 Editing 하라.
Import 속도를 위해서 Create Index 문장을 삭제 하라.
5. 새로운 Tablespace 에 대해서 Quota 를 부여하라.
6. Editing(4번) 한 Script 를 실행 하라
7. Import 하라 ( IGNORE = Y ), 해서 New Table 을 원하는 Tablespace 에
위치시키고, Index 를 생성하라.
fromuser=scott
touser=scott
commit=y
ignore=y
indexes=n
################################################################################
예제
From
SID : TESTDOM
Username : SCOTT
Table : EMP
SQL> create tablespace ts_tg_d datafile
'/u01/ORACLE/MIGDOM/MIGDOM/ts_tg_d_01.dbf'
size 100M autoextend on next 100m maxsize 500m
extent management local autoallocate
segment space management auto ;
SQL> create tablespace ts_tg_i datafile
'/u01/ORACLE/MIGDOM/MIGDOM/ts_tg_i_01.dbf'
size 100M autoextend on next 100m maxsize 500m
extent management local autoallocate
segment space management auto ;
To
SID : MIGDOM
Username : SCOTT
Table : EMP
SQL> create tablespace ts_mig_d datafile
'/u01/ORACLE/MIGDOM/MIGDOM/ts_mig_d_01.dbf'
size 100M autoextend on next 100m maxsize 500m
extent management local autoallocate
segment space management auto ;
SQL> create tablespace ts_mig_i datafile
'/u01/ORACLE/MIGDOM/MIGDOM/ts_mig_i_01.dbf'
size 100M autoextend on next 100m maxsize 500m
extent management local autoallocate
segment space management auto ;
SQL> create user scott identified by tiger
default tablespace users
temporary tablespace temp ;
SQL> grant connect, resource to scott ;
SQL> alter user scott default tablespace ts_mig_d ;
A.
A.1 EXPORT
more exp.par
userid=system@TESTDOM
buffer=10000
file=emp.dmp
log=emp.log
statistics=none
tables=('SCOTT.EMP')
exp parfile=exp.par
....
Export terminated successfully without warnings.
A.2 EXPORT 결과물 체크
imp system/oracle123 full=y file=emp.dmp show=y log=imp.log
A.3 INDEXFILE=<filename> 을 통한 Script 생성
imp system/oracle123 full=y file=emp.dmp indexfile=index.sql
A.4 Editing
cp index.sql table.sql
vi table.sql - tablespace 이름 변경, 인덱스 부분 제거
vi index.sql - 인덱스 생성 Tablespace 변경, Nologging, Parallel 로 생성 후
Logging, Noparallel 로 다시 변경을 포함
A.5 Tablespace 에 대한 권한 및 공간 체크
A.6 Create Table [ by A.4 ]
A.7 Import 수행 아래 Option 을 포함
fromuser=scott
touser=scott
commit=y
ignore=y
indexes=n
Index 생성
#################################################################################
B. User Level 로 [ 동일 유저를 타 디비로 이관 ]
1. 유저 Level 혹은 Database Level 로 Export 수행
2. Drop or Rename Objects
# Dump 화일 정상 체크
imp username/password full=y file=expdat.dmp show=yes log=imp.log
==> 실제 Object 가 Create 되거나, Import 되어지지 않는다.
3. Tablespace 관련 권한 조치
3.1 유저의 Default Tablespace 변경
ALTER USER <username> DEFAULT TABLESPACE <new tablespace>;
3.2 유저의 Old Tablespace QUOTA 를 "0"으로 조치
ALTER USER <username> QUOTA 0 ON <old tablespace>;
3.3 신규 Tablespace 에 대한 QUOTA 설정
ALTER USER <username> QUOTA <bytes> ON <new tablespace>;
3.4 "RESOURCE" 권한이 부여됐다면, "UNLIMITED TABLESPACE" 를 REVOKE 하라.
SELECT GRANTED_ROLE FROM DBA_ROLE_PRIVS
WHERE GRANTEE='SCOTT'
-- RESOURCE 가 RETUNN 된다면 아래와 같이 진행
REVOKE UNLIMITED TABLESPACE FROM SCOTT ;
-- DBA 가 RETURN 된다면 아래와 같이 진행
REVOKE DBA FROM SCOTT ;
4. 기존 Tablespace 에 Table 을 생성 할 수 없는지 다시 한번 체크 하라 .
CREATE TABLE JUNK (A NUMBER) TABLESPACE <old tablespace>;
ORA-01950 이 Return 되면 성공
5. User Level 로 Import 를 진행하라 .
6. 작업을 위해서 한시적으로 Revoke 하였던 Resource, DBA 권한을 원복 하라.
3. INDEXFILE=<filename> 을 가지고 Import 하라.
그리하여, create table 과 create index 문장을 획득하라.
#################################################################################
예제
...
#################################################################################
C. From User A to user B 로 [동일 디비내에서 다른 유저로 이관 ]
Import 되어지는 유저의 Default Tablespace 와 상관없이 Export 되어질때의
Tablespace 로 Import 된다.
FROMUSER=USER_A(USER_A_TS) TOUSER=USER_B(USER_B_TS)
환경에서 Import 를 진행 하면, USER_A_TS 로 IMPORT 되어진다.
1. USER_A 의 User Level 로 Export 진행
2.
2.1USER_B 의 USER_A_TS, USER_B_TS 의 QUOTA 를 체크
USER_A_TS - QUOTA 를 "0" 으로
SELECT * FROM DBA_TS_QUOTAS where username = 'USER_B';
ALTER USER USER_B QUOTA 0 ON TABLESPACE USER_A_TS;
2.2 RESOUCE ROLE 이 있다면 REVOKE UNLIMITED TABLESPACE 하라.
SELECT GRANTED_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTEE='USER_B';
REVOKE UNLIMITED TABLESPACE from USER_B ;
3. USER_A_TS 에 대해서 더이상 권한이 없음을 확인 하라
CREATE TABLE JUNK (A NUMBER) TABLESPACE <USER_A_TS>;
4. Import 수행
5. 권한 원복 수행
ALTER USER <userB> QUOTA nn ON TABLESPACE <USER_A_TS>;
!! 테스트 하진 않았지만,
요점은 원래의 Tablespace 가 있어야 한다는 것으로 보여진다.
있지만, 권한이 없다면 USER_B 의 Default Tablespace 로 Import 되어질것으로
예상된다.
################################################################################
요약
- TABLE LEVEL 시에는 INDEXFILE=<indexfile> 을 통한 editing 을 통해서 제어
- 시나리오 B,C 는 별차이가 없다.
- DEFAULT TABLESPACE 변경 및 원래의 TABLESPACE 에 대해서는 QUOTA "0" 조치
################################################################################
[출처] 다른 Tablespace 로 Import 하기 |작성자 타락천사
'IT > Oracle' 카테고리의 다른 글
Oracle Standby DB 생성 (0) | 2009.03.25 |
---|---|
10G: TEMPORARY TABLESPACES GROUP (0) | 2009.03.16 |
Oracle Backup (0) | 2009.02.20 |
Wait event 에 대한 간단한 Tuning 방법 (0) | 2009.02.03 |
Oracle 성능분석방법론 (0) | 2009.02.02 |