powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ora01555 - SNAPSHOT TOO OLD
67 сообщений из 67, показаны все 3 страниц
ora01555 - SNAPSHOT TOO OLD
    #32068355
DiHalt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что с этим делать? Я в цикле commit делаю уже 1 раз на 50 вставленных в таблицу записей. Работа скрипта закончится может бы через дня 3 - а как мне тогда контролировать что он там считатет (может я где логическую ошибку допустил). Сто записей итак несколько часов генерятся. Может что-то надо с RBS-ами сделать? Но на RBS tablespace итак 2GB и все свободны, max extents везде unlimeted, сервер ничем не занят кроме этого скрипта ...
Подскажите пожалуйста, что я делаю не так?
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32068371
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй создать БОЛЬШОЙ сегмент отката, переведи его в оффлайн. Убрать коммит из цикла и оставить только завершающий коммит. При запуске явно привяжи транзакцию к этому сегменту отката через set rollback segment. Непосредственно перед запуском переводишь сегмент в онлайн. Запускаешь транзакцию (см. выше) и немедленно из другой сессии переводишь сегмент отката в оффлайн. Молишься, чтобы тебе хватило места в табличном пр-ве RBS
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32068380
DiHalt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, буду пробовать. Но коммит в цикле ну очень хотелось бы иметь ...
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32068396
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда не получится привязки к определенному сегменту и весь метод работать не будет.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32068416
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может действительно логическая ошибка? Интересно было бы на сам скрипт посмотреть.

а сколько собственно ролбек сегментов в этом 2Гб тейблспейсе?
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32068419
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и не выставлен ли параметр OPTIMAL?
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32068477
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для устранения проблемы SNAPSHOT TOO OLD надо понимать, что его причина:
ВРЕМЯ ЖИЗНИ сегмента отката но НЕ РАЗМЕР.
т.е КОЛИЧЕСТВО других транзакций больше, чем могут принять ВСЕ экстенты ВСЕХ RBS.
Устранение:
- увеличение количества RBS
- увеличения количества экстентов RBS

По поводу OPTIMAL в данной ситуации он не работает (почти)
поскольку это параметр RBS который действует ПОСЛЕ транзакции но не ВО ВРЕМЯ ТРАНЗАКЦИИ

О размере RBS его нужно расчитывать исходя из :
INESRT/DELETE - исходя из однократного размера всех записей
UPDATE - исходя из двухкратного размера всех записей
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32068494
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Для устранения проблемы SNAPSHOT TOO OLD надо
>понимать, что его причина:
>ВРЕМЯ ЖИЗНИ сегмента отката но НЕ РАЗМЕР.
>т.е КОЛИЧЕСТВО других транзакций больше, чем могут
>принять ВСЕ экстенты ВСЕХ RBS.

Если б это было так, то выдавалась бы не ошибка 1555, а конкуренция за ундо блоки. Там у него вообще только одна транзакция. Поэтому рекомендация увеличить колличество сегментов абсолютно не поможет, а наоборот.

>По поводу OPTIMAL в данной ситуации он не работает
>(почти)
>поскольку это параметр RBS который действует ПОСЛЕ
>транзакции но не ВО ВРЕМЯ ТРАНЗАКЦИИ

OPTIMAL влияет на то будет ли сокращаться роллбек сегмент по окончанию транзакции. А если он сократиться, то значит будет перезаписан. Т.е. исторические данные потеряются, что и может быть причиной ora 1555.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32068518
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ORA-01555 snapshot too old: rollback segment number string with name "string" too small
Cause: Rollback records needed by a reader for consistent read are overwritten by other writers.
If in system only 1 transaction where we can get "other writers"
----------------------------------------------------------------------------------
About mait question:

U can use TRANSACTION SPECIFIC GLOBAL TEMPORARY TABLE,
timelife data in that table 1 trancaction,
Oracle don't create RBS of this kind of table never. After genetate your rows
into GTT u can use :
insert into YOUR_MAIN_TABLE select * from GTT;
commit;
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32068523
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
теперь вопрос смещается в плоскость "а хватит ли места в TEMP ? :-))

2softbuilder: у тебя хватит? ;-)
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32068529
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ORA-01555 snapshot too old: rollback segment number
>string with name "string" too small
>Cause: Rollback records needed by a reader for consistent
>read are overwritten by other writers

противоречия никакого нет - да в каждый момент времени - только одна транзакция. Но ей нужны данные, которые уже перезаписаны.

Решение с temporary таблицами не подойдет, т.к. ему надо делать выборка->апдейт->коммит в цикле.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32068532
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I tested size of temp tablespace for gtt, it not big.
This is my post about GTT and temporary TS

Tarry, Ly
ALTER ... = commit
in any situation
---------------------------------------------------------------------------------------------------------------------
Try to discover situation with temporary tables :

I opened 2 session:

1) with system account (system user)
2) with train account (training user)

then in train session i did:

-- alter sort area size (made it smaller)
-- got summary USA and PGA for train user (from system session)
and
-- got sotrt segments for this session (train user)

SQL> alter session set sort_area_size=32000;
Session altered.

(IN system session )
---------------------------------------------------------------------------------------------------------------------------------
O/S PGA PGA UGA UGA User
User User Oracle Login Memory MaxMemory Memory MaxMemory MaxMemory
Sid Spid PROCESS User ID ID TERM STAT KB KB KB KB KB
----- ----- ---------- ------------ -------- -------------------- -------- ---------- ---------- ---------- ---------- ----------
.. 6497 *? ? ? ACTIVE 74.797 74.797 19.113 19.113 93.910
13 14267 *8673 TRAIN sgene pts/4 INACTIVE 108.047 108.047 44.305 44.305 152.352
.. 6511 *? ? ? ACTIVE 74.797 74.797 19.113 19.113 93.910

(IN Train session)

SQL> select USER, TABLESPACE, SEGTYPE, sum(BLOCKS)
from v$sort_usage
where USER='TRAIN'
group by USER, TABLESPACE, SEGTYPE, session_num
;

no rows selected

default temporary ts for user train -> TEMP

then I created global temporary table in train session:

create global temporary table temp_train
as select * from all_objects where rownum <= 10;

---------------------------------------------------------------------------------------------------------------------------------
O/S PGA PGA UGA UGA User
User User Oracle Login Memory MaxMemory Memory MaxMemory MaxMemory
Sid Spid PROCESS User ID ID TERM STAT KB KB KB KB KB
----- ----- ---------- ------------ -------- -------------------- -------- ---------- ---------- ---------- ---------- ----------
13 14267 *8673 TRAIN sgene pts/4 INACTIVE 684.762 684.762 63.922 63.922 748.684
30 6499 *? ? ? ACTIVE 74.797 74.797 19.113 19.113 93.910

14 rows selected.

Oracle increased PGA from 74.797 up to 684.762 bytes WITHOUT SORTS IN THIS SESSION

SQL> commit;

Commit complete.

SQL> select count(*) from temp_train;

COUNT(*)
----------
0

SQL> insert into temp_train
select * from all_objects where rownum <=5000
order by object_id;

2000 rows created.

select USER, TABLESPACE, SEGTYPE, sum(BLOCKS)
from v$sort_usage
where USER='TRAIN'
group by USER, TABLESPACE, SEGTYPE, session_num
;

USER TABLESPACE SEGTYPE SUM(BLOCKS)
------------------------------ ------------------------------- --------- -----------
TRAIN TEMP DATA 50

SQL> commit;

Commit complete.

select USER, TABLESPACE, SEGTYPE, sum(BLOCKS)
from v$sort_usage
where USER='TRAIN'
group by USER, TABLESPACE, SEGTYPE, session_num
;

no rows selected

