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

Откуда:
Сообщений: 617
xtender,

так SY ответил же, и думается это логично.
11 фев 17, 21:16    [20203646]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
xtender
Member

Откуда: Мск
Сообщений: 5250
+ продолжение из другого блока к тесту2
block_row_dump:
tab 0, row 0, @0x1cec
tl: 660 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: *NULL*
col 201: *NULL*
col 202: *NULL*
col 203: *NULL*
col 204: *NULL*
col 205: *NULL*
col 206: *NULL*
col 207: *NULL*
col 208: *NULL*
col 209: *NULL*
col 210: *NULL*
col 211: *NULL*
col 212: *NULL*
col 213: *NULL*
col 214: *NULL*
col 215: *NULL*
col 216: *NULL*
col 217: *NULL*
col 218: *NULL*
col 219: *NULL*
col 220: *NULL*
col 221: *NULL*
col 222: *NULL*
col 223: *NULL*
col 224: *NULL*
col 225: *NULL*
col 226: *NULL*
col 227: *NULL*
col 228: *NULL*
col 229: *NULL*
col 230: *NULL*
col 231: *NULL*
col 232: *NULL*
col 233: *NULL*
col 234: *NULL*
col 235: *NULL*
col 236: *NULL*
col 237: *NULL*
col 238: *NULL*
col 239: *NULL*
col 240: *NULL*
col 241: *NULL*
col 242: *NULL*
col 243: *NULL*
col 244: *NULL*
col 245: *NULL*
col 246: *NULL*
col 247: *NULL*
col 248: *NULL*
col 249: *NULL*
col 250: *NULL*
col 251: *NULL*
col 252: *NULL*
col 253: *NULL*
col 254: [ 2]  c1 04
end_of_block_dump
11 фев 17, 21:19    [20203654]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
xtender
Member

Откуда: Мск
Сообщений: 5250
K790,

смотри дампы: три куска по
1 row piece - 45
2 row piece - 55
3 row piece - 255 из которых только 200 не нуллы
11 фев 17, 21:23    [20203661]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29406
SY
Или (как вариант) физически ещё один столбец будет добавлен к 1-99 (который станет 1-99,356).
Было бы черезчур замысловато.
Elic
если добавить ещё один столбец, то либо появится третий кусок, либо произойдёт нехилый бессмысленный update.
Судя по DSI402e это получается именно сдвиг столбцов как и при drop column со всеми вытекающими.
+
Block Space Management
Row Data
In earlier Oracle releases, there was a limit of 255 columns per table. This was
because the column count value in a block was limited to one byte of storage. From
Oracle8, the number of columns allowed in a table is increased to 1,000. To satisfy
this requirement with minimal block changes, this support for the increase in number
of columns is implemented through chaining of row pieces within the same block. If
the actual storage requirement for the column count were increased, then all existing
rows would have to be updated during migration.

Intra-Block Chaining
As mentioned, the maximum number of columns that a row piece can have is 255.
The essential point is that the last row piece is filled up first and the remaining
columns form the first piece. In other words, if you assume the complete row has a
not null value for the column in position 257, there will be two row pieces: the first
one with the values for columns one and two, and a second row piece with the values
for the remaining 255 columns.
11 фев 17, 21:33    [20203679]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
xtender
Member

Откуда: Мск
Сообщений: 5250
Т.е если добавляется не null, то отщепляются последние 255 в другой row piece
11 фев 17, 21:36    [20203684]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
K790
Member

Откуда:
Сообщений: 617
Elic,
автор
Было бы черезчур замысловато.

почему бы и нет? только бы ресурсы не жрали :)
автор
сдвиг столбцов как и при drop column

много раз используете?
11 фев 17, 21:39    [20203689]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29406
xtender
да, появится третий кусок, только уже "уехавший" в другой блок
K790
так SY ответил же, и думается это логично.
Ребята прежде всего, я имел в виду (и не понимаю, как можно узреть иное) alter table ... add c356 int; Т.е. на "обычных" таблицах обновление только словаря.
Саян, в твоих дампах я не понял, кто такой "третий row piece" и куда он "уехал".

