powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Перенос из таблицы в партицию
12 сообщений из 12, страница 1 из 1
Перенос из таблицы в партицию
    #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
Перенос из таблицы в партицию
    #39886753
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов Юрий
В доках не нашел четкого описания
Что означает WITHOUT VALIDATION?
...
Рейтинг: 0 / 0
Перенос из таблицы в партицию
    #39886759
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-
Что означает WITHOUT VALIDATION?

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

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

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


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

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


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


то есть если я указываю партицию для key=100, то при наличии данных в обычной таблице с key <> 100 перенос мне выдаст ошибку
...
Рейтинг: 0 / 0
Перенос из таблицы в партицию
    #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
Перенос из таблицы в партицию
    #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
Перенос из таблицы в партицию
    #39886828
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

спасибо за разъяснение
...
Рейтинг: 0 / 0
Перенос из таблицы в партицию
    #39886972
Фотография 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
Перенос из таблицы в партицию
    #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
Перенос из таблицы в партицию
    #39887348
jan2ary
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов Юрий,

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


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