CLOB最大サイズ

(8.0.29)
OSメモリ = 2GB
ディスク = 60GB

select @@max_allowed_packet;

vi /etc/my.cnf

max_allowed_packet = 1073741824

 

longtext最大サイズ = 4GB

drop table tab1 ;
create table tab1(col1 longtext, col2 longtext);

insert into tab1 values('A','あ');

update tab1 set col1 = concat(col1,col1,col1);
update tab1 set col2 = concat(col2,col2,col2);

→ ERROR 2013 (HY000): Lost connection to MySQL server during query

select char_length(col1),length(col1),char_length(col2),length(col2) from tab1;

+-------------------+--------------+-------------------+--------------+
| char_length(col1) | length(col1) | char_length(col2) | length(col2) |
+-------------------+--------------+-------------------+--------------+
|         129140163 |    129140163 |          43046721 |    129140163 |
+-------------------+--------------+-------------------+--------------+

→ 実際の上限 = 123MB

select substring(col1,10000,10),substring(col2,10000,10) from tab1;

+--------------------------+--------------------------------+
| substring(col1,10000,10) | substring(col2,10000,10)       |
+--------------------------+--------------------------------+
| AAAAAAAAAA               | ああああああああああ           |
+--------------------------+--------------------------------+

(19c)
OSメモリ = 4GB
ディスク = 100GB

clob最大サイズ =  (4GB - 1)×DB_BLOCK_SIZE初期化パラメータの値
( DB_BLOCK_SIZE=8kの場合、約32TB )


drop table tab1 purge;
create table tab1(col1 clob, col2 clob);

insert into tab1 values('A','あ');
commit;

update tab1 set col1 = col1||col1||col1;
update tab1 set col2 = col2||col2||col2;
commit;

→ ORA-01691: LOBセグメントTEST.SYS_LOB0000025529C00001$$を1024(表領域USERS)で拡張 できません


select lengthb(col1),lengthb(col2) from tab1;

→ ORA-22998: マルチバイトの文字セットのCLOBまたはNCLOBはサポートされていません

select length(col1),length(col2) from tab1;

LENGTH(COL1) LENGTH(COL2)
------------ ------------
  3486784401   3486784401


→ 実際の上限 = 10GB


select dbms_lob.substr(col1,10,10000),dbms_lob.substr(col2,10,10000) from tab1;

AAAAAAAAAA
ああああああああああ

select substr(col1,10000,10),substr(col2,10000,10) from tab1;

AAAAAAAAAA
ああああああああああ

(15)

OSメモリ = 2GB
ディスク = 60GB


text最大サイズ = 1GB


drop table tab1 ;
create table tab1(col1 text,col2 text);

insert into tab1 values('A','あ');

update tab1 set col1 = col1||col1||col1;
update tab1 set col2 = col2||col2||col2;

→ ERROR:  invalid memory alloc request size 1162261471

select char_length(col1),octet_length(col1),char_length(col2),octet_length(col2) from tab1;

 char_length | octet_length | char_length | octet_length
-------------+--------------+-------------+--------------
   387420489 |    387420489 |   129140163 |    387420489


select substr(col1,10000,10),substr(col2,10000,10) from tab1;

   substr   |        substr
------------+----------------------
 AAAAAAAAAA | ああああああああああ

 

(2019)
OSメモリ = 4GB
ディスク = 60GB

varchar(max)最大サイズ = 2GB
 


drop table tab1 ;
create table tab1(col1 varchar(max), col2 varchar(max));

insert into tab1 values('A','あ');

update tab1 set col1 = col1+col1+col1;
update tab1 set col2 = col2+col2+col2;

→ LOB のサイズを、許容最大サイズ 2147483647 バイトを超えて拡大しようとしています。


select len(col1),datalength(col1),len(col2),datalength(col2) from tab1;

1162261467    1162261467    387420489    774840978

 

select substring(col1,10000,10),substring(col2,10000,10) from tab1;

AAAAAAAAAA    ああああああああああ