Sony Ericsson, не уверен, что ты понял нить дискуссии.
K790
почему бы и нет? только бы ресурсы не жрали :)
Ещё раз: докажи, что в теме.
K790
автор
сдвиг столбцов как и при drop column
много раз используете?
Недоразоработчики убедили мегакорпорации, чтобы те нагнули оракл на реализацию этой бесполезности. В таком ключе начинает проясняться "логика" реализации: Захотели? - Так получите гранату.
11 фев 17, 22:05    [20203731]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
xtender
Member

Откуда: Мск
Сообщений: 5250
Elic
я имел в виду (и не понимаю, как можно узреть иное) alter table ... add c356 int; Т.е. на "обычных" таблицах обновление только словаря.
не очень понял вопроса... ну если само поле заполнять не будешь, то ничего с этими блоками и не будет...
Elic
Саян, в твоих дампах я не понял, кто такой "третий row piece" и куда он "уехал".

ну можно проще показать:
+ тест3
drop table test purge;
alter session set tracefile_identifier='test3';

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<=255 then '1' else 'null' end;
   end loop;
   c:='create table test('||cols||')';
   v:='insert into test values('||vals||')';
   execute immediate (c);
   execute immediate (v);
   commit;
   for i in 256..355 loop
      execute immediate 'update test set c_'||i||'=2';
   end loop;
   commit;
   execute immediate 'alter system flush buffer_cache';
   for r in (select 'alter system dump datafile '||file#||' block '||block# cmd 
             from (
                   select distinct file#,block# 
                   from v$bh 
                   where class#=1 
                   and objd in (select o.data_object_id from user_objects o where object_name='TEST') 
                   order by 1,2
                  )
            )
   loop 
       execute immediate r.cmd;
   end loop;
end;
/
disc;

Что в тесте происходит:
1. создается таблица с 355 столбцами и вставляется одна строка с заполненными первыми 255 полями
2. в цикле 256-355 заполняется очередное поле
3. в итоге видим что куча блоков и по ним размазано 355-255 + 1 row pieces:
+ grep -P "^(block_row_dump|col )" tests/255/baikal_ora_10700_test3.trc > tests/255/test3.dump.txt
bdba: 0x01801281
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x01801282
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x01801283
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x01801284
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x01801285
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x01801286
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x01801287
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x01801288
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x01801289
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x0180128a
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x0180128b
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x0180128c
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x0180128d
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x0180128e
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x0180128f
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x01801291
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x01801292
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x01801293
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x01801294
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x01801295
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x01801296
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x01801297
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x01801298
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x01801299
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x0180129a
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x0180129b
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x0180129c
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x0180129d
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x0180129e
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x0180129f
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012a1
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012a2
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012a3
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012a4
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012a5
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012a6
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012a7
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012a8
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012a9
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012aa
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012ab
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012ac
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012ad
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012ae
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012af
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012b1
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012b2
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012b3
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012b4
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012b5
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012b6
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012b7
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012b8
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012b9
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012ba
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012bb
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012bc
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012bd
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012be
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012bf
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012c1
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012c2
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012c3
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012c4
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012c5
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012c6
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012c7
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012c8
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012c9
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012ca
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012cb
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012cc
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012cd
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012ce
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012cf
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012d1
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012d2
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012d3
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012d4
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012d5
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012d6
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012d7
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012d8
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012d9
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012da
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012db
block_row_dump:
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
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
col 100: [ 2]  c1 02
col 101: [ 2]  c1 02
col 102: [ 2]  c1 02
col 103: [ 2]  c1 02
col 104: [ 2]  c1 02
col 105: [ 2]  c1 02
col 106: [ 2]  c1 02
col 107: [ 2]  c1 02
col 108: [ 2]  c1 02
col 109: [ 2]  c1 02
col 110: [ 2]  c1 02
col 111: [ 2]  c1 02
col 112: [ 2]  c1 02
col 113: [ 2]  c1 02
col 114: [ 2]  c1 02
col 115: [ 2]  c1 02
col 116: [ 2]  c1 02
col 117: [ 2]  c1 02
col 118: [ 2]  c1 02
col 119: [ 2]  c1 02
col 120: [ 2]  c1 02
col 121: [ 2]  c1 02
col 122: [ 2]  c1 02
col 123: [ 2]  c1 02
col 124: [ 2]  c1 02
col 125: [ 2]  c1 02
col 126: [ 2]  c1 02
col 127: [ 2]  c1 02
col 128: [ 2]  c1 02
col 129: [ 2]  c1 02
col 130: [ 2]  c1 02
col 131: [ 2]  c1 02
col 132: [ 2]  c1 02
col 133: [ 2]  c1 02
col 134: [ 2]  c1 02
col 135: [ 2]  c1 02
col 136: [ 2]  c1 02
col 137: [ 2]  c1 02
col 138: [ 2]  c1 02
col 139: [ 2]  c1 02
col 140: [ 2]  c1 02
col 141: [ 2]  c1 02
col 142: [ 2]  c1 02
col 143: [ 2]  c1 02
col 144: [ 2]  c1 02
col 145: [ 2]  c1 02
col 146: [ 2]  c1 02
col 147: [ 2]  c1 02
col 148: [ 2]  c1 02
col 149: [ 2]  c1 02
col 150: [ 2]  c1 02
col 151: [ 2]  c1 02
col 152: [ 2]  c1 02
col 153: [ 2]  c1 02
col 154: [ 2]  c1 02
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 03
col 251: [ 2]  c1 03
col 252: [ 2]  c1 03
col 253: [ 2]  c1 03
col 254: [ 2]  c1 03
bdba: 0x018012dc
block_row_dump:
bdba: 0x018012dd
block_row_dump:
bdba: 0x018012de
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018012df
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018019f3
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018019f4
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018019f5
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018019f6
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018019f7
block_row_dump:
col  0: [ 1]  80
bdba: 0x018019f8
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018019f9
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018019fa
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018019fb
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018019fc
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018019fd
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018019fe
block_row_dump:
col  0: [ 2]  c1 02
bdba: 0x018019ff
block_row_dump:
col  0: [ 2]  c1 02
т.е. row chaining уже становится не intra-block...
11 фев 17, 22:25    [20203758]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
xtender
Member