After any kind of commit statment (we remember ALTER..=COMMIT
oracle deallocate all temporary segments from temp ts for this session.

Then I increased sort area size for sessin:

SQL> alter session set sort_area_size=4000000;

Session altered.
SQL> select count(*) from temp_train;

COUNT(*)
----------
0

insert into temp_train
select * from all_objects where rownum <=2000;

2000 rows created.

SQL> select count(*) from temp_train;

COUNT(*)
----------
2000

SQL> select USER, TABLESPACE, SEGTYPE, sum(BLOCKS)
from v$sort_usage
where USER='TRAIN'
group by USER, TABLESPACE, SEGTYPE, session_num
;

no rows selected

SQL> insert into temp_train
select * from all_objects where rownum <=2000;

2000 rows created.

SQL> select count(*) from temp_train;

COUNT(*)
----------
4000

SQL> select USER, TABLESPACE, SEGTYPE, sum(BLOCKS)
from v$sort_usage
where USER='TRAIN'
group by USER, TABLESPACE, SEGTYPE, session_num
;

USER TABLESPACE SEGTYPE SUM(BLOCKS)
------------------------------ ------------------------------- --------- -----------
TRAIN TEMP DATA 100


OK!!! oracle use temporary ts ONLY it couldn't allocate enogth memory.
But still question --> Which memory oracle used?


O/S PGA PGA UGA UGA User
User User Oracle Login Memory MaxMemory Memory MaxMemory MaxMemory
Sid Spid PROCESS User ID ID TERM STAT KB KB KB KB KB
----- ----- ---------- ------------ -------- -------------------- -------- ---------- ---------- ---------- ---------- ----------
7 6497 *? ? ? ACTIVE 74.797 74.797 19.113 19.113 93.910
13 14267 *8673 TRAIN sgene pts/4 INACTIVE 684.762 684.762 47.480 64.027 748.789
14 6511 *? ? ? ACTIVE 74.797 74.797 19.113 19.113 93.910

PGA and UGA size still the same!

SQL> commit;

Commit complete.

SQL> select count(*) from temp_train;

COUNT(*)
----------
0

SQL> insert into temp_train
select * from all_objects where rownum <=5000
order by object_id;

4361 rows created.

User User Oracle Login Memory MaxMemory Memory MaxMemory MaxMemory
Sid Spid PROCESS User ID ID TERM STAT KB KB KB KB KB
----- ----- ---------- ------------ -------- -------------------- -------- ---------- ---------- ---------- ---------- ----------
10 6503 *? ? ? ACTIVE 74.797 74.797 19.113 19.113 93.910
13 14267 *8673 TRAIN sgene pts/4 INACTIVE 1236.723 1236.723 47.480 64.027 1300.750
14 6511 *? ? ? ACTIVE 74.797 74.797 19.113 19.113 93.910

SQL> insert into temp_train
select * from all_objects where rownum <=5000
order by object_id;

4361 rows created.

SQL> select count(*) from temp_train;

COUNT(*)
----------
8722

I used sort (order by) in two selects

Conclusion 1 --> oracle use temp segments for temporty tables and probably for sort.
I espesially used 2 statments because:
-- it has to increase size of temporary table
-- it hasn't use a lot of sort_area

Results:


User User Oracle Login Memory MaxMemory Memory MaxMemory MaxMemory
Sid Spid PROCESS User ID ID TERM STAT KB KB KB KB KB
----- ----- ---------- ------------ -------- -------------------- -------- ---------- ---------- ---------- ---------- ----------
10 6503 *? ? ? ACTIVE 74.797 74.797 19.113 19.113 93.910
13 14267 *8673 TRAIN sgene pts/4 INACTIVE 1236.723 1236.723 47.480 64.027 1300.750
14 6511 *? ? ? ACTIVE 74.797 74.797 19.113 19.113 93.910

USER SESSION_NUM TABLESPACE SEGTYPE SUM(BLOCKS)
------------------------------ ----------- ------------------------------- --------- -----------
TRAIN 39424 TEMP DATA 225


Oracle used temp tablespase probably for temporary table only and sort area for sort operation only.
Because afrer second insert with order by PGA/UGA didn't insrease.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32068542
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Решение с temporary таблицами не подойдет, т.к. ему надо делать выборка->апдейт->коммит в цикле.

Who says that we can't write pieses of data from GTT, after data will
write into main table we don't need keep rows in GTT. We may reuse this
table again "in scratch"
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32068834
DiHalt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Don't you think that I'll get the same problem after inserting -> commiting data from gtt into main table?

Все таки с местом для RBS-ов проблемы нет - тоад показывает что оно почти не используется (во время работы скрипта естественно). Экстенты во всех RBS unlimited. RBS-ов 3 штуки. Таблицы из которых делается выборка по 100GB, SGA в сумме 1GB. Таблицы правильно индексированы. Что-то ORA делает странное ...
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32182883
cdk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я воспользуюсь этой веткой, если не против...
в принципе ситуация ora-01555 довольно ясно, когда дело касается одного сегмента отката... но у меня такая проблема:
имеется:
4 малых сегмента отката (размер экстента=5 мб, minextents=5);
1 очень большой (экстент=100мб, minextetnts=6);
1 поменьше (экстент=50 мб, minextents=4);
процесс, работающий около 15-20 часов, там цикл по огромной таблице в 10 млн. записей с одним коммитом в конце, но! использующий жесткую привязку (set transaction use ... ) к огромному сегменту отката (который на 600 мб);
и, наконец, ошибку ora-01555, вылезающую произвольно (может на 20-30% процесса, а может на 70-80%) при запуске процесса выше.
Но самое странное, что в этой ошибке указывается rollback segment number ... with name имя_малого_сегмента!!! too small. Т.е. используется малый сегмент. Вопрос: почему??? (если отключить все малые сегменты, то все ок).
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32182946
Vladimir_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня возникала данная ошибка вовсе не изза rbs. Выше было сказано, что используется select, update. т.е. открывается курсор и на основе него делается update. Была конкретная ситуация: открываем курсор с id абонента и для каждого запускаем расчёт абонентской платы. Для каждого абонента делается commit. Пока был расчёт с пробежкой по курсору была данная ошибка. как только стал id считывать в массив, а потом уже бегать по нему, то проблема ушла.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32182993
Angel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Сделать сегменты отката изначально достаточно большими.
2. Выполнить следуюющее:
- создать сегменты отката (или изменить существующие) так, чтобы они могли достаточно авторасширяться (это вроде уже имеем);
- заблокировать каждый сегмент отката короткой транзакцией: set transaction use rollback segment ... (столько сеансов сколько RBS);
- запустить скрипт.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32183189
cdk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опытные знатоки-оракловоды! Я же именно спрашивал "почему?", а не "как лечить?". Отключения 4-х малых меня пока вполне устраивает. Но гложет вопрос, почему так происходит, зачем процесс лезет в другие сегменты и что он там изменяет, если уже задана ему жесткая привязка к большому сегменту.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32183479
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 cdk:

> процесс, работающий около 15-20 часов, там цикл по огромной таблице в 10
> млн. записей с одним коммитом в конце, но! использующий жесткую
> привязку (set transaction use ... ) к огромному сегменту отката (который на
> 600 мб);
>и, наконец, ошибку ora-01555, вылезающую произвольно (может на 20-30%
> процесса, а может на 70-80%) при запуске процесса выше.
>Но самое странное, что в этой ошибке указывается rollback segment
> number ... with name имя_малого_сегмента!!! too small. Т.е. используется
> малый сегмент. Вопрос: почему??? (если отключить все малые сегменты, то
> все ок).

This is a classic situation of MISunderstanding ora-01555. Many people concentrate on their transaction only without realizing some other session can be the reason of them getting ora-01555. In your example, you start process which runs for 15 hours. Since Oracle maintains read consistensy, it needs to be able to reconstruct table(s) contents as it was at the time SELECT was issued. Assume some other session modifies table(s) used in your select. And it modifies row(s) your transaction did not fetch yet. N hours later your transaction tries to fetch the row. It realizes that row changed since SELECT was issued and it needs to get read-consistent data from a rollback segment of TRANSATION THAT MODIFIED THAT ROW. So now you at mercy of SOMEONE ELSE's TRANSACTION. If that transaction committed and rollback segment was reused - you are out of luck and even 6000 MB of rollback space will not help you. And since your process runs 15 hours, chance of someone else updating the table(s) is pretty high.

SY
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32183827
cdk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сенкс.
Тогда правильно ли я понял, что происходит:
Цикл идет по большой таблице через селект. Но. Данные в этой таблице статичны, не изменяются (тел. трафик). (Таблица, кстати, партиционная, в ней гораздо больше данных; 10 млн. тока в одной партиции, но эта партиция, повторяю, статична.). Но в самом цикле есть куча селектов из прочих таблиц, для которых изменения в их данных в процессе работы этого цикла допустимы. Коммит, как я уже говорил, только после цикла. Правильно ли я понял, что селект(ы) внутри цикла запрашивают данные на момент _начала_ транзакции?
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32183876
Simon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если при выполнении долгих селектов появляется ora01555
то надо сделать все сегменты отката доволно большими и желательно одинаковыми (если так не сделать, то ошибка будет с самым маленьким сегментом отката)

при выполнении запросов autoextend сегментов отката не происходит (т.е он происходит только при выполнении Insert update и delete)
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32183896
Angel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 cdk
Нет.
Селект запрашивает данные на момент выполнения.

- началась твоя длинная транзакция, всё то, что она изменяет, предварительно пишется в RBS (например BIG_RBS);
- в ней же имеются селекты - оракл обеспечивает целостность чтения для этих селектов (на уровне команд) за счет (возможно) обращения к RBS (в том случае, если данные были изменены другими транзакциями (например, берет из RBSn));
- вот когда эти другие транзакции зафиксены, те данные в RBSn (рано или поздно) будут переписаны ораклом для других транзакций и те самые селекты тогда получат ошибку snapshot too old;
- твоя длинная транзакция зафиксена - соответственно то, что она изменяла, может быть переписано в BIG_RBS, т.е. никакого отношения к тем селектам это не имеет;

Я уже писал как этого можно избежать (см. выше).

Чтобы обеспечить целостность чтения для транзакции можно, например использовать транзакции только на чтение, но тогда ничего изменять не сможешь.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32183904
Angel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Simon

Чтобы "сделать все сегменты отката доволно большими" надо "довольно точно" :) знать длительность операции и транзакционную активность во время ее выполнения - задача на любителя :) (практически, это невыполнимо)
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32183931
Simon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Angel
а что такое транзакция для чтения???

