Search

set serveroutput on format wrapped
문장을 추가한뒤
스크립트 실행으로 실행한다.  

set serveroutput on format wrapped
declare
begin
dbms_output.put_line('test')
end
크리에이티브 커먼즈 라이선스
Creative Commons License
TAG PL/SQL
로컬DB에서 클라이언트 DB의 데이터를 DBLINK를 통해 바로 저장할 수 있다. 


1.로컬DB에 클라이언트DB에 접속가능한 DBLINK를 만든다.

CREATE DATABASE LINK <DBLINK이름>
 CONNECT TO SYSTEM IDENTIFIED BY <비번> 
 USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=<IP나 호스트명>)(PORT=<포트주소>)) (CONNECT_DATA=(SERVICE_NAME=<SID명>)))';  



2. parfile 를 생성(안해도 되지만 편의를 위해)
-- filename.par
DIRECTORY=DATA_PUMP_DIR  -- DATA_PUMP_DIR은 당연 로컬DB에 생성된 DBLINK
job_name=impdp_pre.20111001  -- 수행되는 job의 이름 제약없음 
logfile=imppd_pre.20111001.log -- 생성될 log 파일 DATA_PUMP_DIR 의 위치에 저장된다.
remap_schema=<client의 schema>:<local의 schema> -- 스키마 변경이 필요할 경우 적는다, table만 import 할때는 fromuser touser 의 역활을 한다   
tables=<client의 schema>.<테이블명>    
remap_tablespace=<client의tablespace명>:<local의대체tablespace명>,<여러개일경우반복>:<여러개일경우반복>
network_link=<DBLINK명>
table_exists_action=<해당 옵션은 따로 찾아보기>
content=<해당옵션은 따로 찾아보기>

3.impdp user/password parfile=filename.par  로 수행
 
# 참조 http://www.keiis.co.kr/study/220.DB_Oracle/M910.Object&Utility/H100.Data_Pump_0.html
# table_exists_action

SKIP - 테이블을 있는 그대로 두고 다음 객체 생성으로 이동한다. CONTENT 파라미터를 DATA_ONLY로 지정할 경우
SKIP을 지정할 수 없다.
APPEND - 소스로 부터 row를 읽어 들여 테이블에 적재 시키고, 이미 존재하는 row는 그대로 둠
TRUNCATE - 이미 존재하는 row가 있다면 삭제시킨 후 새로 데이터를 적재 시킴
REPLACE - 이미 존재하는 테이블을 드롭 시킨 후, 테이블을 새로 만들고 데이터를 적재 시킴. CONTET 파라미터를
DATA_ONLY로 지정하느 경우 이 값을 지정할 수 없다.

다음은 옵션을 지정하는데 있어 고려해야 할 사항이다 :

TRUNCATE나 REPLACE를 지정할 경우, 영향을 바는 테이블이 참조 무결성에 의해 참조 되지 않는 지 여부를 확인한다.
SKIP, APPEND 또는 TRUCATE를 지정할 경우, 이미 존재하는 테이블에 대한 인덱스나, 권한 부여, 트리거, 제약 조건이
무시된다. REPLACE를 지정할 경우, 의존 관계에 있는 객체들이 먼저 drop 된 후, 재 생성된다. 이것을
피하기 위해서는 EXCLUDE를 사용하여, 명시적으로 제외를 시키거나 임포트 하고자 하는 덤프 파일에 해당 내용이
포함 되지 않아야 한다.
APPEND나 TRUNCATE를 사용할 경우에는,다른 모든 작업에 앞서 덤프 파일의 내용이 이미 존재하는 테이블에 들어갈 수
있는 형태의 데이터인지를 먼저 확인한다.

이미 존재하는 테이블에 대해서는 external 테이블을 사용하여 load 작업이 수행되는데 이것은, external table 이
constraint나 trigger가 제 기능을 하도록 하기 때문이다. 하지만, active constraint를 위반하는 row 가
하나라도 존재하면,load 작업은 취소되어 아무런 데이터도 load 되지 않는다는 점을 기억해 둘 필요가 있다.

