ORACLE - DAY 5

BUMSOO·2024년 8월 2일

메모리 관련 에러 발생시 확인

PFILE을 활용한 에러처리

  1. 오라클에 할당된 메모리 공간은 900m 이지만 고의적으로 MEMORY_TARGET, MEMORY_MAX_TARGET을 1G로 설정하였다.

  2. SHUTDOWN 후 다시 STARTUP 하면 오류를 확인할 수 있다.

  3. PFILE에 파라미터 수정후 PFILE로 실행

  4. PFILE을 SPFILE로 CREATE

  5. 그 뒤에는 SHUTDOWN 후 SPFILE로 STARTUP 해주면 된다.

OS SHARED MEMORY공간 RESIZE 처리

  • os 남는 메모리 공간 확인
    free -h
  • os에서 할당한 oracle 디스크 사용 공간 확인
    df -Th
    - 오라클 할당 공간은 /dev/shm 이다

    root 계정에서 진행해야한다
  1. unmount 진행
    [root@oracle19c ~]# umount -l tmpfs

  2. mount 진행
    [root@oracle19c ~]# mount -t tmpfs(Type) shmfs(변경이름) -o size=900m /dev/shm
    - tmpfs 파일시스템 에서 shmfs 파일시스템 이름으로 변경하고 사이즈 크기도 변경하였다.


Control file

  • 작은 binary file

  • 데이터베이스 이름, 데이터베이스 식별자, 생성시간

  • data file, redo log file 이름, 위치정보

  • 현재 redo log file의 sequence 번호

  • checkpoint정보, scn정보

  • backup에 대한 정보

  • noarchive log mode, archivelog mode에 대한 정보

  • control file 다중화 하자
    -이중화 처리 되어있는걸 확인할 수 있다.
    - 변경사항은 모든 control file에 일괄 저장된다.

  • control file 정보 확인

  • control file 중 database의 checkpoint, current_scn 확인하기
    SELECT name, open_mode,checkpoint_change#, current_scn FROM v$database;

  • control file 중 datafile 확인
    SELECT name, checkpoint_change#, status FROM v$datafile;

  • contrl file중 log 와 logfile 조인해서 확인

SELECT a.group#, b.sequence#, a.member, b.bytes/1024/1024 MB, b.archived, b.status,b.first_change#, b.next_change#
FROM v$logfile a, v$log b
WHERE a.group# =   b.group#
ORDER BY 1;

du -hs /u01 : 해당 디렉터리에 할당된 디스크 용량 확인

control file 다중화

  • control_file은 static parameter 이다
  1. control_files 파라미터 수정
ALTER SYSTEM SET control_files = '/u01/app/oracle/oradata/ORA19C/control01.ctl',
'/u01/app/oracle/fast_recovery_area/ORA19C/control02.ctl',
'/home/oracle/backup/control03.ctl'
SCOPE = SPFILE;
  1. 데이터베이스 정상적인 종료
    shutdown immediate

  2. 기존 control file을 새로운 위치에 복사
    cp -v /u01/app/oracle/oradata/ORA19C/control01.ctl /home/oracle/backup/control03.ctl

  3. 오라클 데이터베이스 시작
    startup


Redo Log file

  • 복구 목적을 위한 내용이 저장되어 있는 파일

  • 순환 형식의 구조이기 때문에 최소 2개 이상의 그룹을 생성해야 한다.

  • redo log 파일의 block은 os의 block을 가져와서 생성한다.

  • redo log 파일은 resize가 되지 않는다.

  • online redo log file member 추가

ALTER DATABASE ADD LOGFILE MEMBER
'/u01/app/oracle/fast_recovery_area/ORA19C/onlinelog/redo01.log' TO GROUP 1,
'/u01/app/oracle/fast_recovery_area/ORA19C/onlinelog/redo02.log' TO GROUP 2,
'/u01/app/oracle/fast_recovery_area/ORA19C/onlinelog/redo03.log' TO GROUP 3;

- 해당 명령어로 log 파일 자동 생성

