ADMIN 이론적인 부분은 그림과 함께해야 이해가 쉽기에 그림파일로 포스팅 합니다.
내용중
같은 색의 글이나 그림은 같은 내용을 설명 하는 것이라고 생각하시면 이해가 쉽습니다.




※ 사전지식 - Redo log file이 돌아가는 과정 참고
2012/01/17 - [Study/Oracle - Admin] - admin 10 - redo log file




1. Archive log mode 



① 고장이 나서 data file 지워짐 → DB정지
② 사전에 [{1}   A] 있는 상태에서 백업을 받아놓음.
③ 백업된 data file을 원래 data file위치에 가져다 놓음.

④ 오라클에게 '고쳐라(Restore)' 명령 → 서버프로세스가 명령받고 고침
⑤ 서버프로세스 : 정상상태를 알고 있어야 한다 → 컨트롤파일 찾아감(제일 마지막 SCN확인_컨트롤파일의 위치=파라미터파일참고)
                  → 컨트롤파일에서 5번까지 작업을 한것을 확인(헤더부분 checkpoint SCN 참고)하고 data file로 찾아감
                  → data file 1번(SCN) 과 컨트롤파일 5번(SCN) 이 다르다. → redo log 찾아감 (2,3,4,5번 찾으러)
                  → 찾아보니 : 5번=E작업함, 4번 = D작업함, 3번 = C작업함, 2번 = ? 이렇게 찾아놓고,
                  → 고치는순서 : data file기준(1번(→ A))부터 순서대로 고쳐나감
                  ※ 2번이 없기 때문에 3번 이후로는 고치지 못함 (있는것만 못고침!!! - 강제수동으로 살리는방법 나중에 배움)
                     오라클의 원리 : 중간 비워지면 못고친다!!
 
Ex) 백업파일 = 1,2,3 : log file = 6,7,8, ~ ,2000
    → 4,5번이 없어서 못고침
    → 2번은어디에? A-1,B-2는 InActive 상태여서 D-4,E-5가 덮어썼다.
 
 

※ Archive redo log mode 설명
오라클 기능중, Redo log file을 덮어쓰기 전에 복사해 놓고 덮어쓴다.
Archive redo log : 복사해놓는 redo log → log switch 가 일어나면 즉시 복사한다(아카이버archiver가 수행함)
Archive redo log mode : Archiving 하는 모드
NoArchive redo log mode : Archiving 안 하는 모드

 
- 장점
 ⓐ 데이터 복구시 매우 안정적이다

 
- 단점
ⓐ 별도의 저장 공간이 추가로 필요하다. → Archive redo log용량 = redo log file용량
ⓑ Archive hang 이 발생할 수 있다.(Archive의특징 : Archiving 되기 전에 InActive를 절대 덮어쓰지 않는다.)
   ※ Archive hang: Archive redo log file 을 저장하는 공간이 가득 찰 경우 archive를 중단하게 된다.→ DB전체 중단됨
ⓒ 관리가 까다롭다.(Archive hang 안걸리게 관리 잘해야 함)

 
DB설치하면 기본모드 : NoArchive mode


 
 
 

해야할일 : Archive mode, NoArchive mode 이해
               Archive mode의 장단점 알기
               DB깔때 담당에게 물어보기 → 담당에게 설명하고 결제 받아두기
               Archive hang 발생 안하도록 관리 해주기


 
 
!! 참고 !!

문제점1 : 그림으로 보면 이해가 쉽지만, 실제 파일은 내용은 열어서 확인 할 수 없다.
해결책1 : 파일을 날짜로 관리한다.

 

문제점2 : Archive redo log의 파일을 지워야 하는 상황이라면?
          상황 = 백업받은 data file의 헤더에 [{SCN:4}    ] 상황. Archive redo log file 1~100번까지 있다.
해결책2 : 지금 백업받는다. 백업받은 data file의 헤더 [{SCN:100}    ] 상황이 된다.
          ▶ 백업파일 이전번호의 Archive redo log file은 지울 수 있다.

보통 : 3개월간의 백업파일은 보관한다.(백업테이프이용)


 
 




실습1 : archive redo log mode 로 변경하기

① DB종료 → ② 파라미터파일 수정 → ③ DB mount → ④ archive log mode 확인 및 변경 → ⑤ DB open


 
 
① DB종료

SQL> shutdown immediate;


 

② 파라미터파일 수정

$ vi inittestdb.ora

log_archive_dest_1='location=/data/arc1'
log_archive_dest_2='location=/data/arc2'
log_archive_format='%s_%t_%r.arc'

