본문 바로가기

DB/Oracle

ORACLE data pump (expdp, impdp) 에러 해결 zip

테이블 단위 백업 expdp / impdp 샘플 코드는

expdp 로그인할db계정아이디/패스워드 directory=디렉토리명 tables=백업할테이블 dumpfile=백업파일명지정 logfile=로그파일명지정
impdp 로그인할db계정아이디/패스워드 directory=백업파일이있는디렉토리명 tables=백업할테이블 dumpfile=백업할파일 logfile=로그파일명지정

이런식.

스키마를 다른 스키마로 한다거나, 테이블스페이스를 다른 스페이스로 바꿔서 할 수 있는 옵션들도 있음.

 

exp 할 때 맞닥트린 첫 에러

ora-39002, ora-39070, ora-39087 요 세개는 지금 로그인 한 유저가 지정된 directory에 대한 권한이 없어서 발생하는 에러 세트임

(디비 내 해당 디렉토리는 이미 존재 한다고 할 때)

 

해결 -> edu01 계정이 d_tmp 디렉토리에 read 권한이 있으면 된다.

grant read, write on directory D_TMP to EDU01;
--impdp도 해당 계정으로 할거라 write 권한까지 부여

권한이 잘 부여 되었는지는 

SELECT * 
FROM DBA_TAB_PRIVS
WHERE TABLE_NAME ='디렉토리명';

요런식으로 쿼리 날려보면 해당 디렉토리에 방금 부여한 권한 확인 가능

 

 

이번엔 impdp 에러

백업할 테이블이 원래 위치했던 스키마에서 다른 스키마로 이동 하려고 

'remap_schema:' 옵션을 지정했는데 스키마가 존재하지 않는다. 

ORA-39083, ORA-01918 : user does not exist 에러 세트

 

해결 -> 당연한 건데,, 스키마는 미리 생성해두어야 합니다..ㅎ멍청이였음

이건 해결이라고 하기도 애매하다.ㅋ

 

 

impdp 두번째 에러

백업할 테이블이 원래 위치했던 테이블 스페이스에서 다른 스페이스로 이동시키려고

'remap_tablespace'를 지정했는데 권한이 없다는 에러

ORA-39083, ORA-01950: no privileges on tablespace 에러 발생

 

-> 해결 : 이 경우에는 아래 코드로 유저가 해당 테이블 스페이스를 가지고 있게 해야한다.

alter user [유저명] default tablespace [테이블스페이스] quota unlimited on [테이블스페이스];
ex) alter user myuser default tablespace users quota unlimited on users;

 

위 impdp에서는 백업할 테이블을 edu02 유저(스키마)에 생성할건데 'users'라는 테이블 스페이스를 사용하라고 지정했으니

edu02 유저가 users테이블 스페이스 권한을 가지면 됨.