2017-02-09 14 views
-1

Я использую Oracle9i (9.2). У меня есть ситуация, когда мне приходится ежедневно заполнять таблицу. Ежедневно в середине ночи эта таблица будет усечена и будут добавлены новые данные. Новая совокупность данных занимает около 10-20 минут. Проблема в том, что эта таблица не может быть отключена (заблокирована). В то время как новые данные вставляются, данные предыдущих дней должны быть доступны для процедуры выбора.Чтение из таблицы во время транзакции - Oracle

Редактировать - Я просматриваю уровни транзакций. Мне просто нужно мнение экспертов.

Возможно ли это в Oracle?

+0

Я не уверен, что понимаю; вы говорите, что таблица усечена и вставлены новые данные. Но таблица используется для запросов с данными предыдущих дней; но таблица усечена ?? – BobC

+0

Да, я надеялся, что усечение или удаление могут быть сделаны внутри транзакции, но не совершены. Пока он не будет зафиксирован, данные в таблице должны оставаться в том же состоянии, что и до транзакции, и быть доступными для запроса. Но это только мое предположение. – pinklotus

+0

TRUNCATE - это команда DDL, что означает, что она не подвержена семантике транзакций. – BobC

ответ

1

Как насчет использования двух таблиц. Имейте «текущую» таблицу, которая имела данные предыдущих дней. Затем добавьте новую таблицу, которую вы можете загрузить. Затем, когда вы будете готовы, вы можете «обменять» две таблицы, используя серию операций переименования.

+0

Используйте представление, которое вы можете менять между двумя таблицами. –

+0

Или 'ALTER TABLE ... EXCHANGE PARTITION' для супер-чистой подкачки (если вы имеете лицензию на разметку). Тем не менее, мне нравится подход @ mathguy - удалить, вставить, зафиксировать - это единственный способ, которым я знаю, чтобы данные были онлайн 100% на протяжении всего процесса обновления. –

+0

Извините .. заметил, что OP находится на Oracle 9.2, поэтому 'EXCHANGE PARTITION' не будет доступен для него. –

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

  • Нет связанных вопросов^_^