Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SecureFile (BLOB) / 18 сообщений из 18, страница 1 из 1
07.12.2021, 09:19
    #40117993
AleksRous
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SecureFile (BLOB)
Могу ли я изменить BLOB на store as securefile если таблица уже создана ?

Если да то как , спс
...
Рейтинг: 0 / 0
07.12.2021, 09:23
    #40117994
Asmodeus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SecureFile (BLOB)
AleksRous,

Я мигрировал через DBMS_REDEFINITION ( пример ).
...
Рейтинг: 0 / 0
07.12.2021, 10:03
    #40118001
AleksRous
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SecureFile (BLOB)
Asmodeus
AleksRous,

Я мигрировал через DBMS_REDEFINITION ( пример ).



Спасибо
...
Рейтинг: 0 / 0
07.12.2021, 13:08
    #40118088
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SecureFile (BLOB)
Online redefinition is the recommended method for migration of BasicFiles LOBs to SecureFiles LOBs

Однако можно и руками:

Код: 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.
create table dropme_t1 ( pkey varchar2(20), mylob clob)
     lob(mylob) store as BASICFILE (disable storage in row)
;

Table created

select column_name, securefile, in_row
from user_lobs where table_name = 'DROPME_T1'
;

COLUMN_NAME    SECUREFILE IN_ROW
-------------- ---------- ------
MYLOB          NO         NO

insert into dropme_t1
select 'k'||rownum, utl_raw.cast_to_raw('content'||rownum)
from dual connect by level < 100
;

99 rows inserted

alter table dropme_t1 NOLOGGING;

Table altered

alter table dropme_t1 
  move lob(mylob) store as SECUREFILE
;

Table altered

alter table dropme_t1 LOGGING;

Table altered

select column_name, securefile, in_row
from user_lobs where table_name = 'DROPME_T1'
;

COLUMN_NAME    SECUREFILE IN_ROW
-------------- ---------- ------
MYLOB          YES        NO

SQL> 

...
Рейтинг: 0 / 0
07.12.2021, 14:39
    #40118122
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SecureFile (BLOB)
andrey_anonymous

Однако можно и руками:


Однако не забываем таблица может иметь индексы

Код: 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.
SQL> create table dropme_t1 ( pkey varchar2(20), mylob clob,x number)
  2       lob(mylob) store as BASICFILE (disable storage in row)
  3  ;

Table created.

SQL> create index dropme_t1_idx on dropme_t1(x);

Index created.

SQL> insert into dropme_t1
  2  select 'k'||rownum, utl_raw.cast_to_raw('content'||rownum),rownum
  3  from dual connect by level < 100
  4  ;

99 rows created.

SQL> alter table dropme_t1
  2    move lob(mylob) store as SECUREFILE
  3  ;

Table altered.

SQL> select status from user_indexes where index_name = 'DROPME_T1_IDX';

STATUS
--------
UNUSABLE

SQL> -- Так что

SQL> alter table dropme_t1 move update indexes lob(mylob) store as SECUREFILE;

Table altered.

SQL> select status from user_indexes where index_name = 'DROPME_T1_IDX';

STATUS
--------
VALID

SQL> -- Или

SQL> alter table dropme_t1 move lob(mylob) store as SECUREFILE;

Table altered.

SQL> select status from user_indexes where index_name = 'DROPME_T1_IDX';

STATUS
--------
UNUSABLE

SQL> alter index dropme_t1_idx rebuild;

Index altered.

SQL> select status from user_indexes where index_name = 'DROPME_T1_IDX';

STATUS
--------
VALID

SQL>



SY.
...
Рейтинг: 0 / 0
07.12.2021, 14:55
    #40118127
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SecureFile (BLOB)
SY

Однако не забываем таблица может иметь индексы

Соломон, спасибо за уточнение, однако тогда следует вспомнить:
- partitioned table
- partitioned table + local indexes
- partitioned table + global indexes
- partitioned table + global partitiontd indexes
- partitioned table + domain indexes

... далее по списку.
...
Рейтинг: 0 / 0
07.12.2021, 15:45
    #40118152
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SecureFile (BLOB)
andrey_anonymous

Соломон, спасибо за уточнение, однако тогда следует вспомнить:
- partitioned table
- partitioned table + local indexes
- partitioned table + global indexes
- partitioned table + global partitiontd indexes
- partitioned table + domain indexes

... далее по списку.


А какая разница? Разве что напомнить с partitioned table MOVE придется делать на каждый partition. А ROWID он и в Африке ROWID, так-что любой индекс будет UNUSABLE (кроме PK).

