백업 (3)

1. Full 백업(Full Level)

 

    1) Export ( 오라클 DB 전체가 백업된다. 모든 테이블 스페이스, 사용자, 객체, 데이터들 포함 ) 

 

[oracle@MyServer ~]$ exp userid=system/manager statistics=none file='./full.dmp' full=y


    2) Import

 

[oracle@MyServer ~]$ imp userid=system/system statistics=none file='./full.dmp' full=y  

 

   3) Import 시 주의사항

기존 DB에서 export 당시와 동일한 SID를 가지는 DB가 존재해야 한다. 

그렇지 않을경우 import 중에 오류가 발생한다.

 

 

2. 사용자단위 백업(User Level)

    

    1) Export ( 사용자가 소유하고 있는 객체, 데이터들 포함 ) 

 

[oracle@MyServer ~]$ exp userid=scott/tiger statistics=none file='./scott.dmp'  

 

    2) Import

 

[oracle@MyServer ~]$ imp userid=system/manager owner=scott statistics=none file='./scott.dmp'  

 

   3) Import 시 주의사항

     이관하려는 서버나 기존 DB에 동일한 사용자 계정이 생성이 되어 있어야 하며, TableSapce가 있어야 한다.  

     SID는 달라도 상관없다.

 

   4) Import 절차.

      - DB 생성

      - TableSpace 생성

      - 계정 생성 및 TableSpace 접근 권한 추가.

      - imp 명령어를 통한 데이터 import

 

 

# exp, imp명령어의 옵션에 대해서 알고싶으면 아래와 같은 명령어를 사용하면 된다. 

 

[oracle@MyServer ~]$ imp help=y 

 


💻 Programming/Linux

FTP를 이용한 binary 데이타 백업

커맨드 라인에서 vi backup.sh명령어를 이용하여 파일을 생성하고 아래와 같은 스크립트를 넣는다.

아래 커맨드는 자신이 사용하고 있는 환경에 따라 달라져야 한다는 점은 당연히 알고 있는 분들이 이 글을 읽을 것이라 보고 자세한 설명은 생략.

(나는 backup파일을 crond에 등록하여 매달 1일에 NAS서버로 백업하도록 설정하였다.) 

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

#!/bin/sh
USER_ID=yourid
PWD=yourpassword

FILE_NAME=`ls -lrt *.gz|tail -1|cut -d ' ' -f 8` 


CURR_DATE=`date +%Y%m%d%H%M`
FILE_NAME2=$CURR_DATE'_trac_backup.tar'

 

ftp -n 192.168.0.100 << SCRIPT
user $USER_ID $PWD
binary

cd /Backup
put $FILE_NAME
put $FILE_NAME2

quit

SCRIPT

 

rm $FILE_NAME 


테이블 백업을 할때에 export / import 를 이용할 수도 있지만 단순하게 rename 명령어를 이용할 수도 있습니다. 또한 create ~ as select ~ 를 이용할 수도 있습니다.

하지만 오늘은 테이블 명을 변경하고 새로 테이블을 생성함으로써 백업을 할 수 있는 방법을 소개하도록 하겠습니다. 참고로 이 방법은 blob데이타가 많은 경우에 상당히 유용합니다.


Step by Step

1) Query table name and index names linked to the table you want to backup

2) Rename table name

3) Rename indexes' name ( if specified explicitly when it is created )

4) Rename constraints' name ( if specified explicitly when it is created )

4) Use the same DDL used to create the renamed table


※ This way is very simple and fast then using "create table ~ as select * from ~" statement when the table has a huge blob data.



1) 변경하고자하는 테이블에 어떤 인덱스들이 있는지 조회합니다.

SQL > select index_name, table_name from user_indexes;


2) 테이블명을 변경합니다.

SQL > rename old_table to new_table;


3) 인덱스명을 변경합니다. ( 인덱스명이 자동생성된 것이 아닌 경우에만 )

SQL > alter index pk_old_table rename to pk_new_table;


4) 제약사항명을 변경합니다. ( 제약사항명이 자동생성된 것이 아닌 경우에만 )

SQL > select * from user_cons_columns where table_name='{table_name};

SQL > alter table {table name} rename constraint {constraint name} to {new constraint name}


5) 기존 테이블을 생성했던 DDL을 사용하여 테이블을 새로 생성합니다.

SQL > create table .........