Oracle DB 인스턴스에 대한 공통 로그 관련 작업 수행 - Amazon Relational Database Service

Oracle DB 인스턴스에 대한 공통 로그 관련 작업 수행

그 다음에는 Oracle을 실행하는 Amazon RDS DB 인스턴스에서 로깅과 관련된 특정 공통 DBA 작업을 수행하는 방법을 알아봅니다. 관리형 서비스 환경을 제공하기 위해 Amazon RDS는 DB 인스턴스에 대해 shell 액세스를 제공하지 않으며, 고급 권한이 필요한 특정 시스템 절차와 테이블에 대한 액세스를 제한합니다.

자세한 내용은 Oracle 데이터베이스 로그 파일 섹션을 참조하세요.

강제 로깅 설정

강제 로깅 모드에서는 Oracle이 임시 테이블스페이스와 임시 세그먼트의 변경 사항을 제외하고 데이터베이스의 모든 변경 사항을 기록합니다(NOLOGGING 절은 무시됩니다). 자세한 내용은 Oracle 문서의 Specifying FORCE LOGGING Mode 단원을 참조하세요.

강제 로깅을 설정하려면 Amazon RDS 프로시저 rdsadmin.rdsadmin_util.force_logging을 사용합니다. force_logging 프로시저에는 다음과 같은 파라미터가 있습니다.

파라미터 이름 데이터 형식 기본값 설명

p_enable

부울

true

아니요

true로 설정하면 데이터베이스를 강제 로깅 모드로 설정하고, false로 설정하면 데이터베이스를 강제 로깅 모드에서 해제합니다.

다음은 데이터베이스를 강제 로깅 모드로 설정하는 예제입니다.

EXEC rdsadmin.rdsadmin_util.force_logging(p_enable => true);

보충 로깅 설정

보충 로깅을 활성화하면 LogMiner가 연결된 행과 클러스터링된 테이블을 지원하는 데 필요한 정보를 갖게 됩니다. 자세한 내용은 Oracle 문서의 Supplemental Logging을 참조하세요.

Oracle 데이터베이스는 기본적으로 보충 로깅이 활성화되어 있지 않습니다. 보충 로깅을 활성화 또는 비활성화하려면 Amazon RDS 프로시저 rdsadmin.rdsadmin_util.alter_supplemental_logging을 사용합니다. Amazon RDS가 Oracle DB 인스턴스를 위해 보관된 다시 실행 로그 보존을 관리하는 방법에 대한 자세한 내용은 보관된 다시 실행 로그 보존 단원을 참조하세요.

alter_supplemental_logging 프로시저에는 다음과 같은 파라미터가 있습니다.

파라미터 이름 데이터 형식 기본값 필수 설명

p_action

varchar2

'ADD'는 보충 로깅을 추가하며, 'DROP'은 보충 로깅을 드롭합니다.

p_type

varchar2

null

아니요

보충 로깅 유형입니다. 유효한 값은 'ALL', 'FOREIGN KEY', 'PRIMARY KEY', 'UNIQUE' 또는 PROCEDURAL입니다.

다음 예에서는 보충 로깅을 활성화합니다.

begin rdsadmin.rdsadmin_util.alter_supplemental_logging( p_action => 'ADD'); end; /

다음 예에서는 고정 길이 최대 크기 열 전체에 대해 보충 로깅을 활성화합니다.

begin rdsadmin.rdsadmin_util.alter_supplemental_logging( p_action => 'ADD', p_type => 'ALL'); end; /

다음 예에서는 기본 키 열에 대한 보충 로깅을 활성화합니다.

begin rdsadmin.rdsadmin_util.alter_supplemental_logging( p_action => 'ADD', p_type => 'PRIMARY KEY'); end; /

온라인 로그 파일 전환

로그 파일을 전환하려면 Amazon RDS 프로시저 rdsadmin.rdsadmin_util.switch_logfile을 사용합니다. switch_logfile 프로시저에는 파라미터가 없습니다.

다음은 로그 파일을 바꾸는 예제입니다.

EXEC rdsadmin.rdsadmin_util.switch_logfile;

