압축과 아카이브
tar로 묶기, gzip 압축, 목록 확인, 별도 위치 해제, -C로 저장 경로 정리, --exclude와 find 결과 묶기, DBA 파일 예
#핵심 요약
tar -cvf는 묶기, -czvf는 gzip 압축까지, -tzf는 풀지 않고 목록 보기, -xzf는 풀기임
백업을 풀 때는 목록을 먼저 보고, 운영 설정 경로가 아닌 새 디렉터리에 풀어 내용을 확인함
-C로 기준 디렉터리를 정하면 아카이브 안에 /home/oracle/... 같은 긴 경로 대신 필요한 경로만 남음
#개념과 동작 원리
| 옵션 | 의미 |
|---|---|
c, x, t |
생성, 해제, 목록 |
f 파일 |
아카이브 파일 이름, 옵션 묶음의 맨 끝에 둠 |
z |
gzip 압축, 해제 |
v |
처리하는 파일 이름 출력 |
-C 디렉터리 |
생성 때는 그 디렉터리로 옮겨 가 묶고, 해제 때는 그 안에 풂 |
--exclude=패턴 |
패턴에 맞는 파일을 빼고 묶음 |
-T 목록파일 |
목록 파일에 적힌 경로들을 묶음 |
tar만으로는 압축하지 않고 여러 파일을 하나로 묶기만 함.tar.gz는 묶은 것을 gzip으로 압축한 것이며 실제 형식은 file 명령으로 확인함
#필수 명령어 또는 SQL
#묶기와 별도 디렉터리에 풀기
tar -cvf tns_admin_backup.tar conf
mkdir tns_restore_check
cd tns_restore_check
tar -xvf ../tns_admin_backup.tar
ls결과 해석:
과거 tnsnames.ora, sqlnet.ora가 든 conf를 압축 없이 묶은 백업을, 운영 중인 $TNS_ADMIN에 영향이 없도록 새 디렉터리에서 푸는 과제임
아카이브에 conf/처럼 상대 경로가 저장돼 있으면 현재 디렉터리 아래에 그 구조대로 풀림
실습 기록의 해제 목록에는 앞 단계에서 만든 적 없는 conf/network/listener.conf, conf/db/init.conf도 나와, 같은 이름의 디렉터리에 다른 실습 파일이 남아 있던 것으로 보임
#목록 확인 뒤 -C로 풀기
tar -czvf ctl_backup.tar.gz ctl
file ctl_backup.tar.gz
tar -tzf ctl_backup.tar.gz
mkdir restore_check
tar -xzf ctl_backup.tar.gz -C restore_check
ls restore_check결과 해석:
실습 기록: file은 gzip compressed data로 형식을 보여 주고, -tzf 목록은 ctl/, ctl/controlfile_backup.ctl
-C restore_check로 cd 없이 지정한 디렉터리 안에 풂
해제 대상 디렉터리는 미리 만들어 둬야 함
이 예의 파일은 텍스트라 RMAN 복원 가능 여부와는 관계없음
#-C로 저장 경로 정리하기
tar -czf gg_trail.tar.gz -C /home/oracle/gg_lab dirdat
tar -tzf gg_trail.tar.gz
tar -czf alert_$(date +%Y%m%d).tar.gz -C /u01/app/oracle/diag/rdbms/<db_name>/<SID> trace결과 해석:
현재 위치는 그대로 두고 -C로 상위 디렉터리에 들어가 묶으므로, 아카이브 목록이 dirdat/, dirdat/aa000001처럼 짧게 남음
절대 경로로 묶으면 GNU tar는 맨 앞 /를 떼고 home/oracle/gg_lab/dirdat/...처럼 긴 경로로 저장해, 다른 서버에서 풀 때 경로가 번거로워짐
alert 로그 디렉터리(trace) 전체를 오늘 날짜가 붙은 이름으로 묶는 것이 수업의 DBA 백업 패턴 예임
trace 디렉터리는 클 수 있으므로 du -sh로 크기와 여유 공간을 먼저 봄
#제외 패턴과 결과 확인
tar -czvf tar_lab_no_tmp.tar.gz --exclude='tmp/*' conf logs sql tmp backup
mkdir confirm
tar -xvf tar_lab_no_tmp.tar.gz -C /home/oracle/tar_lab/confirm
ls confirm/tmp결과 해석:
아카이브를 confirm에 풀어 tmp 아래가 비었는지 확인하는 과제임
과제에 지정된 생성 명령은 확인 불가
실습 기록: 해제 목록에 tmp/와 backup/ 디렉터리 자체는 있고 그 안은 비어 있음'tmp/*'처럼 내용만 빼면 빈 디렉터리는 남고, 'tmp'로 빼면 디렉터리째 빠짐
tar -xvf로 .tar.gz를 푼 것도 성공했는데, GNU tar는 해제 때 압축 형식을 스스로 알아봄
#find 결과를 묶기 (-T)
find /u01/app/oracle/diag/rdbms/<db_name>/<SID>/trace -name "*.trc" -mtime +30 > /home/oracle/old_trc.lst
wc -l /home/oracle/old_trc.lst
tar -czf /home/oracle/old_trc_$(date +%Y%m%d).tar.gz -T /home/oracle/old_trc.lst결과 해석:
find 목록을 파일로 남겨 개수를 확인한 뒤 -T로 묶음
30일 지난 .trc만 골라 묶는 과제의 정답은 기재 없음
공백이 든 파일 이름까지 다루려면 find ... -print0 | tar --null -T - -czf ...를 씀
묶은 뒤 trace 파일 자체를 지우는 것은 별도 단계이며, trace 정리는 adrci purge를 우선함
#사용 조건과 주의사항
해제는 같은 이름의 파일을 묻지 않고 덮어쓰므로 운영 경로에서 바로 풀지 않음
아카이브를 만든 뒤에는 tar -tzf로 목록을 보고, 필요하면 별도 디렉터리에 풀어 diff로 비교함
열려 있는 DB의 데이터 파일을 tar로 묶은 것은 일관된 백업이 아니므로 DB 백업은 RMAN으로 함