본문 바로가기
Developer/DB

[Oracle] expdp / impdp 11g에서 10g 또는 tablespace가 다를때

by 순수한소년 2017. 7. 1.
728x90
반응형

출처:

http://m.blog.naver.com/livekim86/20204988822


expdp, impdp 사용 정리

 

* 오라클에서 11g dmp파일을 10g에서 import 오류.

* 동일한 10g dmp파일인데 tablespace가 다를때 오류. 

    -> dmp파일을 imp하면서 indexfile 옵션으로 파일을 떨궈 에디터 작업을 거친 후 파일을 실행하여 index, table을 생성하고

         다시 imp를 이용하여 데이터를 밀어넣는 방식이 있으나 에디터 작업이 귀찮은 관계로 expdp/impdp를 사용한다.

         왜냐면 나는 10g, 11g를 쓰니까...

         expdp/impdp는 10g이상에서만 동작한다.

 

1. expdp 

expdp 유저아이디/유저패스워드@SID dumpfile=덤프명.dmp logfile=로그명.log directory=디렉토리이름(data_pump_dirversion=10.2.0.1.0

 

-> expdp 실행 후 옵션으로 지정한 디렉토리경로에 가면 dmp파일이 생성되어있음.

-> dumpfile에는 경로설정없이 바로 덤프명만 넣고 경로는 디렉토리옵션에 지정함.

 

*참고사항* 

기본적인 directory가 지정되어 있어서 directory옵션을 지정하지 않아도 되는데  directory 옵션은 자동으로 먹힐때가 있고 안먹힐때가 있는듯함. 자동으로 먹히지 않으면 위와같이 "directory=디렉토리이름"으로 명시적으로 지정해야한다.

내 경우는 윈도우환경에서는 동작하지 않았고 리눅스에서는 자동으로 동작함.

디렉토리를 새로 생성하고 권한을 주고 생성한 디렉토리를 사용하는 방법도 있으나 귀찮으니 그냥 기본디렉토리를 사용함.

* export 할 dba계정 접속 후 기본디렉토리 검색

sqlplus "/as sysdba";

sql> select * from dba_directories;  -> data_pump_dir 이라는 이름으로 지정되어있음

 

* import할 dba계정 접속 후 DB 버전 확인

sql> select * from v$version;

 

2. impdp

-> expdp 한 dmp파일을 디렉토리에 저장해둠.

 

impdp 유저아이디/유저패스워드 dumpfile=덤프명.dmp REMAP_SCHEMA=exp유저:imp유저 REMAP_TABLESPACE=exp테이블스페이스명:imp테이블스페이스명

 

* remap_schema는 export한 계정과 import할 계정이 다를때 지정함.

* remap_tablespace는 export한 계정의 테이블스페이명과 import할 테이블스페이스명이 다를때 지정함.

 

***************************************************************************************************************

나의 작업 환경............

1. 윈도우환경에서 expdp를 한 후(디렉토리 옵션 오류때문에 select * from dba_directories 쿼리 날림 -> data_pump_dir 이라는 이름으로 기본디렉토리가 지정되어있었음 ) 

2. 리눅스환경에서 impdp를 한 경우임.

impdp할때 directory를 지정하지 않아도 기본디렉토리 알아서 찾아서 함. 

못찾으면 directory옵션 지정해주면 될듯...

 

* 디렉토리 이용하지 못하는 경우 권한을 추가해준다.

grant read, write on directory data_pump_dir to 계정


* 디렉토리 생성하기
create or replace directory 디렉토리명 as '경로';

 

 

 

 

 

 

참조 http://yjan.tistory.com/m/post/view/id/1011

 

Oracle 10g에서는  내장 (Built-in) 롤 중 CONNECT 롤 및 RESOURCE 롤에 부여된 권한 변화

Oracle 10g에서는  내장 (Built-in) 롤 중 CONNECT 롤 및 RESOURCE 롤에 부여된 권한이 약간 변경되었습니다.


다음은 Oracle 9i의 CONNECT롤 및 RESOURCE롤에 부여된 시스템 권한입니다.


SQL> select * from role_sys_privs where role='CONNECT';

ROLE                           PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
CONNECT                        CREATE VIEW                              NO
CONNECT                        CREATE TABLE                             NO
CONNECT                        ALTER SESSION                            NO
CONNECT                        CREATE CLUSTER                           NO
CONNECT                        CREATE SESSION                           NO
CONNECT                        CREATE SYNONYM                           NO
CONNECT                        CREATE SEQUENCE                          NO
CONNECT                        CREATE DATABASE LINK                     NO

8 개의 행이 선택되었습니다.

 

SQL> select * from role_sys_privs where role='RESOURCE';

ROLE                           PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
RESOURCE                       CREATE TYPE                              NO
RESOURCE                       CREATE TABLE                             NO
RESOURCE                       CREATE CLUSTER                           NO
RESOURCE                       CREATE TRIGGER                           NO
RESOURCE                       CREATE OPERATOR                          NO
RESOURCE                       CREATE SEQUENCE                          NO
RESOURCE                       CREATE INDEXTYPE                         NO
RESOURCE                       CREATE PROCEDURE                         NO

8 개의 행이 선택되었습니다.


다음은 Oracle 10g의 CONNECT롤 및 RESOURCE롤에 부여된 시스템 권한입니다.

Oracle 9i와 비교할 때, 10g에서는 CONNECT 롤에 CREATE SESSION 시스템 권한만 부여되어 있으며, RESOURCE롤의 경우에도 부여된 시스템 권한이 일부 변경 되었습니다.


SQL> select * from role_sys_privs where role='CONNECT';

ROLE                           PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
CONNECT                        CREATE SESSION                           NO

 

SQL> select * from role_sys_privs where role='RESOURCE';

ROLE                           PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
RESOURCE                       CREATE SEQUENCE                          NO
RESOURCE                       CREATE TRIGGER                           NO
RESOURCE                       CREATE CLUSTER                           NO
RESOURCE                       CREATE PROCEDURE                         NO
RESOURCE                       CREATE TYPE                              NO
RESOURCE                       CREATE OPERATOR                          NO
RESOURCE                       CREATE TABLE                             NO
RESOURCE                       CREATE INDEXTYPE                         NO

 

눈여겨 볼 내용은 CREATE VIEW 권한과 CREATE SYNONYM 시스템 권한 등이 CONNECT 롤에서 회수되었기 때문에 해당 권한이 필요한 경우에는 다음과 같이 직접 권한을 부여해주어야만 합니다.

 

grant create view, create synonym to scott;

 

 

* dmp 파일 밀어넣고나서 일부 데이터들이 누락되는 현상이 있었는데 계정 권한 문제인듯함. 

  기본적으로 권한을 잘 체크해보아야 할듯.


* 계정 생성

create user 계정명

identified by 비번

default tablespace 테이블스페이스명

temporary tablespace 임시테이블스페이스명

profile default

account unlock;


* 권한 추가

grant connect, resource to 계정명;

grant create view, create synonym to 계정명;


* 그래도 데이터가 뭔가 이상하다 싶으면 imp_full_database, exp_full_database 권한도 추가하고

exp/imp 작업하기


728x90
반응형