본문으로 바로가기

오라클 텍스트 길이 제한 확장

category 프로그래밍/프로젝트 2020. 12. 17. 21:52

VARCHAR2/NVARCHAR2의 최대 길이는 4000 바이트이고, RAW는 최대 2000바이트인데, 이 제한을 확장한다. 이 설정은 오라클 데이터베이스 12c 이후부터 된다. MAX_STRING_SIZE를 STANDARD에서 EXTENDED로 변경한다. 한번 EXTENDED로 변경하면 재설치하지 않는 이상 STANDARD로 되돌릴 수 없다.

 

 

-- CDB 에서 CDB와 그 안에 있는 모든 PDB의 설정을 변경하는 방법

-- 1. 관리자 권한으로 cdb 로그인
sqlplus cdb as sysdba

-- 2. 루트에서  MAX_STRING_SIZE를 EXTENDED로 설정
ALTER SESSION SET CONTAINER=CDB$ROOT;
ALTER SYSTEM SET max_string_size=extended SCOPE=SPFILE;

-- 3. 데이터베이스 종료
shutdown immediate;

-- 4. 데이터베이스 upgrade모드로 재시작
startup upgrade;

-- 5. 모든 PDB를 마이그레이트 모드로 연 다음 데이터베이스를 종료시킨다
ALTER PLUGGABLE DATABASE ALL OPEN UPGRADE;
EXIT;

-- 6. catcon.pl 스크립트를 사용하여 rdbms/admin/utl32k.sql을 실행한다. 
-- 루트와 CDB 안의 모든 PDB들의 VARCHAR2, NVARCHAR2, RAW 사이즈를 확장시키는 sql.
-- (코드는 윈도우 기준)
cd %ORACLE_HOME%/rdbms/admin
mkdir \scratch\mydir\utl32k_cdb_pdbs_output
%ORACLE_HOME%/perl/bin/perl %ORACLE_HOME%/rdbms/admin/catcon.pl -u SYS -l C:\scratch\mydir\utl32k_cdb_pdbs_output -d %ORACLE_HOME%/rdbms/admin -b utl32k_cdb_pdbs_output utl32k.sql

-- 7. 관리자 권한으로 cdb 로그인 후 데이터베이스 종료
sqlplus cdb as sysdba
shutdown immediate;

-- 8. 데이터베이스 일반 모드로 재시작
startup;

-- 9. CDB 안에 모든 PDB를 열기
ALTER PLUGGABLE DATABASE ALL OPEN READ WRITE;

-- 10. catcon.pl 스크립트를 사용하여 rdbms/admin/utlrp.sql을 실행한다. 
-- 루트의 검증되지 않은 객체와 CDB 안의 모든 PDB를 다시 컴파일하는 스크립트.
-- (코드는 윈도우 기준)
cd %ORACLE_HOME%/rdbms/admin
mkdir \scratch\mydir\utlrp_cdb_pdbs_output
%ORACLE_HOME%/perl/bin/perl %ORACLE_HOME%/rdbms/admin/catcon.pl -u SYS -d %ORACLE_HOME%/rdbms/admin -l C:\scratch\mydir\utlrp_cdb_pdbs_output -b utlrp_cdb_pdbs_output utlrp.sql
-- PDB$SEED 변경

-- 1. Shut down the PDB.
shutdown immediate;

-- 2. Reopen the PDB in migrate mode.
startup mount;
alter database open migrate;
alter session set container=PDB$SEED;

-- 3. Change the setting of MAX_STRING_SIZE in the PDB to EXTENDED.
alter system set max_string_size = EXTENDED;

-- 4. Run the rdbms/admin/utl32k.sql script in the PDB. You must be connected AS SYSDBA to run the utl32k.sql script.
@?/rdbms/admin/utl32k.sql
conn / as sysdba

-- 5. Reopen the PDB in NORMAL mode.
shutdown immediate


-- 나머지 PDB 변경

startup upgrade;
select con_id, name, open_mode from v$pdbs;
alter session set container=XEPDB1;
-- 업그레이드 모드로 플러그
ALTER PLUGGABLE DATABASE XEPDB1 OPEN UPGRADE;
alter system set max_string_size = EXTENDED;
@?/rdbms/admin/utl32k.sql
conn / as sysdba;
shutdown immediate;

startup;

 

 

만약 SYSDBA만 되고, 일반 계정은 되지 않는다면 show conn_name; 명령어로 현재 계정이 CDB에 있는지  PDB에 있는지 확인한 후, tnsnames.ora를 수정하고 리스너를 재시작해 pdb로 연결시켜주어야 한다.

 

 

 

 

 

 

 

docs.oracle.com/en/database/oracle/oracle-database/12.2/refrn/MAX_STRING_SIZE.html#GUID-D424D23B-0933-425F-BC69-9C0E6724693C

 

Database Reference

MAX_STRING_SIZE controls the maximum size of VARCHAR2, NVARCHAR2, and RAW data types in SQL.

docs.oracle.com

 

www.liberidu.com/blog/2013/12/24/ora-14696-max_string_size-migration-is-incomplete-for-pluggable-database/

 

ORA-14696: MAX_STRING_SIZE migration is incomplete for pluggable database

Like me, in the future or for testing, you might need a database with varchar2(32k) support. Although most is explained, the current documentation is a bit incomplete regarding how to get a pluggab…

www.liberidu.com

dba.stackexchange.com/questions/240761/in-oracle-12c-trying-to-create-table-with-columns-greater-than-4000

 

In Oracle 12c trying to create table with columns greater than 4000

New to Oracle and SQL. I have already followed normal procedure to allow for this size: startup upgrade alter system set MAX_STRING_SIZE ='EXTENDED' scope=spfile; @%ORACLE_HOME%\RDBMS\ADMIN\utl32k...

dba.stackexchange.com