Oracle 관련2006. 11. 16. 13:38
오라클 8이상 부터는 SQL*Plus에서 COPY라는 명령어를 이용해서 테이블을 복사 할 수 있는
기능도 제공을 합니a다.


그런데 COPY명령어는 SQL*Net이 설치되어 있어야지만 사용 할 수 있습니다.

SQL*Net만 설치되어 있다면 다른 DB의 테이블도 복사를 해 올 수가 있습니다.

그리고 SQL*Plus에서만 사용 할 수 있습니다.



문법을 살펴보면은요..

SQL>
COPY FROM 복사해올유저명 CREATE 생성할 테이블명 USING 원본 테이블 질의



간단하게 예제를 하나 들면..

SQL>COPY FROM scott/tiger@oracle CREATE emp2 USING select * FROM emp;

배열의 인출/바인드 크기는 15입니다. (배열 크기는 15)
작업이 완성되면 커밋됩니다. (복사 완료: 0)
최대 긴 크기는 80 입니다. (롱 80)
테이블 EMP가 생성되었습니다.
14 행이 선택되었습니다(scott@oracle 로부터).
14 행이 입력되었습니다(EMP 에).
14 행이 EMP( DEFAULT HOST 연결의)으로 커밋되었습니다.


실행을 하면 위와 가은 메세지가 화면에 나옵니다. 설명을 하면은요..

scott/tiger@oracle : tnsnames.ora파일에 oracle이라는 서비스명으로 설정한 DB의 scott/tiger유저로 접속을 해서 emp 테이블을 emp2라는 이름으로 복사를 합니다.

아래는 tnsnames.ora파일의 일부분 입니다.
============== tnsnames.ora ================
ORACLE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 211.175.43.24)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oracle)
)
)
============================================

USING 문 뒤에는 복사할 테이블의 데이터를 가져오는 SQL문을 넣습니다.


위의 방법은 기존에..테이블을 복사하는 방법중에
CREATE TABLE table_name AS SELECT ~~ 문으로 복사하는 방법과 비슷합니다.

예를 들어보면..
SQL>CREATE TABLE emp2
AS
SELECT * FROM scott.emp;

이렇게 해서 emp테이블을 emp2테이블로 복사 할 수 있었습니다.



지금까지의 복사 방법은 데이터를 복사하면서 테이블을 새로 생성 하는 방법이었고..
기존에 생성되어 있는 테이블에 데이터만 복사 할 수 있는 기능도 제공을 합니다.

미리 만들어진 table에 입력할때는

SQL>COPY FROM scott/tiger@oracle CREATE emp2 USING select * FROM emp;

이 문법에서 CREATE를 INSERT로 바꺼 주시면 됩니다.


SQL>
COPY FROM scott/tiger@oracle INSERT emp2 USING select * from emp;

이렇게 하시면 됩니다.

위 문장은 아래의 방법과 조금은 비슷하다고 보시면 됩니다.
SQL>INSERT INTO emp2
SELECT * FROM emp;



데이터베이스 설정을 어떻게 해주냐에 따라서 조금은 다르지만.
COPY명령을 사용하면 다른 데이터베이스에서의 데이터를 좀더 쉽게 복사해 올 수 있습니다
.

Posted by la30321