데이터베이스 연구실.log

압축과 아카이브

tar로 묶기, gzip 압축, 목록 확인, 별도 위치 해제, -C로 저장 경로 정리, --exclude와 find 결과 묶기, DBA 파일 예

targziptar -C--excludetar -T

#핵심 요약

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

#묶기와 별도 디렉터리에 풀기

Linux Bash (oracle 홈)객체 또는 설정을 변경함
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로 풀기

Linux Bash (oracle 홈)객체 또는 설정을 변경함
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로 저장 경로 정리하기

Linux Bash (/home/oracle)객체 또는 설정을 변경함
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로 크기와 여유 공간을 먼저 봄

#제외 패턴과 결과 확인

Linux Bash (/home/oracle/tar_lab)객체 또는 설정을 변경함
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)

Linux Bash (oracle)객체 또는 설정을 변경함
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으로 함

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

마지막 갱신 개인 학습 기록이며 운영 환경 적용 전 공식 문서 확인 필요

두 글자 이상 입력, 위아래 화살표로 이동하고 Enter로 열기