오라클 최후의 복원 툴 DUL

    • .DUL(Database Un-Loader)의 특징!

     

    1)        최후의 recovery utility이다. 2) 공식 지원 utility가  아니다.

    • datafile이 있어야 만 한다.

    Ex)tablespace drop후 backup이 없는 상태에서 아직 unix rm 명령어를 적용하여 removed되지 않은 상태에  유용함.

    • sql*loader의 *.ctl,*.dat형태의 file을 제공한다.
    • 일부 column에 제한이 있다.(long raw datatype)

     

     

    • .TEST SCENARIO

     

    • 먼저 dul directory를 만든다.

    $ cd $ORACLE_HOME

    $ mkdir dul

    $ cd dul

    $ mkdir bin

    $ cd bin

    $ mkdir common

    이곳에 가면 v2,v3 두개의 directory가 나오는데 dul version별로 utility가 있으며 각 directory에는 os별로 압축file들이   있다.

     

    V2로 가면 common과 각 os별 압축file이 존재하는데 common에는 dictv7.ddl(dul definition language)이 있다.이것을 download받아

    $ORACLE_HOME/dul/bin/common에 저장한다.

     

    각 os별 dul file을 download 받아 다음과 같이 압축을    푼다.

    $ tar xvf dul4hp.tar.bin으로 uncompress시킨다.(hp-ux의 경우) 이 file을 $ORACLE_HOME/bin/common에 놓는다.)

     

    • dul을 만든다.

    이 file은 db 가 기동시 처음 startup시 읽는    parameter file과

    비슷한 역할을 하는 file로써 $ORACLE_HOME/dul/bin/common에 만들어 vi로 편집하며 각parameter의 지정value는 다음의 위치에 자세히   설명되어 있다.(또는 Oracle Technical Notes를  참조함.)

     

     

    기존에 사용 했던 init.dul file을 copy해서 사용 하는 게 안젂하다.   (Test machine ukhp55.uk.oracle.com을 usupport/Dontw8로 접속하여

    $ORACLE_HOME/dul/bin/common/init.dul을 참조한다.)

     

    • test data생성.

    test machine에 접속하여 tablespace를 create하고 test  table을

    create한후 test row를 insert한후 export를  받는다.

     

    $ cd $ORACLE_HOME/dul/bin/common

    $ exp userid/password file=expdat.dmp tables=(user.test)

    $ imp userid/password file=expdat.dmp indexfile=test.sql …. (Export file로 부터 table script를  만든다.)

     

    • datafile offline drop and dul생성.

     

    sqldba)alter database datafile ‘/oracle/dbs/test.dbf’ offline drop; sqldba)spool control.dul

    sqldba)select * from v$dbfile; sqldba)spool off;

    sqldba)drop tablespace test including contents; sqldba)exit

     

    • dul editting

    vi로 control.dul을 열어 datafile name만 남기고 나머지는   삭제함.

     

    • /oracle1/V723/dbs/systV723.dbf
    • /oracle1/V723/dbs/rbsV723.dbf
    • /oracle1/V723/dbs/tempV723.dbf
    • /oracle1/V723/dbs/toolV723.dbf
    • /oracle1/V723/dbs/usrV723.dbf
    • /oracle1/V723/dbs/ebu_testV723.dbf
    • /oracle1/V723/dbs/pms770125.dbf
    • /oracle1/V723/dbs/fifiV723.dbf
    • /oracle1/V723/dbs/tar844526.dbf

     

    • dictionary 정보를 받는다.

     

    $cd $ORACLE_HOME/bin/common

    $dul dictv7.ddl

    UnLoader: Release 2.2.0.2 – Very Restricted on Mon Mar 10 1997

    Copyright (c) 1994/95 Oracle Corporation, The Netherlands. All rights reserved.

    . unloading table OBJ$ 1960 rows unloaded
    . unloading table TAB$ 299 rows unloaded
    . unloading table COL$ 9371 rows unloaded
    . unloading table USER$ 52 rows unloaded

     

    • table unload

    droped tablespace의 object를 user또는 table단위로  unloading함.

    $dul

    DUL> unload user test1;

    About to unload TEST1’s tables …

    .  unloading  table                  TEST      100 rows unloaded DUL>quit;

    $ ls

    COL.ctl TAB.ctl USER.ctl dictv7.ddl
    COL.dat TAB.dat USER.dat dul*
    OBJ.ctl TEST1_TEST.ctl control.dul init.dul

    OBJ.dat            TEST1_TEST.dat    dictv6.ddl

     

    • SQL*LOADER로 data loading

    import로 만든 test.sql로 table을 생성후 sql*loader로   data load!

    $ sqlplus  user/passwd @test

    $   sqlldr    user/passwd control=TEST1_TEST.ctl data=TEST1_TEST.dat

Comment

*

沪ICP备14014813号-2

沪公网安备 31010802001379号