я знаю два уровня изоляции SERIALIZABLE и READ COMMITED
другие оракл не поддерживает

отличаются тем, что в serializable оракл чтение согласовано на момент начала транзакции (сессии) а не на момент выполнения оператора
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32183949
Angel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Simon
можно, конечно, и сериализацию использовать, но это уже вопрос дизайна - а, как мне кажется, если уж вылезает snapshot too old, то обеспечить сериализацию будет тоже проблематично (я бы не побоялся сказать, что невозможно - скрипт то на 3 дня :))
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32183976
Simon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а мне кажется что никаких проблем не будет
если на диске много места
и админ правильно настроит ролбэк сегменты
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32183977
cdk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу прояснить еще больше, на примере.
for ... in (select ... from одна_большая_таблица where ... group by ...) loop -- здесь данные статичны однозначно, другими сессиями не меняются)

-- далее группа операторов, в некоторых таблицах данные могут меняться другими сессиями
select ... from ...
...
end loop;
commit;
Допустим, цикл работает 2 часа. Через 2 часа другая сессия меняет данные в таблицах, использующихся в теле цикла и сразу фиксирует изменения. При этом цикл еще не доходит до измененных блоков. А вот когда доходит, то происходит... что?
Что-то я тут недопонимаю. Там, в другой сессии все пофиксено и записано на диск, сегменты отката сто раз перезаписаны. А селект в теле, который дошел наконец-то до тех измененных записей, он разве не читает данные из буферного кэша (который, в свою очередь, с диска)? Зачем ему лазить в сегменты отката? Ведь данные в той сессии пофиксены,а уровень изоляции read commited допускает неповторяемость при чтении...
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32183984
cdk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Simon
да решение проблемы в принципе понятно
место есть навалом и роллбаки я увеличу
суть хочется понять до конца
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184001
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to cdk:

