:: Не фоксом единым
Oracle SEQUENCE
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Хм. Удивление для меня...
создаю SEQUENCE
CREATE SEQUENCE PURCHASE.SEQ_VERSIONS_SPR
START WITH 1
MAXVALUE 9999999999999999999999999999
MINVALUE 1
NOCYCLE
CACHE 20
NOORDER
NOKEEP
GLOBAL;
Пусть сегодня я загрузил N записей
Сиквенс покажет START WITH 1+N
...
Но если я загружать буду через несколько дней, то сиквенс начнет грузить через 20 с последующим шагом 1.
Зачем oracle так делает ?

[attachment 30322 12.png]

Может CACHE = 1 поставить ?



Исправлено 2 раз(а). Последнее : ВладимирС, 19.11.18 13:54
Ratings: 0 negative/0 positive
Re: Oracle SEQUENCE
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
Еще вопрос...
Кто-то из разрабов через dotConnect for Oracle
создал SEQUENCE и не сознается.
Пробую удалить
DROP SEQUENCE PURCHASE.ISEQ$$_97237;
Выдает ошибку: ORA-32794: невозможно удалить созданную системой последовательность
forums.devart.com

Как его удалить то ?
Ratings: 0 negative/0 positive
Re: Oracle SEQUENCE
pasha_usue

Сообщений: 3647
Откуда: Е-бург
Дата регистрации: 06.10.2006
А откаты транзакций никто не делает? Или ошибки при вставке?
Ratings: 0 negative/0 positive
Re: Oracle SEQUENCE
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
pasha_usue
А откаты транзакций никто не делает? Или ошибки при вставке?
Нет, эту таблицу только я веду...
Ratings: 0 negative/0 positive
Re: Oracle SEQUENCE
pasha_usue

Сообщений: 3647
Откуда: Е-бург
Дата регистрации: 06.10.2006
ВладимирС
pasha_usue
А откаты транзакций никто не делает? Или ошибки при вставке?
Нет, эту таблицу только я веду...
The "cache" clause caches the specified number of sequence values into the buffers in the SGA. This speeds access, but all cached numbers are lost when the database is shut down. The default value is 20;
Ratings: 0 negative/0 positive
Re: Oracle SEQUENCE
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
То же подозрение на кэшь были)))
А Паша даже описание привел.
Так может бд shut down регулярно. Вот и теряются?
И кстати, минимум кэш 2.
Попробуй поставить, меньше пробелы будут
Ratings: 0 negative/0 positive
Re: Oracle SEQUENCE
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
pasha_usue
ВладимирС
pasha_usue
А откаты транзакций никто не делает? Или ошибки при вставке?
Нет, эту таблицу только я веду...
The "cache" clause caches the specified number of sequence values into the buffers in the SGA. This speeds access, but all cached numbers are lost when the database is shut down. The default value is 20;
Хм... Никто кроме меня database is shut down не сделает. Хотя алерт надо посмотреть. Вдруг сисадмины виртуалку перестартуют ночью.
Ratings: 0 negative/0 positive
Re: Oracle SEQUENCE
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
Аспид
И кстати, минимум кэш 2.
Да, уже поставил.
Ratings: 0 negative/0 positive
Re: Oracle SEQUENCE
pasha_usue