온라인 다시 실행 로그 추가

Oracle을 실행하는 Amazon RDS DB 인스턴스는 각각 128MB인 온라인 다시 실행 로그 4개로 시작합니다. 다른 다시 실행 로그를 추가하려면 Amazon RDS 프로시저 rdsadmin.rdsadmin_util.add_logfile을 사용합니다.

add_logfile 프로시저에는 다음과 같은 파라미터가 있습니다.

참고

파라미터는 함께 사용할 수 없습니다.

파라미터 이름 데이터 형식 기본값 필수 설명

bytes

positive

null

아니요

로그 파일 크기(바이트)입니다.

p_size

varchar2

로그 파일 크기입니다. 크기는 킬로바이트(K), 메가바이트(M)나 기가바이트(G)로 설정할 수 있습니다.

다음 명령을 실행하면 100MB 로그 파일이 추가됩니다.

EXEC rdsadmin.rdsadmin_util.add_logfile(p_size => '100M');

온라인 다시 실행 로그 드롭

다시 실행 로그를 삭제하려면 Amazon RDS 프로시저 rdsadmin.rdsadmin_util.drop_logfile을 사용합니다. drop_logfile 프로시저에는 다음과 같은 파라미터가 있습니다.

파라미터 이름 데이터 형식 기본값 필수 설명

grp

positive

로그의 그룹 번호입니다.

다음 예에서는 그룹 번호가 3인 로그를 드롭합니다.

EXEC rdsadmin.rdsadmin_util.drop_logfile(grp => 3);

상태가 미사용이거나 비활성인 로그만 드롭할 수 있습니다. 다음 예에서는 로그의 상태를 가져옵니다.

SELECT GROUP#, STATUS FROM V$LOG; GROUP# STATUS ---------- ---------------- 1 CURRENT 2 INACTIVE 3 INACTIVE 4 UNUSED

온라인 다시 실행 로그 크기 조절

Oracle을 실행하는 Amazon RDS DB 인스턴스는 각각 128MB인 온라인 다시 실행 로그 4개로 시작합니다. 다음은 Amazon RDS 프로시저를 사용하여 로그를 각각 128MB에서 512MB로 조정하는 예제입니다.

/* Query V$LOG to see the logs. */ /* You start with 4 logs of 128 MB each. */ SELECT GROUP#, BYTES, STATUS FROM V$LOG; GROUP# BYTES STATUS ---------- ---------- ---------------- 1 134217728 INACTIVE 2 134217728 CURRENT 3 134217728 INACTIVE 4 134217728 INACTIVE /* Add four new logs that are each 512 MB */ EXEC rdsadmin.rdsadmin_util.add_logfile(bytes => 536870912); EXEC rdsadmin.rdsadmin_util.add_logfile(bytes => 536870912); EXEC rdsadmin.rdsadmin_util.add_logfile(bytes => 536870912); EXEC rdsadmin.rdsadmin_util.add_logfile(bytes => 536870912); /* Query V$LOG to see the logs. */ /* Now there are 8 logs. */ SELECT GROUP#, BYTES, STATUS FROM V$LOG; GROUP# BYTES STATUS ---------- ---------- ---------------- 1 134217728 INACTIVE 2 134217728 CURRENT 3 134217728 INACTIVE 4 134217728 INACTIVE 5 536870912 UNUSED 6 536870912 UNUSED 7 536870912 UNUSED 8 536870912 UNUSED /* Drop each inactive log using the group number. */ EXEC rdsadmin.rdsadmin_util.drop_logfile(grp => 1); EXEC rdsadmin.rdsadmin_util.drop_logfile(grp => 3); EXEC rdsadmin.rdsadmin_util.drop_logfile(grp => 4); /* Query V$LOG to see the logs. */ /* Now there are 5 logs. */ select GROUP#, BYTES, STATUS from V$LOG; GROUP# BYTES STATUS ---------- ---------- ---------------- 2 134217728 CURRENT 5 536870912 UNUSED 6 536870912 UNUSED 7 536870912 UNUSED 8 536870912 UNUSED /* Switch logs so that group 2 is no longer current. */ EXEC rdsadmin.rdsadmin_util.switch_logfile; /* Query V$LOG to see the logs. */ /* Now one of the new logs is current. */ SQL>SELECT GROUP#, BYTES, STATUS FROM V$LOG; GROUP# BYTES STATUS ---------- ---------- ---------------- 2 134217728 ACTIVE 5 536870912 CURRENT 6 536870912 UNUSED 7 536870912 UNUSED 8 536870912 UNUSED /* If the status of log 2 is still "ACTIVE", issue a checkpoint to clear it to "INACTIVE". */ EXEC rdsadmin.rdsadmin_util.checkpoint; /* Query V$LOG to see the logs. */ /* Now the final original log is inactive. */ select GROUP#, BYTES, STATUS from V$LOG; GROUP# BYTES STATUS ---------- ---------- ---------------- 2 134217728 INACTIVE 5 536870912 CURRENT 6 536870912 UNUSED 7 536870912 UNUSED 8 536870912 UNUSED # Drop the final inactive log. EXEC rdsadmin.rdsadmin_util.drop_logfile(grp => 2); /* Query V$LOG to see the logs. */ /* Now there are four 512 MB logs. */ SELECT GROUP#, BYTES, STATUS FROM V$LOG; GROUP# BYTES STATUS ---------- ---------- ---------------- 5 536870912 CURRENT 6 536870912 UNUSED 7 536870912 UNUSED 8 536870912 UNUSED

