Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Хранение пустых полей  [new]
m1rag3
Member

Откуда:
Сообщений: 53
Всем доброго времени суток!
Может мой вопрос и несколько глупый но все же...
Имеется таблица с тремя столбцами: число, дата, текст.
Пусть в ней 10 записей. Вопрос мой в том, резервируется ли место (физически на диске в файле БД) в записи под то поле, которое является пустым. Иными словами, будет ли эта таблица занимать одинаковое место на диске, если во всех десяти записях одно из полей будет NULL, а в другом случае заполнено.
24 ноя 05, 11:38    [2102974]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Vadim_Maximov
Member

Откуда: Москва
Сообщений: 3574
Значения NULL не хранятся и не индексируются.
24 ноя 05, 11:41    [2103005]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
m1rag3
Member

Откуда:
Сообщений: 53
То есть таблица с NULLами в одном из полей будет физически весить меньше чем та же таблица с заполненным полем во всех записях? Я правильно понял?
24 ноя 05, 11:44    [2103028]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29402
RTFM Nulls (FAQ)
24 ноя 05, 11:44    [2103032]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18211
Vadim_Maximov
Значения NULL не хранятся и не индексируются.
В общем случае неверно ;-)
24 ноя 05, 11:44    [2103034]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5929
m1rag3
Всем доброго времени суток!
Может мой вопрос и несколько глупый но все же...
Имеется таблица с тремя столбцами: число, дата, текст.
Пусть в ней 10 записей. Вопрос мой в том, резервируется ли место (физически на диске в файле БД) в записи под то поле, которое является пустым. Иными словами, будет ли эта таблица занимать одинаковое место на диске, если во всех десяти записях одно из полей будет NULL, а в другом случае заполнено.


Указанная таблица из 10ти строк :o) скорее всего будет занимать одинаковое дисковое пространство, поскольку пространство выделяется блоками фиксированной длинны (точнее экстентами блоков). В пределах блока записи имеют разный размер, в зависимости от фактических значений полей, поэтому в блок может поместиться разное число записей.
Касательно NULL. Если пустое поле последнее в списке колонок таблицы, или все следующие за пустым полем поля тоже пустые, то эти поля места вообще не занимают. Например в записи (V1, NULL, V2, NULL, NULL, NULL) последние три пустых поля места не занимают. Если за пустыми полями есть непустое, то каждое пустое поле занимает 1 байт. Например в записи (V1, NULL, NULL, NULL, V2, NULL) первые три NULL занимают по одному байту. Последний NULL места не занимает.

Такой подход позволяет добавлять в таблицу пустые колонки практически мгновенно.
24 ноя 05, 12:01    [2103206]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Leonid_B
Member

Откуда: Москва
Сообщений: 276
SQL> conn system/system@artz
Connected.
SQL> create table t$3(i int not null, v varchar2(4000), d date not null)
  2  /

Table created.

SQL> begin
  2    for l_i in 1..100000 loop
  3      insert into t$3 values(l_i, null , sysdate);
  4    end loop;
  5  end;
  6  /

PL/SQL procedure successfully completed.

SQL> create table t$4(i int not null, d date not null,v varchar2(4000))
  2  /

Table created.

SQL> begin
  2    for l_i in 1..100000 loop
  3      insert into t$4 values(l_i, sysdate,null);
  4    end loop;
  5  end;
  6  /

PL/SQL procedure successfully completed.

SQL> 
SQL> select segment_name, sum(bytes) from user_extents where segment_name like 'T$_' group by segment_name;

SEGMENT_NAME  SUM(BYTES)                                                                                                                                         
------------- ----------                                                                      
T$3             3145728                                                                      
T$4             2097152                                                                      
                                                                                

SQL> 
SQL> drop table t$4;

Table dropped.

SQL> drop table t$3;

Table dropped.

SQL> exit

24 ноя 05, 12:06    [2103256]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6745
Vadim_Maximov
Значения NULL не хранятся и не индексируются.

например bitmap...
24 ноя 05, 13:40    [2103943]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Vadim_Maximov
Member

Откуда: Москва
Сообщений: 3574
Вячеслав Любомудров
Vadim_Maximov
Значения NULL не хранятся и не индексируются.
В общем случае неверно ;-)
Знаю. Согласен. :)
25 ноя 05, 02:13    [2106694]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Хранение пустых полей  [new]
nata44845
Member