만약 데이터를 반드시 load 시켜야 하는데, constraint voilation을 유발시킬 만한 내용이 있다면
constraint를 먼저 disable 시키고, 데이터를 적재 시킨 후, 문제가 되는 row를 삭제 하고 constraint를
다시 enable 시키는 방법을 사용해야 한다.

APPEND를 사용할 때는, 데이터가 언제나 새로운 공간에 load 된다. 기존에 사용중인 공간에 여유 공간이 있더라도
재 사용되지 않는다. 이와 같은 이유 때문에 데이터에 대한 compress를 별도로 수행할 필요가 있을 수도 있다.
 

# CONTENT 파라미터:

CONTENT 파라미터는 Export 또는 Import 세션에서 사용할 수 있다. 명백하게, export 값이 DATA_ONLY나
METADATA_ONLY였다면, 지정된 데이터만 덤프파일에 존재하여 import 시 사용할 수 있다.

기본값 : ALL

import 될 수 있는 내용을 제한하기 위해서는 다음과 같은 옵션을 사용할 수 있다 :

DATA_ONLY - 이미 존재하는 테이블에 대해서만 데이터를 load 시킨다. 없던 객체를 생성 시키지 않는다.
METADATA_ONLY - 데이터베이스 객체에 대한 정의만 load 시킨다. 테이블의 row 데이터를 load 시키지 않는다.
ALL - 소스의 데이터 및 메타데이터를 load 시킨다. 기본 값.
 


크리에이티브 커먼즈 라이선스
Creative Commons License

[IMP] 마이그레이션

데이터베이스(DB)/Utilities 2010/09/09 10:58 Posted by 크롬은24번

exp 한다

imp index=n

imp <account>/<password>  file=filename.dmp indexfile=script_indexes.sql
로 인덱스 생성 스크립트를 추출한다.

실행해서 생성한다.

크리에이티브 커먼즈 라이선스
Creative Commons License

[Oracle] Data Pump EXPDP/IMPDP

데이터베이스(DB)/Utilities 2010/09/03 13:52 Posted by 크롬은24번

1. command line 에서 expdp 사용
    결과물을 저장할 디렉토리를 지정한다.
        SQL> create directory data_pump_test as '/home/oracle/data_pump_test/';

    생성한 디렉토리 오브젝트에 대한 권한을 유저에게 부여한다.
        SQL> grant read, write on directory data_pump_test to hr;

    사용자에게는 EXP_FULL_DATABASE, IMP_FULL_DATABASE 롤을 부여한다.
    실제로는 resouce 롤만으로도 기본적인 expdp, impdp 동작을 수행할 수 있다.
   
    expdp 실행
    # expdp hr/hr directory=data_pump_test dumpfile=test_dump.dmp

    - interactive command line
        expdp 진행 중에 컨트롤+C 키를 누르면 Export> 프롬프트가 뜬다.
        여기서 help를 타이핑하면 사용할 수 있는 명령들을 확인할 수 있다.

    data_pump_test 디렉토리에 생성된 export.log 파일의 내용을 확인한다.

    ※ {exclude|include} object_type[: "name_expr"]
            ex)
            - # expdp hr/hr directory=data_pump_test dumpfile=test_dump.dmp exclude=index:"like 'EMP%'"
            - # expdp hr/hr directory=data_pump_test dumpfile=test_dump.dmp include=view
        exclude는 해당 오브젝트를 제외하고 추출/입력
        include는 해당 오브젝트만을 추출/입력
       
        contents={all | metadata_only | data_only}


2. 병렬 처리
    parallel 파라메터는 몇 개의 스레드로 병렬 처리 할 것 인지 지정한다.
        # expdp hr/hr tables=paratest directory=data_pump_test dumpfile=paratest%U.dmp parallel=3 job_name=parr_test;

    paratest01.dmp, paratest02.dmp, paratest03.dmp 세 개의 파일이 생성된다.    

        # impdp hr/hr directory=data_pump_test dumpfile=paratest%U.dmp job_name=parr_test;

실행 예

SQL> create user dpumpuser identified by dpumpuser;
SQL> grant connect, resource, exp_full_database, imp_full_database to dpumpuser;
SQL> create directory data_pump as '/home/oracle/data_pump';
SQL >grant read, write on directory data_pump to dpumpuser;

