본문 바로가기
Oracle/운영

maxdatafile 갯수 초과 시 컨트롤 파일 재생성 유/무 테스트(Tibero6 포함)

by 취미툰 2021. 6. 7.
반응형

오늘 테스트 해볼 것은 컨트롤파일에 설정된 maxdatafile 설정 값보다 더 크게 datafile을 생성하려 했을 때 Oracle(11.2.0.1)과 Tibero6의 방법에 대해서 알아보겠습니다.

결론
Oracle : maxdatafile 개수가 넘어도 자동으로 증가
Tibero : maxdatafile 개수가 넘으면 에러 발생(수동으로 증가시켜줘야 함)

Oracle

1.현재 컨트롤파일에 설정된 값을 확인합니다.
세번째 컬럼인 RECORDS_TOTAL 100인것을 확인합니다.

SQL> select * from V$CONTROLFILE_RECORD_SECTION where type='DATAFILE';

TYPE                         RECORD_SIZE RECORDS_TOT RECORDS_USE FIRST_INDEX LAST_INDEX  LAST_RECID 
---------------------------- ----------- ----------- ----------- ----------- ----------- -----------
DATAFILE                             520          100          5           0           0          29

1 rows selected.


2.원활한 테스트를 위해 maxdatafile을 10개로 바꾸고 테스트를 진행합니다.

SYS@XE> alter database backup controlfile to trace as '/u01/app/oracle/c1.sql'; 

Database altered.


백업 컨트롤 파일의 내용
CREATE CONTROLFILE REUSE DATABASE "XE" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 10 <-- 100에서 10으로 변경
MAXINSTANCES 8
MAXLOGHISTORY 292
...생략

SYS@XE> shutdown immediate 
Database closed. 
Database dismounted. 
ORACLE instance shut down. 

SYS@XE> startup nomount

SYS@XE> @c1.sql Control file created. 
Elapsed: 00:00:00.19 

SYS@XE>alter database mount
ORA-00283: recovery session canceled due to errors 
ORA-00264: no recovery required Database altered. 
Elapsed: 00:00:00.58 

SYS@XE>alter database open
Tablespace altered. 
Elapsed: 00:00:00.16 

SYS@XE> select status from v$instance; 
STATUS 
------------ 
OPEN 
1 row selected.

10개로 바뀐것을 확인합니다.

SQL> select * from V$CONTROLFILE_RECORD_SECTION where type='DATAFILE';

TYPE                         RECORD_SIZE RECORDS_TOT RECORDS_USE FIRST_INDEX LAST_INDEX  LAST_RECID 
---------------------------- ----------- ----------- ----------- ----------- ----------- -----------
DATAFILE                             520          10          5           0           0          29

1 rows selected.


3.5개의 datafile을 추가해서 10개까지 맞춥니다.

SYS@XE> create tablespace tt datafile
'/u01/app/oracle/oradata/XE/tt01.dtf' size 1m, 
'/u01/app/oracle/oradata/XE/tt02.dtf' size 1m, 
'/u01/app/oracle/oradata/XE/tt03.dtf' size 1m, 
'/u01/app/oracle/oradata/XE/tt04.dtf' size 1m, 
'/u01/app/oracle/oradata/XE/tt05.dtf' size 1m; 
Tablespace created.


10개까지 맞춰진 것을 확인할 수 있습니다.

SQL> select * from V$CONTROLFILE_RECORD_SECTION where type='DATAFILE';

TYPE                         RECORD_SIZE RECORDS_TOT RECORDS_USE FIRST_INDEX LAST_INDEX  LAST_RECID 
---------------------------- ----------- ----------- ----------- ----------- ----------- -----------
DATAFILE                             520          10          10           0           0          29

1 rows selected.



4.1개 datafile을 추가해줍니다. 추가가 잘되는 것을 확인할 수 있습니다.

SYS@XE> alter tablespace tt add datafile '/u01/app/oracle/oradata/XE/tt06.dtf' size 1m;  
Tablespace altered.

RECOREDS_TOTAL이 40개로 자동 증가된 것을 확인할 수 있었습니다.

SQL> select * from V$CONTROLFILE_RECORD_SECTION where type='DATAFILE';

TYPE                         RECORD_SIZE RECORDS_TOT RECORDS_USE FIRST_INDEX LAST_INDEX  LAST_RECID 
---------------------------- ----------- ----------- ----------- ----------- ----------- -----------
DATAFILE                             520          40          11           0           0          29

1 rows selected.

끝.

Tibero


1.현재 컨트롤파일에 설정된 값을 확인합니다. 100이므로 테스트를 위해 15으로 변경합니다.

SQL> select record_used,record_max from _vt_controlfile_record_section where name='data file'; 

RECORD_USED RECORD_MAX 
----------- ---------- 
11 		100
1 row selected.



2. 컨트롤 파일 백업 후 재생성

 SQL> alter database backup controlfile to trace as '/home/tibero/c1.sql' ;
Database altered.

CREATE CONTROLFILE REUSE DATABASE "tibero"
...생략
MAXLOGFILES 255
MAXLOGMEMBERS 8
MAXDATAFILES 15 <-- 100에서 15으로 변경
MAXARCHIVELOG 500
MAXLOGHISTORY 500
...생략