Откуда: Красноярск
Сообщений: 355
Подниму тему, имеется таблица от разработчика порядка 600 столбцов, 500 гиг.

Данные разные из разных отчетов, документов и т.д.
Соответственно запрос с разбиением по типам данных выглядит так
SELECT /*+ parallel(8) */DISTINCT DL.CLASS,DL.TYPE,
SUM(case when DL.X IS NOT NULL THEN 1 ELSE 0 END) X,
SUM(case when DL.Y IS NOT NULL THEN 1 ELSE 0 END) Y,
... 
(выбрано из USER_COLUMNS, упорядочено по COLUMN_ID)
...
FROM DL
GROUP BY DL.CLASS,DL.TYPE


Картинка с другого сайта.

Красное - нед данных, то есть 90% таблицы откровенно пустые, причем есть отчеты за текущий месяц в 90 миллионов строк, у которых последний столбец находится на 430 месте, а всего занятых столбцов 41. До 430 идут порядка 390 пустых столбцов.

В связи с этим возникает ряд вопросов.

Если в последнем столбце есть хоть одна заполненная ячейка данных все все столбцы до этого считаются заполненными?
Или если заполнена ячейка в строке только эта строка доходит до этой ячейки, а все остальные строки записываются каждая до своей последней заполненной ячейки?

В физическом смысле при движении заполненных столбцов ближе к первому (в тех скриптах, что предлагает редактор) вижу таблица пересоздается в табличном пространстве по умолчанию, то есть места мне для еще одной таблицы даже временно просто не хватит.
Что будет в это время с UNDO, если таблица порядка 500Гб?

Можно ли как-то просчитать не среднюю длину строк, а конкретные длины для каждой строки каждого класса и количество таких строк (это в случае, что все длины строк разные)?

ПС. Еще есть вероятность, что в этом отчете на 90 миллионов прочистят пустые строки, но остальное то останется.
10 фев 17, 07:48    [20198978]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29402
nata44845
Если в последнем столбце есть хоть одна заполненная ячейка данных все все столбцы до этого считаются заполненными?
Или если заполнена ячейка в строке только эта строка доходит до этой ячейки, а все остальные строки записываются каждая до своей последней заполненной ячейки?
RTFM Nulls (FAQ)
nata44845
Можно ли как-то просчитать не среднюю длину строк, а конкретные длины для каждой строки каждого класса и количество таких строк (это в случае, что все длины строк разные)?

10 фев 17, 08:23    [20199032]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18211
nata44845
Если в последнем столбце есть хоть одна заполненная ячейка данных все все столбцы до этого считаются заполненными?
Или если заполнена ячейка в строке только эта строка доходит до этой ячейки, а все остальные строки записываются каждая до своей последней заполненной ячейки?
С таким количеством столбцов уже вступает в дело intra-block chaining
Каждая строка разбивается на куски не более 255 столбцов
Там теоретически все также -- если заполнен последним (не NULL) столбец 40 -- все остальное не хранится, все столбцы до 40 содержащие NULL занимают 1 байт
Если заполнены столбец 40, 300 и 380, то тут первый кусок аналогично предыдущему, а вот остальные -- в зависимости от порядка заполнения -- если первым заполнен столбец 380, то создастся кусок, содержащий (380-256) NULL по одному байту и значение столбца 380. Если потом обновляем столбец 300 -- он будет обновлен в этом куске.
А если первым обновлен столбец 300 -- будет создан второй кусок с (300-256) NULL и значением столбца 300. При обновлении столбца 380 будет создан новый кусок с (380-301) NULL по одному байту и значением столбца 380.

Обсуждалось уже давно, начиная с Chained rows в вторичных таблицах пространственных индексов и далее
Возможно, там и/или тут неточности

nata44845
В физическом смысле при движении заполненных столбцов ближе к первому (в тех скриптах, что предлагает редактор) вижу таблица пересоздается в табличном пространстве по умолчанию, то есть места мне для еще одной таблицы даже временно просто не хватит.
Что будет в это время с UNDO, если таблица порядка 500Гб?

