powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Партиционирование по дате с плавающим периодом
24 сообщений из 24, страница 1 из 1
Партиционирование по дате с плавающим периодом
    #39277199
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем гуру!

Появился в моей жизни "веселый" заказчик. Помимо прочего, хочет заказчик иметь таблицу, секционированную по дате, но чтобы период секционирования мог быть произвольным. Я в свое время очень подробно изучал вопрос секционирования в Oracle, но такого я там не находил. Прежде чем послать заказчика искать в Перу город Науи (в латинской транскрипции там еще посередине есть буква "h"), я бы хотел спросить у людей знающих - такое в принципе (хотя бы теоретически) возможно. Чтобы жили в рамках одной таблицы партиции за день, за месяц и за час?

Заранее благодарен за ответы

Oracle EE 11.2.0.4.0
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39277203
Partition
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А какие проблемы?
Обычный (не интервальный) range-partitioning
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39277204
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов Юрий,

чисто теоретически - легко
например, вычисляете из даты число, как yymmdd и секционируете по нему
соответственно, числа yy0000 и yy0100 - yy1200 могут соответствовать годам и месяцам
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39277205
так?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Леонов Юрий,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
--drop table a;

create table a (a date) partition by range (a)
(partition a_2016 values less than (To_Date('2017-01-01', 'YYYY-MM-DD')),
partition a_2016_01 values less than (To_Date('2017-02-01', 'YYYY-MM-DD')),
partition a_2016_01_15 values less than (To_Date('2017-02-16', 'YYYY-MM-DD')),
partition a_2016_03 values less than (To_Date('2017-04-01', 'YYYY-MM-DD'))
);

insert into a values(To_Date('2016-06-05', 'YYYY-MM-DD'));
insert into a values(To_Date('2017-01-05', 'YYYY-MM-DD'));
insert into a values(To_Date('2017-02-05', 'YYYY-MM-DD'));
insert into a values(To_Date('2017-03-05', 'YYYY-MM-DD'));

select * from dba_tab_partitions tp where tp.table_name='A';
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39277218
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
понятно, то есть через жопу можно, но о потомстве не мечтайте...

вот только сии антиквары хотят автоматическое создание партиций
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39277225
Антиквар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если хотят автоматическое - сталбыть представляют себе алгоритм определения размера следующей секции.
Уточняйте требования и работайте, интервальное секционирование - не панацея и не серебряная пуля.
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39277238
АнтикварЕсли хотят автоматическое - сталбыть представляют себе алгоритм определения размера следующей секции .
Уточняйте требования и работайте, интервальное секционирование - не панацея и не серебряная пуля.

+1

Думаю, что Юрий не поинтересовался зачем....

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

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

хотя и тут, получается жопа уныло
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39277269
orawishну, создавать автоматически можно с диапазоном по_умолчанию,
а потом, естественно , резать/клеить
Резка/клейка на интервальном range partitioning?
Если я ничего не путаю, то для этого надо перед операциями сделать табличку не-интервальной, или хотя бы переопределить базовую секцию на более свежую, иначе не взлетит.
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39277274
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерчик не покажете?orawishну, создавать автоматически можно с диапазоном по_умолчанию,
а потом, естественно , резать/клеить
Резка/клейка на интервальном range partitioning?
Если я ничего не путаю, то для этого надо перед операциями сделать табличку не-интервальной, или хотя бы переопределить базовую секцию на более свежую, иначе не взлетит.
ну, про интервальное секционирование здесь говорил не я
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39277278
Ойнувсе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
orawishну, про интервальное секционирование здесь говорил не я
А в тезисе про "автоматическое создание секций по умолчанию" - имелся ввиду некий кастомный техпроцесс?
Тогда не совсем понятно что значит "автоматическое".
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39277303
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ойнувсеorawishну, про интервальное секционирование здесь говорил не я
А в тезисе про "автоматическое создание секций по умолчанию" - имелся ввиду некий кастомный техпроцесс?
Тогда не совсем понятно что значит "автоматическое".
кастомный?
например, ~нашедулить на ~начало ~года
19431906
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39277496
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОйнувсеТогда не совсем понятно что значит "автоматическое".
автоматическое - обычно обозначает, что процесс выполняется механизмами без участия человека.

