OS 환경 : Oracle Linux 8.4 (64bit)
DB 환경 : Oracle Database 23.4.0.24.05 ai Free
방법 : 오라클 23ai 뉴피처 테이블 최대 컬럼 갯수 증가
오라클 23ai 부터 테이블당 추가 가능한 최대 컬럼 갯수가 1000개에서 4096개로 증가됨
이 기능은 기본적으로 비활성화 되어 있고 MAX_COLUMNS 파라미터를 EXTENDED 로 변경 했을때만 4096개의 컬럼을 사용할 수 있음
이 기능이 생기게 된 계기는 머신러닝 및 IoT 애플리케이션 업무 같은 일부 애플리케이션에서 1000개 이상의 컬럼을 사용하는 비정규화된 테이블을 사용해야 할 수 있기 때문에 생겼다고함
테스트로 4096개 컬럼이 추가되는지 확인해봄
테스트
현재 max_columns 파라미터 확인
1
2
3
4
5
|
SQL> show parameter max_columns
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_columns string STANDARD
|
현재 STANDARD 임
컬럼 1000개인 테이블을 만드는 plsql 실행
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
SQL>
DECLARE
v_sql CLOB;
BEGIN
v_sql := 'CREATE TABLE large_table (';
FOR i IN 1..1000 LOOP
v_sql := v_sql || 'col' || TO_CHAR(i) || ' NUMBER';
IF i != 1000 THEN
v_sql := v_sql || ', ';
END IF;
END LOOP;
v_sql := v_sql || ')';
EXECUTE IMMEDIATE v_sql;
END;
/
PL/SQL procedure successfully completed.
|
정상적으로 생성됨
컬럼 갯수 확인
1
2
3
4
5
6
7
8
9
10
11
|
SQL>
set lines 200 pages 1000
col table_name for a15
select table_name, count(*)
from dba_tab_cols
where table_name = 'LARGE_TABLE'
group by table_name;
TABLE_NAME COUNT(*)
--------------- ----------
LARGE_TABLE 1000
|
컬럼이 1000개인 테이블이 정상적으로 생성됨
컬럼이 1001개인 테이블 생성 시도
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
SQL>
DECLARE
v_sql CLOB;
BEGIN
v_sql := 'CREATE TABLE large_table2 (';
FOR i IN 1..1001 LOOP
v_sql := v_sql || 'col' || TO_CHAR(i) || ' NUMBER';
IF i != 1001 THEN
v_sql := v_sql || ', ';
END IF;
END LOOP;
v_sql := v_sql || ')';
EXECUTE IMMEDIATE v_sql;
END;
/
*
ERROR at line 1:
ORA-01792: maximum number of columns in a table or view is 1000
ORA-06512: at line 15
Help: https://docs.oracle.com/error-help/db/ora-01792/
|
ORA-01792 에러가 발생함
max_columns 파라미터 extended 로 변경
1
2
3
|
SQL> alter system set max_columns = extended scope = spfile;
System altered.
|
pdb 재기동
1
2
3
4
|
SQL> shutdown immediate
Pluggable Database closed.
SQL> startup
Pluggable Database opened.
|
max_columns 파라미터 확인
1
2
3
4
5
|
SQL> show parameter max_columns
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_columns string EXTENDED
|
max_columns 값이 EXTENDED로 변경됨, 이제 4096개 컬럼을 가질 수 있음
4096개 컬럼을 가진 테이블 생성 시도
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
SQL>
DECLARE
v_sql CLOB;
BEGIN
v_sql := 'CREATE TABLE vlarge_table (';
FOR i IN 1..4096 LOOP
v_sql := v_sql || 'col' || TO_CHAR(i) || ' NUMBER';
IF i != 4096 THEN
v_sql := v_sql || ', ';
END IF;
END LOOP;
v_sql := v_sql || ')';
EXECUTE IMMEDIATE v_sql;
END;
/
PL/SQL procedure successfully completed.
|
정상적으로 생성됨
컬럼 갯수 확인
1
2
3
4
5
6
7
8
9
10
11
|
SQL>
set lines 200 pages 1000
col table_name for a15
select table_name, count(*)
from dba_tab_cols
where table_name = 'VLARGE_TABLE'
group by table_name;
TABLE_NAME COUNT(*)
--------------- ----------
VLARGE_TABLE 4096
|
컬럼이 4096개인 테이블이 정상적으로 생성됨
마찬가지로 4097개 컬럼을 가진 테이블을 생성하려하면 에러가 발생함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
SQL>
DECLARE
v_sql CLOB;
BEGIN
v_sql := 'CREATE TABLE vlarge_table2 (';
FOR i IN 1..4097 LOOP
v_sql := v_sql || 'col' || TO_CHAR(i) || ' NUMBER';
IF i != 4097 THEN
v_sql := v_sql || ', ';
END IF;
END LOOP;
v_sql := v_sql || ')';
EXECUTE IMMEDIATE v_sql;
END;
/
*
ERROR at line 1:
ORA-01792: maximum number of columns in a table or view is 4096
ORA-06512: at line 15
Help: https://docs.oracle.com/error-help/db/ora-01792/
|
ORA-01792 에러가 발생함
참고로 pdb의 spfile 파라미터 정보는 PDB_SPFILE$에 저장됨
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
SQL>
set lines 200 pages 1000
col db_uniq_name for a10
col name for a50
col value$ for a20
col sid for a20
select sid, db_uniq_name, name, value$ from pdb_spfile$;
SID DB_UNIQ_NA NAME VALUE$
-------------------- ---------- -------------------------------------------------- --------------------
* * max_columns 'EXTENDED'
FREE * hybrid_read_only FALSE
* * spatial_vector_acceleration TRUE
FREE * _pdb_hybrid_read_only FALSE
|
참조 :
https://apex.oracle.com/pls/apex/features/r/dbfeatures/features?feature_id=1804
https://docs.oracle.com/en/database/oracle/oracle-database/23/refrn/MAX_COLUMNS.html#REFRN-GUID-916B35D1-364E-41C6-A025-E2D32533D08E
https://tuna.tistory.com/111
2101596.1
https://oracle-base.com/articles/12c/multitenant-configure-instance-parameters-of-cdb-and-pdb-12cr1
'ORACLE > Admin' 카테고리의 다른 글
오라클 19c commit 기본 옵션 정리 및 테스트 (0) | 2024.05.27 |
---|---|
오라클 19c sqlplus 의 history 명령어 (0) | 2024.05.15 |
오라클 23ai 신기능 정리 (0) | 2024.05.10 |
오라클 23ai 신기능 하이브리드 read-only pdb (0) | 2024.05.10 |
오라클 23ai 신기능 from 절 없는 select 문 (0) | 2024.05.09 |