Можно ли как-то просчитать не среднюю длину строк, а конкретные длины для каждой строки каждого класса и количество таких строк (это в случае, что все длины строк разные)?

ПС. Еще есть вероятность, что в этом отчете на 90 миллионов прочистят пустые строки, но остальное то останется.
Тут я не совсем понял терминологию, но да -- реорганизация такой большой таблицы дело весьма ресурсоемкой.

Но я бы все-таки разбил на 3 таблицы с 1:1 связью и сверху бы повесил VIEW (INSTEAD OF триггер на обновления)
10 фев 17, 08:26    [20199041]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
nata44845
Member

Откуда: Красноярск
Сообщений: 355
Вячеслав Любомудров,

По столбцам все равно не поняла.
К примеру есть столбец, в нем половина null половина заполнена.
Он занимает полный размер по всем строкам, или в тех строках где есть данные длина равна длине столбца, а там где null 1 байт?

И соответственно как ведут себя в этом случае все предыдущие столбцы?
10 фев 17, 08:31    [20199056]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18211
Вячеслав Любомудров
Если заполнены столбец 40, 300 и 380, то тут первый кусок аналогично предыдущему, а вот остальные -- в зависимости от порядка заполнения -- если первым заполнен столбец 380, то создастся кусок, содержащий (380-256) NULL по одному байту и значение столбца 380. Если потом обновляем столбец 300 -- он будет обновлен в этом куске.
А если первым обновлен столбец 300 -- будет создан второй кусок с (300-256) NULL и значением столбца 300. При обновлении столбца 380 будет создан новый кусок с (380-301) NULL по одному байту и значением столбца 380.
Вот тут, кстати, скорее всего неточность -- просто в заголовке [под]строки указывается номер первого столбца

Хотя, вроде как Chained rows в вторичных таблицах пространственных индексов намекает на это.

Насколько помню, так это ничем и не кончилось -- серьезных тестов с дампами и т.д. никто так и не проводил (да никому и не надо), ну или не опубликовал
10 фев 17, 08:32    [20199060]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18211
nata44845
Вячеслав Любомудров,

По столбцам все равно не поняла.
К примеру есть столбец, в нем половина null половина заполнена.
Он занимает полный размер по всем строкам, или в тех строках где есть данные длина равна длине столбца, а там где null 1 байт?

И соответственно как ведут себя в этом случае все предыдущие столбцы?
Ну у нас же не поколоночное хранение
Каждая строка ничего не знает об остальных
10 фев 17, 08:33    [20199064]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
nata44845
Member

Откуда: Красноярск
Сообщений: 355
Вячеслав Любомудров,

Ндаа, с вьюшкой у нас проблема как и у них, "самонастраиваемое приложение".
10 фев 17, 08:33    [20199069]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
nata44845
Member

Откуда: Красноярск
Сообщений: 355
Elic,

Это я тоже условно поняла, что надо отбросить последние нули, но как это сделать запросом пока не продумала.
10 фев 17, 08:36    [20199076]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
nata44845
Member

Откуда: Красноярск
Сообщений: 355
Вячеслав Любомудров,

Тут как вариант только вынести часть данных те же отчеты в отдельную таблицу.
И попросить больше так не делать...
10 фев 17, 08:37    [20199083]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29402
nata44845
Это я тоже условно поняла, что надо отбросить последние нули, но как это сделать запросом пока не продумала.
Я ж почти готовое выражение дал как способ его генерации.
10 фев 17, 08:43    [20199099]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
xtender
Member

Откуда: Мск
Сообщений: 5250
Вячеслав Любомудров,

Row pieces разбиваются с последнего поля,а не с первого. Т.е. если 355 столбцов то будут два: 100-355 и 1-99
11 фев 17, 14:56    [20203138]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29402
xtender
Row pieces разбиваются с последнего поля,а не с первого. Т.е. если 355 столбцов то будут два: 100-355 и 1-99
Хммм. Звучит так, что если добавить ещё один столбец, то либо появится третий кусок, либо произойдёт нехилый бессмысленный update. Верится не то что с трудом, а вообще никак.
11 фев 17, 15:18    [20203193]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18211
Саян, я сам это не проверял, просто дал ссылки, где это обсуждалось
Но там были интересные моменты, но вот комментировать их я не берусь