수동 log switch 발생

ALTER SYSTEM SWITH LOGFILE;

  • log switch 자주 발생할 경우 checkpoint not completed 에러가 발생할 수 있다.

online redo log group 추가

ALTER DATABASE ADD LOGFILE GROUP 4(
'/u01/app/oracle/oradata/ORA19C/redo04.log',
'/u01/app/oracle/fast_recovery_area/ORA19C/onlinelog/redo04.log') SIZE 200M;
ALTER DATABASE ADD LOGFILE GROUP 5(
'/u01/app/oracle/oradata/ORA19C/redo05.log',
'/u01/app/oracle/fast_recovery_area/ORA19C/onlinelog/redo05.log') SIZE 200M;
  • 6번 그룹 추가
    ALTER DATABASE ADD LOGFILE GROUP 6( '/u01/app/oracle/oradata/ORA19C/redo06.log') SIZE 200M;
    ALTER DATABASE ADD LOGFILE MEMBER '/u01/app/oracle/fast_recovery_area/ORA19C/onlinelog/redo06.log' TO GROUP 6;

online redo log file group 삭제

  • 그룹의 상태가 inactive, unused 상태인 그룹에 대해서 삭제할 수 있다.
  • 그룹의 상태가 current, active 상태인 그룹에 대해서는 삭제할 수 없다.

ALTER DATABASE DROP LOGFILE GROUP 6;

  • 그룹을 삭제한 후 물리적인 파일을 꼭 지워야 한다.
    [oracle@oracle19c onlinelog]$ rm redo04.log redo05.log
    [oracle@oracle19c ORA19C]$ rm redo04.log redo05.log
  • 그룹 삭제시 상태가 ACTIVE 상태에서 INACTIVE 상태로 빨리 변경이 안되면 FULL CHECKPOINT를 하도록 하자
    ALTER SYSTEM CHECKPOINT;
  • redo log file 멤버 삭제
ALTER DATABASE DROP LOGFILE MEMBER
'/u01/app/oracle/fast_recovery_area/ORA19C/onlinelog/redo01.log',
'/u01/app/oracle/fast_recovery_area/ORA19C/onlinelog/redo02.log',
'/u01/app/oracle/fast_recovery_area/ORA19C/onlinelog/redo03.log' ;
  • memeber 삭제한 후 물리적인 파일 삭제

    rm /u01/app/oracle/fast_recovery_area/ORA19C/onlinelog/redo01.log
    /u01/app/oracle/fast_recovery_area/ORA19C/onlinelog/redo02.log
    /u01/app/oracle/fast_recovery_area/ORA19C/onlinelog/redo03.log


DB(논리적)OS(물리적)
tablespacedata file
segment
extent
blockos block(512 byte)

TABLESPACE

  • 오라클은 데이터를 논리적으로 tablesapce에 저장하고 물리적으로는 data file에 저장한다.
  • tablespace는 하나 이상의 data file 구성한다.
  • tablespace는 하나 이상의 segment들로 구성한다.
  • data file은 오라클 서버에 실행중인 운영체제를 따르는 물리적 구조이다.

SEGMENT

  • segment는 tablespace안의 특정 논리적 저장 영역 구조에 할당된 영역이다.
  • 테이블, 인덱스, undo, LOB등 오라클이 제공하는 논리적 공간을 의미한다.
  • segment는 tablespace에 속한 여러 data file에 확장 할 수 있다.

EXTENT

  • segment안에는 하나 이상의 extent로 구성이 되어있다.
  • extent는 연속된 oracle block으로 구성된다.
  • extent가 먼저 만들어지고 block이 구성된다.

BLOCK

  • 오라클 데이터베이스의 data(row)는 block에 저장된다.
  • 오라클의 최소 I/O(입력/출력) 단위
  • 오라클이 사용할 수 있는 block크기는 2k,4k,8k,16k,32k
  • 기본 블록크기는 db_block_size 파라미터로 설정한다.
  • 오라클의 block은 OS block(512 byte)을 가지고 생성한다.

0개의 댓글