/********************************************************************************************
-- Title : [8i] 리두 로그 파일 관리(OLN)
-- Reference : OLN
-- Key word : Dictionary View redo log redolog 리두로그파일
********************************************************************************************/
/****************************************************************************************
-- 데이터베이스 로그 모드와 아카이브 모드 표시하는 뷰
****************************************************************************************/
SQL> SELECT name, log_mode
2 FROM v$database;
NAME LOG_MODE
--------- ------------
ORCL NOARCHIVELOG
SQL> SELECT archiver
2 FROM v$instance;
ARCHIVE
-------
STOPPED
/****************************************************************************************
-- 리두 로그 그룹의 정보와 시퀀스 번호에 대한 뷰
****************************************************************************************/
SQL> SELECT groups, current_group#, sequence#
2 FROM v$thread;
GROUPS CURRENT_GROUP# SEQUENCE#
---------- -------------- ----------
3 2 443
/****************************************************************************************
-- 온라인 리두 로그 그룹 및 멤버 정보 얻는 뷰
SQL> SELECT group#, sequence#, bytes, members, status
2 FROM v$log;
GROUP# SEQUENCE# BYTES MEMBERS STATUS
---------- ---------- ---------- ---------- ----------------
1 442 512000 1 INACTIVE
2 443 512000 1 CURRENT
3 441 512000 1 INACTIVE
/****************************************************************************************
-- v$log의 STATUS 상태
****************************************************************************************/
- Current : user가 쓰고 있는 상태
- Inactive : 다 쓰고 checkpoint 완료 상태
- Active : 다 쓰고 checkpoint 완료되지 않은 상태
- Unused : 한번도 사용 해 본적 없는 상태
/****************************************************************************************
-- 온라인 리두 로그 그룹과 멤버에 대한 정보를 얻는 뷰
****************************************************************************************/
SQL> SELECT *
2 FROM v$logfile;
GROUP# STATUS MEMBER
---------- ------- ---------------------------------------------
1 /export/home/oracle8i/iORCL/data/redo01.log
2 /export/home/oracle8i/iORCL/data/redo02.log
3 /export/home/oracle8i/iORCL/data/redo03.log
/****************************************************************************************
-- 테이블 변경 사항 추적 뷰 : LOGMNR 실행 후
****************************************************************************************/
SQL> SELECT timestamp, username, sql_redo
2 FROm v$logmnr_contents
3 WHERE seg_name = 'EMP';
/****************************************************************************************
-- 분석 중인 로그 정보 얻기
****************************************************************************************/
- V$LOGMNR_DIXTIONARY : 사용중인 딕셔너리 파일
- V$LOGMNR_PARAMETERS : LogMiner에 대한 현재 매개변수 설정
- V$LOGMNR_CONTENTS : 분석 중인 리두 로그 파일 내용
/****************************************************************************************
-- 관리용(log.sql)
****************************************************************************************/
select a.group#, a.member, b.bytes, b.status, b.archived "ARC", b.sequence# "SEQ"
from v$logfile a, v$log b
where a.group# = b.group#
/
/****************************************************************************************
-- 파리미터 파일에서 체크포인트 발생 파라미터 확인
****************************************************************************************/
$ more $ORACLE_HOME/dbs/initORCL.ora
...
log_checkpoint_interval = 10000
log_checkpoint_timeout = 1800
FAT_START_IO_TARGET = ???
...
/****************************************************************************************
-- 파라미터 파일에서 모든 체크포인트 정보의 ALERT 파일에 대한 기록 확인
****************************************************************************************/
$ more $ORACLE_HOME/dbs/initORCL.ora
...
LOG_CHECKPOINTS_TO_ALERT = FLASE
...
/****************************************************************************************
-- 파라미터 파일에서 아카이브 자동 실행 확인
****************************************************************************************/
$ more $ORACLE_HOME/dbs/initORCL.ora
...
log_archive_start = true
log_archive_dest_1 = "location=/export/home/oracle8i/admin/ORCL/arch"
log_archive_format = arch_%t_%s.arc
...
/****************************************************************************************
-- 아카이브 정보 얻기
****************************************************************************************/
SQL> ARCHIVE LOG LIST;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /export/home/oracle8i/dbs/arch
Oldest online log sequence 441
Current log sequence 443
SQL> SELECT log_mode
2 FROm v$database;
LOG_MODE
------------
NOARCHIVELOG
/****************************************************************************************
-- DB mode 변경(no archive log mode → archive log mode)
-- 10g에서 http://dbrang.tistory.com/514
****************************************************************************************/
SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
$ vi $ORACLE_HOME/dbs/initORCL.ora
...
log_archive_start = true
log_archive_dest_1 = "location=/export/home/oracle8i/iORCL/init/arch"
log_archive_format = arch_%t_%s.arc
...
SQL> STARTUP MOUNT
ORACLE instance started.
Total System Global Area 34869408 bytes
Fixed Size 73888 bytes
Variable Size 11079680 bytes
Database Buffers 23543808 bytes
Redo Buffers 172032 bytes
Database mounted.
SQL> ALTER DATABASE ARCHIVELOG;
Database altered.
SQL> ALTER DATABASE OPEN;
Database altered.
SQL> ARCHIVE LOG LIST;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /export/home/oracle8i/iORCL/init/arch
Oldest online log sequence 444
Next log sequence to archive 446
Current log sequence 446
/****************************************************************************************
-- archive log file 생성 확인
****************************************************************************************/
SQL> CONNECT scott/tiger
Connected.
SQL> INSERT INTO emp(empno, ename, sal)
2 VALUES(7111,'aaa',3000);
1 row created.
SQL> COMMIT;
Commit complete.
SQL> CONNECT INTERNAL
SQL> SELECT group#, sequence#, archived, status
2 FROM v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 446 NO CURRENT
2 445 YES INACTIVE
3 444 YES INACTIVE
SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /export/home/oracle8i/iORCL/init/arch
Oldest online log sequence 445
Next log sequence to archive 447
Current log sequence 447
SQL> select group#, sequence#, archived, status from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 446 YES ACTIVE
2 445 YES INACTIVE
3 447 NO CURRENT
/****************************************************************************************
-- 로그 스위치 수동 시행
****************************************************************************************/
SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.
/****************************************************************************************
-- 체크포인트 수동 시행
****************************************************************************************/
SQL> ALTER SYSTEM CHECKPOINT;
System altered.
/****************************************************************************************
-- 온라인 리두 로그 그룹 추가
****************************************************************************************/
SQL> ALTER DATABASE
2 ADD LOGFILE
3 ('/export/home/oracle8i/iORCL/data/log3a.rdo',
4 '/export/home/oracle8i/iORCL/data/log3b.rdo') size 1M;
Database altered.
SQL> SELECT *
2 FROM v$logfile; /* 추가 그룹 확인 */
GROUP# STATUS MEMBER
---------- ------- ---------------------------------------------
...
4 /export/home/oracle8i/iORCL/data/log3a.rdo
4 /export/home/oracle8i/iORCL/data/log3b.rdo
/****************************************************************************************
-- 온라인 리두 로그 멤버 추가
****************************************************************************************/
SQL> ALTER DATABASE
2 ADD LOGFILE MEMBER
3 '/export/home/oracle8i/iORCL/data/log1b.rdo' TO GROUP 1,
4 '/export/home/oracle8i/iORCL/data/log2b.rdo' TO GROUP 2;
Database altered.
SQL> SELECT *
2 FROM v$logfile /* 추가 멤버 확인 */
3 WHERE group# in (1,2);
GROUP# STATUS MEMBER
---------- ------- ---------------------------------------------
1 /export/home/oracle8i/iORCL/data/redo01.log
2 /export/home/oracle8i/iORCL/data/redo02.log
1 INVALID /export/home/oracle8i/iORCL/data/log1b.rdo
2 INVALID /export/home/oracle8i/iORCL/data/log2b.rdo
/****************************************************************************************
-- 온라인 리두 로그 그룹 삭제
****************************************************************************************/
alter database drop logfile group 2;
/****************************************************************************************
-- 온라인 리두 로그 멤버 삭제
****************************************************************************************/
alter database drop logfile member '/export/homr/oracle8i/iORCL/data/log2b.rdo';
/****************************************************************************************
-- 온라인 리두 로그 파일 정리
****************************************************************************************/
alter databse clear logfile '/export/homr/oracle8i/iORCL/data/log2b.rdo';
/****************************************************************************************
-- 온라인 리두 로그 파일 재배치
****************************************************************************************/
1. 오라클 정상 종료.
2. online redo log 파일을 새로운 위치에 복사.
3. 데이터베이스 마운트.
4. alter database rename file 'old filespec' to 'new filespec'; 실행
5. 데이터베이스 오픈.
/****************************************************************************************
-- 온라인 리두 로그 파일 재배치(RENAME)
****************************************************************************************/
1) 데이터베이스 종료
SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
2) 온라인 리두 로그 파일 재배치
$ cp $ORACLE_HOME/iORCL/data/log2b.rdo $ORACLE_HOME/iORCL/redata/log2c.rdo
3) 데이터베이스 마운트
SQL> STARTUP MOUNT;
ORACLE instance started.
Total System Global Area 34869408 bytes
Fixed Size 73888 bytes
Variable Size 11079680 bytes
Database Buffers 23543808 bytes
Redo Buffers 172032 bytes
Database mounted.
4) ALTER DATABASE RENAME FILE 실행
SQL> ALTER DATABASE
2 RENAME FILE '/export/home/oracle8i/iORCL/data/log2b.rdo'
3 TO '/export/home/oracle8i/iORCL/redata/log2c.rdo';
Database altered.
5) 재배치 확인
SQL> SELECT *
2 FROM v$logfile;
GROUP# STATUS MEMBER
---------- ------- ---------------------------------------------
1 /export/home/oracle8i/iORCL/data/redo01.log
2 /export/home/oracle8i/iORCL/data/redo02.log
3 /export/home/oracle8i/iORCL/data/redo03.log
4 /export/home/oracle8i/iORCL/data/log3a.rdo
4 /export/home/oracle8i/iORCL/data/log3b.rdo
1 INVALID /export/home/oracle8i/iORCL/data/log1b.rdo
2 INVALID /export/home/oracle8i/iORCL/redata/log2c.rdo -- 변경라인
7 rows selected.
6)기존 파일 삭제
$ rm /export/home/oracle8i/iORCL/data/log2b.rdo
/****************************************************************************************
-- 온라인 리두 로그 그룹 삭제
****************************************************************************************/
SQL> ALTER DATABASE
2 DROP LOGFILE
3 GROUP 4;
Database altered.
SQL> SELECT *
2 FROM v$logfile;
GROUP# STATUS MEMBER
---------- ------- ---------------------------------------------
1 /export/home/oracle8i/iORCL/data/redo01.log
2 /export/home/oracle8i/iORCL/data/redo02.log
3 /export/home/oracle8i/iORCL/data/redo03.log
1 INVALID /export/home/oracle8i/iORCL/data/log1b.rdo
2 INVALID /export/home/oracle8i/iORCL/redata/log2c.rdo
/****************************************************************************************
-- 온라인 리두 로그 멤버 삭제
****************************************************************************************/
SQL> ALTER DATABASE
2 DROP LOGFILE MEMBER
3 '/export/home/oracle8i/iORCL/redata/log2c.rdo';
Database altered.
SQL> SELECT *
2 FROM v$logfile;
GROUP# STATUS MEMBER
---------- ------- ---------------------------------------------
1 /export/home/oracle8i/iORCL/data/redo01.log
2 /export/home/oracle8i/iORCL/data/redo02.log
3 /export/home/oracle8i/iORCL/data/redo03.log
1 INVALID /export/home/oracle8i/iORCL/data/log1b.rdo
/****************************************************************************************
-- 온라인 리두 로그 파일 정리(재 초기화)
****************************************************************************************/
SQL> ALTER DATABASE
2 CLEAR LOGFILE
3 '/export/home/oracle8i/iORCL/data/redo02.log';
Database altered.
-- LogMiner 사용 방법 ##에러 발생한다...>.<
1) 파라미터 파일에서 UTL_FILE_DIR 지정
$ more $ORACLE_HOME/dbs/initORCL.ora
...
UTL_FILE_DIR = /export/home/oracle8i/iORCL/init/dLogMiner
...
2) 딕셔너리 파일 생성
SQL> EXECUTE DBMS_LOGMNR_D.BUILD('ORCLdict.ora',
2 '/export/home/oracle8i/iORCL/init/dLogMiner');
BEGIN dbms_logmnr_d.build('ORCLdict.ora','/export/home/oracle8i/iORCL/init/dLogMiner'); END;
*
ERROR at line 1: -- 에러 원인 모름... 3번 이후 내용은 에러로 스크립트만 표현 >.<
ORA-01309: specified dictionary file cannot be opened
ORA-06510: PL/SQL: unhandled user-defined exception
ORA-06512: at "SYS.DBMS_LOGMNR_D", line 793
ORA-06512: at line 1
3) 분석할 로그 파일 지정-새 목록 초기화하고 첫번째 로그 파일 지정
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE('/export/home/oracle8i/iORCL/init/redo01a.log',
DBMS_LOGMNR.NEW);
4) 분석할 로그 파일 지정-목록에 로그 파일 추가
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(/export/home/oracle8i/iORCL/init/redo02a.log',
DBMS_LOGMNR.ADDFILE);
5) 리두 로그 파일 분석 시작
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(
DICTFIKENAME=>'/export/home/oracle8i/iORCL/init/dLogMiner/ORCLdict.ora');
/****************************************************************************************
-- LOGMNR 세션 시작 옵션
****************************************************************************************/
- StartScn : SCN(시스템 변경 번호) 범위 시작
- EndScn : SCN 범위 종료
- StartTime : 시간 간격 시작
- EndTime : 시간 간격 끝
- DictFileName : 딕셔너리 파일 이름
- 옵션 : logmnr.opt 파일에 지정딘 열 맵을 사용하며 값은 USE_COLMAP이다.
/****************************************************************************************
-- 테이블 변경 사항 추적 #LogMiner 실패 후 에러
****************************************************************************************/
SQL> SELECT timestamp, username, sql_redo
2 FROm v$logmnr_contents
3 WHERE seg_name = 'EMP';
/****************************************************************************************
-- 리두 로그 파일 분석 종료 #LogMiner 실패 후 에러
****************************************************************************************/
SQL> EXECUTE DBMS_LOGMNR.END_LOGMNR;
/****************************************************************************************
-- 관리용(logswitch.sql)
****************************************************************************************/
alter system switch logfile;
alter system checkpoint;