보관된 다시 실행 로그 보존

보관된 다시 실행 로그는 Oracle LogMiner(DBMS_LOGMNR) 같은 제품에서 사용할 수 있도록 DB 인스턴스에 로컬 보존할 수 있습니다. 다시 실행 로그를 보존하면 LogMiner를 사용하여 로그를 분석할 수 있습니다. 자세한 내용은 Oracle 문서의 Using LogMiner to Analyze Redo Log Files 단원을 참조하세요.

보관된 다시 실행 로그를 보존하려면 Amazon RDS 프로시저 rdsadmin.rdsadmin_util.set_configuration을 사용합니다. set_configuration 프로시저에는 다음과 같은 파라미터가 있습니다.

파라미터 이름 데이터 형식 기본값 필수 설명

name

varchar

업데이트할 구성의 이름입니다.

value

varchar

구성 값입니다.

다음 예에서는 24시간 동안 다시 실행 로그를 보존합니다.

begin rdsadmin.rdsadmin_util.set_configuration( name => 'archivelog retention hours', value => '24'); end; / commit;
참고

변경 사항을 적용하려면 커밋해야 합니다.

DB 인스턴스 다시 실행 로그의 보관 기간을 보려면 Amazon RDS 프로시저 rdsadmin.rdsadmin_util.show_configuration을 사용합니다.

다음 예에서는 로그 보관 시간을 보여줍니다.

set serveroutput on EXEC rdsadmin.rdsadmin_util.show_configuration;

archivelog retention hours의 현재 설정이 출력됩니다. 다음 출력은 보관된 다시 실행 로그가 48시간 동안 보존됨을 보여줍니다.

NAME:archivelog retention hours VALUE:48 DESCRIPTION:ArchiveLog expiration specifies the duration in hours before archive/redo log files are automatically deleted.

보관된 다시 실행 로그는 DB 인스턴스에 보존되므로 보존된 로그를 수용하기에 충분한 스토리지가 DB 인스턴스에 할당되어 있는지 확인해야 합니다. 지난 X 시간 동안 DB 인스턴스가 사용한 공간을 측정하려면 X 자리에 사용 시간을 대입하여 다음 쿼리를 실행합니다.

SELECT SUM(BLOCKS * BLOCK_SIZE) bytes FROM V$ARCHIVED_LOG WHERE FIRST_TIME >= SYSDATE-(X/24) AND DEST_ID=1;

RDS for Oracle은 DB 인스턴스의 백업 보존 기간이 0보다 큰 경우에만 아카이빙된 다시 실행 로그를 생성합니다. 기본적으로 백업 보존 기간은 0보다 큽니다.

