내맘대로긍정이 알려주는
Oracle 23ai 신기능
무료 세미나 발표자료
OS환경 : Oracle Linux 4.8 (64bit)
DB 환경 : Oracle Database 9.2.0.4
에러 : LGWR: terminating instance due to error 472
9i 환경에서 alert log에 아래 메세지가 발생하면서 db가 강제종료됨
1
2
3
|
Mon Mar 22 22:29:16 2021
LGWR: terminating instance due to error 472
Instance terminated by LGWR, pid = 2846
|
로그 스위치 시에도 같은 에러가 발생함
서버를 재기동 한 후에는 로그 스위치 시 행이 걸림
1
2
3
|
SQL> alter system switch logfile;
(hang 상태)
|
해결 방법 : mount 상태에서 리두로그 재생성이 아닌 log_archive_start 파라미터 설정
(log_archive_start 파라미터를 설정함으로써 해결함
제일 밑으로 내려서 log_archive_start 파라미터 설정 내용만 확인하면됨
리두 로그는 건드리지 않아도됨)
현재 리두 상태 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
SQL>
set lines 200
set pages 1000
col member for a60
select l.group#, member, archived, l.status, (bytes/1024/1024) MB
from v$log l, v$logfile f
where f.group# = l.group#
order by 1
/
GROUP# MEMBER ARC STATUS MB
---------- ------------------------------------------------------------ --- ---------------- ----------
1 /oracle/app/oracle/oradata/KSGDBP/redo01.log NO INACTIVE 100
2 /oracle/app/oracle/oradata/KSGDBP/redo02.log NO INACTIVE 100
3 /oracle/app/oracle/oradata/KSGDBP/redo03.log NO CURRENT 100
3 rows selected.
|
db 종료 후 mount 상태로 기동
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 320308744 bytes
Fixed Size 742920 bytes
Variable Size 285212672 bytes
Database Buffers 33554432 bytes
Redo Buffers 798720 bytes
Database mounted.
|
바로 삭제가 안되서 아래 명령 사용
현재 로그 스위치에 문제가 발생하므로 clear unarchived 명령 사용
1
2
3
|
SQL> alter database clear unarchived logfile group 1;
Database altered.
|
1번 그룹 리두 삭제
1
2
3
|
SQL> alter database drop logfile group 1;
Database altered.
|
OS 상의 리두 로그 파일으로 삭제
1
2
3
4
|
SQL> !rm /oracle/app/oracle/oradata/KSGDBP/redo01.log
SQL> !ls -al /oracle/app/oracle/oradata/KSGDBP/redo01.log
ls: /oracle/app/oracle/oradata/KSGDBP/redo01.log: No such file or directory
|
다시 1번 그룹 리두 생성
1
2
3
|
SQL> alter database add logfile group 1 '/oracle/app/oracle/oradata/KSGDBP/redo01.log' size 100m;
Database altered.
|
redo 상태 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
SQL>
set lines 200
set pages 1000
col member for a60
select l.group#, member, archived, l.status, (bytes/1024/1024) MB
from v$log l, v$logfile f
where f.group# = l.group#
order by 1
/
GROUP# MEMBER ARC STATUS MB
---------- ------------------------------------------------------------ --- ---------------- ----------
1 /oracle/app/oracle/oradata/KSGDBP/redo01.log YES UNUSED 100
2 /oracle/app/oracle/oradata/KSGDBP/redo02.log NO INACTIVE 100
3 /oracle/app/oracle/oradata/KSGDBP/redo03.log NO CURRENT 100
3 rows selected.
|
2번 그룹 리두 삭제
1
2
3
4
5
6
|
SQL> alter database drop logfile group 2;
alter database drop logfile group 2
*
ERROR at line 1:
ORA-00350: log 2 of thread 1 needs to be archived
ORA-00312: online log 2 thread 1: '/oracle/app/oracle/oradata/KSGDBP/redo02.log'
|
에러가 발생함
clear unarchived 명령 사용
1
2
3
|
SQL> alter database clear unarchived logfile group 2;
Database altered.
|
리두 상태 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
SQL>
set lines 200
set pages 1000
col member for a60
select l.group#, member, archived, l.status, (bytes/1024/1024) MB
from v$log l, v$logfile f
where f.group# = l.group#
order by 1
/
GROUP# MEMBER ARC STATUS MB
---------- ------------------------------------------------------------ --- ---------------- ----------
1 /oracle/app/oracle/oradata/KSGDBP/redo01.log YES UNUSED 100
2 /oracle/app/oracle/oradata/KSGDBP/redo02.log YES UNUSED 100
3 /oracle/app/oracle/oradata/KSGDBP/redo03.log NO CURRENT 100
3 rows selected.
|
INACTIVE 상태가 아닌 UNUSED 상태로 변함
리두로그 그룹 삭제
1
2
3
|
SQL> alter database drop logfile group 2;
Database altered.
|
정상적으로 삭제됨
OS 상의 리두 로그 파일으로 삭제
1
2
3
4
|
SQL> !rm /oracle/app/oracle/oradata/KSGDBP/redo02.log
SQL> !ls -al /oracle/app/oracle/oradata/KSGDBP/redo02.log
ls: /oracle/app/oracle/oradata/KSGDBP/redo02.log: No such file or directory
|
다시 2번 그룹 리두 생성
1
2
3
|
SQL> alter database add logfile group 2 '/oracle/app/oracle/oradata/KSGDBP/redo02.log' size 100m;
Database altered.
|
Current 상태인 3번 그룹 리두를 삭제하기위해 로그스위치
1
2
3
4
5
|
SQL> alter system switch logfile;
alter system switch logfile
*
ERROR at line 1:
ORA-01109: database not open
|
mount 상태이기 때문에 로그스위치가 안됨
clear unarchived 명령 사용
1
2
3
|
SQL> alter database clear unarchived logfile group 3;
Database altered.
|
리두 상태 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
SQL>
set lines 200
set pages 1000
col member for a60
select l.group#, member, archived, l.status, (bytes/1024/1024) MB
from v$log l, v$logfile f
where f.group# = l.group#
order by 1
/
GROUP# MEMBER ARC STATUS MB
---------- ------------------------------------------------------------ --- ---------------- ----------
1 /oracle/app/oracle/oradata/KSGDBP/redo01.log NO CURRENT 100
2 /oracle/app/oracle/oradata/KSGDBP/redo02.log YES UNUSED 100
3 /oracle/app/oracle/oradata/KSGDBP/redo03.log YES UNUSED 100
3 rows selected.
|
CURRENT 상태가 아닌 UNUSED 상태로 변함
리두로그 그룹 삭제
1
2
3
|
SQL> alter database drop logfile group 3;
Database altered.
|
정상적으로 삭제됨
OS 상의 리두 로그 파일으로 삭제
1
2
3
4
|
SQL> !rm /oracle/app/oracle/oradata/KSGDBP/redo03.log
SQL> !ls -al /oracle/app/oracle/oradata/KSGDBP/redo03.log
ls: /oracle/app/oracle/oradata/KSGDBP/redo03.log: No such file or directory
|
다시 2번 그룹 리두 생성
1
2
3
|
SQL> alter database add logfile group 3 '/oracle/app/oracle/oradata/KSGDBP/redo03.log' size 100m;
Database altered.
|
리두 상태 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
SQL>
set lines 200
set pages 1000
col member for a60
select l.group#, member, archived, l.status, (bytes/1024/1024) MB
from v$log l, v$logfile f
where f.group# = l.group#
order by 1
/
GROUP# MEMBER ARC STATUS MB
---------- ------------------------------------------------------------ --- ---------------- ----------
1 /oracle/app/oracle/oradata/KSGDBP/redo01.log NO CURRENT 100
2 /oracle/app/oracle/oradata/KSGDBP/redo02.log YES UNUSED 100
3 /oracle/app/oracle/oradata/KSGDBP/redo03.log YES UNUSED 100
3 rows selected.
|
모두 재생성됨
db open
1
2
3
|
SQL> alter database open;
Database altered.
|
로그 스위치 재시도
1
2
3
|
SQL> alter system switch logfile;
(hang 상태)
|
똑같이 행이 걸림
db 종료 후 mount 기동 후 noarchive mode로 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 320308744 bytes
Fixed Size 742920 bytes
Variable Size 285212672 bytes
Database Buffers 33554432 bytes
Redo Buffers 798720 bytes
Database mounted.
SQL> alter database noarchivelog;
Database altered.
SQL> alter database open;
Database altered.
|
로그 스위치 재시도
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
SQL> /
System altered.
SQL> /
System altered.
SQL> /
System altered.
|
정상적으로 스위칭됨
리두 로그 문제가 아닌 아카이빙에 문제가 있었던걸로 판단됨
다시 아카이브 모드로 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 320308744 bytes
Fixed Size 742920 bytes
Variable Size 285212672 bytes
Database Buffers 33554432 bytes
Redo Buffers 798720 bytes
Database mounted.
SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.
|
로그 스위치 재시도
1
2
3
4
5
6
7
8
9
10
|
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
SQL> /
(hang 상태)
|
똑같이 행이 걸림
아카이브 모드 및 파일 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SQL> archive log list
Database log mode Archive Mode
Automatic archival Disabled
Archive destination /oracle/app/oracle/product/9.2.0/dbs/arch
Oldest online log sequence 162
Next log sequence to archive 162
Current log sequence 164
$ cd $ORACLE_HOME/dbs/arch
$ ls -al
total 8
drwxr-xr-x 2 oracle dba 4096 Mar 23 01:16 .
drwxr-xr-x 3 oracle dba 4096 Mar 23 01:14 ..
|
아카이브 로그가 하나도 생성되지 않음
자세히보니...
1
2
3
4
5
6
7
|
SQL> archive log list
Database log mode Archive Mode
Automatic archival Disabled
Archive destination /oracle/app/oracle/product/9.2.0/dbs/arch
Oldest online log sequence 162
Next log sequence to archive 162
Current log sequence 164
|
Automatic archival 이 Disabled로 되어있음
log_archive_start 설정
9i 까지는 아카이브모드를 설정해도 파라미터 log_archive_start = true 를 해주지 않으면 아카이브가 안써짐
log_archive_start 파라미터 설정 후 재기동
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
SQL> alter system set log_archive_start = true scope=spfile;
System altered.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 320308744 bytes
Fixed Size 742920 bytes
Variable Size 285212672 bytes
Database Buffers 33554432 bytes
Redo Buffers 798720 bytes
Database mounted.
Database opened.
|
아카이브 모드 확인
1
2
3
4
5
6
7
|
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oracle/app/oracle/product/9.2.0/dbs/arch
Oldest online log sequence 166
Next log sequence to archive 168
Current log sequence 168
|
로그 스위치 재시도 및 파일 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
SQL> /
System altered.
SQL> /
System altered.
$ cd $ORACLE_HOME/dbs/arch
$ ls -al
total 24
drwxr-xr-x 2 oracle dba 4096 Mar 23 01:24 .
drwxr-xr-x 3 oracle dba 4096 Mar 23 01:14 ..
-rw-r----- 1 oracle dba 2048 Mar 23 01:24 1_168.dbf
-rw-r----- 1 oracle dba 1024 Mar 23 01:24 1_169.dbf
-rw-r----- 1 oracle dba 1536 Mar 23 01:24 1_170.dbf
-rw-r----- 1 oracle dba 1024 Mar 23 01:24 1_171.dbf
|
정상적으로 로그스위치도 되고 아카이브 로그도 생성됨
*clear unarchived 명령을 사용한 경우 작업 이후 db full 백업을 필수로 해야함
*아카이브로그 파일 확장자는 .dbf 보다 .arc를 권장함
원인 : log_archive_start 파라미터 미설정으로 인한 행
log_archive_start 파라미터 미설정으로 인한 행
9i에서 아카이브모드 설정시 꼭 log_archive_start 파라미터를 설정해야함