OS환경 : Oracle Linux 7.6 (64bit)
DB 환경 : Oracle Database 19.10.0.0
방법 : 오라클 19c 컨트롤파일 maxdatafiles와 파라미터 파일의 db_files 파라미터
db 생성시 컨트롤파일에서 datafile의 최대값을 설정하는 maxdatafiles 파라미터를 설정할수 있음
그리고 파라미터 파일의 db_files 파라미터로 datafile의 최대값을 설정할수도 있음
오라클 8.1.5버전의 오라클 문서를 보면 "만약 컨트롤파일의 maxdatafiles보다 크지만 파라미터 파일의 db_files 보다 작거나 같은 datafile을 추가하려고 하면 maxdatafile이 더 많은 datafile을 수용할 수 있도록 컨트롤 파일이 자동으로 확장된다" 라고 나와있음
8.1.5 버전 docs
MAXDATAFILES Clause
Specify the initial sizing of the data files section of the control file at CREATE DATABASE or CREATE CONTROLFILE time. An attempt to add a file whose number is greater than MAXDATAFILES, but less than or equal to DB_FILES, causes the control file to expand automatically so that the data files section can accommodate more files.
19c 버전 docs
14.1.2.3 Consider Possible Limitations When Adding Data Files to a Tablespace
When you issue CREATE DATABASE or CREATE CONTROLFILE statements, the MAXDATAFILES parameter specifies an initial size of the data file portion of the control file. However, if you attempt to add a new file whose number is greater than MAXDATAFILES, but less than or equal to DB_FILES, the control file will expand automatically so that the data files section can accommodate more files.
이렇게 변경이 잘되는지 테스트를 해봄
초기 테스트 db 설치시 컨트롤파일의 maxdatafiles 파라미터를 15로 설정하고 파라미터 파일의 db_files 파라미터를 10으로 설정하였음
datafile을 하나씩 늘려가며 테스트해봄
파라미터 파일의 db_files 파라미터 확인
1
2
3
4
5
|
SQL> show parameter db_files
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_files integer 10
|
파라미터 파일의 db_files는 10으로 설정되어 있음
컨트롤파일의 MAXDATAFILES 파라미터 확인(RECORDS_TOTAL 컬럼)
1
2
3
4
5
6
7
|
SQL>
select * from v$controlfile_record_section
where type='DATAFILE';
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID CON_ID
---------------------------- ----------- ------------- ------------ ----------- ---------- ---------- ----------
DATAFILE 520 15 4 0 0 4 0
|
컨트롤파일의 MAXDATAFILES 파라미터는 15로 설정되어 있음
현재 datafile 확인
1
2
3
4
5
6
7
8
9
10
11
|
SQL>
col tablespace_name for a10
col file_name for a50
select tablespace_name, file_id, file_name from dba_data_files order by file_id;
TABLESPACE FILE_ID FILE_NAME
---------- ---------- --------------------------------------------------
SYSTEM 1 /oracle/app/oracle/oradata/TEST/system01.dbf
SYSAUX 2 /oracle/app/oracle/oradata/TEST/sysaux01.dbf
UNDOTBS1 3 /oracle/app/oracle/oradata/TEST/undotbs01.dbf
USERS 4 /oracle/app/oracle/oradata/TEST/users01.dbf
|
datafile이 4개만 존재함
샘플 테이블 스페이스 생성
1
2
3
|
SQL> create tablespace dbftest datafile '/oracle/app/oracle/oradata/TEST/dbftest01.dbf' size 10m autoextend off;
Tablespace created.
|
샘플 테이블스페이스에 데이터 파일 추가(5번)
1
2
3
4
5
6
7
8
|
SQL>
alter tablespace dbftest add datafile '/oracle/app/oracle/oradata/TEST/dbftest02.dbf' size 10m autoextend off;
alter tablespace dbftest add datafile '/oracle/app/oracle/oradata/TEST/dbftest03.dbf' size 10m autoextend off;
alter tablespace dbftest add datafile '/oracle/app/oracle/oradata/TEST/dbftest04.dbf' size 10m autoextend off;
alter tablespace dbftest add datafile '/oracle/app/oracle/oradata/TEST/dbftest05.dbf' size 10m autoextend off;
alter tablespace dbftest add datafile '/oracle/app/oracle/oradata/TEST/dbftest06.dbf' size 10m autoextend off;
Tablespace altered.
|
datafile 재확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
SQL>
col tablespace_name for a10
col file_name for a50
select tablespace_name, file_id, file_name from dba_data_files order by file_id;
TABLESPACE FILE_ID FILE_NAME
---------- ---------- --------------------------------------------------
SYSTEM 1 /oracle/app/oracle/oradata/TEST/system01.dbf
SYSAUX 2 /oracle/app/oracle/oradata/TEST/sysaux01.dbf
UNDOTBS1 3 /oracle/app/oracle/oradata/TEST/undotbs01.dbf
USERS 4 /oracle/app/oracle/oradata/TEST/users01.dbf
DBFTEST 5 /oracle/app/oracle/oradata/TEST/dbftest01.dbf
DBFTEST 6 /oracle/app/oracle/oradata/TEST/dbftest02.dbf
DBFTEST 7 /oracle/app/oracle/oradata/TEST/dbftest03.dbf
DBFTEST 8 /oracle/app/oracle/oradata/TEST/dbftest04.dbf
DBFTEST 9 /oracle/app/oracle/oradata/TEST/dbftest05.dbf
DBFTEST 10 /oracle/app/oracle/oradata/TEST/dbftest06.dbf
10 rows selected.
|
db_files 갯수인 10개만큼 datafile이 존재함
datafile 하나 더 추가 시도
1
2
3
4
|
SQL> alter tablespace dbftest add datafile '/oracle/app/oracle/oradata/TEST/dbftest07.dbf' size 10m autoextend off;
*
ERROR at line 1:
ORA-00059: maximum number of DB_FILES exceeded
|
에러가 발생하면서 실패함
db_files 파라미터 20으로 변경
1
2
3
|
SQL> alter system set db_files=20 scope=spfile;
System altered.
|
db 재기동
1
2
|
SQL> shutdown immediate
SQL> startup
|
db_files 파라미터 확인
1
2
3
4
5
|
SQL> show parameter db_files
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_files integer 20
|
db_files가 정상적으로 20으로 변경됨
컨트롤파일에 있는 MAXDATAFILES 파라미터 확인(RECORDS_TOTAL 컬럼)
1
2
3
4
5
6
7
|
SQL>
select * from v$controlfile_record_section
where type='DATAFILE';
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID CON_ID
---------------------------- ----------- ------------- ------------ ----------- ---------- ---------- ----------
DATAFILE 520 15 10 0 0 10 0
|
controlfile에는 여전히 15로 설정되어 있음(RECORDS_TOTAL 값)
데이터 파일 추가(5번)
1
2
3
4
5
6
7
8
|
SQL>
alter tablespace dbftest add datafile '/oracle/app/oracle/oradata/TEST/dbftest07.dbf' size 10m autoextend off;
alter tablespace dbftest add datafile '/oracle/app/oracle/oradata/TEST/dbftest08.dbf' size 10m autoextend off;
alter tablespace dbftest add datafile '/oracle/app/oracle/oradata/TEST/dbftest09.dbf' size 10m autoextend off;
alter tablespace dbftest add datafile '/oracle/app/oracle/oradata/TEST/dbftest10.dbf' size 10m autoextend off;
alter tablespace dbftest add datafile '/oracle/app/oracle/oradata/TEST/dbftest11.dbf' size 10m autoextend off;
Tablespace altered.
|
컨트롤파일에 있는 MAXDATAFILES 파라미터 재확인(RECORDS_TOTAL 컬럼)
1
2
3
4
5
6
7
|
SQL>
select * from v$controlfile_record_section
where type='DATAFILE';
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID CON_ID
---------------------------- ----------- ------------- ------------ ----------- ---------- ---------- ----------
DATAFILE 520 15 15 0 0 15 0
|
RECORDS_USED도 15가 됨
이 상태에서 datafile 하나 더 추가 시도
1
2
3
|
SQL> alter tablespace dbftest add datafile '/oracle/app/oracle/oradata/TEST/dbftest12.dbf' size 10m autoextend off;
Tablespace altered.
|
정상적으로 추가가 됨
컨트롤파일에 있는 MAXDATAFILES 파라미터 재확인(RECORDS_TOTAL 컬럼)
1
2
3
4
5
6
7
|
SQL>
select * from v$controlfile_record_section
where type='DATAFILE';
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID CON_ID
---------------------------- ----------- ------------- ------------ ----------- ---------- ---------- ----------
DATAFILE 520 45 16 0 0 16 0
|
controlfile의 MAXDATAFILES 값인 RECORDS_TOTAL 컬럼값이 15에서 45로 자동으로 증가됨
alert log 확인
1
2
3
4
5
6
7
|
$ vi alert.log
2023-02-09T17:16:26.888590+01:00
alter tablespace dbftest add datafile '/oracle/app/oracle/oradata/TEST/dbftest12.dbf' size 10m autoextend off
2023-02-09T17:16:27.001664+01:00
Expanded controlfile section 4 from 15 to 45 records
Requested to grow by 30 records; added 1 blocks of records
Completed: alter tablespace dbftest add datafile '/oracle/app/oracle/oradata/TEST/dbftest12.dbf' size 10m autoextend off
|
자동으로 30개가 증가되었다는 메세지가 남음
결론 : 컨트롤파일의 MAXDATAFILES 를 작게 잡아놔도 db_files 파라미터값만큼 datafile을 추가할수 있다.
만약 MAXDATAFILES 값이 db_files 보다 적을 경우 자동으로 컨트롤파일의 MAXDATAFILES 값을 증가시킨다.
30개씩 증가시키는것으로 보인다.
참조 :
https://blog.naver.com/darkturtle/50023297184
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:83612348058
https://docs.oracle.com/cd/F49540_01/DOC/server.815/a67779/ch4f.htm
'ORACLE > Admin' 카테고리의 다른 글
오라클 11gR2 dbca silent mode 설치시 dbca에 나오는지 확인 (0) | 2023.02.02 |
---|---|
오라클 19c ORA-04031 에러를 발생시키는 방법 (0) | 2023.01.25 |
오라클 19c 온라인 데이터파일 move 테스트 (0) | 2023.01.10 |
오라클 19c 테이블 move 동일 테이블스페이스 테스트 (0) | 2022.12.21 |
오라클 11gR2 ddl wait (ddl_lock_timeout 파라미터) (0) | 2022.08.22 |