powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Хранение пустых полей
53 сообщений из 53, показаны все 3 страниц
Хранение пустых полей
    #33396688
m1rag3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток!
Может мой вопрос и несколько глупый но все же...
Имеется таблица с тремя столбцами: число, дата, текст.
Пусть в ней 10 записей. Вопрос мой в том, резервируется ли место (физически на диске в файле БД) в записи под то поле, которое является пустым. Иными словами, будет ли эта таблица занимать одинаковое место на диске, если во всех десяти записях одно из полей будет NULL, а в другом случае заполнено.
...
Рейтинг: 0 / 0
Хранение пустых полей
    #33396702
Фотография Vadim_Maximov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значения NULL не хранятся и не индексируются.
...
Рейтинг: 0 / 0
Хранение пустых полей
    #33396715
m1rag3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть таблица с NULLами в одном из полей будет физически весить меньше чем та же таблица с заполненным полем во всех записях? Я правильно понял?
...
Рейтинг: 0 / 0
Хранение пустых полей
    #33396717
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Хранение пустых полей
    #33396718
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim_MaximovЗначения NULL не хранятся и не индексируются.В общем случае неверно ;-)
...
Рейтинг: 0 / 0
Хранение пустых полей
    #33396795
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m1rag3Всем доброго времени суток!
Может мой вопрос и несколько глупый но все же...
Имеется таблица с тремя столбцами: число, дата, текст.
Пусть в ней 10 записей. Вопрос мой в том, резервируется ли место (физически на диске в файле БД) в записи под то поле, которое является пустым. Иными словами, будет ли эта таблица занимать одинаковое место на диске, если во всех десяти записях одно из полей будет NULL, а в другом случае заполнено.

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

Такой подход позволяет добавлять в таблицу пустые колонки практически мгновенно.
...
Рейтинг: 0 / 0
Хранение пустых полей
    #33396820
Leonid_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
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

...
Рейтинг: 0 / 0
Хранение пустых полей
    #33397270
alex-ls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim_MaximovЗначения NULL не хранятся и не индексируются.
например bitmap...
...
Рейтинг: 0 / 0
Хранение пустых полей
    #33398835
Фотография Vadim_Maximov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров Vadim_MaximovЗначения NULL не хранятся и не индексируются.В общем случае неверно ;-)Знаю. Согласен. :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Хранение пустых полей
    #39401978
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подниму тему, имеется таблица от разработчика порядка 600 столбцов, 500 гиг.

Данные разные из разных отчетов, документов и т.д.
Соответственно запрос с разбиением по типам данных выглядит так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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 миллионов прочистят пустые строки, но остальное то останется.
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39401982
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845Если в последнем столбце есть хоть одна заполненная ячейка данных все все столбцы до этого считаются заполненными?
Или если заполнена ячейка в строке только эта строка доходит до этой ячейки, а все остальные строки записываются каждая до своей последней заполненной ячейки?RTFM Nulls (FAQ)
nata44845Можно ли как-то просчитать не среднюю длину строк, а конкретные длины для каждой строки каждого класса и количество таких строк (это в случае, что все длины строк разные)?
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39401987
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 триггер на обновления)
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39401992
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,

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

И соответственно как ведут себя в этом случае все предыдущие столбцы?
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39401995
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровЕсли заполнены столбец 40, 300 и 380, то тут первый кусок аналогично предыдущему, а вот остальные -- в зависимости от порядка заполнения -- если первым заполнен столбец 380, то создастся кусок, содержащий (380-256) NULL по одному байту и значение столбца 380. Если потом обновляем столбец 300 -- он будет обновлен в этом куске.
А если первым обновлен столбец 300 -- будет создан второй кусок с (300-256) NULL и значением столбца 300. При обновлении столбца 380 будет создан новый кусок с (380-301) NULL по одному байту и значением столбца 380.Вот тут, кстати, скорее всего неточность -- просто в заголовке [под]строки указывается номер первого столбца

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

Насколько помню, так это ничем и не кончилось -- серьезных тестов с дампами и т.д. никто так и не проводил (да никому и не надо), ну или не опубликовал
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39401996
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845Вячеслав Любомудров,

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

И соответственно как ведут себя в этом случае все предыдущие столбцы?Ну у нас же не поколоночное хранение
Каждая строка ничего не знает об остальных
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39401997
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,

Ндаа, с вьюшкой у нас проблема как и у них, "самонастраиваемое приложение".
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39401998
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

Это я тоже условно поняла, что надо отбросить последние нули, но как это сделать запросом пока не продумала.
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402000
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,

Тут как вариант только вынести часть данных те же отчеты в отдельную таблицу.
И попросить больше так не делать...
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402003
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845Это я тоже условно поняла, что надо отбросить последние нули, но как это сделать запросом пока не продумала.Я ж почти готовое выражение дал как способ его генерации.
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402672
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Вячеслав Любомудров,

Row pieces разбиваются с последнего поля,а не с первого. Т.е. если 355 столбцов то будут два: 100-355 и 1-99
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402679
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderRow pieces разбиваются с последнего поля,а не с первого. Т.е. если 355 столбцов то будут два: 100-355 и 1-99Хммм. Звучит так, что если добавить ещё один столбец, то либо появится третий кусок, либо произойдёт нехилый бессмысленный update. Верится не то что с трудом, а вообще никак.
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402688
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саян, я сам это не проверял, просто дал ссылки, где это обсуждалось
Но там были интересные моменты, но вот комментировать их я не берусь

В любом случае, проблемы девушки -- другого способа я не вижу
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402735
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicХммм. Звучит так, что если добавить ещё один столбец, то либо появится третий кусок, либо произойдёт нехилый бессмысленный update. Верится не то что с трудом, а вообще никак.

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

SY.
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402783
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ElicxtenderRow pieces разбиваются с последнего поля,а не с первого. Т.е. если 355 столбцов то будут два: 100-355 и 1-99Хммм. Звучит так, что если добавить ещё один столбец, то либо появится третий кусок, либо произойдёт нехилый бессмысленный update. Верится не то что с трудом, а вообще никак.да, появится третий кусок, только уже "уехавший" в другой блок
test1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
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
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
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

...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402784
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
тест2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
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
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
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 уехал...
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402785
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

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

...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402789
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
K790,

смотри дампы: три куска по
1 row piece - 45
2 row piece - 55
3 row piece - 255 из которых только 200 не нуллы
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402797
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402798
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Т.е если добавляется не null, то отщепляются последние 255 в другой row piece
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402800
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,
авторБыло бы черезчур замысловато.
почему бы и нет? только бы ресурсы не жрали :)
авторсдвиг столбцов как и при drop column
много раз используете?
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402815
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderда, появится третий кусок, только уже "уехавший" в другой блокK790так SY ответил же, и думается это логично.Ребята прежде всего, я имел в виду (и не понимаю, как можно узреть иное) alter table ... add c356 int; Т.е. на "обычных" таблицах обновление только словаря.
Саян, в твоих дампах я не понял, кто такой "третий row piece" и куда он "уехал".

Sony Ericsson, не уверен, что ты понял нить дискуссии.
K790почему бы и нет? только бы ресурсы не жрали :)Ещё раз: докажи, что в теме.
K790авторсдвиг столбцов как и при drop columnмного раз используете?Недоразоработчики убедили мегакорпорации, чтобы те нагнули оракл на реализацию этой бесполезности. В таком ключе начинает проясняться "логика" реализации: Захотели? - Так получите гранату.
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402820
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Elicя имел в виду (и не понимаю, как можно узреть иное) alter table ... add c356 int; Т.е. на "обычных" таблицах обновление только словаря.не очень понял вопроса... ну если само поле заполнять не будешь, то ничего с этими блоками и не будет...
ElicСаян, в твоих дампах я не понял, кто такой "третий row piece" и куда он "уехал".
ну можно проще показать:
тест3
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
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
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
554.
555.
556.
557.
558.
559.
560.
561.
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...
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402821
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
поправка, греп был такой:
Код: plsql
1.
grep -P "^(bdba|block_row_dump|col )"
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402824
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

