DB LINK IMP 한번만 더 쓸게요.. 0 8 3,117

by 과부화개발자 [2016.10.10 10:34:26]


제 로컬 DB(PC)에서 명령문 진행을 하게 되는데,

원격지 PC에는 TEST2라는 유저가 없는 상태에서 

제 로컬의 DUMP파일을 이용하여 원격지 PC(DB)에 TEST2유저 자동생성 후 IMPDP를 진행하고 싶습니다.

시원한 답변 주실분 ㅠㅠ몇날몇일 헤매고 있습니다..

DUMP파일의 스키마는 GS_TEST 입니다.

덤프는 생성된 상태이고 IMPDP하는 과정만 기술 해 놓았습니다.

dpdump_dir은 dump파일이 있는 directory입니다.

조금 아래에도 제 질문이 있는데 .. 답변 주신게 제가 물어본 방향과 좀 다른거 같아

다시 올렸습니다..

 

 

sqlplus "/as sysdba"

grant read, write on directory dpdump_dir to public;

create public database link expdp_link4 connect to system identified by "SUCCESS" using 'TESTSERVER';

impdp system/SUCCESS directory=dpdump_dir network_link=expdp_link4 schemas=TEST2

 

잘못된 점이 있는지 확인 부탁드립니다 감사합니다.

by 타락천사 [2016.10.10 18:35:30]

에러 로그가 몬가요 ?

impdp system/SUCCESS directory=dpdump_dir network_link=expdp_link4 schemas=TEST2

REMOTE TESTSERVER DB 에 가셔 TEST2 유저를 SCHEMA 를 가져와서, LOCAL 에 밀어넣겠다는 의도시네요..


by 포동푸우 [2016.10.10 19:33:07]
함께 쓰신 다른 글들을 읽었습니다만, 궁금해 하시는 부분을 잘 모르겠네요. 
그래서, 긁적입니다. T.T 

" 제 로컬의 DUMP파일을 이용하여 원격지 PC(DB)에 TEST2유저 자동생성 후 IMPDP를 진행하고 싶습니다. "
 ==> 전체적으로 아래 처럼 실행하시면 됩니다. TEST2 유저가 없으면, 생성하면서 Data 가 Load 됩니다. TES2 가 만들어져 있다면, warming 나오고 계속 적재 진행 됩니다.

c:\app\oracle\work ] impdp system/oracle@remote_tns directory=data_pump job_name=bigdata01_impdp dumpfile=src_schema_bigdata01.dmp logfile=src_schema_bigdata01.impdp.log REMAP_SCHEMA=bigdata01:bigdata02 

<< 이하는 간략한 설명 입니다.>> 
> c:\app\oracle\work : 로컬서버 적절한 권한의 OS 환경 
> system/oracle@remote_tns 원격지 PC(DB) TNS 정보, 로컬서버 에서 사용할 수 있어야 함 
> directory=data_pump (로컬서버 아님) => 리모트서버의 Directory
> job_name=bigdata01_impdp 없어도 됩니다. 제 방식이라서요.. 
> dumpfile=src_schema_bigdata01.dmp (로컬서버 아님) 리모트 서버 해당 directory 에 있는 그 dump file 
> REMAP_SCHEMA=bigdata01:bigdata02 원래 받았을 때 bigdata01 가 owner 였으나, 
새로 만들 떄는 bigdata02 로 바꾸어서 생성할 때.. 님께서는 bigdata02 대신 TEST2 로 하셔야 되구요 

추가로, dataump 는 원래 있었던 tablespace 와 새로 적재할 tablespace 가 다르면,
 기본적으로 데이터가 적재되지 않습니다. 하여, 
원래 데이터를 impdp 로 받으셨던 DB 에 Tablespace 이름이 AAA 고 새로 올리실 곳이 BBB 이면, 
REMAP_Tablespace=aaa:bbb 도 해 주셔야 적재가 됩니다.

 


by 타락천사 [2016.10.10 21:28:18]

포동푸우님..질문이요

NETWORK_LINK 사용해서 REMOTE 에 있는 걸 LOCAL 로 땡기는거는 되지만. 

impdp system/oracle@remote_tns directory=data_pump job_name=bigdata01_impdp dumpfile=src_schema_bigdata01.dmp logfile=src_schema_bigdata01.impdp.log REMAP_SCHEMA=bigdata01:bigdata02

IMPDP 랑 EXPDP 는 서버사이드 툴인데..

system/oracle@remote_tns 이런 방식이 되나요? 안되는걸로 아는데.. 확인 부탁드려용 

 


by 과부화개발자 [2016.10.11 09:29:08]