Откуда: Мск
Сообщений: 5250
поправка, греп был такой:
grep -P "^(bdba|block_row_dump|col )"
11 фев 17, 22:26    [20203760]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
K790
Member

Откуда:
Сообщений: 617
Elic,

нисколько ни умаляю твоей полезности на данном форуме. успокойся.
автор
Недоразоработчики убедили мегакорпорации, чтобы те нагнули оракл на реализацию этой бесполезности.

так получается, увольте, приходится.
даже 8i томом решениями на 12-ке пользоваться.
11 фев 17, 22:30    [20203766]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
K790
Member

Откуда:
Сообщений: 617
+ и ноги не остсюда растут а просто был вопрос:
20202919
11 фев 17, 22:37    [20203782]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29406
xtender
Elic
я имел в виду (и не понимаю, как можно узреть иное) alter table ... add c356 int; Т.е. на "обычных" таблицах обновление только словаря.
не очень понял вопроса... ну если само поле заполнять не будешь, то ничего с этими блоками и не будет...
Т.е. добавление пустого столбца в уже широкую таблицу - это по-прежнему только обновление словаря?
xtender
т.е. row chaining уже становится не intra-block...
Как я понимаю, intra - это всего-лишь потому, что возможно chain-ить внутри одного и того же блока, в отличие от природы других chaining-ов.
11 фев 17, 22:59    [20203815]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29406
K790
автор
Недоразоработчики убедили мегакорпорации, чтобы те нагнули оракл на реализацию этой бесполезности.
так получается, увольте, приходится.
даже 8i томом решениями на 12-ке пользоваться.
Проспись/протрезвей и переведи.

K790
+ и ноги не остсюда растут а просто был вопрос:
Не следует заинтересованность в знаниях выдавать за обладание ими.
11 фев 17, 23:02    [20203820]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
xtender
Member

