我正在使用Oracle数据库版本12c。对于批量数据测试,我需要插入至少1 TB的数据。现在的问题是,在表中插入数据后,磁盘上的可用空间不会减少。我按照这些步骤进行了操作。
1)创建表空间(如果工作正常我想创建100个容量为10 GB的表空间。请注意,我有E:驱动器有1.26 TB空间)
create tablespace tbls1
datafile E:\app\User1\oradata\BulkData\mydata.dbf'
size 10000m;
2)使用表空间tbls1创建表。
create table graphics_table (
bfile_id number,
bfile_desc varchar2(30),
bfile_loc bfile,
bfile_type varchar2(4))
TABLESPACE tbls2
storage (initial 1m next 1m pctincrease 0)
3)使用4 MB JPEG文件在循环中执行插入操作。
DECLARE
k integer:= 1;
BEGIN
<< super_outer_loop >>
FOR k IN 1..2500 LOOP
INSERT INTO graphics_table
VALUES(k,'wallpaper i have',bfilename('JPEG_FILES','WALLPAPER.JPEG'),'JPEG');
END loop super_outer_loop;
END;
现在,如果我检查我的E:驱动器的大小,它只显示1 GB。如果我运行SELECT COUNT(*) FROM GRAPHICS_TABLE
,它会给我正确的计数。
请帮助我理解为什么不占用磁盘空间。
答案 0 :(得分:3)
BFILE
的另一个名称是外部LOB 。顾名思义,实际数据仍然在数据库外部,并且只有指向该文件的链接存储在表中。在测试中,您将2500个链接插入同一文件。
答案 1 :(得分:0)
您可能希望将表格创建为:
create table graphics_table (
bfile_id number,
bfile_desc varchar2(30),
bfile_loc bfile,
bfile_type varchar2(4))
TABLESPACE tbls2
storage (initial 1t next 1g pctincrease 0)
那应该将一个TB分配给GRAPHICS_TABLE。