프린트 하기

내맘대로긍정이 알려주는

Oracle 23ai 신기능
무료 세미나 발표자료

다운로드 trending_flat

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 파라미터를 설정해야함

 

 

참조 : positivemh.tistory.com/284

positivemh.tistory.com/707