2014-12-09 4 views
0

У меня есть требование, когда мне нужно создать раздел таблицы в день, так как нагрузка очень высока в оракуле 11g. Я проверил много блогов, где я нашел, что мы можем сделать это с помощью функции «NUMTODSINTERVAL», но у меня есть проблемы, как в таблице нет столбца даты, и мне нужно создать раздел в столбце чисел, который ведет себя как даты в таблице.раздел в оракуле с номером типа столбца

cobdate 
--------- 
20141205 

я думал осуществить, как показано ниже:

partition by range(cobdate) 
interval(1) 

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

можно ли преобразовать number в date и использовать его в разделительной колонке с помощью функции NUMTODSINTERVAL? который в настоящее время находится в моей голове как решение ..? пожалуйста, предложите

+0

Вы можете использовать pseudocolumn ora_rowscn как метку времени и SCN_TO_TIMESTAMP, чтобы преобразовать значение в дату. https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns007.htm Обратите внимание, что на удаленные таблицы должны быть включены ЗАВИСИМОСТИ, если вы хотите отметки времени на уровне строк; иначе записи будут управляться на уровне блока. 'Выберите Table_name, зависимости от all_tables, где table_name = 'yourtable'', если значение DISABLED, тогда включена блокировка уровня блока; и это может не привести к тому, что вы после – xQbert

+1

Что означает, что «все данные перейдут в какой-то определенный раздел после этого» означает и почему это проблема? Если вы используете разделение интервалов, Oracle будет автоматически создавать разделы с системным именем всякий раз, когда встречается новое значение. Похоже, вы описываете ожидаемое поведение интервального разбиения. Теперь у вас могут возникнуть проблемы с интервальным разделением на числовом столбце, который очень разрежен (особенно если у вас есть данные до 2000 года), но это не похоже на то, что у вас есть. –

+0

@ JustinCave, вы правы! я получил его, теперь oracle создаст новые системные имена, когда будет встречено новое значение. Спасибо. Но теперь я задаюсь вопросом, хочу ли я удалить раздел, который меньше 3 дней, для этого я думаю, что нам нужно описать ожидаемое поведение? или есть ли другой способ? Нет У меня нет данных до 2000 года У меня есть данные только после 20140101. Спасибо – sabya

ответ

0

я наконец заключил с ответом, который имеет отношение к этому вопросу, где я реализовал его, как показано ниже:

CREATE TABLE TEST_PART 
(
    COBDATE     NUMBER(9)  
) 

PARTITION BY RANGE (COBDATE) 
SUBPARTITION BY RANGE (COBDATE) 
( 
    PARTITION P_2014 VALUES LESS THAN (20150101) 
     (SUBPARTITION P_2014_JAN_01 VALUES LESS THAN (20140102)  TABLESPACE TBS_NAME, 
      SUBPARTITION P_2014_JAN_02 VALUES LESS THAN (20140103)  TABLESPACE TBS_NAME, 
      . 
      . 
      . 
      SUBPARTITION P_2014_DEC_31 VALUES LESS THAN (20150101)  TABLESPACE TBS_NAME) 

) 
NOCACHE    
PARALLEL   
MONITORING; 

и у меня автоматизировать его в сценарии оболочки UNIX, который создаст раздел автоматически послесловие (за год: 2015,2016 ..). Happy Learning :)

Смежные вопросы