В любом случае, проблемы девушки -- другого способа я не вижу
11 фев 17, 15:40    [20203229]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9635
Elic
Хммм. Звучит так, что если добавить ещё один столбец, то либо появится третий кусок, либо произойдёт нехилый бессмысленный update. Верится не то что с трудом, а вообще никак.


Или (как вариант) физически ещё один столбец будет добавлен к 1-99 (который станет 1-99,356).

SY.

Сообщение было отредактировано: 11 фев 17, 17:56
11 фев 17, 17:56    [20203396]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
xtender
Member

Откуда: Мск
Сообщений: 5250
Elic
xtender
Row pieces разбиваются с последнего поля,а не с первого. Т.е. если 355 столбцов то будут два: 100-355 и 1-99
Хммм. Звучит так, что если добавить ещё один столбец, то либо появится третий кусок, либо произойдёт нехилый бессмысленный update. Верится не то что с трудом, а вообще никак.
да, появится третий кусок, только уже "уехавший" в другой блок
+ test1
alter session set tracefile_identifier='test';

declare
   c varchar2(32000);
   v varchar2(32000);
   cols varchar2(32000):='c_1 number(1,0)';
   vals varchar2(32000):='0';
   
   ndf int;
   nbl int;
begin
   for i in 2..355 loop
      cols:=cols||',c_'||i||' number(1,0)';
      vals:=vals||','||case 
                         when i between 2 and 100 then 1
                         when i between 101 and 350 then 2
                         else 3
                       end;
   end loop;
   c:='create table test('||cols||')';
   v:='insert into test values('||vals||')';
   execute immediate (c);
   execute immediate (v);
   execute immediate '
      select 
          dbms_rowid.rowid_relative_fno(c.rowid) ndf
         ,dbms_rowid.rowid_block_number(c.rowid) nbl
      from test c' into ndf,nbl;
   commit;
   execute immediate 'alter system dump datafile ' || ndf || ' block '||nbl;
end;
/
disc;