[tibero@ysbae ~]$ tbdown sess: 55 user: SYS There are active session(s). 1. [W]ait until sessions are closed. 2. Shutdown [I]mmediately. 3. [Q]uit without shutting down. 
Select action. (Default: 1): 2 
[tibero@ysbae ~]$ tbboot nomount 
Warning: The initialization parameter 'MEMORY_TARGET' value is greater than the physical system memory size.
MEMORY_TARGET: 4294967296 Physical System Memory Size: 4126601216 Excessive memory consumption may cause the system to slow down or malfunction. 
It is recommended to set the MEMORY_TARGET to a value less than the physical system memory size. 
Listener port = 8629 
Tibero 6 TmaxData Corporation Copyright (c) 2008-.
All rights reserved. Tibero instance started up (NOMOUNT mode). 
--컨트롤파일 재생성 
SQL> @/home/tibero/c1.sql Control File created. 
[tibero@ysbae ~]$ tbdown Tibero instance terminated (NORMAL mode). 
--마운트 
[tibero@ysbae ~]$ tbboot mount 
SQL> alter database recover automatic database; 
Database altered. 
--OPEN 
[tibero@ysbae ~]$ tbdown Tibero instance terminated (NORMAL mode). 
[tibero@ysbae ~]$ tbboot 
 
Tibero instance started up (NORMAL mode).


확인

SQL> select record_used,record_max from _vt_controlfile_record_section where name='data file' ; 
RECORD_USED RECORD_MAX 
----------- ---------- 
11 		15 
1 row selected.



3.데이터 파일을 4개 추가해서 MAX값과 맞춰줍니다.

create tablespace tt datafile 
'/data/tibero6/tt01.dtf' size 1m,
'/data/tibero6/tt02.dtf' size 1m, 
'/data/tibero6/tt03.dtf' size 1m, 
'/data/tibero6/tt04.dtf' size 1m;


4.1개 추가해봅니다 (에러 발생)

SQL> alter tablespace tt add datafile '/data/tibero6/tt05.dtf' size 1m;
TBR-24031: Unable to create more data files.


오라클과 다르게 티베로는 자동으로 추가되지 않고 에러가 발생하며 추가되지 않습니다. 해당 이슈를 해결하기 위해서는 컨트롤 파일을 재생성해서 다시 maxdatafile의 수를 수정하여 컨트롤파일을 재생성해야 합니다.

해결방안
1.컨트롤 파일 2000으로 변경(숫자는 운영하는 상황에 따라서 정하시면 됩니다. 컨트롤파일의 경우 maxdatafile을 늘려주면 크기가 늘어나기 때문에 로우 디바이스의 환경에서 운영한다면 주의해서 수정해서 재생성해야 합니다)

--컨트롤파일 백업
SQL> alter database backup controlfile to trace as '/home/tibero/c2.sql'; 
Database altered. 
--DB 종료 
[tibero@ysbae ~]$ tbdown 
There are active session(s). 
1. [W]ait until sessions are closed. 
2. Shutdown [I]mmediately. 
3. [Q]uit without shutting down. 
Select action. (Default: 1): 2


2.컨트롤 파일 숫자 수정
CREATE CONTROLFILE REUSE DATABASE "tibero"
...생략
MAXLOGFILES 255
MAXLOGMEMBERS 8
MAXDATAFILES 2000 <-- 15에서 2000으로 변경
MAXARCHIVELOG 500
MAXLOGHISTORY 500
...생략

 [tibero@ysbae ~]$ tbboot nomount 
 Warning: The initialization parameter 'MEMORY_TARGET' value is greater than the physical system memory size. 
 MEMORY_TARGET: 4294967296 Physical System Memory Size: 4126601216 Excessive memory consumption may cause the system to slow down or malfunction. 
 It is recommended to set the MEMORY_TARGET to a value less than the physical system memory size. 
 Listener port = 8629 
 Tibero 6 TmaxData Corporation Copyright (c) 2008-. 
 All rights reserved. Tibero instance started up (NOMOUNT mode). 
 
 --컨트롤파일 재생성 
 SQL> @/home/tibero/c2.sql Control File created. 
 [tibero@ysbae ~]$ tbdown Tibero instance terminated (NORMAL mode). 
 
 --마운트&RECOVER 
 [tibero@ysbae ~]$ tbboot mount 
 SQL> alter database recover automatic database;
 Database altered. 
 
 --OPEN 
 [tibero@ysbae ~]$ tbdown 
 Tibero instance terminated (NORMAL mode). 
 
 [tibero@ysbae ~]$ tbboot
 
 All rights reserved. Tibero instance started up (NORMAL mode).



확인

SQL> select record_used,record_max from _vt_controlfile_record_section where name='data file';
RECORD_USED RECORD_MAX 
----------- ---------- 
15 		2000 
1 row selected.


티베로는 운영시에 잘 확인해서 운영해야 겠네요.. 무조건 Downtime이 요구되는 작업이니깐요.

번외) 컨트롤파일 크기 비교(maxdatafile이 15일때와 2000일때)
실제로 크기가 늘어나는것을 확인 할 수 있었습니다.
15개 일때
-rw------- 1 tibero tibero 23M Jun 4 02:43 c1.ctl

2000개 일때
-rw------- 1 tibero tibero 27M Jun 4 02:49 c1.ctl

반응형

댓글