添加bfiles时,可用磁盘空间不会减少

时间:2015-02-26 18:50:14

标签: oracle

我正在使用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,它会给我正确的计数。

请帮助我理解为什么不占用磁盘空间。

2 个答案:

答案 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。