SY.
...
Рейтинг: 0 / 0
07.12.2021, 15:54
    #40118159
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SecureFile (BLOB)
SY
А какая разница?

partitioned - синтаксическая.
global и global partitioned index - расчистка висящих ссылок при употреблении кляузы update indexes.
domain index - тут вообще всё сложно, зависит от имплементации.
...
Рейтинг: 0 / 0
07.12.2021, 17:15
    #40118203
SeaGate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SecureFile (BLOB)
Используйте dbms_redefinition. Только не как указано выше, а через redef_table, появившийся в 12.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.
SQL> create table dropme_t1 ( pkey varchar2(20), mylob clob,x number)
  2       lob(mylob) store as BASICFILE (disable storage in row)
  3    partition by hash(pkey) partitions 8
  4  ;

Table created.

SQL>
SQL> select column_name, securefile, in_row
  2  from user_lobs where table_name = 'DROPME_T1'
  3  ;

COLUMN_NAME  SEC IN_
------------ --- ---
MYLOB        NO  NO

SQL>
SQL> create index dropme_t1_idx on dropme_t1(x);

Index created.

SQL>
SQL>
SQL> insert into dropme_t1
  2  select 'k'||rownum, utl_raw.cast_to_raw('content'||rownum),rownum
  3  from dual connect by level < 100
  4  ;

99 rows created.

SQL>
SQL> exec dbms_redefinition.redef_table(user, 'DROPME_T1', -
>   lob_store_as => 'SECUREFILE')

PL/SQL procedure successfully completed.

SQL>
SQL> select status from user_indexes where index_name = 'DROPME_T1_IDX';

STATUS
--------
VALID

SQL>
SQL> select column_name, securefile, in_row
  2  from user_lobs where table_name = 'DROPME_T1'
  3  ;

COLUMN_NAME  SEC IN_
------------ --- ---
MYLOB        YES NO


С redefinition основной проблемой часто является производительность на "больших" объектах и/или при "большом" кол-ве изменений. Для оптимизации может принудительно устанавливаться параллелизм: 20.8 Redefining Tables Online
Данная документация не упоминает force parallel ddl, который для CREATE INDEX может быть полезен. Главное, не забыть degree объектов изменить, если нужно.
Все это есть вот в этом документе:
Oracle Applications Labs Best Practices: Implementing Large-Scale Demantra Table Rebuilds To Improve Performance with Zero Downtime (Doc ID 1587179.1)
Неплохим вариантом было бы добавление degree в redef_table.
...
Рейтинг: 0 / 0
07.12.2021, 17:23
    #40118206
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SecureFile (BLOB)
SeaGate
Используйте dbms_redefinition.

При безусловной необходимости zero downtime - да, имеет смысл.
Если же система допускает требуемое технологическое окно - не обязательно.
...
Рейтинг: 0 / 0
07.12.2021, 17:41
    #40118211
AlexFF__|
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SecureFile (BLOB)
andrey_anonymous
SeaGate
Используйте dbms_redefinition.

При безусловной необходимости zero downtime - да, имеет смысл.
Если же система допускает требуемое технологическое окно - не обязательно.

Так без downtime и твой вариант позволяет, просто добавь online .
И индексы не нужно перестраивать )
...
Рейтинг: 0 / 0
07.12.2021, 17:44
    #40118212
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SecureFile (BLOB)
AlexFF__|
Так без downtime и твой вариант позволяет, просто добавь online .
И индексы не нужно перестраивать )

Не во всяком процессе невозможность проводить DML по таблице из-за эксклюзивной блокировки будет считаться uptime.
...
Рейтинг: 0 / 0
07.12.2021, 17:49
    #40118215
AlexFF__|
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SecureFile (BLOB)
andrey_anonymous
AlexFF__|
Так без downtime и твой вариант позволяет, просто добавь online .
И индексы не нужно перестраивать )

Не во всяком процессе невозможность проводить DML по таблице из-за эксклюзивной блокировки будет считаться uptime.

Блокировка идет в самом конце, точно также как и при redefinition.
...
Рейтинг: 0 / 0
08.12.2021, 00:32
    #40118303
SeaGate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SecureFile (BLOB)
AlexFF__|Блокировка идет в самом конце, точно также как и при redefinition.
Это не так. redefinition и alter table move online абсолютно по-разному захватывают блокировки, в чем не трудно убедиться потрассировав оба процесса.
alter table move online захватывает lock_mode=3(RX) и удерживает ее до окончания операции.
redefinition захватывает только краткосрочные блокировки в lock_mode=4/6.
Это причина, почему при move online не работает parallel DML и direct load.
...
Рейтинг: 0 / 0
08.12.2021, 10:18
    #40118331