Чего ты мучаешься? В документации чётко приписано почему это происходит и что делать :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
This error can occur when the transaction that made the
change has already committed and:
• The transaction slot in the rollback header has been reused
• The before-image in the rollback segment has been overwritten by another
transaction
Solution
Read-consistency errors can be minimized by ensuring that rollback segments are
created with:
• A higher MINEXTENTS value
• Larger extent sizes
• A higher OPTIMAL value
Note that these errors cannot be avoided by increasing MAXEXTENTS.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184009
Simon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все просто

если у тебя есть транзакция работающая два часа
то все ее измененые данные записываются в ролбэк сегмент,
если другая транзакция пытается к ним обратится, то она, например, при выполнении селекта доходит до измененной строки, убеждается что она (транзакция) началась позже чем транзакция, которая изменила эту строку и которая еще работает, после этого лезет в ролбэк сегмент за нужными тебе данными, если на этот момент из-за нехватки места в ролбэк сегментах эти данные уже перезаписанны, то вылазит ошибка ora01555


самое главное правило:
commit надо делать только тогда, когда это надо по логике, а не тогда когда заканчиваются ролбэк сегменты, так как проблема в них
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184020
Simon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в оракле два уровня изоляции read commited и serializable

в первом случае согласованность по чтению на момент начала выполнения оператора, во втором транзакции

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

есть 1 селект на два часа, параллельно делается 100 инсертов с коммитами
он вставленные данные никогда не увидит, и для доступа к тем данным которые ему нужны полезет в ролбэк сегмент
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184030
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем ему лазить в сегменты отката? Ведь данные в той сессии пофиксены,а уровень изоляции read commited допускает неповторяемость при чтении

Запросы насколько я знаю не выполняютя в режиме read committed, они всегда консистентны на время начало их выполнения, поэтому и лезут в сегменты отката, чтобы получить состояние изменненных данных на то время.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184044
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Запросы насколько я знаю не выполняютя в режиме read committed"

Эх Violina, Violina..........
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184062
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to softbuilder

А что не так? Работающий запрос ведь не читает данные даже если они были закоммичены во время его выполнения.

Если не так выразилась так уж извини, я просто в унисон вопросу ответила

Ведь данные в той сессии пофиксены,а уровень изоляции read commited допускает неповторяемость при чтении

В вопросе cdk как раз и предположил что запрос работает в режиме read commited.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184089
cdk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то запутали совсем меня... может объясняю проблему не так...
сессия 1 - тот самый 15-часовой процесс
сессия 2 - очень быстрая _закомиченная_ транзакция, запущенная уже после запуска 1-ой сессии, менящая блоки, которые понадобятся в будущем для с.1
в сессии 1 цикл потихоньку подходит к тому моменту, где менялись блоки в сессии 2
вопрос такой: откуда будут операторы select читать эти данные, если они уже давно зафиксированы раннее сессией 2?
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184093
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Violina:\r
\r
В Oracle чтение данных всегда происходит непротиворечивое, то есть консистентное, то есть как правило read commited. \r
\r
Есть только два варианта: read commited и serializable и оба они консистентны и непротиворечивы. Serializable отличается только тем, что если изменения тех данных которые входят в активной набор текущей транзакции изменились другой транзакцией - такое чтение вываливается с ошибкой. А в случае read commited не вываливается, просто они не замечаются, даже если они той другой транзакцией закомитились. И первая транзакция не будет обращаться к сегментам отката, если данные были изменены после начала первой транзакции, так как активный набор определяется на начало транзакции.\r
\r
\r
Можешь здесь почитать\r
/topic/29583\r
\r
И читай книгу Т. Кайта, там про это написано.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184122
Simon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2cdk

из ролбэков

т.к. тому запросу который был запущен два года назад нужны данные которые были актуальными на момент его запуска (оракл это так сделал)
а они есть только в ролбэках
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184123
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про транзакции мне все ясно, я долгое время экспериментировала в уровнями изоляции, я подраумевала случай выполение одиночного долгоработающего запроса, в ходе выполения которго были закомичены данные в другом сеансе, нужные этому запросу. Именно так и ставит вопрос cdk

