블로그 이미지
redkite

카테고리

분류 전체보기 (291)
00.SI프로젝트 산출물 (0)
00.센터 운영 문서 (0)
01.DBMS ============.. (0)
01.오라클 (117)
01.MS-SQL (15)
01.MySQL (30)
01.PostgreSql (0)
01.DB튜닝 (28)
====================.. (0)
02.SERVER ==========.. (0)
02.서버-공통 (11)
02.서버-Linux (58)
02.서버-Unix (12)
02.서버-Windows (2)
====================.. (0)
03.APPLICATION =====.. (11)
====================.. (0)
04.ETC =============.. (0)
04.보안 (5)
====================.. (0)
05.개인자료 (1)
06.캠핑관련 (0)
07.OA관련 (1)
Total
Today
Yesterday

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

최근에 올라온 글

VMware 백업 복구 작업

아래 스크립트는 질문 올라온 것을 확인하고 노트북 vmware의 oracle 9.2.0.7 에서 만들어보았습니다.


온라인 백업은 말씀한 것과 같이 파라메터 파일 , 콘트롤 파일, 모든 데이터파일 , 아카이브로그를
백업후 다른 서버로 이동시키면 다른 서버로 복구할 수 있습니다.

하지만 online backup시에 datafile, controlfile만을 백업하므로 current redo log가 없으므로
until cancel 복구를 해야 합니다.(rman 백업도 마찬가지)

1) init파일,DB file, controlfile을 다른서버로 이동시킵니다.
보통 controlfile백업은 alter database backup controlfile to '~~'; 이렇게 하기 때문에
하나만 복사하므로 이것을 추가 복사해서 controlfile의 경로에 복사해줍니다.
2) init파일에 controlfile의 경로, background_dump_dest, user_dump_dest, core_dump_dest, log_archive_dest 를
경로에 맞게 지정해줍니다.
3) DB를 mount상태로 올립니다. 만약 mount하는 동안 에러가 난다면 controlfile에서
문제가 생겼으므로 controlfile의 백업을 확인합니다.
4) datafile, redolog file의 file_name을 변경합니다.
select name from v$datafile;
select member from v$logfile;
alter database rename file '현재경로' to '이동시킨 경로';
alter database rename file '현재경로' to '이동시킨 경로';
...
단 여기에서 tempfile은 백업대상도 아니고 rename이 안되므로 새로 생성해 주어야 합니다.
select name from v$tempfile;
select * from sys.props$;에서 default temporary tablespace를 찾거나
또는 select distiinct temporary_tablespace from dba_users 에서 찾습니다.
tempfile을 추가하는 방법은 더이상 말씀 안드립니다. NBR과정의 기본이니까요..
5) DB의 archive file을 log_archive_dest 에 설정된 곳으로 이동시키고 recovery를 수행합니다.
recover database until cancel using backup controlfile;
...
마지막 archvie까지 적용후 cancel하기
alter database open resetlogs;
resetlogs open하기


# 온라인 백업 스크립트(데이터파일, 컨트롤파일만 백업)
작업 이전에 /backup , /backup/control 이라는 디렉토리 생성

- 백업 메인
vi /backup/onbackup.sh
export LANG=C
export ORACLE_HOME=/u/ora9i/product/9.2.0
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=PROD

sh -x /backup/1_onbackup.sh
sh -x /backup/2_cp_backup.sh
sh -x /backup/3_control_backup.sh
sh -x /backup/4_offbackup.sh

- 백업 모드 변경
vi /backup/1_onbackup.sh
export LANG=C
export ORACLE_HOME=/u/ora9i/product/9.2.0
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=PROD

# backup mode on
sqlplus /nolog << EOF1
conn /as sysdba
set head off
set feedback off
set time off
set timing off
set echo off
spool /tmp/backup_online.tmp
select 'alter tablespace '||tablespace_name||' begin backup;' from dba_tablespaces where status='ONLINE' and contents 'TEMPORARY';
spool off
!cat /tmp/backup_online.tmp|grep -v spool|grep -v SQL > /tmp/backup_online.sql
@/tmp/backup_online.sql
exit
EOF1

- 데이터파일 백업할 쿼리
vi /backup/2_cp_backup.sql

