2015-02-26 3 views
0

Я использую версию базы данных Oracle 12c. Для тестирования массовых данных мне нужно вставить не менее 1 Тбайта данных. Теперь проблема в том, что после вставки данных в таблицу свободное место на диске не уменьшается. Я последовал этим шагам.Свободное место на диске не уменьшается при добавлении bfiles

1) создано табличное пространство (Если все работает, я хочу создать 100 табличные, имеющие емкость 10 ГБ Обратите внимание, что у меня есть E:. Привод, имеющий место 1,26 ТБ)

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) выполнена операция вставки в петлю с использованием файла JPEG размером 4 МБ.

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 ГБ. Если я запустил SELECT COUNT(*) FROM GRAPHICS_TABLE, он дал мне правильный счет.

Пожалуйста, помогите мне понять, почему дисковое пространство не потребляется.

ответ

3

Другим именем для BFILE является внешний LOB. Как следует из названия, фактические данные остаются внешними по отношению к базе данных, и в таблице сохраняется только ссылка на файл. В вашем тесте вы вставляете 2500 ссылок на один и тот же файл.

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) 

Это должно выделить около ТБ до GRAPHICS_TABLE.

Смежные вопросы