아카이빙된 로그 보존 기간이 만료되면 RDS for Oracle은 DB 인스턴스에서 아카이빙된 다시 실행 로그를 제거합니다. DB 인스턴스를 특정 시점으로 복원하려면 Amazon RDS는 백업 보존 기간에 따라 아카이빙된 다시 실행 로그를 DB 인스턴스 외부에 보관합니다. 백업 보존 기간을 수정하려면 Amazon RDS DB 인스턴스 수정 섹션을 참조하세요.

참고

경우에 따라 Linux에서 JDBC를 사용하여 아카이브된 다시 실행 로그를 다운로드하고 지연 시간이 길어지고 연결이 재설정될 수 있습니다. 그러한 경우 Java 클라이언트의 기본 난수 생성기 설정이 문제의 원인일 수 있습니다. 비차단형 난수 생성기를 사용하도록 JDBC 드라이버를 설정하는 것이 좋습니다.

온라인 및 아카이빙된 다시 실행 로그 액세스

GoldenGate, Attunity, Informatica 등과 같은 외부 도구로 마이닝하려면 온라인 및 아카이브된 다시 실행 로그 파일에 액세스해야 합니다. 이러한 파일에 액세스하려면 다음을 수행합니다.

  1. 물리적 파일 경로에 읽기 전용으로 액세스할 수 있는 디렉터리 객체를 만듭니다.

    rdsadmin.rdsadmin_master_util.create_archivelog_dirrdsadmin.rdsadmin_master_util.create_onlinelog_dir 사용

  2. PL/SQL을 사용하여 파일을 읽습니다.

    PL/SQL을 사용하여 파일을 읽을 수 있습니다. 디렉터리 객체의 파일을 읽는 방법에 대한 자세한 내용은 DB 인스턴스 디렉터리의 파일 목록 표시DB 인스턴스 디렉터리의 파일 목록 읽기 단원을 참조하세요.

다음 릴리스에서 트랜잭션 로그 액세스를 지원합니다.

  • Oracle Database 21c

  • Oracle Database 19c

  • Oracle Database 12c 릴리스 2(12.2.0.1)

  • Oracle Database 12c 릴리스 1(12.1)

다음은 온라인 및 아카이브된 다시 실행 로그 파일에 읽기 전용으로 액세스할 수 있는 디렉터리를 생성하는 코드입니다.

중요

이 코드는 DROP ANY DIRECTORY 권한도 취소합니다.

EXEC rdsadmin.rdsadmin_master_util.create_archivelog_dir; EXEC rdsadmin.rdsadmin_master_util.create_onlinelog_dir;

다음은 온라인 및 보관된 재실행 로그 파일용 디렉터리를 삭제하는 코드입니다.

EXEC rdsadmin.rdsadmin_master_util.drop_archivelog_dir; EXEC rdsadmin.rdsadmin_master_util.drop_onlinelog_dir;

다음은 DROP ANY DIRECTORY 권한을 부여하고 취소하는 코드입니다.

EXEC rdsadmin.rdsadmin_master_util.revoke_drop_any_directory; EXEC rdsadmin.rdsadmin_master_util.grant_drop_any_directory;

Amazon S3에서 아카이빙된 다시 실행 로그 다운로드

rdsadmin.rdsadmin_archive_log_download 패키지를 사용하여 DB 인스턴스에서 아카이빙된 다시 실행 로그를 다운로드할 수 있습니다. 아카이빙된 다시 실행 로그가 더 이상 DB 인스턴스에 없는 경우 Amazon S3에서 다시 다운로드할 수 있습니다. 그런 다음 로그를 마이닝하거나 로그를 사용하여 데이터베이스를 복구하거나 복제할 수 있습니다.

참고

읽기 전용 복제본 인스턴스에서는 아카이브된 다시 실행 로그를 다운로드할 수 없습니다.

아카이빙된 다시 실행 로그 다운로드: 기본 단계

