database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
ㆍDB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DB2 Q&A 3343 게시물 읽기
No. 3343
DB2 테이블 단위 백업을 위한 스크립트 질문
작성자
최정곤(choigo86)
작성일
2012-12-21 12:07
조회수
7,234

안녕하세요?

초짜 개발자가 고수님들께 감히 질문 올립니다.

 

다름이 아니라 DB2 의 특정 테이블의 데이터를 백업하고 싶습니다.

제가 검색을 통해서 줏어들은 정보로는 DB2 내 명령어로 테이블 단위 백업을 없으며, 스크립트를 통해서 구현해야 한다고 들었습니다.

그와 관련된 스크립트 내용은 아래와 같습니다.

 

---------------------------- 아            래 -----------------------------

db2 connect to dbname> /dev/null
 
db2 -x "select rtrim(tabschema)||'.'||tabname from syscat.tables where tabschema not like 'SYS%'" > tab.lst
 
for i in `cat tab.lst`
do
   db2 "export to $i.ixf of ixf select * from $i" >> exp.log
done

---------------------------------------------------------------------------

 

솔직히 말씀드려서, 제가 DB 에 대해서는 굉장히 지식이 얇은지라 위 스크립트 내용이 잘 해석이 안됩니다. ㅜㅜ;

대상이 되는 테이블은 from 절 뒤겠죠? 그리고 각 로그와 백업 파일은 어느 위치에 생성이 되는지 알 수 있을까요?

백업 파일을 DB2 스페이스에 적재하는 것이 아니고, 특정 서버 컴퓨터 하드디스크에 적재하는 방법이 있을까요?

 

이번 기회에 DB2 에 대해서 많이 공부하고 싶습니다. 도움 부탁드립니다.

 

스크립트가 완성되면 주기적으로 백업 하는 서비스를 구성하고 싶습니다. INSERT_DATE 컬럼을 기준으로 Append 되는 부분만 부분 백업이 가능하겠죠?

이 글에 대한 댓글이 총 4건 있습니다.

  안녕하세요 제가 아는 한도내에서 하나씩 설명드리겠습니다.

 

db2 connect to dbname> /dev/null
dbname이라는 데이터베이스에 접속합니다.
 
db2 -x "select rtrim(tabschema)||'.'||tabname from syscat.tables where tabschema not like 'SYS%'" > tab.lst
테이블 스키마가 SYS인 테이블을 제외한 모든 테이블 리스트를 가져와 tab.lst 파일에 저장합니다. SYS로 시작하는 스키마는 일반적으로 DB2의 메타데이터입니다.
 
for i in `cat tab.lst` 
do
   db2 "export to $i.ixf of ixf select * from $i" >> exp.log 
done
tab.lst 파일에 저장된 테이블 목록대로 테이블 데이터를 파일로 내려받습니다. 파일명에는 파일시스템 경로를 포함해서 쓸 수 있습니다. 여기서 $i.ixf 는 파일명을 뜻하며 of ixf는 파일형식을 뜻합니다. ixf는 바이너리 형식입니다. 만일 파일을 아스키 형식으로 받을때는 of del옵션을 사용합니다. (예. db2 "export to $i.del of del select *
 from $i" ) 경로없이 파일명만 입력한 경우에는 파일은 명령을 수행한 디렉토리에 생성됩니다.

db2 export 를 수행한 로그는 위의 명령에서는 exp.log 파일에 기록됩니다. 모든 로그를 한 파일에서 보려면 위의 방식이 좋겠죠. 만일 테이블 별로 로그를 따로 남기고 싶으시다면 다음과 같이 messages 옵션을 추가하여 수행합니다.
(예. db2 "export to $i.del of del messages $i.msg select * from $i" )

참고하시기 바랍니다. 그리고 

INSERT_DATE 컬럼을 기준으로 Append 되는 부분만 부분 백업이 가능하겠죠?
>> INSERT_DATE 컬럼 기준으로 Append 되는 부분(데이터?)을 SELECT 문장으로 필터링만 할 수 있다면 충분히 부분 백업이 가능합니다.

 

제가 잘못 이해한 내용이 있다면 말씀해주세요

정상규(pajama)님이 2012-12-21 23:09에 작성한 댓글입니다.

정상규님 감사합니다.

그렇다면 예를 들어서 ABC 라는 스키마의 ATable 이라는 테이블을 백업한다면 아래와 같이 구성하면 될까요?

db2 -x "select rtrim(tabschema)||'.'||tabname from ABC.ATable where insert_date > '20121220235959' " > tab.lst

또는?

db2 -x "select * from ABC.ATable where insert_date > '20121220235959' " > tab.lst

 혹 틀린 부분이 있다면 지적 부탁드립니다. 행복한 하루 되세요~

최정곤(choigo86)님이 2012-12-26 09:56에 작성한 댓글입니다.
이 댓글은 2012-12-26 09:57에 마지막으로 수정되었습니다.

 

 

ABC스키마의 ATable 이라는 테이블을 백업한다면 아래와 같이 테이블명을 추출할 수 있습니다.

db2 -x "select rtrim(tabschema)||'.'||tabname from syscat.tables where tabschema = 'ABC' and tabname = 'ATable' > tab.lst

 

이제 tab.lst 파일의 테이블 명에 대해 insert_date 컬럼에 대한 조건을 지정하여 백업을 다음과 같이 수행합니다.

for i in `cat tab.lst` 
do
   db2 "export to $i.ixf of ixf select * from $i where insert_date > '20121220235959'" >> exp.log 
done

 

 

 

정상규(pajama)님이 2012-12-26 13:06에 작성한 댓글입니다.

와~ 정상규님의 지식과 신속함에 놀랐습니다!

귀한 지식 공유해주셔서 정말 감사드립니다. :D

최정곤(choigo86)님이 2012-12-26 13:24에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
3354조건을 어떻게 해야할지 모르겠네요.
왕태봉
2013-02-23
4961
3353연속된 JOIN 일 경우의 기준 테이블 [1]
dlkfjlfj
2013-02-09
6114
3352ODBC로 DB2연결하기 오류 [1]
달나라
2013-01-17
5220
3343DB2 테이블 단위 백업을 위한 스크립트 질문 [4]
최정곤
2012-12-21
7234
3262db2 리스토어를 하는데 자꾸 에러가 납니다. [2]
한연수
2012-11-30
4291
3200[질문]델파이에서 DB2 프로시저 사용하기
김희라
2012-10-29
4281
3199DB2 관련 완전 초보적인 질문입니다. [1]
이태현
2012-09-25
4661
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.055초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다