select 'mkdir /backup/'||to_char(sysdate,'YYYYMMDD_HH24MI') from dual;
select 'cp '||name||' /backup/'||to_char(sysdate,'YYYYMMDD_HH24MI') from v$datafile;

- 데이터파일 copy하는 스크립트
vi /backup/2_cp_backup.sh

# cp backup, mkdir /backup/SYSDATE directory
export LANG=C
export ORACLE_HOME=/u/ora9i/product/9.2.0
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=PROD

sqlplus /nolog << EOF2
conn /as sysdba
set head off
set feedback off
set time off
set timing off
set echo off
spool /tmp/backup_script.tmp
@2_cp_backup.sql
spool off

!cat /tmp/backup_script.tmp |grep -v spool |grep -v SQL > /tmp/backup_script.sh
!chmod 755 /tmp/backup_script.sh
exit
EOF2
sh -x /tmp/backup_script.sh

- 컨트롤파일 백업

vi /backup/3_control_backup.sh

export LANG=C
export ORACLE_HOME=/u/ora9i/product/9.2.0
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=PROD

# controlfile backup
sqlplus /nolog << EOF3
conn /as sysdba
set head off
set feedback off
set time off
set timing off
set echo off
spool /tmp/control_backup.tmp
select 'alter database backup controlfile to ''/backup/control/'||to_char(sysdate,'YYYYMMDD_HH24MI')||'.ctl'';' from dual;
spool off
!cat /tmp/control_backup.tmp |grep -v spool|grep -v SQL > /tmp/control_backup.sql
@/tmp/control_backup.sql
exit
EOF3

- 백업모드 offline하기

vi /backup/4_offbackup.sh

export LANG=C
export ORACLE_HOME=/u/ora9i/product/9.2.0
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=PROD

# backup mode off
sqlplus /nolog << EOF4
conn /as sysdba
set head off
set feedback off
set time off
set timing off
set echo off
spool /tmp/backup_offline.spool
select 'alter tablespace '||tablespace_name||' end backup;' from dba_tablespaces where status='ONLINE' and contents 'TEMPORARY';
spool off
!cat /tmp/backup_offline.spool |grep -v SQL > /tmp/backup_offline.sql
@/tmp/backup_offline.sql
exit
EOF4


그리고 만약 파일리스트만 내리고 veritas netbackup으로 백업이 가능하다면 아래와 같이 하면
됩니다. veritas netbackup에서는 file리스트만 파일로 떨구면 그 파일을 백업해줍니다.

archvie backup은 아래와 같이 하면 되는데 아래는 archive file의 backup list만 만듭니다.
수정해서 backup list에서 YYYYMMDD_HH24MI의 분단위 디렉토리를 만들고 archive file을
다른 서버로 cp복사하도록 하면 됩니다. 꼭 아래 스크립트는 테스트 후에 사용하시길
바랍니다...

# 데이터파일 백업과 archvie백업 쉘은 아래와 같습니다.

1. begin backup할 스크립트를 수행합니다.
dbbegin.sh

TBS_INFO=/tmp/tbs_info~.$$

sqlplus /nolog << EOF > $TBS_INFO 2>&1
connect / as sysdba;
select 'tablespace '||tablespace_name from dba_tablespaces;
disconnect;
exit
EOF

cat $TBS_INFO | awk ''$1 == "tablespace" { print $2 }'' | while read LINE
do
export LINE
echo "Issuing alter tablespace $LINE begin backup;"
/usr/openv/netbackup/oracle/table_begin.sh
done

\rm $TBS_INFO

2. 위에서의 table_begin.sh 는 아래와 같습니다.

table_begin.sh

sqlplus /nolog << EOF > /dev/null 2>&1
connect / as sysdba;
alter tablespace $LINE begin backup;
disconnect;
exit
EOF

3. dbbegin.sh 을 하게 되면 테이블스페이스가 backup mode가 됩니다.

4. 데이터파일 리스트를 추출합니다.
datafile_list

#!/bin/ksh

DATAFILE_INFO=/tmp/datafile_info~.$$
datafile_list=/tmp/PROD_data_list

sqlplus /nolog << EOF > $DATAFILE_INFO 2>&1
connect / as sysdba;
select ''datafile_name ''||file_name from dba_data_files;
select ''logfile_name ''||member from v\$logfile;
select ''controlfile_name ''||name from v\$controlfile;
disconnect
EOF

