Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Перенос из таблицы в партицию / 12 сообщений из 12, страница 1 из 1
08.11.2019, 13:24
    #39886745
Леонов Юрий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос из таблицы в партицию
Добрый день!

В доках не нашел четкого описания проблемы, хотелось бы уточнить у знатоков.
Есть таблица MasterTable с полями (id, key, ...), которая партицирована по полю key by range.
Есть промежуточная непартицированная таблица TempTable с аналогичной структурой полей.
Внимание, вопрос:
При вызове
Код: plsql
1.
ALTER TABLE MASTERTABLE EXCHANGE PARTITION F100 WITH TABLE TEMPTABLE WITHOUT VALIDATION


из таблицы TempTable перенесутся абсолютно все данные или только те, которые удовлетворяют условию партиции?
Партиция F100 имеет ограничение values less than 101, например.
Допускается, что в таблице TempTable могут быть данные по разному значению KEY (100, 101, 102...)

Спасибо
...
Рейтинг: 0 / 0
08.11.2019, 13:27
    #39886753
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос из таблицы в партицию
Леонов Юрий
В доках не нашел четкого описания
Что означает WITHOUT VALIDATION?
...
Рейтинг: 0 / 0
08.11.2019, 13:34
    #39886759
Леонов Юрий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос из таблицы в партицию
-2-
Что означает WITHOUT VALIDATION?

Значит, что можно выполнить без проверки корректности ключей
...
Рейтинг: 0 / 0
08.11.2019, 13:51
    #39886772
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос из таблицы в партицию
Леонов Юрий,

разумеется, только те, которые удовлетворяют условию партиции
если же есть и те, которые не удовлетворяют условию партиции - словите exception по всей морде
...
Рейтинг: 0 / 0
08.11.2019, 14:08
    #39886784
Леонов Юрий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос из таблицы в партицию
orawish
Леонов Юрий,

разумеется, только те, которые удовлетворяют условию партиции
если же есть и те, которые не удовлетворяют условию партиции - словите exception по всей морде


то есть если я указываю партицию для key=100, то при наличии данных в обычной таблице с key=100 перенос мне выдаст ошибку?
...
Рейтинг: 0 / 0
08.11.2019, 14:17
    #39886789
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос из таблицы в партицию
Леонов Юрий
orawish
Леонов Юрий,

разумеется, только те, которые удовлетворяют условию партиции
если же есть и те, которые не удовлетворяют условию партиции - словите exception по всей морде


то есть если я указываю партицию для key=100, то при наличии данных в обычной таблице с key=100 перенос мне выдаст ошибку?


то есть если я указываю партицию для key=100, то при наличии данных в обычной таблице с key <> 100 перенос мне выдаст ошибку
...
Рейтинг: 0 / 0
08.11.2019, 14:58
    #39886811
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос из таблицы в партицию
orawish
то есть если я указываю партицию для key=100, то при наличии данных в обычной таблице с key <> 100 перенос мне выдаст ошибку

Серьезно?
Код: 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.
create table dropme_t(key, val)
partition by range(key)
(partition p99 values less than (100)
,partition p100 values less than (101)
)as
select rownum+98, case rownum+98 when 100 then 'partition p100' else 'partition p99' end from dual connect by level < 3
;
Table created

select * from dropme_t partition (p100);
       KEY VAL
---------- --------------
       100 partition p100
create table dropme_t_tmp as select * from dropme_t where 1=1
;
Table created

select * from dropme_t_tmp
;
       KEY VAL
---------- --------------
        99 partition p99
       100 partition p100

alter table dropme_t exchange partition (p100) with table dropme_t_tmp
;

alter table dropme_t exchange partition (p100) with table dropme_t_tmp
ORA-14099: Не все строки таблицы могут быть занесены в данную секцию

alter table dropme_t exchange partition (p100) with table dropme_t_tmp WITHOUT VALIDATION
;
Table altered

select * from dropme_t partition (p100)
;
       KEY VAL
---------- --------------
        99 partition p99
       100 partition p100

SQL> 
...
Рейтинг: 0 / 0
08.11.2019, 15:00
    #39886815
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос из таблицы в партицию
Ну и спецэффекты:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> select * from dropme_t where key <= 99;
       KEY VAL
---------- --------------
        99 partition p99

SQL> select * from dropme_t where key <= 100;
       KEY VAL
---------- --------------
        99 partition p99
        99 partition p99
       100 partition p100

SQL> 
...
Рейтинг: 0 / 0
08.11.2019, 15:31
    #39886828
Леонов Юрий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос из таблицы в партицию
andrey_anonymous,

спасибо за разъяснение
...
Рейтинг: 0 / 0
08.11.2019, 23:14
    #39886972
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос из таблицы в партицию
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.
SQL> select * from dropme_t partition (p100);

       KEY VAL
---------- --------------
        99 partition p99
       100 partition p100

SQL> alter table dropme_t enable row movement;

Table altered.

SQL> update dropme_t set key = key; -- умный, гад :)

3 rows updated.

SQL> select * from dropme_t partition (p100);

       KEY VAL
---------- --------------
        99 partition p99
       100 partition p100

SQL> update dropme_t set key = key - 0; -- совсем умный, гад :)

3 rows updated.

SQL> select * from dropme_t partition (p100);

       KEY VAL
---------- --------------
        99 partition p99
       100 partition p100

SQL> update dropme_t set key = key - 10; -- а мы его туда

3 rows updated.

SQL> update dropme_t key = key + 10; -- и обратно

3 rows updated.

SQL> select * from dropme_t partition (p100);

       KEY VAL
---------- --------------
       100 partition p100

SQL> 



SY.
P.S. Процесс пожно соптимизировать если известно какие партиции будут задеты.
...
Рейтинг: 0 / 0
09.11.2019, 01:21
    #39886989
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос из таблицы в партицию
SY
Код: plsql
1.
2.
3.
4.
5.
SQL> update dropme_t set key = key - 10; -- а мы его туда

3 rows updated.

SQL> update dropme_t key = key + 10; -- и обратно

как-то сложно и кажется ненадежным. Имхо так лучше:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
analyze table dropme_t partition (p100) validate structure cascade into INVALID_ROWS
/
select * from INVALID_ROWS r, dropme_t t where t.rowid=r.head_rowid
/
insert into dropme_t
select t.* from INVALID_ROWS r, dropme_t t where t.rowid=r.head_rowid
/
delete from dropme_t partition (p100) t
where t.rowid in (select r.head_rowid from INVALID_ROWS r)
/



или сразу все секции:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
truncate table INVALID_ROWS
/
analyze table dropme_t validate structure cascade into INVALID_ROWS
/
select * from INVALID_ROWS r, dropme_t t where t.rowid=r.head_rowid
/
insert into dropme_t
select t.* from INVALID_ROWS r, dropme_t t where t.rowid=r.head_rowid
/
delete from dropme_t t
where t.rowid in (select r.head_rowid from INVALID_ROWS r)
/
...
Рейтинг: 0 / 0
11.11.2019, 10:51
    #39887348
jan2ary
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос из таблицы в партицию
Леонов Юрий,

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


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