время обновления материализованного представления неверно

Я не знаю, как обновляется материализованное представление. Я создал материализованное представление и обновляю его каждую минуту.

create materialized view vmat 
refresh force on demand
start with to_date('07-08-2017 10:00:00', 'dd-mm-yyyy hh24:mi:ss') 
next sysdate+(1/(24*60)) 
as
 select * from mat where id>3;`

Но он обновился в 2017/8/7 16:21:07 в user_mview_refresh_times. Он должен быть обновлен в 2017/8/7 16:21:00. Так что я очень смущен.


person noah_le    schedule 07.08.2017    source источник
comment
так вы говорите, что он обновился через 7 секунд ПОСЛЕ того, как вы это планировали ??   -  person Shahzaib    schedule 07.08.2017
comment
Я думаю, что невозможно обновить 7 секунд. Всего 10 строк в таблице. Я начинаю с 07-08-2017 10:00:00 и обновляю таблицу каждую минуту. Поэтому она должна обновляться в начале каждой минуты. просто сделайте тест и примените его к своей работе.   -  person noah_le    schedule 07.08.2017
comment
Я делаю небольшие изменения и позволяю материализованным представлениям обновляться каждый час. Я нахожу это очень странным. 08-2017 11:15:24». Похоже, что пункт «начать с» не работает. Независимо от того, что такое пункт «начать с».   -  person noah_le    schedule 07.08.2017
comment
Версия базы данных Oracle — 11gR2. Я думаю, что ее следует обновить в «07-08-2017 11:00:00», а не «07-08-2017 11:15:24».   -  person noah_le    schedule 07.08.2017


Ответы (1)


Параметр next указывает время обновления в виде даты и времени, которое база данных преобразует в интервал. Я думаю, проблема в том, что вы по-разному определяете start и next. В частности, вы используете необработанный sysdate, который включает элемент времени с точностью до секунды. Вот почему вы получили эти странные значения для LAST_REFRESH.

Вместо этого попробуйте эту формулировку (используя исходное время):

...
, Start => trunc(sysdate)+(10/24)
, Next => trunc(sysdate)+(1/1440)

Таким образом, начальное время запуска будет 10:00:00, а первое обновление будет 10:01:00.

person APC    schedule 07.08.2017
comment
Но код, который вы показали, неверен. Когда я создаю материализованное представление, представление обновляется в первый раз. Затем СУБД вычисляет следующую дату обновления представления. Да, я понял. Большое спасибо. Я думаю, что Next =›trunc(sysdate,'mi')+1/1440 - person noah_le; 08.08.2017