Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Гарантия наличия строк в таблице  [new]
sp_eedo
Member

Откуда: ьщы
Сообщений: 507
Добрый день, подскажите как правильно обеспечить гарантию наличия строк в таблице.

Таблицу T1 необходимо полностью обновлять данными которые возвращаются долго выполняющимся запросом.

Как правильно запаковать sql инструкции чтобы пользовательский процесс не увидел никогда пустую таблицу T1?

т.е. примерно так

открыть транзакцию
очистить таблицу T1
наполнить её свежими данными.
закоммитить транзакцию

БД Oracle.
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
"CORE 11.2.0.4.0 Production"
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

------------------------------------------------------------------------------
— Куда мне отсюда идти?
— А куда ты хочешь попасть?
— А мне все равно, только бы попасть куда-нибудь.
— Тогда все равно куда идти. Куда-нибудь ты обязательно попадешь. (Алиса В Стране Чудес)
10 июн 15, 14:50    [17755434]     Ответить | Цитировать Сообщить модератору
 Re: Гарантия наличия строк в таблице  [new]
смердж
Guest
sp_eedo
чтобы пользовательский процесс не увидел никогда пустую таблицу T1?
дропнуть ее и больше не создавать.
10 июн 15, 14:54    [17755455]     Ответить | Цитировать Сообщить модератору
 Re: Гарантия наличия строк в таблице  [new]
sp_eedo
Member

Откуда: ьщы
Сообщений: 507
смердж,

Саму таблицу пользователь должен всегда видеть!
10 июн 15, 14:55    [17755469]     Ответить | Цитировать Сообщить модератору
 Re: Гарантия наличия строк в таблице  [new]
vaneque
Member

Откуда: Тверь
Сообщений: 168
sp_eedo
как правильно обеспечить гарантию наличия строк в таблице.


sp_eedo
открыть транзакцию
очистить таблицу T1
наполнить её свежими данными.
закоммитить транзакцию


Собственное решение чем не устраивает? Уровень изоляции транзакций READ COMMITED исключает грязное чтение. Требуется только первый раз залить таблицу данными и закоммитить, начиная с этого момента любая сессия всегда будет видеть данные в этой таблице(если вы будете пользоваться собственным решением).
10 июн 15, 14:58    [17755480]     Ответить | Цитировать Сообщить модератору
 Re: Гарантия наличия строк в таблице  [new]
vaneque
Member

Откуда: Тверь
Сообщений: 168
vaneque
очистить таблицу T1


только чистить командой DELETE, а не TRUNCATE
10 июн 15, 14:58    [17755491]     Ответить | Цитировать Сообщить модератору
 Re: Гарантия наличия строк в таблице  [new]
sp_eedo
Member

Откуда: ьщы
Сообщений: 507
vaneque,

А как явно указать что ты открываешь транзакцию и закрываешь? я вот этого не знаю.

Вот такая процедура гарантирует наличие данных в таблице Т1?
т.е. параллельный процесс пока выполняется эта процедура, будет видеть старые строки в таблице Т1 пока не выполнен комит?

create or replace PROCEDURE PROC_1 
IS
BEGIN
    DELETE FROM  SCH1.T1;
    INSERT INTO SCH1.T1 SELECT ROW_ID FROM SCH1.T2_View;
    COMMIT;
END ;
10 июн 15, 15:10    [17755580]     Ответить | Цитировать Сообщить модератору
 Re: Гарантия наличия строк в таблице  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51804

sp_eedo
Саму таблицу пользователь должен всегда видеть!

drop table;
create materialized view as тяжёлый запрос

Posted via ActualForum NNTP Server 1.5

10 июн 15, 15:13    [17755597]     Ответить | Цитировать Сообщить модератору
 Re: Гарантия наличия строк в таблице  [new]
vaneque
Member

Откуда: Тверь
Сообщений: 168
sp_eedo
А как явно указать что ты открываешь транзакцию


Первая DML команда(INSERT, UPDATE, DELETE, MERGE), вызванная после создания сессии к БД открывает транзакцию. В транзакции может быть множество DML команд.

sp_eedo
и закрываешь?

ROLLBACK - откатить выполненные изменения
COMMIT - зафиксировать выполненные изменения

SELECT всегда будет читать только закомиченные данные

рекомендую почитать на эту тему, это примитивнейшие основы...
10 июн 15, 15:15    [17755612]     Ответить | Цитировать Сообщить модератору
 Re: Гарантия наличия строк в таблице  [new]
sp_eedo
Member

Откуда: ьщы
Сообщений: 507
vaneque,

Пошёл, читать. а Вам спасибо.!
10 июн 15, 15:17    [17755634]     Ответить | Цитировать Сообщить модератору
 Re: Гарантия наличия строк в таблице  [new]
vaneque
Member

Откуда: Тверь
Сообщений: 168
vaneque
вызванная после создания сессии к БД


блин, ща запудрю мозги человеку... после коммита или ролбека можно другие транзакции открывать в той же сессии
10 июн 15, 15:18    [17755636]     Ответить | Цитировать Сообщить модератору
 Re: Гарантия наличия строк в таблице  [new]
vaneque
Member

Откуда: Тверь
Сообщений: 168
sp_eedo
vaneque,

Пошёл, читать. а Вам спасибо.!


не за что. успехов :)
10 июн 15, 15:18    [17755639]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить