powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как oracle хранит null ?
21 сообщений из 21, страница 1 из 1
как oracle хранит null ?
    #37214351
liarbur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заинтересовался вопросом, как в физическом смысле Oracle хранит нулевую запись (null). Зависит ли это от типа данных. Сколько места занимает нулевая запись?
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #37214396
_Nikotin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
alter system dump datafile xxx block yyy;
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #37214519
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никак не хранит, на то он и null
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #37215189
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DВАникак не хранит, на то он и null
ГЛАВА 5

████████████████████████████████████████████████████████████████

ОБЪЕКТЫ СХЕМЫ



Стремящийся к высоким целям должен быть готов потерпеть.
Плутарх

....
Пустые значения хранятся в базе данных, если они попадают между
столбцами, имеющими значения. В таких случаях пустое значение
занимает один байт.
Хвостовые пустые значения не хранятся и не
занимают памяти. В таблицах, содержащих много столбцов, те
столбцы, которые чаще всего будут пустыми, следует определять в
конце, чтобы сэкономить дисковую память.


stax
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #37215213
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

Откуда дровишки?
Oracle® Database Concepts
10g Release 2 (10.2)To conserve space, a null in a column only stores the column length (zero). Oracle does not store data for the null column. Also, for trailing null columns, Oracle does not even store the column length
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #37215228
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic HunterОткуда дровишки?Не хранит значение и не занимает места не одно и то же.
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #37215231
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunterstax..,

Откуда дровишки?
Oracle® Database Concepts
10g Release 2 (10.2)To conserve space, a null in a column only stores the column length (zero) . Oracle does not store data for the null column. Also, for trailing null columns, Oracle does not even store the column length
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #37215234
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunterstax..,

Откуда дровишки?
Oracle® Database Concepts
10g Release 2 (10.2)To conserve space, a null in a column only stores the column length (zero). Oracle does not store data for the null column. Also, for trailing null columns, Oracle does not even store the column length

ORACLE7 (tm)
Server Concepts Manual
РУКОВОДСТВО ПО КОНЦЕПЦИЯМ СЕРВЕРА
Part Number 6693-70-1292
December 1992

имхо, длину то хранить надо, для не последних NULL значений хранит длину 0 (на диске занимает 1 байт)

.....
stax
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #37215246
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

Для не последних null столбцов длина хранится в хедере, 1-байт для длин < 255 и 3-байта для длин > 255 байт. Значения null в блоках данных не хранятся.
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #37215269
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunterstax..,

Для не последних null столбцов длина хранится в хедере, 1-байт для длин < 255 и 3-байта для длин > 255 байт. Значения null в блоках данных не хранятся.
імхо, значение не хранится, но длина (0) не последнего NULL поля хранится, в результате на диске поле (с учетом длины) занимает 1байт


ps
мож завтра сделаю дамп блока
.....
stax
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #37215294
Alexander Anokhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Relic Hunterstax..,

Для не последних null столбцов длина хранится в хедере, 1-байт для длин < 255 и 3-байта для длин > 255 байт. Значения null в блоках данных не хранятся.

Под картинкой
The row header precedes the data and contains information about:

Row pieces

Chaining (for chained row pieces only)

Columns in the row piece

Cluster keys (for clustered data only)

A row fully contained in one block has at least 3 bytes of row header. After the row header information, each row contains column length and data. The column length requires 1 byte for columns that store 250 bytes or less, or 3 bytes for columns that store more than 250 bytes, and precedes the column data. Space required for column data depends on the datatype. If the datatype of a column is variable length, then the space required to hold a value can grow and shrink with updates to the data.

To conserve space, a null in a column only stores the column length (zero). Oracle does not store data for the null column. Also, for trailing null columns, Oracle does not even store the column length.


liarburЗаинтересовался вопросом, как в физическом смысле Oracle хранит нулевую запись (null). Зависит ли это от типа данных. Сколько места занимает нулевая запись?

Код: 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.
SQL>  create table t
   2     (n number,
   3      d date,
   4     v1 varchar2( 10 ),
   5     v2 varchar2( 10 ),
   6     v3 varchar2( 10 ),
   7     v4 varchar2( 10 ),
   8     v5 varchar2( 10 ));
 
Table created

SQL>   insert into t values(null, null, 'A', null, 'B', null, null);
 
 1  row inserted

SQL>   select dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from t;
 
     FILE#     BLOCK#
---------- ----------
          1       697528 

SQL>   alter system dump datafile  1  block  697528 ;
 
System altered

Код: 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.
52.
Start dump data blocks tsn:  0  file#:  1  minblk  697528  maxblk  697528 
buffer tsn:  0  rdba: 0x004aa4b8 ( 1 / 697528 )
scn: 0x094a.be01dffd seq: 0x04 flg: 0x00 tail: 0xdffd0604
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Hex dump of block: st= 0 , typ_found= 1 
Dump of memory from 0x00000001068D6200 to 0x00000001068D7200
1068D6200  06820000  004AA4B8 BE01DFFD 094A0400  [.....J.......J..]
1068D6210  00000000   01000000  00163B43 BE01DFFD  [..........;C....]
1068D6220 094A0000  00020300   00000000   00870004   [.J..............]
1068D6230 0037CB9C 80456E24 E3661200  00010000   [. 7 ...En$.f......]
1068D6240  00000000   00000000   00000000   00000000   [................]
1068D6250  00000000   00000000   00000000   00010001   [................]
1068D6260 FFFF0014 0F960F82 0F820000 00010F96  [................]
1068D6270  00000000   00000000   00000000   00000000   [................]
        Repeat  247  times
1068D71F0 00002C01  05 FFFF01 41FF0142 DFFD0604  [..,.....A..B....]
Block header dump:  0x004aa4b8
 Object id on Block? Y
 seg/obj: 0x163b43  csc: 0x94a.be01dffd  itc:  2   flg: O  typ:  1  - DATA
     fsl:  0   fnx: 0x0 ver: 0x01
 
 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0087. 004 .0037cb9c  0x80456e24.e366. 12   ----    1  fsc 0x0000.00000000
0x02   0x0000. 000 . 00000000   0x00000000. 0000 . 00   ----    0  fsc 0x0000.00000000
 
data_block_dump,data header at 0x1068d625c
===============
tsiz: 0xfa0
hsiz: 0x14
pbl: 0x1068d625c
bdba: 0x004aa4b8
      76543210 
flag=--------
ntab= 1 
nrow= 1 
frre=- 1 
fsbo=0x14
fseo=0xf96
avsp=0xf82
tosp=0xf82
0xe:pti[ 0 ]	nrow= 1 	offs= 0 
0x12:pri[ 0 ]	offs=0xf96
block_row_dump:
tab  0 , row  0 , @0xf96
tl:  10  fb: --H-FL-- lb: 0x1  cc: 5
col   0 : *NULL*
col   1 : *NULL*
col   2 : [  1 ]   41 
col   3 : *NULL*
col   4 : [  1 ]   42 
end_of_block_dump
End dump data blocks tsn:  0  file#:  1  minblk  697528  maxblk  697528 
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #37215340
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Anokhin
Код: plaintext
1.
2.
 
data_block_dump,data header at 0x1068d625c


Гораздо нагляднее дамп блока таблицы ~500 колонок.

Ну и не обязательно дампить блоки.
Можно и так убедиться, что не-последние null-колонки могут занимать довольно много места:
Код: 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.
declare
  stmnt varchar2( 32000 ) := 'create table ane_test(c000 varchar2(10)';
begin
  for i in  1 .. 999  loop
    stmnt := stmnt || ', c'||to_char(i,'FM000')||' varchar2(10)';
  end loop;
  stmnt := stmnt || ')';
  execute immediate stmnt;
end;
/
 
PL/SQL procedure successfully completed
insert into ane_test (c000) select 'X' from dual connect by level <  1000 ;
 
 999  rows inserted
insert into ane_test (c999) select 'X' from dual connect by level <  1000 ;
 
 999  rows inserted
commit;
 
Commit complete
select C000, C999, count(*) n_of_rows, count(distinct dbms_rowid.rowid_block_number(rowid)) n_of_blocks from ane_test
group by  C000, C999;
 
C000       C999        N_OF_ROWS N_OF_BLOCKS
---------- ---------- ---------- -----------
           X                  999           149 
X                             999             2 
 
SQL> 
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #37215477
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
непоследнее поле null имеет единственный байт 0xFF в структуре, предназначенной для определения длины содержимого поля. В дампах это не увидите, потому что оракл уже интерпретировал это значение как null
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #37215484
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DВАВ дампах это не увидите, потому что оракл уже интерпретировал это значение как null
Why? В сыром, неформатированном дампе видно.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
insert into t values(null, null, 'A', null, 'B', null, null);

dump:
05FFFF01 41FF0142

 05  - number of columns
FF - null
FF - null
 01  - field len
 41  - 'A'
FF - null
 01  - field len
 42  - 'B'
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #37215814
liarbur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо всем за исчерпывающие ответы
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #37216545
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunter,

да, сори
забыла что в текущих версиях дамп блока еще и бинарник показывает
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #37216870
liarburБольшое спасибо всем за исчерпывающие ответыСамое смешное, что исчерпывающего ответа так никто и не дал
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #37217089
Sergei.Agalakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стронций Теллурович, ну дайте же нам наконец исчерпывающий ответ, которого так никто и не дал!
Автору он, правда, уже не нужен, ему и неисчерпывающих хватило, но остальные с удовольствием оценят ваш ответ.
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #37217284
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergei.AgalakovСтронций Теллурович, ну дайте же нам наконец исчерпывающий ответ, которого так никто и не дал!
Автору он, правда, уже не нужен, ему и неисчерпывающих хватило, но остальные с удовольствием оценят ваш ответ.
я так понял, Стронций Теллурович интересуется сколько места займет запись cо всеми полями is null

.....
stax
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
как oracle хранит null ?
    #40114340
avang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Null в конце строки не занимают места совсем. Null до не null столбца занимают 1 байт. Информация из документации по Oracle. Ссылка на версию 9с, но и в 19с тоже самое.

Nulls Indicate Absence of Value
...
Рейтинг: 0 / 0
как oracle хранит null ?
    #40114648
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avang
Null в конце строки не занимают места совсем. Null до не null столбца занимают 1 байт. Информация из документации по Oracle. Ссылка на версию 9с, но и в 19с тоже самое.

Nulls Indicate Absence of Value


А 10+ лет тому назад люди об этом что-то другое тут написали? :-)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как oracle хранит null ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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