+ дамп к тесту1
block_row_dump:
tab 0, row 0, @0x1c80
tl: 768 fb: -----L-- lb: 0x1  cc: 255
col  0: [ 2]  c1 03
col  1: [ 2]  c1 03
col  2: [ 2]  c1 03
col  3: [ 2]  c1 03
col  4: [ 2]  c1 03
col  5: [ 2]  c1 03
col  6: [ 2]  c1 03
col  7: [ 2]  c1 03
col  8: [ 2]  c1 03
col  9: [ 2]  c1 03
col 10: [ 2]  c1 03
col 11: [ 2]  c1 03
col 12: [ 2]  c1 03
col 13: [ 2]  c1 03
col 14: [ 2]  c1 03
col 15: [ 2]  c1 03
col 16: [ 2]  c1 03
col 17: [ 2]  c1 03
col 18: [ 2]  c1 03
col 19: [ 2]  c1 03
col 20: [ 2]  c1 03
col 21: [ 2]  c1 03
col 22: [ 2]  c1 03
col 23: [ 2]  c1 03
col 24: [ 2]  c1 03
col 25: [ 2]  c1 03
col 26: [ 2]  c1 03
col 27: [ 2]  c1 03
col 28: [ 2]  c1 03
col 29: [ 2]  c1 03
col 30: [ 2]  c1 03
col 31: [ 2]  c1 03
col 32: [ 2]  c1 03
col 33: [ 2]  c1 03
col 34: [ 2]  c1 03
col 35: [ 2]  c1 03
col 36: [ 2]  c1 03
col 37: [ 2]  c1 03
col 38: [ 2]  c1 03
col 39: [ 2]  c1 03
col 40: [ 2]  c1 03
col 41: [ 2]  c1 03
col 42: [ 2]  c1 03
col 43: [ 2]  c1 03
col 44: [ 2]  c1 03
col 45: [ 2]  c1 03
col 46: [ 2]  c1 03
col 47: [ 2]  c1 03
col 48: [ 2]  c1 03
col 49: [ 2]  c1 03
col 50: [ 2]  c1 03
col 51: [ 2]  c1 03
col 52: [ 2]  c1 03
col 53: [ 2]  c1 03
col 54: [ 2]  c1 03
col 55: [ 2]  c1 03
col 56: [ 2]  c1 03
col 57: [ 2]  c1 03
col 58: [ 2]  c1 03
col 59: [ 2]  c1 03
col 60: [ 2]  c1 03
col 61: [ 2]  c1 03
col 62: [ 2]  c1 03
col 63: [ 2]  c1 03
col 64: [ 2]  c1 03
col 65: [ 2]  c1 03
col 66: [ 2]  c1 03
col 67: [ 2]  c1 03
col 68: [ 2]  c1 03
col 69: [ 2]  c1 03
col 70: [ 2]  c1 03
col 71: [ 2]  c1 03
col 72: [ 2]  c1 03
col 73: [ 2]  c1 03
col 74: [ 2]  c1 03
col 75: [ 2]  c1 03
col 76: [ 2]  c1 03
col 77: [ 2]  c1 03
col 78: [ 2]  c1 03
col 79: [ 2]  c1 03
col 80: [ 2]  c1 03
col 81: [ 2]  c1 03
col 82: [ 2]  c1 03
col 83: [ 2]  c1 03
col 84: [ 2]  c1 03
col 85: [ 2]  c1 03
col 86: [ 2]  c1 03
col 87: [ 2]  c1 03
col 88: [ 2]  c1 03
col 89: [ 2]  c1 03
col 90: [ 2]  c1 03
col 91: [ 2]  c1 03
col 92: [ 2]  c1 03
col 93: [ 2]  c1 03
col 94: [ 2]  c1 03
col 95: [ 2]  c1 03
col 96: [ 2]  c1 03
col 97: [ 2]  c1 03
col 98: [ 2]  c1 03
col 99: [ 2]  c1 03
col 100: [ 2]  c1 03
col 101: [ 2]  c1 03
col 102: [ 2]  c1 03
col 103: [ 2]  c1 03
col 104: [ 2]  c1 03
col 105: [ 2]  c1 03
col 106: [ 2]  c1 03
col 107: [ 2]  c1 03
col 108: [ 2]  c1 03
col 109: [ 2]  c1 03
col 110: [ 2]  c1 03
col 111: [ 2]  c1 03
col 112: [ 2]  c1 03
col 113: [ 2]  c1 03
col 114: [ 2]  c1 03
col 115: [ 2]  c1 03
col 116: [ 2]  c1 03
col 117: [ 2]  c1 03
col 118: [ 2]  c1 03
col 119: [ 2]  c1 03
col 120: [ 2]  c1 03
col 121: [ 2]  c1 03
col 122: [ 2]  c1 03
col 123: [ 2]  c1 03
col 124: [ 2]  c1 03
col 125: [ 2]  c1 03
col 126: [ 2]  c1 03
col 127: [ 2]  c1 03
col 128: [ 2]  c1 03
col 129: [ 2]  c1 03
col 130: [ 2]  c1 03
col 131: [ 2]  c1 03
col 132: [ 2]  c1 03
col 133: [ 2]  c1 03
col 134: [ 2]  c1 03
col 135: [ 2]  c1 03
col 136: [ 2]  c1 03
col 137: [ 2]  c1 03
col 138: [ 2]  c1 03
col 139: [ 2]  c1 03
col 140: [ 2]  c1 03
col 141: [ 2]  c1 03
col 142: [ 2]  c1 03
col 143: [ 2]  c1 03
col 144: [ 2]  c1 03
col 145: [ 2]  c1 03
col 146: [ 2]  c1 03
col 147: [ 2]  c1 03
col 148: [ 2]  c1 03
col 149: [ 2]  c1 03
col 150: [ 2]  c1 03
col 151: [ 2]  c1 03
col 152: [ 2]  c1 03
col 153: [ 2]  c1 03
col 154: [ 2]  c1 03
col 155: [ 2]  c1 03
col 156: [ 2]  c1 03
col 157: [ 2]  c1 03
col 158: [ 2]  c1 03
col 159: [ 2]  c1 03
col 160: [ 2]  c1 03
col 161: [ 2]  c1 03
col 162: [ 2]  c1 03
col 163: [ 2]  c1 03
col 164: [ 2]  c1 03
col 165: [ 2]  c1 03
col 166: [ 2]  c1 03
col 167: [ 2]  c1 03
col 168: [ 2]  c1 03
col 169: [ 2]  c1 03
col 170: [ 2]  c1 03
col 171: [ 2]  c1 03
col 172: [ 2]  c1 03
col 173: [ 2]  c1 03
col 174: [ 2]  c1 03
col 175: [ 2]  c1 03
col 176: [ 2]  c1 03
col 177: [ 2]  c1 03
col 178: [ 2]  c1 03
col 179: [ 2]  c1 03
col 180: [ 2]  c1 03
col 181: [ 2]  c1 03
col 182: [ 2]  c1 03
col 183: [ 2]  c1 03
col 184: [ 2]  c1 03
col 185: [ 2]  c1 03
col 186: [ 2]  c1 03
col 187: [ 2]  c1 03
col 188: [ 2]  c1 03
col 189: [ 2]  c1 03
col 190: [ 2]  c1 03
col 191: [ 2]  c1 03
col 192: [ 2]  c1 03
col 193: [ 2]  c1 03
col 194: [ 2]  c1 03
col 195: [ 2]  c1 03
col 196: [ 2]  c1 03
col 197: [ 2]  c1 03
col 198: [ 2]  c1 03
col 199: [ 2]  c1 03
col 200: [ 2]  c1 03
col 201: [ 2]  c1 03
col 202: [ 2]  c1 03
col 203: [ 2]  c1 03
col 204: [ 2]  c1 03
col 205: [ 2]  c1 03
col 206: [ 2]  c1 03
col 207: [ 2]  c1 03
col 208: [ 2]  c1 03
col 209: [ 2]  c1 03
col 210: [ 2]  c1 03
col 211: [ 2]  c1 03
col 212: [ 2]  c1 03
col 213: [ 2]  c1 03
col 214: [ 2]  c1 03
col 215: [ 2]  c1 03
col 216: [ 2]  c1 03
col 217: [ 2]  c1 03
col 218: [ 2]  c1 03
col 219: [ 2]  c1 03
col 220: [ 2]  c1 03
col 221: [ 2]  c1 03
col 222: [ 2]  c1 03
col 223: [ 2]  c1 03
col 224: [ 2]  c1 03
col 225: [ 2]  c1 03
col 226: [ 2]  c1 03
col 227: [ 2]  c1 03
col 228: [ 2]  c1 03
col 229: [ 2]  c1 03
col 230: [ 2]  c1 03
col 231: [ 2]  c1 03
col 232: [ 2]  c1 03
col 233: [ 2]  c1 03
col 234: [ 2]  c1 03
col 235: [ 2]  c1 03
col 236: [ 2]  c1 03
col 237: [ 2]  c1 03
col 238: [ 2]  c1 03
col 239: [ 2]  c1 03
col 240: [ 2]  c1 03
col 241: [ 2]  c1 03
col 242: [ 2]  c1 03
col 243: [ 2]  c1 03
col 244: [ 2]  c1 03
col 245: [ 2]  c1 03
col 246: [ 2]  c1 03
col 247: [ 2]  c1 03
col 248: [ 2]  c1 03
col 249: [ 2]  c1 03
col 250: [ 2]  c1 04
col 251: [ 2]  c1 04
col 252: [ 2]  c1 04
col 253: [ 2]  c1 04
col 254: [ 2]  c1 04
tab 0, row 1, @0x1b4c
tl: 308 fb: --H-F--- lb: 0x1  cc: 100
nrid:  0x018019f7.0
col  0: [ 1]  80
col  1: [ 2]  c1 02
col  2: [ 2]  c1 02
col  3: [ 2]  c1 02
col  4: [ 2]  c1 02
col  5: [ 2]  c1 02
col  6: [ 2]  c1 02
col  7: [ 2]  c1 02
col  8: [ 2]  c1 02
col  9: [ 2]  c1 02
col 10: [ 2]  c1 02
col 11: [ 2]  c1 02
col 12: [ 2]  c1 02
col 13: [ 2]  c1 02
col 14: [ 2]  c1 02
col 15: [ 2]  c1 02
col 16: [ 2]  c1 02
col 17: [ 2]  c1 02
col 18: [ 2]  c1 02
col 19: [ 2]  c1 02
col 20: [ 2]  c1 02
col 21: [ 2]  c1 02
col 22: [ 2]  c1 02
col 23: [ 2]  c1 02
col 24: [ 2]  c1 02
col 25: [ 2]  c1 02
col 26: [ 2]  c1 02
col 27: [ 2]  c1 02
col 28: [ 2]  c1 02
col 29: [ 2]  c1 02
col 30: [ 2]  c1 02
col 31: [ 2]  c1 02
col 32: [ 2]  c1 02
col 33: [ 2]  c1 02
col 34: [ 2]  c1 02
col 35: [ 2]  c1 02
col 36: [ 2]  c1 02
col 37: [ 2]  c1 02
col 38: [ 2]  c1 02
col 39: [ 2]  c1 02
col 40: [ 2]  c1 02
col 41: [ 2]  c1 02
col 42: [ 2]  c1 02
col 43: [ 2]  c1 02
col 44: [ 2]  c1 02
col 45: [ 2]  c1 02
col 46: [ 2]  c1 02
col 47: [ 2]  c1 02
col 48: [ 2]  c1 02
col 49: [ 2]  c1 02
col 50: [ 2]  c1 02
col 51: [ 2]  c1 02
col 52: [ 2]  c1 02
col 53: [ 2]  c1 02
col 54: [ 2]  c1 02
col 55: [ 2]  c1 02
col 56: [ 2]  c1 02
col 57: [ 2]  c1 02
col 58: [ 2]  c1 02
col 59: [ 2]  c1 02
col 60: [ 2]  c1 02
col 61: [ 2]  c1 02
col 62: [ 2]  c1 02
col 63: [ 2]  c1 02
col 64: [ 2]  c1 02
col 65: [ 2]  c1 02
col 66: [ 2]  c1 02
col 67: [ 2]  c1 02
col 68: [ 2]  c1 02
col 69: [ 2]  c1 02
col 70: [ 2]  c1 02
col 71: [ 2]  c1 02
col 72: [ 2]  c1 02
col 73: [ 2]  c1 02
col 74: [ 2]  c1 02
col 75: [ 2]  c1 02
col 76: [ 2]  c1 02
col 77: [ 2]  c1 02
col 78: [ 2]  c1 02
col 79: [ 2]  c1 02
col 80: [ 2]  c1 02
col 81: [ 2]  c1 02
col 82: [ 2]  c1 02
col 83: [ 2]  c1 02
col 84: [ 2]  c1 02
col 85: [ 2]  c1 02
col 86: [ 2]  c1 02
col 87: [ 2]  c1 02
col 88: [ 2]  c1 02
col 89: [ 2]  c1 02
col 90: [ 2]  c1 02
col 91: [ 2]  c1 02
col 92: [ 2]  c1 02
col 93: [ 2]  c1 02
col 94: [ 2]  c1 02
col 95: [ 2]  c1 02
col 96: [ 2]  c1 02
col 97: [ 2]  c1 02
col 98: [ 2]  c1 02
col 99: [ 2]  c1 02
end_of_block_dump
11 фев 17, 21:14    [20203639]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
xtender
Member