Например, делаем табличку с полем, в котором храним признак текущий партиции.
Всем вставляемым строкам партиционированной таблицы в поле партиционирования подставляем это значения из вспомогательной таблицы. По событию заполнения табличного пространства (скажем на 90%) текущей партиции, создаем новую партицию, меняем значение во вспомогательной и переводим старое пространство в режим ro.
Для надежности в процедуре выбора значения для актуальной таблички делаем проверку заполненности текущего пространства и если больше тех же 90% ждем пока сменится текущее пространство. :)
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39277556
Сергей АрсеньевОйнувсеТогда не совсем понятно что значит "автоматическое".
автоматическое - обычно обозначает, что процесс выполняется механизмами без участия человека.

Например, делаем табличку с полем, в котором храним признак текущий партиции.
Всем вставляемым строкам партиционированной таблицы в поле партиционирования подставляем это значения из вспомогательной таблицы. По событию заполнения табличного пространства (скажем на 90%) текущей партиции, создаем новую партицию, меняем значение во вспомогательной
и переводим старое пространство в режим ro.
Для надежности в процедуре выбора значения для актуальной таблички делаем проверку заполненности текущего пространства и если больше тех же 90% ждем пока сменится текущее пространство. :)

5 копеек дополнения:

все индексы должны быть локально партиционированы,
что бы устанвленное в ro пространство не мешало вставке
новых записей в партицию находящуюся в rw пространстве
не разбрасывать грабли в виде ORA-01502
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39277683
ДаешьЗОЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей АрсеньевНапример, делаем табличку с полем, в котором храним признак текущий партиции.
Всем вставляемым строкам партиционированной таблицы в поле партиционирования подставляем это значения из вспомогательной таблицы.
Жжешь напалмом. Открыли новый велосипедостроительный завод? :) :) :)
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39277837
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ванговательАнтикварЕсли хотят автоматическое - сталбыть представляют себе алгоритм определения размера следующей секции .
Уточняйте требования и работайте, интервальное секционирование - не панацея и не серебряная пуля.

+1

Думаю, что Юрий не поинтересовался зачем....

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

Ну конечно, я совсем уже лох, чтобы у заказчика не поинтересоваться...

У заказчика есть DBA, который о себе самого высокого мнения, но не знает как снять трассу...
Механизм выгрузки в external table уже реализован, причем механизм довольно таки гибкий.
Просто этому тамбовскому волку (товарищем его язык не поворачивается назвать) хочется на боевой базе ручками партиции поюзать (разбить на части, склеить и т.п.)... Зачем ему это надо - одному Богу известно.
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39277892
Леонов Юрий Прежде чем послать заказчика искать в Перу город Науи (в латинской транскрипции там еще посередине есть буква "h"), я бы хотел спросить


Леонов Юрий
Просто этому тамбовскому волку (товарищем его язык не поворачивается назвать) хочется на боевой базе ручками партиции поюзать (разбить на части, склеить и т.п.)...
Зачем ему это надо - одному Богу известно.

Мне кажется, что вы не по адресу обращаетесь.

Вам к психотерапевту надо, пусть пропишет валерьяночки, новопасита ,
или чего покрепче ....
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39277911
ДаешьЗОЖСергей АрсеньевНапример, делаем табличку с полем, в котором храним признак текущий партиции.
Всем вставляемым строкам партиционированной таблицы в поле партиционирования подставляем это значения из вспомогательной таблицы.
Жжешь напалмом. Открыли новый велосипедостроительный завод? :) :) :)

Нука , ткните плиз в доку, что ораклу сказать , что бы он сам
при достижении табличным пространство обьема , ну допустьи 4.7 гиг ( обьем ДВД)
автоматом созавал новое пространсво, создавал там следующие партиции
переключал партиционирование для списка таблиц ,
а старое пространство ставил в рид онли и преобразовывал в транспортное. под запись на диск....

ась ?
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39277913
Упс, а-ооо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ванговательВам к психотерапевту надо, пусть пропишет валерьяночки, новопасита ,
или чего покрепче .... Походу заказчик подтянулся :)
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39277928
Упс, а-ооованговательВам к психотерапевту надо, пусть пропишет валерьяночки, новопасита ,
или чего покрепче .... Походу заказчик подтянулся :)