아카이빙된 다시 실행 로그의 가용성은 다음 보존 정책에 따라 다릅니다.

  • 백업 보존 정책 - 이 정책 내의 로그는 Amazon S3에서 사용할 수 있습니다. 이 정책 외부의 로그는 제거됩니다.

  • 아카이빙된 로그 보존 정책 - 이 정책 내의 로그를 DB 인스턴스에서 사용할 수 있습니다. 이 정책 외부의 로그는 제거됩니다.

로그가 인스턴스에 없지만 백업 보존 기간으로 보호되는 경우 rdsadmin.rdsadmin_archive_log_download을 사용하여 다시 다운로드합니다. RDS for Oracle은 DB 인스턴스의 /rdsdbdata/log/arch 디렉터리에 로그를 저장합니다.

Amazon S3에서 아카이빙된 다시 실행 로그를 다운로드하려면
  1. 다운로드한 아카이브된 재실행 로그가 필요한 기간 동안 보존되도록 보존 기간을 구성합니다. COMMIT에 대한 변경을 확인하세요.

    RDS는 로그 다운로드 시점부터 보관된 로그 보존 정책에 따라 다운로드한 로그를 보존합니다. 보존 정책을 설정하는 방법에 대한 자세한 내용은 보관된 다시 실행 로그 보존 섹션을 참조하세요.

  2. 아키이빙된 로그 보존 정책 변경이 적용되려면 최대 5분을 기다립니다.

  3. rdsadmin.rdsadmin_archive_log_download을 사용하여 Amazon S3 에서 아카이빙된 다시 실행 로그를 다운로드합니다.

    자세한 내용은 아카이빙된 다시 실행 로그 다운로드아카이빙된 다시 실행 로그 시리즈 다운로드 단원을 참조하세요.

    참고

    RDS는 다운로드하기 전에 사용 가능한 스토리지를 자동으로 확인합니다. 요청된 로그가 많은 공간을 사용하는 경우 경고가 표시됩니다.

  4. 로그가 Amazon S3 에서 성공적으로 다운로드되었는지 확인합니다.

    다운로드 태스크의 상태를 bdump 파일에서 볼 수 있습니다. bdump 파일에는 /rdsdbdata/log/trace/dbtask-task-id.log 경로 이름이 있습니다. 이전 다운로드 단계에서 VARCHAR2 데이터 유형의 태스크 ID를 반환하는 SELECT 문을 실행합니다. 자세한 내용은 파일 전송 상태 모니터링에서 유사한 예를 참조하세요.

아카이빙된 다시 실행 로그 다운로드

하나의 아카이빙된 다시 실행 로그를 /rdsdbdata/log/arch 디렉터리에 다운로드하려면 rdsadmin.rdsadmin_archive_log_download.download_log_with_seqnum을 사용하세요. 이 프로시저에는 다음 파라미터가 있습니다.

파라미터 이름 데이터 형식 기본값 필수 설명

seqnum

숫자

아카이빙된 다시 실행 로그의 시퀀스 번호입니다.

다음 예에서는 시퀀스 번호가 20인 로그를 다운로드합니다.

SELECT rdsadmin.rdsadmin_archive_log_download.download_log_with_seqnum(seqnum => 20) AS TASK_ID FROM DUAL;

아카이빙된 다시 실행 로그 시리즈 다운로드

아카이빙된 다시 실행 로그 시리즈를 /rdsdbdata/log/arch 디렉터리에 다운로드하려면 download_logs_in_seqnum_range을 사용하세요. 다운로드는 요청당 300개의 로그로 제한됩니다. download_logs_in_seqnum_range 프로시저에는 다음과 같은 파라미터가 있습니다.

파라미터 이름 데이터 형식 기본값 필수 설명

start_seq

숫자

시리즈의 시작 시퀀스 번호입니다.

end_seq

숫자

시리즈의 종료 시퀀스 번호입니다.

다음 예제에서는 시퀀스 50에서 100의 로그를 다운로드합니다.

SELECT rdsadmin.rdsadmin_archive_log_download.download_logs_in_seqnum_range(start_seq => 50, end_seq => 100) AS TASK_ID FROM DUAL;