А селект в теле, который дошел наконец-то до тех измененных записей, он разве не читает данные из буферного кэша (который, в свою очередь, с диска)? Зачем ему лазить в сегменты отката? Ведь данные в той сессии пофиксены,а уровень изоляции read commited допускает неповторяемость при чтении...
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184175
cdk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Violina
почти так, но не одному долгоиграющему запросу, а запросам очередной итерации цикла (которые в совокупности не так долго выполняются для одной итерации) и где выполняются разнородные селекты

Если данные берутся из роллбака (скорее всего так и есть), то возникновение 1555 понятно. Но по идее уровень read commited может допускать чтение измененных данных...
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184191
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to cdk

в сессии 1 цикл потихоньку подходит к тому моменту, где менялись блоки в сессии 2
вопрос такой: откуда будут операторы select читать эти данные, если они уже давно зафиксированы раннее сессией 2?


Если уровень изоляции транзакции в сессии 1 read comitted и изменения в сессии 2 закомичены к моменту начала select в сессии 1 то будут читаться закомиченые данные.

Если уровень изоляции serializable или транзакция в read only, то запрос будет пытаться извлечь данные на момент начала транзакции. Для этого ему могут понадобится данные из сегментов отката. Если они были перезаписаны, вывалится ora-01555.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184364
cdk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Violina
Если уровень изоляции транзакции в сессии 1 read comitted и изменения в сессии 2 закомичены к моменту начала select в сессии 1 то будут читаться закомиченые данные.
Я тоже пришел к тому же выводу. А на основании этого можно сделать еще вывод, что запрос(ы) в какой-то (или в каких-то) итерации(ях) выполняется довольно долго, что позволяет возникнуть ora-1555... Больше искать причину негде?
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184369
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Больше искать причину негде?"

to cdk:

Думаю, что внутри запроса, который 15 часов длится.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184386
cdk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 softbuilder
один запрос не длится 15 часов!
весь процесс (а точнее цикл) выполняется 15 часов, в котором довольно тяжелые вычисления для каждой итерации
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184395
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит нужно найти принципиально другое решение этой задачи, без циклов(которыми некоторые после перехода в частности с FoxPro на Oracle по привычке любят увлекаться, несмотря на то что SQL был еще в FoxPro 2.0 с 1991г) .
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184399
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй изложить свою исходную задачу, может народ подскажет другие пути решения.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184400
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 cdk:

> Допустим, цикл работает 2 часа. Через 2 часа другая сессия меняет данные в таблицах, использующихся в теле цикла и
> сразу фиксирует изменения. При этом цикл еще не доходит до измененных блоков. А вот когда доходит, то происходит... что?
> Что-то я тут недопонимаю. Там, в другой сессии все пофиксено и записано на диск, сегменты отката сто раз перезаписаны.
> А селект в теле, который дошел наконец-то до тех измененных записей, он разве не читает данные из буферного кэша
> (который, в свою очередь, с диска)? Зачем ему лазить в сегменты отката? Ведь данные в той сессии пофиксены,
> а уровень изоляции read commited допускает неповторяемость при чтении...


What cache???

Oracle does not prefetch data. Therefore there is no cache for select results.
And therefore Oracle needs to get read consistent data from a rollback segment used by transaction which modified the data. And in fact, it could be the other transaction did not modify the row you transaction needs. It is enough if it modified any row in the same data block.

That is why long running transactions should be elevated to DESIGN and maybe even to ARCHITECHTURE level.

SY.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184437
cdk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SY
понятно. ошибся я насчет кэша.
но все равно написанное тобой не противоречит выводу Если уровень изоляции транзакции в сессии 1 read comitted и изменения в сессии 2 закомичены к моменту начала select в сессии 1 то будут читаться закомиченые данные.
т.е. в такой ситуации ora-1555 не возникнет

2 softbuilder
Задача ясна, давно решена и в общем-то результаты выполнения хороши. А суть ее обычная - формирование начислений за телефонный трафик за месяц. Полностью переделывать процедуру смысла не имеет, да и сложна она (написана ессно не мной). Но слабые места видимо все же есть...
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184460
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to cdk:

Неужели используя только SELECT-ы с группированием, использованием аналитических функций(не путать с групповыми) нельзя решить твою задачу?
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184467
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу

Если уровень изоляции транзакции в сессии 1 read comitted и изменения в сессии 2 закомичены к моменту начала select в сессии 1 то будут читаться закомиченые данные.

Сделала такую проверку, изменив и закоммитив данные в таблице test в другом сеансе во время выполнения цикла.

Код: plaintext
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.
SQL> set transaction isolation level read committed;

Transaction set.