Моему велосипеду уже лет 5, как минимум...

Код: 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.
CREATE OR REPLACE PACKAGE data_arch     
		authid current_user /* вызов с правами текущего пользователя необходим для того,
			чтобы была возможность включить роль SELECT_CATALOG_ROLE (в режиме вызова
			с definer's rights роли блокированы) */
as
	procedure detach_ts(p_ts varchar2);	/* в заданном табличном пространстве
		преобразует все секции в отдельные таблицы, проверяет замкнутость
		набора для транспортировки и переводит tablespace в READ ONLY */
	procedure attach_ts(p_ts varchar2 default NULL, p_dfmb integer default 22780, p_dfcnt integer default 3);
		/* создает очередное табличное пространство (со следующим порядковым номером)
		и регистрирует его для дальнейшего использования */
	procedure update_ts;	/* проверяет размер текущего табличного пространства и при
		необходимости изменяет его */
	procedure drop_detached_partitions(p_ts varchar2 default NULL);	/* удаляет
		пустые секции, оставшиеся после detach_ts (если в них в дальнейшем не
		предполагается импортировать данные) */
	procedure import_ts(p_ts varchar2);	/* преобразует отдельные таблицы в транспортированном
		табличном пространстве в секции соответствующих таблиц, создавая эти секции и сами
		таблицы, если это необходимо */
	procedure mark_on_tape(p_ts varchar2);	/* изменяет статус табличного пространства с
		DETACHED на ON TAPE */
	procedure urgent_switch_cur_ts;	/* выполняет переключение текущего табличного пространства на
		следующее по порядковому номеру -- для случаев, когда следующее пространство не было создано
		вовремя и требуется срочное переключение */
	procedure check_inactive_tss(p_curts number);	/* проверяет состав секций на неактивных табличных
		пространствах с серийными номерами, меньшими p_curts, и делает их READ ONLY, если все в порядке */
	function get_last_msg return varchar2;	/* возвращает последнее сообщение из таблицы 
		otla_tbs_error */
	function get_col_defs(st CLOB) return CLOB;	/* возвращает из DDL-оператора создания таблицы
		только часть, соответствующую описанию столбцов (заключенную в скобки) */
	function get_ind_def(st CLOB) return CLOB;	/* возвращает из DDL-оператора создания индекса
		только часть CREATE ... INDEX ... ON .... (....) */
end otla_arch;
/
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39278082
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ванговательвсе индексы должны быть локально партиционированы,
ну или в другом табличном пространстве. :)
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39278092
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ванговательНука , ткните плиз в доку, что ораклу сказать , что бы он сам
Ну честно говоря, он и так почти все сам делать может. Ну несколько команд надо.
Не делать avtoextend. Подписаться на событие переполнения и сплитнуть текущую партицию с переносом старого по новому месту жительства.
А потом это старое и в ro.

И вообще велосипедов бояться, на природе не кататься. :)
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39278107
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов Юрийвот только сии антиквары хотят автоматическое создание партицийНу и какие проблемы?
Делаешь, например, интеравальное по дню, в конце месяца мерджишь секции прошедшего месяца в одну.
В конце года можешь клеить месяца.
Ясное дело секции после этого перестают быть интервальными *_tab_partitions.interval = NO.
Короче надо быть внимательным при работе с метаданными, чтоб понимать какая секция за день а какая за другой период.

При желании даже по произвольному листу можно делать секционирование, но это другая история.
...
Рейтинг: 0 / 0
Партиционирование по дате с плавающим периодом
    #39278113
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов Юрийхочется на боевой базе ручками партиции поюзать (разбить на части, склеить и т.п.)... Зачем ему это надо - одному Богу известно.Ручками на боевой базе ничего делать не надо, а вот партиции разбиают и кляет много кто.
Надо только не забывать про перестройку индексов и другие тонкости при написании механизма.
Открой для себя "retention and archiving policy" если боишься спросить, вспомни что при склеивании данные можно сжимать и прочее.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Партиционирование по дате с плавающим периодом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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