Откуда: Мск
Сообщений: 5250
+ тест2
drop table test purge;
alter session set tracefile_identifier='test2';

declare
   c varchar2(32000);
   v varchar2(32000);
   cols varchar2(32000):='c_1 number(1,0)';
   vals varchar2(32000):='0';
   
   ndf int;
   nbl int;
begin
   for i in 2..355 loop
      cols:=cols||',c_'||i||' number(1,0)';
      vals:=vals||','||case 
                         when i between 2 and 100   then '1'
                         when i between 101 and 300 then '2'
                         else 'null'
                       end;
   end loop;
   c:='create table test('||cols||')';
   v:='insert into test values('||vals||')';
   execute immediate (c);
   execute immediate (v);
   execute immediate 'update test set c_355=3';
   execute immediate '
      select 
          dbms_rowid.rowid_relative_fno(c.rowid) ndf
         ,dbms_rowid.rowid_block_number(c.rowid) nbl
      from test c' into ndf,nbl;
   commit;
   execute immediate 'alter system dump datafile ' || ndf || ' block '||nbl;
end;
/
disc;
+ дамп к тесту2
block_row_dump:
tab 0, row 0, @0x1c80
tl: 174 fb: -------- lb: 0x1  cc: 55
nrid:  0x018019f3.0
col  0: [ 2]  c1 02
col  1: [ 2]  c1 02
col  2: [ 2]  c1 02
col  3: [ 2]  c1 02
col  4: [ 2]  c1 02
col  5: [ 2]  c1 02
col  6: [ 2]  c1 02
col  7: [ 2]  c1 02
col  8: [ 2]  c1 02
col  9: [ 2]  c1 02
col 10: [ 2]  c1 02
col 11: [ 2]  c1 02
col 12: [ 2]  c1 02
col 13: [ 2]  c1 02
col 14: [ 2]  c1 02
col 15: [ 2]  c1 02
col 16: [ 2]  c1 02
col 17: [ 2]  c1 02
col 18: [ 2]  c1 02
col 19: [ 2]  c1 02
col 20: [ 2]  c1 02
col 21: [ 2]  c1 02
col 22: [ 2]  c1 02
col 23: [ 2]  c1 02
col 24: [ 2]  c1 02
col 25: [ 2]  c1 02
col 26: [ 2]  c1 02
col 27: [ 2]  c1 02
col 28: [ 2]  c1 02
col 29: [ 2]  c1 02
col 30: [ 2]  c1 02
col 31: [ 2]  c1 02
col 32: [ 2]  c1 02
col 33: [ 2]  c1 02
col 34: [ 2]  c1 02
col 35: [ 2]  c1 02
col 36: [ 2]  c1 02
col 37: [ 2]  c1 02
col 38: [ 2]  c1 02
col 39: [ 2]  c1 02
col 40: [ 2]  c1 02
col 41: [ 2]  c1 02
col 42: [ 2]  c1 02
col 43: [ 2]  c1 02
col 44: [ 2]  c1 02
col 45: [ 2]  c1 02
col 46: [ 2]  c1 02
col 47: [ 2]  c1 02
col 48: [ 2]  c1 02
col 49: [ 2]  c1 02
col 50: [ 2]  c1 02
col 51: [ 2]  c1 02
col 52: [ 2]  c1 02
col 53: [ 2]  c1 02
col 54: [ 2]  c1 02
tab 0, row 1, @0x1bf1
tl: 143 fb: --H-F--- lb: 0x1  cc: 45
nrid:  0x018019f7.0
col  0: [ 1]  80
col  1: [ 2]  c1 02
col  2: [ 2]  c1 02
col  3: [ 2]  c1 02
col  4: [ 2]  c1 02
col  5: [ 2]  c1 02
col  6: [ 2]  c1 02
col  7: [ 2]  c1 02
col  8: [ 2]  c1 02
col  9: [ 2]  c1 02
col 10: [ 2]  c1 02
col 11: [ 2]  c1 02
col 12: [ 2]  c1 02
col 13: [ 2]  c1 02
col 14: [ 2]  c1 02
col 15: [ 2]  c1 02
col 16: [ 2]  c1 02
col 17: [ 2]  c1 02
col 18: [ 2]  c1 02
col 19: [ 2]  c1 02
col 20: [ 2]  c1 02
col 21: [ 2]  c1 02
col 22: [ 2]  c1 02
col 23: [ 2]  c1 02
col 24: [ 2]  c1 02
col 25: [ 2]  c1 02
col 26: [ 2]  c1 02
col 27: [ 2]  c1 02
col 28: [ 2]  c1 02
col 29: [ 2]  c1 02
col 30: [ 2]  c1 02
col 31: [ 2]  c1 02
col 32: [ 2]  c1 02
col 33: [ 2]  c1 02
col 34: [ 2]  c1 02
col 35: [ 2]  c1 02
col 36: [ 2]  c1 02
col 37: [ 2]  c1 02
col 38: [ 2]  c1 02
col 39: [ 2]  c1 02
col 40: [ 2]  c1 02
col 41: [ 2]  c1 02
col 42: [ 2]  c1 02
col 43: [ 2]  c1 02
col 44: [ 2]  c1 02
end_of_block_dump
А третий row piece уехал...
11 фев 17, 21:16    [20203644]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Oracle Ответить