Сообщений: 3647
Откуда: Е-бург
Дата регистрации: 06.10.2006
ВладимирС
Аспид
И кстати, минимум кэш 2.
Да, уже поставил.
Минимум - NOCACHE.
Ratings: 0 negative/0 positive
Re: Oracle SEQUENCE
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
ВладимирС
Хм. Удивление для меня...
Почитай доку
ВладимирС
Зачем oracle так делает ?
для того чтобы не писать на каждый чих "в базу" очередной сгенерированный id. Он сразу записывает в таблицу +20, а в памяти держит инфу что можно выдавать значения из диапазона от старого+1 до старого+20 (оно же "новое")
ВладимирС
Может CACHE = 1 поставить ?
Зачем? CACHE это опция для повышения производительности - чтобы массовые вставки записей не требовали на каждую генерацию id писать что-то в базу. сиквенс это не более чем тот же самый фоксовый newid, только реализуемый самой системой, а не "самописный" - значения хранятся в системной таблице SEQ$ или типа того (сорри, нет под рукой БД).
В общем для малоизменяемых таблиц вполне можно и NOCACHE задать. Хотя лично я не вижу никакой беды в "пробелах в нумерации" - тем более что в продакшене их почти не будет - они возникают лишь при перезапуске сервера, так то сервер в памяти хранит всё что надо и не будет "перескакивать".
ВладимирС
Выдает ошибку: ORA-32794: невозможно удалить созданную системой последовательность
Что ж тут не понятно то? Этот сиквенс система создала, вероятно, в ответ на использование AUTOINC - т.е. помимо самого сиквенса есть ещё и метаинформация в какой-то таблице которая делает всё это вместе "похожим" на MSSQL-ное автогенерируемое поле. Как и любую "вспомогательную" сущность такое нельзя - надо удалять "основную" сущность - т.е. автоинкрементное поле которое этот сиквенс породило.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Oracle SEQUENCE
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
Спасибо за ответы...
Но:
На самом деле про сиквенс я знаю...
Igor Korolyov
...
тем более что в продакшене их почти не будет - они возникают лишь при перезапуске сервера, так то сервер в памяти хранит всё что надо и не будет "перескакивать".
Посмотрел alert_KATTEST.log - в нем перезапуска сервера НЕТ.
Да и перезапускать сервер - только моя прероготива...
Теперь я и хочу узнать, ПОЧЕМУ возникли пробелы в сиквенсе при CACHE 20 ?
Может бага oracle 12.2.0.1.0 ? Во что конечно не верится.

Igor Korolyov
ВладимирС
Выдает ошибку: ORA-32794: невозможно удалить созданную системой последовательность
Что ж тут не понятно то? Этот сиквенс система создала, вероятно, в ответ на использование AUTOINC - т.е. помимо самого сиквенса есть ещё и метаинформация в какой-то таблице которая делает всё это вместе "похожим" на MSSQL-ное автогенерируемое поле. Как и любую "вспомогательную" сущность такое нельзя - надо удалять "основную" сущность - т.е. автоинкрементное поле которое этот сиквенс породило.
Как то бы найти эту сущность.
Разрабы в web-е строя видимо модель потренировались в создании таблицы с автоинкреминентом. Потом ВИДИМО удалили таблицу (т.к. в схеме не видно созданные не мной таблицы). Но не проверили в схеме, удалился ли автоинкреминент. Или EF (Microsoft.AspNetCore.Identity.EntityFrameworkCore) что-то не так сделал. Короче, концы не могу найти.
Ради интереса, в TOADe есть UsedBy. Дык он не показывает в каком месте используется этот сиквенс.
И полный скрипт сиквенса:
DROP SEQUENCE PURCHASE.ISEQ$$_97237;
-- Sequence ISEQ$$_97237 is created automatically by Oracle for use with an Identity column
Скрин-шот сиквенса:

[attachment 30330 122.png]

Конечно можно и наплевать на него. Но интересно же разобраться.



Исправлено 3 раз(а). Последнее : ВладимирС, 21.11.18 07:56
Ratings: 0 negative/0 positive
Re: Oracle SEQUENCE
pasha_usue

Сообщений: 3647
Откуда: Е-бург
Дата регистрации: 06.10.2006
ВладимирС
Разрабы в web-е строя видимо модель потренировались в создании таблицы с автоинкреминентом. Потом ВИДИМО удалили таблицу (т.к. в схеме не видно созданные не мной таблицы). Но не проверили в схеме, удалился ли автоинкреминент. Или EF (Microsoft.AspNetCore.Identity.EntityFrameworkCore) что-то не так сделал. Короче, концы не могу найти.
Если таблица лежит в корзине, то Sequence нельзя удалить. А сам Sequence в корзину не отправляется.



Исправлено 1 раз(а). Последнее : pasha_usue, 21.11.18 08:03
Ratings: 0 negative/0 positive
Re: Oracle SEQUENCE
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
ВладимирС
Теперь я и хочу узнать, ПОЧЕМУ возникли пробелы в сиквенсе при CACHE 20 ?
Сервер выкинул этот сиквенс из памяти (а значит и все закэшированные значения) - это вполне возможно. Объекты сами по себе не живут "вечно" в памяти - проходит время и сервер вполне может их оттуда убрать, освобождая место для других объектов. Не пользовались им, вот он и "устарел". Это нормальное поведение.