log_archive_start=true  →  9i에서 무조건 추가(10g 무조건 쓰지말기)


※ 참고 : 파라미터파일에 아카이브 로그파일 이름 지정할때 옵션
%s : 로그 시퀀스 번호
%t : 쓰레드(thread) 번호, RAC일 경우 제외하고전부 1
%r : incarnation 번호


★ 중요
: archive log file 이 저장되는 경로지정을 안해주게 되면, db_recovery_file_dest에 지정된 위치로 설정이 된다.
  이 디렉토리에는 1)flashback log와 2)rman backup file 이 저장되는데 추가로 3)archive redo log 가 저장되는 상황이 벌어진다.
  오라클을 처음 설치하면 db_recovery_file_dest_size라는 파라미터로 기본 2G로 디렉토리용량이 잡히게 된다.
  그 결과 얼마 안가서 archive hang이 발생하게 된다.
  그러므로 꼭 파라미터파일 수정을 통해 archive log file이 저장되는 경로를 설정해 주어야 한다.

 

③ DB mount

SQL> startup mount


 

④ archive log mode 확인 및 변경

SQL> archive log list;
SQL> alter database archivelog;


 
⑤ DB open

SQL> alter database open;


 
 
 
------ 실습 할때 참고 해 보기 ------
= log switch 들어오면 arc파일 잘 생성되나 확인해보기 =
 

archive파일의 형태
/data/arc1/
98_1_762273838.arc
98_1_762358843.arc
~~~
~~~
9_1_762273838.arc
9_1_762358843.arc



○ archive log file 생성 잘 되나 확인 실습방법
 

        [창1]                                [창2]
$ watch -n 1 'ls /data/arc1'      $ watch -n 1 'ls /data/arc2'


띄워두고

※ 참고 : 각창별로 상황모니터링명령
          $ watch -n 1 'ls /data/arc1'   → 1초에 한번씩 ' '안의 명령어 시행해라.

 

[창3]
로그스위치 발생시켜보기
SQL> alter system switch logfile;

 

※ 스위치 발생 전에
SQL> archive log list;      로 상황 확인 해 보기




문제 : noarchive mode로 변경하라
답 :
파라미터파일에 경로 지정해 준건 따로 건드릴 필요없이
SQL> alter database noarchivelog;


 
 
 






실습2 : archive hang 발생 시 해결 방법
 

-발생-
① Archive hang 발생 (아카이브경로 /data/arc1, /data/arc2)
  ⓐ방법 - 1 : Log switch 를 발생시켜 disk를 채운다.
  ⓑ방법 - 2 : /data 디렉토리의 권한을 일시적으로 root.root로 바꾸어 사용자(oracle.dba) 권한으로는 쓰지 못하게 한다.
                  (=디스크가 가득 차서 더이상 못쓰는효과)

                  # chown -R root.root /data


② 로그 스위치 띄워서 archive hang 발생시키기

SQL> alter system switch logfile;

  
< Hang 발생 - 아무반응없는 상태 = DB 멈춤 >

 


-해결-
③ 여유공간 확보 후 확인
  ⓐ방법 - 1 의 경우 :

$ df -h  → 용량 상황 보기
$ vi /home/oracle/admin/testdb/bdump/alert_testdb.log  → 제일 아래쪽으로 가기
ARCH: Archival stopped, error occurred. Will continue retrying
ORACLE Instance testdb - Archival Error
ORA-16014: log 3 sequence# 18 not archived, no available destinations  → 에러 확인
 
$ cd /data/arc1
$ rm -fr [1-3]*  → 파일을 지워 여유공간 확보
$ df -h
 
SQL> alter system switch logfile;  → 다시 로그스위치 발생 시켜보기
 
< 계속 Hang 이 걸려있다 >


  ⓑ방법 - 2 의 경우

# chown -R oracle.dba /data  → 권한 다시 oracle.dba에게 주기
 
SQL> alter system switch logfile;  → 다시 로그스위치 발생 시켜보기
 
< 계속 Hang 이 걸려있다 >

 
 
④ DB 안끄고 archive hang 해결하기
  : 파라미터 변경 후 archiver 재 시작
 

SQL> alter system set log_archive_dest_state_1=defer;
SQL> alter system set log_archive_dest_state_1=enable;
SQL> alter system set log_archive_dest_state_2=defer;
SQL> alter system set log_archive_dest_state_2=enable;
 
SQL> alter system archive log stop;
SQL> alter system archive log start;
 
SQL> alter system switch logfile;
 → 다시 로그스위치 발생 시켜보기
 
< 정상 작동 한다 - 시간 약간 소요 >


Posted by 딩구르
,