제 로컬 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
잘못된 점이 있는지 확인 부탁드립니다 감사합니다.
함께 쓰신 다른 글들을 읽었습니다만, 궁금해 하시는 부분을 잘 모르겠네요. 그래서, 긁적입니다. 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 도 해 주셔야 적재가 됩니다.
포동푸우님..질문이요
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 이런 방식이 되나요? 안되는걸로 아는데.. 확인 부탁드려용
추가로, 님께서 쓰신, "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 를 생성하지 않고 바로 추출과 적재를 함께 진행한다는 것입니다.
타락천사님 우선, 지금 보니, 제가 첫번째 쓴 글에 잘못 기재한 내용이 있네요 (지금 수정해 두겠습니다,, 죄송 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 의 절대경로 파일을 사용했던 것 같습니다.
과부화개발자님 먼저, 소소?하지 않은 오타가 있었습니다. (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 이런 형태 였던 것 같네요.. (개념이)~