Тебе нужно понять лишь 1 простой как грабли факт - sequence НЕ ДАЁТ "непрерывных" последовательностей номеров ни при каких условиях (как, впрочем, и подавляющее большинство других средств генерации ID). Банальный ролбэк добавленной записи и всё - твоя последовательность будет иметь "дырку".

ВладимирС
Как то бы найти эту сущность.
Гугл говорит про SYS.IDNSEQ$


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Oracle SEQUENCE
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
Igor Korolyov
Сервер выкинул этот сиквенс из памяти (а значит и все закэшированные значения) - это вполне возможно. Объекты сами по себе не живут "вечно" в памяти - проходит время и сервер вполне может их оттуда убрать, освобождая место для других объектов. Не пользовались им, вот он и "устарел". Это нормальное поведение.
Понятно. Скорее всего так и происходит.
Igor Korolyov
Тебе нужно понять лишь 1 простой как грабли факт - sequence НЕ ДАЁТ "непрерывных" последовательностей номеров ни при каких условиях (как, впрочем, и подавляющее большинство других средств генерации ID). Банальный ролбэк добавленной записи и всё - твоя последовательность будет иметь "дырку".
Это понятно. Например сделать дамп схемы. Установить его и все сиквенсы начнут работать от последнего определенного в его описании.
Igor Korolyov
ВладимирС
Как то бы найти эту сущность.
Гугл говорит про SYS.IDNSEQ$
БОЛЬШОЕ спасибо.
Надо почитать про SYS.IDNSEQ$.

SELECT a.name AS obj_name,
b.name AS sequence_name
FROM sys.idnseq$ c
INNER JOIN sys.obj$ a ON c.obj# = a.obj#
INNER JOIN sys.obj$ b ON c.seqobj# = b.obj#;

[attachment 30335 12.png]


Хм...
SELECT *
FROM "BIN$enWt/1cuLIjgU8AF8QpKww==$0"

[attachment 30336 121.png]

Точно кто-то тренировался в составлении таблицы через "Visual Studio Code".

pasha_usue
Если таблица лежит в корзине, то Sequence нельзя удалить. А сам Sequence в корзину не отправляется.
Точно, СПАСИБО.
Таблица: "BIN$enWt/1cuLIjgU8AF8QpKww==$0" в корзине.

SELECT * FROM recyclebin
WHERE OBJECT_NAME = 'BIN$enWt/1cuLIjgU8AF8QpKww==$0'
;

Почистил корзину. Таблица удалилась и сиквенс тоже.

ВСЕМ БОЛЬШОЕ СПАСИБО.



Исправлено 3 раз(а). Последнее : ВладимирС, 22.11.18 08:01
Ratings: 0 negative/0 positive
Re: Oracle SEQUENCE
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
pasha_usue
ВладимирС
Разрабы в web-е строя видимо модель потренировались в создании таблицы с автоинкреминентом. Потом ВИДИМО удалили таблицу (т.к. в схеме не видно созданные не мной таблицы). Но не проверили в схеме, удалился ли автоинкреминент. Или EF (Microsoft.AspNetCore.Identity.EntityFrameworkCore) что-то не так сделал. Короче, концы не могу найти.
Если таблица лежит в корзине, то Sequence нельзя удалить. А сам Sequence в корзину не отправляется.
Все таки мое мнение, что ORACLE (тем более такой высокой версии 12.2.0.1.0) должен был предусмотреть при удалении таблицы сразу удаление автоинкреминентного сиквенса. Как бы бага.


Исправлено 1 раз(а). Последнее : ВладимирС, 26.11.18 09:23
Ratings: 0 negative/0 positive
Re: Oracle SEQUENCE
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
ВладимирС
Все таки мое мнение, что ORACLE (тем более такой высокой версии 12.2.0.1.0) должен был предусмотреть при удалении таблицы сразу удаление автоинкреминентного сиквенса. Как бы бага.
Не пользуйся корзиной - может и будет удалять "сразу всё", а иначе как ты себе представляешь восстановление объекта из корзины?