cat $DATAFILE_INFO | awk ''$1 == "datafile_name" {print $2}''

/tmp/PROD_dbfile_list

cat $DATAFILE_INFO | awk ''$1 == "logfile_name" {print $2}''

/tmp/PROD_logfile_list

cat $DATAFILE_INFO | awk ''$1 == "controlfile_name" {print $2}''

/tmp/PROD_controlfile_list


cat /tmp/PROD_dbfile_list > $datafile_list
cat /tmp/PROD_logfile_list >> $datafile_list
cat /tmp/PROD_controlfile_list >> $datafile_list

\rm $DATAFILE_INFO

5. 데이터파일 리스트를 netbackup에서 tape백업을 하도록 합니다.
veritas netbackup에서 리스트만 주면 백업해줌..

6. end backup 을 만드는 스크립트를 수행
dbend.sh
#!/bin/ksh

TBS_INFO=/tmp/tbs_info~.$$

sqlplus /nolog << EOF > $TBS_INFO 2>&1
connect / as sysdba;
select ''tablespace ''||tablespace_name from dba_tablespaces;
disconnect;
exit
EOF

cat $TBS_INFO |awk ''$1 == "tablespace" { print $2 }''|while read LINE
do
export LINE
echo "Issuing alter tablespace $LINE end backup;"
/usr/openv/netbackup/oracle/table_end.sh
done
\rm $TBS_INFO

7. 위에서 table_end.sh 는 아래와 같습니다.

table_end.sh
sqlplus /nolog << EOF > /dev/null 2>&1
connect / as sysdba;
alter tablespace $LINE end backup;
disconnect;
exit
EOF

6. archive log가 없을 수 있으므로 수동으로 log switch 해줍니다.

arch_list_1
#!/bin/ksh

sqlplus /nolog << EOF > $LOG
connect / as sysdba;
alter system switch logfile;
disconnect;
exit;
EOF

7. archvie file의 리스트를 뽑아냅니다.

arch_list

#!/bin/ksh

TBS_INFO=/tmp/tbs_info~.$$
ARCHIVE_DIR=/tmp/PROD_archive_dir.txt

sqlplus /nolog << EOF > $LOG 2>&1
connect / as sysdba;
alter system switch logfile;
disconnect;
exit;
EOF

sqlplus /nolog << EOF > $TBS_INFO 2>&1
connect / as sysdba;
archive log list;
disconnect;
exit;
EOF

cat $TBS_INFO | awk ''$1 == "Archive" {print $3}'' > $ARCHIVE_DIR

ARCH_DIR=
cat $ARCHIVE_DIR

ARCH_LIST_PROD=
ls -ltr $ARCH_DIR/*.arc |wc -l

echo "ARCH_LIST_PROD : $ARCH_LIST_PROD" >> $LOG

ARCH_LIST_PROD_1=
expr$ARCH_LIST_PROD - 1

echo "ARCH_LIST_PROD_1 : $ARCH_LIST_PROD_1" >> $LOG

/usr/bin/ls -ltr $ARCH_DIR/*.arc |awk ''{print $9}'' |head -
$ARCH_LIST_PROD_1 > /tmp/PROD_arch_list

echo "Archive Log List Print.....O.k....
/usr/bin/date +%c
" >> $LOG
#\rm $TBS_INFO $ARCHIVE_DIR

8. 위에서 /tmp/PROD_arch_list에 있는 archive리스트를 veritas netbackup에서 넣어주면 tape백업이 됩니다.그리고 특이한 것은 archvie file은 archive file을 백업했으면
지우도록 설정하면 되겠지요.

https://kr.forums.oracle.com/forums/thread.jspa?threadID=419569

 

'01.오라클 > 003.DB 백업 및 복구' 카테고리의 다른 글

[오라클]아카이브 복구  (0) 2012.12.19
[오라클]아카이브 모드 변경  (0) 2012.12.19
[오라클]아카이브 모드 변경  (0) 2012.12.19
[오라클]FlashBack  (0) 2012.12.19
[오라클]Data Pump  (0) 2012.12.19
Posted by redkite
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함