답변 감사합니다. 질문드릴께 있는데

말씀하신 방식대로 진행하니 directory오류가 나길래 원인을 봤는데,

원격지 PC(DB) TNS정보 쓴 directory를 조회하는 것 같습니다. 즉 

제 PC의 로컬directory를 참조하지 않고 원격db의 directory를 참조하는 현상이 발생합니다.


by 포동푸우 [2016.10.10 19:50:19]
추가로, 
님께서 쓰신,  "impdp system/SUCCESS directory=dpdump_dir network_link=expdp_link4 schemas=TEST2" 는 
아래의 의도로 실행하려 할 때 사용하는 형식/형태 입니다. 

impdp system/SUCCESS >> 님 서버 에서 수행, 님 서버 DB User 및 Password 
directory=dpdump_dir >> 관련 로그 남길, 님 서버 directory
network_link=expdp_link4 >> 님 서버, DB 에 expdp_link4 라는 이름의 db link 가 있는데, 
님이 데이터를 넣으려고 하는 원격DB 의 dba (혹은 sysdba 등의 privilege) 를 가진 User (예를 들어 sys, system 같은) 의 접속 정보가 포함
즉, expdp_link4 에 등록된 user 의 privilege 가 부족하면 test2 가 만들어 지지 않습니다.
그리고 당연히, lob 처럼 db link 를 태울 수 없는 type 의 data 는  network_link 를 통해 넘길 수 없습니다.

뒷 부분은 생략하고.... 

network_link 를 사용하시는 것은, 미리 받아 둔 dump 를 쓰는 것이 아니라 
impdp 만 실행했지만, 그 시점에서 expdp 를 수행하면서 dump 를 생성하지 않고 바로 추출과 적재를 함께 진행한다는 것입니다.

by 포동푸우 [2016.10.10 19:54:20]
전체적으로, 개념 위주로 설명 드렸습니다. 
혹시나, 소소한 오타 등은 양해를 부탁드립니다.

 


by 포동푸우 [2016.10.11 16:13:38]
타락천사님 

우선, 지금 보니, 제가 첫번째 쓴 글에 잘못 기재한 내용이 있네요
(지금 수정해 두겠습니다,, 죄송 T.T)

> c:\app\oracle\work ] impdp system/oracle@remote_tns directory=data_pump => 이 부분 설명 중
> "directory=data_pump 로컬서버" => 로컬서버가 아니라 리모트서버 입니다.


궁금해 하신, "system/oracle@remote_tns 이런 방식이 되나요?" => 됩니다.

<< 미흡한 설명 드립니다.>>

- DB LINK (DB1 에 있고 -> DB2 로 연결되는 링크) : "DB1_DB2" 라고 기술
- tns_alias (어디에 있던 무관, DB2 로 연결되는 TNS) : "DB2" 라고 기술

A서버] impdp system/oraclea directory=data_pump => A 서버 DB에 접속, A서버의 directory 사용
A서버] impdp system/oracleb@DB2 directory=data_pump => A서버에서 실행 했지만, B 서버 DB에 접속, B서버의 directory 사용
       ==> 따라서, dump file 을 미리 B서버의 directory 로 전송 (ftp 등) 해 두어야 합니다.

추가로) 개념은 일부 상이하나, exp/imp 도 @tns_alias 로 가능합니다. 
        단, directory 개념이 아니기 때문에, @tns_alias 를 사용했던, 사용하지 않았던 무관하게
        명령어를 수행한 local server 의 절대경로 파일을 사용했던 것 같습니다.

 


by 포동푸우 [2016.10.11 16:56:21]
과부화개발자님

먼저, 소소?하지 않은 오타가 있었습니다. (T.T)  
> c:\app\oracle\work ] impdp system/oracle@remote_tns directory=data_pump => 이 부분 설명 중
> "directory=data_pump 로컬서버" => 로컬서버가 아니라 리모트서버 입니다.

그래서, "원격db의 directory를 참조하는 현상이 발생합니다." 가.. 과부화개발자님 께서 잘못하신 부분이 있어 그런 것이 아니라
개념 상, 원격db의 directory를 참조하는 것이 맞습니다.

==================

서버1, 서버2, 서버3 이 있고, 과부화개발자님은 PC1 에서만 작업을 컨트롤 하실려면
Datapump 말고, exp/imp 를 사용해서

exp system/oracle@서버1_tns-alias file= PC1의c:\dump.dmp
imp system/oracle@서버2_tns-alias file= PC1의c:\dump.dmp

이런 형태 였던 것 같네요.. (개념이)~

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입