$ expdp dpumpuser/dpumpuser full=y directory=data_pump dumpfile=20081030.dmp
$ impdp dpumpuser/dpumpuser directory=data_pump dumpfile=20081030.dmp

SQL> revoke read, write on directory data_pump from dpumpuser;
SQL> revoke connect, resource, exp_full_database, imp_full_database from dpumpuser;
SQL> drop directory data_pump;
SQL> drop user dpumpuser;

※ 만약 impdp 가 퍼미션 문제로 실행되지 않는다면 SYSDBA 로 로그인한 후,
SQL> execute dbms_metadata_util.load_stylesheets;
을 실행한 후 재시도.

특정 스키마의 구조와 데이터 추출
$expdp dpumpuser/dpumpuser schema=PORTAL directory=data_pump dumpfile=portal_schema_20081031.dmp

content를 사용해 특정 스키마의 데이터만 추출 (all | metadata_only | data_only)
$expdp dpumpuser/dpumpuser schemas=PORTAL content=data_only directory=data_pump dumpfile=portal_schema_data_20081031.dmp

table_exists_action 옵션 사용, 기존의 데이터를 truncate 하도록 (skip | append | truncate | replace)
    skip - 존재하는 오브젝트에 대해 임포트 스킵
    append - 기존 오브젝트에서 업는 행만을 임포트
    truncate - 기존 테이블 truncate
    replace - drop & recreate
$ impdp dpumpuser/dpumpuser table_exists_action=truncate directory=data_pump dumpfile=portal_schema_data_20081031.dmp

데이터 파일, 테이블 스페이스, 유저는 각각 다음의 옵션으로 변경할 수 있다.
REMAP_DATAFILE=’C:\user01.dbf’:’/usr/data/user01.dbf’
REMAP_TABLESPACE=’users’:’user’
REMAP_SCHEMA=scott:stralth

다음 옵션으로 expdp에 사용되는 공간을 추정할 수 있다.
estimate_only=Y
$ expdp dpumpuser/dpumpuser full=y estimate_only=Y

http://devideby0.egloos.com/2097445

크리에이티브 커먼즈 라이선스
Creative Commons License

[ORACLE/EXP] EXP-00056,ORA-06401

데이터베이스(DB)/Utilities 2010/07/20 09:27 Posted by 크롬은24번

원문출처 : http://dbataj.blogspot.com/2008/10/exp-00056-ora-00932.html

번역출처 : http://develop.sunshiny.co.kr/442



EXP-00056 + ORA-00932

The following error message i am getting during export operation in 10gr1 on windows platform after apply the cpu october 2008 patch.

EXP-00056: ORACLE error 932 encountered

ORA-00932: inconsistent datatypes: expected BLOB, CLOB got CHAR

When i Search on metalink i found below metalink note: 339938.1

The above problem can be fixed to run the following SQL script as SYSDBA user.

SQL> connect / as sysdba

SQL> @?/rdbms/admin/catmetx.sql

SQL> @?/rdbms/admin/utlrp.sql



# 위의 해결 방법으로도 해결이 되지 않는경우 저는  문제를 해결하진 못하고, 아래와 같이 처리 했습니다.

이런경우는 이전에 받아둔 덤프 파일이 있다면 어느정도 해소 가능합니다.
1. 우선 아무리 해도 위의 에러에서 빠져나올 방법이 없을때는 export를 tables 옵션으로 export 할 테이블을 모두 기입하여서 table만 export를 합니다.
예)
exp userid=scott/tiger file=/ora10g/sunshiny_20100428.dmp log=/ora10g/sunshiny_20100428.log tables=TABLE_NAME,ATTACHED_FILE,BOARD

2. 다음에 import를 하고자 하는 DataBase에 기존에 덤프 받아놓은걸로 Index, Triger, View, Procedure, Table 등을 모두 import를 하고 그 상태에서 Table만 Drop을 하고 1번에서 export 받아둔 Table이 담긴 dmp 파일을 import 합니다

크리에이티브 커먼즈 라이선스
Creative Commons License