SQL> set serverout on
SQL> declare
   2     cnt number;
   3   begin
   4 
   5     for i in  1 .. 10  loop
   6       select count(*) into cnt from vio.test;
   7       dbms_output.put_line(cnt);
   8       DBMS_LOCK.SLEEP( 5 );
   9     end loop;
  10 
  11   end;
  12   /
 0 
 0 
 0 
 2 
 2 
 2 
 2 
 2 
 2 
 2 


То же самое для serializable дает

Код: plaintext
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.
SQL> set transaction isolation level serializable;

Transaction set.

SQL> declare
   2     cnt number;
   3   begin
   4 
   5     for i in  1 .. 10  loop
   6       select count(*) into cnt from vio.test;
   7       dbms_output.put_line(cnt);
   8       DBMS_LOCK.SLEEP( 5 );
   9     end loop;
  10 
  11   end;
  12   /
 0 
 0 
 0 
 0 
 0 
 0 
 0 
 0 
 0 
 0 
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184508
cdk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 softbuilder
тут уже пошли политические тонкости... я не имею права менять исходники в промышленной схеме... лицензированное ПО
могу только смотреть код и указывать на вероятное плохое место
а на тестовой схеме такую ситуацию создать невозможно (по техническим причинам)
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184515
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to cdk:
Можно создать параллельный способ расчёта, если выяснится что он выполняется в 200 раз быстрее, можно будет смело настаивать на получении премии за рацпредложение.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184572
Simon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2cdk:
интересно с чьим билингом ты работаешь:)
amdocs, cboss или петерсервис:)?

нахождение сумарного телефонного трафика по звонковым таблицам дурацкая мысль, если там десятки миллионов записей то даже если у тебя ora01555 не появится, времени на это уйдет довольно дофига
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184577
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Simon:
Даже если сделать промежуточные таблицы, которые содержат суммы по нужным группам и периодически производить расчёт только по новым данным?
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184582
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Absolutely agree with softbuilder. This is screaming for a materialized view.

SY.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184626
Simon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
там уже должны быть еще какие-нибудь уровни агрегации информации (т.е я бы на месте cdk обратился бы в техподдержку компании разработчика)

при закрытии счета никто как правило не лазит по звонковым таблицам, это ресурсоемко (для миллиона абонентов надо перелопатить несколько 10-ков миллионов записей) для любого сервака это смерть

на звонковых таблицах индексы даже не делают (делают только для партиционирования), с индексами инсерты туда проходят гораздо медленней
и они места на диске много занимают
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184644
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да даже без партиций и материализованных вью можно по уму спроектировать систему.
Разделить информацию на оперативную и историческую.
Создать отдельно таблицы для только для суточной информации, каждый час скажем расчитывать, переносить её из суточной INSERT /*+APPEND */ .... в месячную итд.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184655
cdk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Simon
ни тот, ни другой, ни третий...
поддержка есть, они и предложили либо увеличить сегменты, либо отключить их на время

2 sotbuilder
таблицы ессно партиционные, индексы тоже есть на них, глобальные причем.
насчет снапшотов... биллинг оффлайновый, иногда приходится (причем в кратчайшие сроки) заново пересчитывать значительные объемы за прошлые периоды

ладно, вероятно всего пока ограничусь увеличением малых сегментов...
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184823
Simon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 softbuilder:

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

и именно поэтому обращаться к ней дурацкая идея
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184855
Angel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я плакалъ

2 Simon
>а мне кажется что никаких проблем не будет
>если на диске много места
>и админ правильно настроит ролбэк сегменты

Причем тут сериализуемые транзакции и RBS, если эта самая транзакция работает 15 часов и транзакционная активность высока, проблема в том, чтобы обеспечить ее выполнение и не получить ORA-08177: Can't serialize access for this transaction...
Это уже дизайн (и не тривиальный), а человек спрашивает как ему от 01555 избавиться. Не поленюсь скопировать с 1 страницы:
...
2. Выполнить следуюющее:
- создать сегменты отката (или изменить существующие) так, чтобы они могли достаточно авторасширяться (это вроде уже имеем);
- заблокировать каждый сегмент отката короткой транзакцией: set transaction use rollback segment ... (столько сеансов сколько RBS);
- запустить скрипт.
...

P.S.
(самому ломы писать)

Oracle Isolation Levels
Oracle provides three transaction isolation levels:

read committed

This is the default transaction isolation level. Each query executed by a transaction sees only data that was committed before the query (not the transaction) began. An Oracle query will never read dirty (uncommitted) data.
Because Oracle does not prevent other transactions from modifying the data read by a query, that data may be changed by other transactions between two executions of the query. Thus, a transaction that executes a given query twice may experience both nonrepeatable read and phantoms.

serializable transactions

Serializable transactions see only those changes that were committed at the time the transaction began, plus those changes made by the transaction itself through INSERT, UPDATE, and DELETE statements. Serializable transactions do not experience nonrepeatable reads or phantoms.

read-only
Read-only transactions see only those changes that were committed at the time the transaction began and do not allow INSERT, UPDATE, and DELETE statements.