А вообще forum.foxclub.ru Там есть ссылка на перевод "будней разработчика БД оракл" - почитай, посочувствуй И если не передумаешь, рэйзи саппорт кейс - описывай свою проблему (хотя они не будут, конечно же, ничего менять, т.к. поведение вполне логичное )


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Oracle SEQUENCE
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
Igor Korolyov
Не пользуйся корзиной - может и будет удалять "сразу всё", а иначе как ты себе представляешь восстановление объекта из корзины?
1. Конечно корзину можно отключить.
2. Как я представляю себе ?
Т.к. Автоинкрементный сиквенс принадлежит таблице, правильнее сказать связан. То он должен удаляться автоматически вместе с таблицей. При восстановлении таблицы, должен восстановиться и сиквенс. Они же связаны. Как то так.
Может конечно я и туплю.

По поводу Безумие и успех кода Oracle Database...
У всех трудности... Но каждая компания их преодолевает самостоятельно. Успехов разрабам оракла.

А вообще мне оракл - нравится.
В основном работал с 11g.
Только сейчас у заказчика появился 12c. Теперь и нам надо на нем разрабатывать.



Исправлено 1 раз(а). Последнее : ВладимирС, 28.11.18 07:37
Ratings: 0 negative/0 positive
Re: Oracle SEQUENCE
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Поскольку оракл это всё то же ядро времён мамонтов или даже птеродактилей то многие из "новых фишек" это на самом деле не очень умело прилепленные "нашлёпки". Та же корзина - по сути это просто переименование объектов, и скрытие их из некоторых частей системы (но в других частях они, конечно же, остаются). Автоинкрементные поля - просто генерируемый сиквенс и его вызов в дефолте поля (или ещё где - не помню как там они выкрутились)... Понятно что где-то между этими "новыми и очень полезными функциями" будут не очень удачные "пересечения" - особенно в разнообразных утилитах. Со временем, конечно, притрутся, научатся, скажем, прятать эти авто-сиквенсы, или хотя-бы "автосиквенсы для удалённых таблиц" из "списков" в UI, или даже в собственно системных представлениях чего подкрутят. Сам то объект ну никак нельзя удалять - как и триггера, к примеру.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Oracle SEQUENCE
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
Igor Korolyov
Поскольку оракл это всё то же ядро времён мамонтов или даже птеродактилей то многие из "новых фишек" это на самом деле не очень умело прилепленные "нашлёпки". Та же корзина - по сути это просто переименование объектов, и скрытие их из некоторых частей системы (но в других частях они, конечно же, остаются). Автоинкрементные поля - просто генерируемый сиквенс и его вызов в дефолте поля (или ещё где - не помню как там они выкрутились)... Понятно что где-то между этими "новыми и очень полезными функциями" будут не очень удачные "пересечения" - особенно в разнообразных утилитах. Со временем, конечно, притрутся, научатся, скажем, прятать эти авто-сиквенсы, или хотя-бы "автосиквенсы для удалённых таблиц" из "списков" в UI, или даже в собственно системных представлениях чего подкрутят. Сам то объект ну никак нельзя удалять - как и триггера, к примеру.
Это жизнь. Пусть работают.

Когда-то, в 2006 году, пришел в фирму "Прогноз".
У них развивался свой продукт П3, потом П5, потом П7.
Ядром являлся C++, они на основе его делали транслятор типа Паскаля, причем как я потом узнал это Питерцы начинали делать. Прогноз купил это и начал дорабатывать под свои нужды.
Вначале все неплохо было.
Я пришел, когда П5 только начинал развиваться.
На этом языке (П5) мы уже делали приложения для заказчиков. Продавали.
Но, багов куча было. Писали таски для разрабов ядра. Они выпускали новые релизы.
И все по кругу.
Но, мировые трансляторы выпускали новые фичи... Наши разрабы не успевали делать аналоги, что естественно, что бы приложения имели конкурентную визуализацию.
Естественный выбор, перешли на западные трансляторы: C#, java...
Ну и потом развал компании.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 21 (Гостей: 21)

© 2000-2024 Fox Club 
Яндекс.Метрика