нисколько ни умаляю твоей полезности на данном форуме. успокойся.
авторНедоразоработчики убедили мегакорпорации, чтобы те нагнули оракл на реализацию этой бесполезности.
так получается, увольте, приходится.
даже 8i томом решениями на 12-ке пользоваться.
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402830
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ и ноги не остсюда растут а просто был вопрос:
20202919
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402835
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderElicя имел в виду (и не понимаю, как можно узреть иное) alter table ... add c356 int; Т.е. на "обычных" таблицах обновление только словаря.не очень понял вопроса... ну если само поле заполнять не будешь, то ничего с этими блоками и не будет...Т.е. добавление пустого столбца в уже широкую таблицу - это по-прежнему только обновление словаря?
xtenderт.е. row chaining уже становится не intra-block...Как я понимаю, intra - это всего-лишь потому, что возможно chain-ить внутри одного и того же блока, в отличие от природы других chaining-ов.
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402836
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K790авторНедоразоработчики убедили мегакорпорации, чтобы те нагнули оракл на реализацию этой бесполезности.так получается, увольте, приходится.
даже 8i томом решениями на 12-ке пользоваться.Проспись/протрезвей и переведи.

K790+ и ноги не остсюда растут а просто был вопрос:Не следует заинтересованность в знаниях выдавать за обладание ими.
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402847
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ElicТ.е. добавление пустого столбца в уже широкую таблицу - это по-прежнему только обновление словаря?да
Elicintra - это всего-лишь потому, что возможно chain-ить внутри одного и того же блока, в отличие от природы других chaining-ов.да, первое расщепление - это единственный случай, когда разбивается внутри одного блока
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402877
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
xtenderда, первое расщепление - это единственный случай, когда разбивается внутри одного блокаВ общем, точнее будет так: intra-block chaining бывает только при INSERT, при апдейтах будут всегда плодиться новые row pieces в новых блоках...
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402878
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderВячеслав Любомудров,

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

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

Ведь должны быть этому какие-то обоснования
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402879
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderxtenderда, первое расщепление - это единственный случай, когда разбивается внутри одного блокаВ общем, точнее будет так: intra-block chaining бывает только при INSERT, при апдейтах будут всегда плодиться новые row pieces в новых блоках...Даже если больше 510 столбцов? (при INSERT)
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39402882
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Вячеслав Любомудров,

да:
test1-1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
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
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
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*

...
Рейтинг: 0 / 0
Хранение пустых полей
    #39403012
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прерву жаркую дискуссию
Пока так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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 строке по итогу получилось в конце так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
NVL2(Z,0,
NVL2(...

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



Не поняла правильно или нет, но по 2 строке формулы выбрала часть строк пересчитала ручками, сумма совпала.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Хранение пустых полей
    #39884595
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подниму тему из мрачного забвения.
Есть очень-очень большая таблица (ну как очень, для меня очень) - несколько миллиардов строк. Полей - меньше 200, последнее поле varchar2(4000), пустое, все значения null, в индексах нет, и хочется его дропнуть.
Как физически это осуществляет Оракл?
Вопрос потому, что из-за величины таблицы эта операция может некисло подвиснуть и перехлестнуться с различными выборками/обновлениями. На эксперименте с тестовой таблицей такой же структуры, но размером 20 млн записей, drop columns выполнялся пару минут. Я правильно понимаю, что операции обновления ждать окончания DDL?
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39884710
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтоб убедиться что они все пустые неободимо все равно просканировать всю таблицу (да еще и гарантировать, что никто не изменит значение столбца за время сканирования)
Может не стоит удалять? Переименовать в крайнем случае
Можно сделать столбец UNUSED (он будет невиден во всяких select *, но таки останется занимать место и участвовать во всяких ограничениях, типа количества столбцов)
А еще есть пакет DBMS_REDEFINITION -- этакий MOVE ONLINE
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39884711
Фотография конечно Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,

привет ДВР)

А сейчас модно DDL обёртывать в системные пакеты?
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39884726
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, я столько не выпью ...
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39884776
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aag,

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

SY.
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39884835
Фотография конечно Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровНе, я столько не выпью ...
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39884857
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aagмиллиардов строк. … поле varchar2(4000) … хочется его дропнуть.Лучше переименовать в неудобоваримое. Быстро и относительно дёшево. И может когда-нибудь пригодиться для нового varchar2(4000).
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39885101
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А подскажите по null-значениям.
Допустим есть таблица TMP(ID,F1,F2,F3).
Добавляю запись: insert into TMP values (1,'f1', 'f2', 'f3')
Затем удаляю значения: update TMP set F1=null, F2=null, F3=null where ID=1
Будут ли поля F* занимать место?
...
Рейтинг: 0 / 0
Хранение пустых полей
    #39885113
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ты про размер сегмента тo ничего не изменится.

SY.
...
Рейтинг: 0 / 0
53 сообщений из 53, показаны все 3 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Хранение пустых полей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]