Setting the Isolation Level
Application designers, application developers, and database administrators can choose appropriate isolation levels for different transactions, depending on the application and workload. You can set the isolation level of a transaction by using one of these commands at the beginning of a transaction:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

SET TRANSACTION ISOLATION LEVEL READ ONLY;
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184935
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pregde vsego, moi soboleznovaniya tem, kto ispol'zuet AMDOCS...

"..при закрытии счета никто как правило не лазит по звонковым таблицам,.."
Eshe kak lazyat!


"нахождение сумарного телефонного трафика по звонковым таблицам дурацкая мысль, если там десятки миллионов записей то даже если у тебя ora01555 не появится, времени на это уйдет довольно дофига..."
S etim mogno mnogo sporit'... Stoit zelogo topika!

V lubom sluchae, eto problema tol'ko logocheskaya..
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184981
Simon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Angel

Выполнить следуюющее:
- создать сегменты отката (или изменить существующие) так, чтобы они могли достаточно авторасширяться (это вроде уже имеем);
- заблокировать каждый сегмент отката короткой транзакцией: set transaction use rollback segment ... (столько сеансов сколько RBS);
- запустить скрипт.


авторасширение для ролбэк сегментов не работает при выполнении селектов
лучше всего чтобы все ролбэк сегменты были одинакового размера и их было много

с сериализацией я согласен-от нее пользы не будет, надо всегда использовать тот уровень изоляции который нужен по логике


2Oracle X-pert

AMDOCS лучший биллинг в мире, там есть свои глюки (я ни там ни в вымпелкоме не работаю и никогда не работал, но то что он лучший это факт)

если Вы связанны с биллингом и ваша система лазит по звонковым таблицам для того чтобы при пакетной генерации закрыть счет, то большинство систем конкурентов будут быстрей, так как они этого не делают (если только не надо показать детализацию звонков)

p.s. мне кажется тема разрослать и пользы от нее никакой
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32184991
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Angel

Странно, а у меня вот так не работает

Код: plaintext
1.
2.
3.
4.
SQL> SET TRANSACTION ISOLATION LEVEL READ ONLY;
SET TRANSACTION ISOLATION LEVEL READ ONLY
                                     *
ERROR at line  1 :
ORA- 02179 : valid options: ISOLATION LEVEL { SERIALIZABLE | READ COMMITTED }


а только вот так

Код: plaintext
1.
2.
SQL> set transaction read only;

Transaction set.


Может это только для девятки?

И еще вот такая штука

Код: plaintext
1.
2.
3.
4.
SQL> SET TRANSACTION ISOLATION LEVEL serializable;
SET TRANSACTION ISOLATION LEVEL serializable
*
ERROR at line  1 :
ORA- 08178 : illegal SERIALIZABLE clause specified for user INTERNAL


Что для sys нельзя работать в режиме serializable?
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32185048
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Simon ( Gal', chto your mail not be reached)

Tvoe soobshenie "AMDOCS лучший биллинг в мире" menya radyet!
No v tom-to i delo, chto ya byl Rykovoditelem proektnoi gryppu etoi-to sistemy...
Spasibo za kompliment i gelay yspexov!
( A vse-taki, v AMDOCS - ne samaya optimal'naya sistema..)
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32185051
Angel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Simon

>авторасширение для ролбэк сегментов не работает при выполнении селектов
>лучше всего чтобы все ролбэк сегменты были одинакового размера и их было много

:) Спасибо, что объяснил. Непонятно только зачем...

На счет второго высказывания, нельзя ли поточнее: какого размера и сколько (ну сколько это даже и не важно для конкретной темы) - поделись опытом

2Violina

Я не верю, что у тебя нет доки :)
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32185067
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Angel

Дока есть. Про уровни изоляции я читала, но про

illegal SERIALIZABLE clause specified for user INTERNAL

ничего не говорилось.

Вы привели пример

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET TRANSACTION ISOLATION LEVEL READ ONLY;

последний у меня не работает, вчера с этим столкнулась. Вот и хотелось узнать SET TRANSACTION ISOLATION LEVEL READ ONLY в принципе не верная команда или просто в 9 вместо нее надо использовать set transaction read only;
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32185098
Angel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Violina

Пример для 8i

Из доки по 9i:

ORA-08178 illegal SERIALIZABLE clause specified for user INTERNAL
Cause: Serializable mode is not supported for user INTERNAL.
Action: Reconnect as another user and retry the SET TRANSACTION command.
...
Рейтинг: 0 / 0
ora01555 - SNAPSHOT TOO OLD
    #32185117
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Angel

Спасибо за пояснения!

PS
У меня 8 ки нет, использую девятку, поэтому иногда задаю такие вопросы. Мне это важно знать для подготовке к экзаменам.
...
Рейтинг: 0 / 0
67 сообщений из 67, показаны все 3 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ora01555 - SNAPSHOT TOO OLD
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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