Откуда: Мск
Сообщений: 5250
Elic
Т.е. добавление пустого столбца в уже широкую таблицу - это по-прежнему только обновление словаря?
да
Elic
intra - это всего-лишь потому, что возможно chain-ить внутри одного и того же блока, в отличие от природы других chaining-ов.
да, первое расщепление - это единственный случай, когда разбивается внутри одного блока
12 фев 17, 00:28    [20204006]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
xtender
Member

Откуда: Мск
Сообщений: 5250
xtender
да, первое расщепление - это единственный случай, когда разбивается внутри одного блока
В общем, точнее будет так: intra-block chaining бывает только при INSERT, при апдейтах будут всегда плодиться новые row pieces в новых блоках...
12 фев 17, 06:03    [20204174]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Вячеслав Любомудров
Member

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

Row pieces разбиваются с последнего поля,а не с первого. Т.е. если 355 столбцов то будут два: 100-355 и 1-99
Кстати, да
Спасибо
Это немного проясняет картину
А плодятся они (при добавлении новых значений в более последние столбцы) наверняка потому, что объединение кусков при обычной работе не реализовано, ведь теоретически это может вызвать увеличение занимаемого пространства (ну, как один из вариантов, если в хвосте были одни NULL), но самое неприятное, что предыдущие куски могут находиться (и находятся, начиная с 3-го, как показал Саян) в другом блоке.
Кстати, если бы разбивка была не с конца, этого бы не требовалось, как я понял
При MOVE строка наверняка пересоберется в куски максимального раздела

И возникает как минимум 2 вопроса:
-- почему выбрана стратегии разбивки именно с конца?
-- какого они уезжают в другой блок, если есть еще место в оригинальном?

Ведь должны быть этому какие-то обоснования
12 фев 17, 06:37    [20204175]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18211
xtender
xtender
да, первое расщепление - это единственный случай, когда разбивается внутри одного блока
В общем, точнее будет так: intra-block chaining бывает только при INSERT, при апдейтах будут всегда плодиться новые row pieces в новых блоках...
Даже если больше 510 столбцов? (при INSERT)
12 фев 17, 06:39    [20204176]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
xtender
Member

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

да:
+ test1-1
drop table test purge;
set serverout on;
alter session set tracefile_identifier='test11';
declare
   c varchar2(32000);
   v varchar2(32000);
   cols varchar2(32000):='c_1 number(1,0)';
begin
   for i in 2..1000 loop
      cols:=cols||',c_'||i||' number(1,0)';
   end loop;
   c:='create table test('||cols||')';
   v:='insert into test(c_1,c_1000) values(0,1)';
   dbms_output.put_line(c);
   dbms_output.put_line(v);
   execute immediate (c);
   execute immediate (v);
   
   for r in (select 'alter system dump datafile '||file#||' block '||block# cmd 
             from (
                   select distinct file#,block# 
                   from v$bh 
                   where class#=1 
                   and objd in (select o.data_object_id from user_objects o where object_name='TEST') 
                   order by 1,2
                  )
            )
   loop 
       execute immediate r.cmd;
   end loop;
end;
/
disc;
+ grep -P "^(bdba|block_row_dump|tl: |col )" test11.trc
bdba: 0x018019f3
block_row_dump:
bdba: 0x018019f4
block_row_dump:
bdba: 0x018019f5
block_row_dump:
bdba: 0x018019f6
block_row_dump:
bdba: 0x018019f7
block_row_dump:
tl: 260 fb: -----L-- lb: 0x1  cc: 255
col  0: *NULL*
col  1: *NULL*
col  2: *NULL*
col  3: *NULL*
   ...
col 252: *NULL*
col 253: *NULL*
col 254: [ 2]  c1 02
tl: 264 fb: -------- lb: 0x1  cc: 255
col  0: *NULL*
col  1: *NULL*
col  2: *NULL*
col  3: *NULL*
   ...
col 252: *NULL*
col 253: *NULL*
col 254: *NULL*
tl: 264 fb: -------- lb: 0x1  cc: 255
col  0: *NULL*
col  1: *NULL*
col  2: *NULL*
col  3: *NULL*
   ...