AlexFF__|
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SecureFile (BLOB)
SeaGate
AlexFF__|Блокировка идет в самом конце, точно также как и при redefinition.

Это не так. redefinition и alter table move online абсолютно по-разному захватывают блокировки, в чем не трудно убедиться потрассировав оба процесса.
alter table move online захватывает lock_mode=3(RX) и удерживает ее до окончания операции.
redefinition захватывает только краткосрочные блокировки в lock_mode=4/6.
Это причина, почему при move online не работает parallel DML и direct load.
Это уже особенности, таких мелочей много + также много зависимостей от настроек среды.
Даже минимальный уровень supplument logging добавляет блокировок.
А обычный матлог на на переопределяемой таблице может блокировать транзакции при SYNC_INTERIM_TABLE.
Но в общем и redefinition и alter table move online позволяют без особых проблем проводить преобразования на рабочей среде.
...
Рейтинг: 0 / 0
08.12.2021, 18:32
    #40118496
SeaGate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SecureFile (BLOB)
AlexFF__|
SeaGate
пропущено...

Это не так. redefinition и alter table move online абсолютно по-разному захватывают блокировки, в чем не трудно убедиться потрассировав оба процесса.
alter table move online захватывает lock_mode=3(RX) и удерживает ее до окончания операции.
redefinition захватывает только краткосрочные блокировки в lock_mode=4/6.
Это причина, почему при move online не работает parallel DML и direct load.

Это уже особенности, таких мелочей много + также много зависимостей от настроек среды.
Даже минимальный уровень supplument logging добавляет блокировок.
А обычный матлог на на переопределяемой таблице может блокировать транзакции при SYNC_INTERIM_TABLE.
Но в общем и redefinition и alter table move online позволяют без особых проблем проводить преобразования на рабочей среде.

Комментарий был к утверждению о том, что блокировка при alter table move online идет в самом конце 22406503 .
Это не так, т.к. alter table move online захватывает и удерживает до завершения процесса TM блокировку в lock_mode=3, которая предотвращает parallel DML и direct path load.
Что из этого особенности и мелочи каждый решит для себя сам.
...
Рейтинг: 0 / 0
15.12.2021, 10:38
    #40120167
AleksRous
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SecureFile (BLOB)
Код: xml
1.
ALTER TABLE TABLE_NAME MOVE LOB (COLUMN) STORE AS SECUREFILE;



Результатов не дало

Код: plsql
1.
SELECT PCTVERSION ,RETENTION,SECUREFILE,RETENTION_TYPE,RETENTION_VALUE FROM DBA_LOBS WHERE TABLE_NAME='TABLE_LOB_1';



Код: xml
1.
2.
PCTVERSION	RETENTION	SECUREFILE	RETENTION_TYPE	RETENTION_VALUE
NULL	          4	                NO	                YES	                       NULL




Смотрю на другую таблицу

Код: plsql
1.
SELECT PCTVERSION ,RETENTION,SECUREFILE,RETENTION_TYPE,RETENTION_VALUE FROM DBA_LOBS WHERE TABLE_NAME='TABLE_LOB_2';




Код: xml
1.
2.
PCTVERSION	RETENTION	SECUREFILE	RETENTION_TYPE	RETENTION_VALUE
NULL	        NULL		  YES	                DEFAULT                   NULL
...
Рейтинг: 0 / 0
15.12.2021, 11:02
    #40120171
AleksRous
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SecureFile (BLOB)
AleksRous
Код: xml
1.
ALTER TABLE TABLE_NAME MOVE LOB (COLUMN) STORE AS SECUREFILE;



Результатов не дало

Код: plsql
1.
SELECT PCTVERSION ,RETENTION,SECUREFILE,RETENTION_TYPE,RETENTION_VALUE FROM DBA_LOBS WHERE TABLE_NAME='TABLE_LOB_1';



Код: xml
1.
2.
PCTVERSION	RETENTION	SECUREFILE	RETENTION_TYPE	RETENTION_VALUE
NULL	          4	                NO	                YES	                       NULL




Смотрю на другую таблицу

Код: plsql
1.
SELECT PCTVERSION ,RETENTION,SECUREFILE,RETENTION_TYPE,RETENTION_VALUE FROM DBA_LOBS WHERE TABLE_NAME='TABLE_LOB_2';




Код: xml
1.
2.
PCTVERSION	RETENTION	SECUREFILE	RETENTION_TYPE	RETENTION_VALUE
NULL	        NULL		  YES	                DEFAULT                   NULL




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


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