col 252: *NULL*
col 253: *NULL*
col 254: *NULL*
tl: 245 fb: --H-F--- lb: 0x1  cc: 235
col  0: [ 1]  80
col  1: *NULL*
col  2: *NULL*
col  3: *NULL*
   ...
col 232: *NULL*
col 233: *NULL*
col 234: *NULL*
12 фев 17, 07:21    [20204181]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
nata44845
Member

Откуда: Красноярск
Сообщений: 355
Прерву жаркую дискуссию
Пока так

SELECT 
  --'SUM(case when DD.'||COLUMN_NAME||' IS NOT NULL THEN 1 ELSE 0 END) '||COLUMN_NAME||',' 
  --'NVL(VSIZE(DL.'||COLUMN_NAME||'),0) '||COLUMN_NAME||','
  --'NVL(VSIZE(DL.'||COLUMN_NAME||'),0)+1)+'
  --'NVL2('||COLUMN_NAME||','||TO_CHAR(638-CAST(COLUMN_ID AS NUMBER))||',' 
  FROM USER_TAB_COLUMNS utc
  WHERE utc.TABLE_NAME='X'
  ORDER BY COLUMN_ID (DESC для 4 закрытой строки)


3 и 4 строка соответственно для формулы, столбцов 638
в 4 строке по итогу получилось в конце так

NVL2(Z,0,
NVL2(...

NVL2(Y,636,
NVL2(ID,1,0)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
  ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
  ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
  ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
  ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))


Не поняла правильно или нет, но по 2 строке формулы выбрала часть строк пересчитала ручками, сумма совпала.
12 фев 17, 17:53    [20205003]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Хранение пустых полей  [new]
aag
Member

Откуда: Москва
Сообщений: 1955
Подниму тему из мрачного забвения.
Есть очень-очень большая таблица (ну как очень, для меня очень) - несколько миллиардов строк. Полей - меньше 200, последнее поле varchar2(4000), пустое, все значения null, в индексах нет, и хочется его дропнуть.
Как физически это осуществляет Оракл?
Вопрос потому, что из-за величины таблицы эта операция может некисло подвиснуть и перехлестнуться с различными выборками/обновлениями. На эксперименте с тестовой таблицей такой же структуры, но размером 20 млн записей, drop columns выполнялся пару минут. Я правильно понимаю, что операции обновления ждать окончания DDL?
2 ноя 19, 13:18    [22008685]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18211
Чтоб убедиться что они все пустые неободимо все равно просканировать всю таблицу (да еще и гарантировать, что никто не изменит значение столбца за время сканирования)
Может не стоит удалять? Переименовать в крайнем случае
Можно сделать столбец UNUSED (он будет невиден во всяких select *, но таки останется занимать место и участвовать во всяких ограничениях, типа количества столбцов)
А еще есть пакет DBMS_REDEFINITION -- этакий MOVE ONLINE
3 ноя 19, 04:36    [22008929]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
конечно Вася
Member

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

привет ДВР)

А сейчас модно DDL обёртывать в системные пакеты?
3 ноя 19, 05:25    [22008931]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18211
Не, я столько не выпью ...
3 ноя 19, 11:40    [22008966]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9635
aag,

Ну вообще-то поле удаляют когда измeнились бизнес требования или логика обработки (если это вспомогательное поле) а не когда колонка NULL (кстати ты уверен что не сегодня NULL, а завтра родину...). Ну и главное - Oracle издревле не хранит значение последних справа NULL полей (например, если в строке 100 полей и первое не NULL а остaльные NULL то хранится только первое поле а вот если первые 99 NULL а последнее не NULL то хранится 99 однобайтный флажков "я NULL" и затем последнее поле). Так-что в твоем случае уменьшения размера сегмента не будет.

SY.
3 ноя 19, 16:25    [22009046]     Ответить | Цитировать Сообщить модератору
 Re: Хранение пустых полей  [new]
конечно Вася
Member

Откуда: Брянщина
Сообщений: 181
Вячеслав Любомудров
Не, я столько не выпью ...


4 ноя 19, 00:03    [22009165]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Oracle Ответить