|
rowid в запросе
|
|||
---|---|---|---|
#18+
Насколько безопасно использовать rowid в рамках одного запроса (передавать из одного подзапроса в другой)? Свои внутренние "TABLE ACCESS BY INDEX ROWID" Oracle обработает корректно даже при move online таблицы. А явное использование, никто не сталкивался с проблемами? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2020, 15:47 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
"А это вы жалуетесь или хвастаетесь?" Внутри одного SQL-запроса, думаю, точно безболезненно А так, даже без страшного админского MOVE, может проявиться и простой переезд между секциями от соседней сессии Но ведь для этого и существуют просчеты рисков, а то, так-то и Нибиру может... Хранить, да, весьма нежелательно, а внутри достаточно быстрого блока -- почему бы и нет ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2020, 16:14 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
AlexFF__| Насколько безопасно использовать rowid в рамках одного запроса (передавать из одного подзапроса в другой)? Свои внутренние "TABLE ACCESS BY INDEX ROWID" Oracle обработает корректно даже при move online таблицы. А явное использование, никто не сталкивался с проблемами? вот здесь xtender дает мастер-класс дает по явному использованию: https://www.sql.ru/forum/1321768/index-range-scan-in-parallel В принципе, неплохо работает, но современный оптимизатор сильно умничает, и без принуждения хинтами, обычно, даёт что-то на своё усмотрение. Иногда страсть как хочется к такой механике сортировку по файлам/блокам приделать... Иногда весьма недурственным конкурентом показанной там старой технике является KEEP (DENSE_RANK LAST ORDER BY ...) или что-то аналогично соответствующее случаю. При наличии "идеально подходящего" индекса rowid последним вариантом превосходится. При наличии "умеренно подходящего" - они хорошие конкуренты с выбором по обстоятельствам... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2020, 16:29 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
AlexFF__|, перечислить когда меняется ровид если ети случаи исключены, то зависит от "важности/критичности" приложения ps насколько помню current of основан на использовании ровида, так что и оракля юзала ровид в своих целях ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2020, 16:30 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров Внутри одного SQL-запроса, думаю, точно безболезненно Я тоже так думаю, но за спрос не бьют в нос. Я ни разу не встречал при перемещениях срок различий между TABLE ACCESS BY INDEX ROWID TABLE ACCESS BY USER ROWID Однако, может кто что имеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2020, 16:38 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
Stax так что и оракля юзала ровид в своих целях AFAIK Вроде Oracle Forms если явно не задан key для блока (т.е. в большинстве случаев), так же записи по ROWID идентифицирует. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2020, 16:44 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
AlexFF__| Однако, может кто что имеет. один из древних вариантов удаления дублей Код: plsql 1. 2. 3.
если оракля материализует select min(rowid) from emp group by ename, возможны ли проблемы с дублями? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2020, 16:46 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
Коллеги, всем спасибо, но повторюсь. Мне не нужны примеры использования и разные полезности. Мне нужны баги ) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2020, 16:50 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
Подглядел, что SQL Developer при редактировании данных в гриде обновляет их таким образом: Код: plsql 1.
Можно ли считать это сочетание уникальным и постоянным в рамках сессии? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2020, 21:53 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
Alibek B. Подглядел, что SQL Developer при редактировании данных в гриде обновляет их таким образом: Код: plsql 1.
Можно ли считать это сочетание уникальным и постоянным в рамках сессии? Таблица партицированная? Таблицу часто перемещают/пересоздают? ps в общем случае ответ нет, но в 99% случаев ... ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2020, 10:06 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
Stax Alibek B. Подглядел, что SQL Developer при редактировании данных в гриде обновляет их таким образом: Код: plsql 1.
Можно ли считать это сочетание уникальным и постоянным в рамках сессии? Таблица партицированная? Таблицу часто перемещают/пересоздают? ps в общем случае ответ нет, но в 99% случаев ... ..... stax Тут все зависит от rowdependencies и при включении опции все будет работать корректно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2020, 10:28 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
Swsov Stax пропущено... Таблица партицированная? Таблицу часто перемещают/пересоздают? ps в общем случае ответ нет, но в 99% случаев ... ..... stax Тут все зависит от rowdependencies и при включении опции все будет работать корректно. в 10-ке rowdependencies был? ora_rowscn тем более в сессии не постоянный .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2020, 10:57 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
Stax ora_rowscn тем более в сессии не постоянный stax По моему, ты не понимаешь, что такое ora_rowscn. Он относится не к сессии, а к строке/блоку и содержит system change number последнего изменения строки/блока. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2020, 11:25 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
Alibek B. Подглядел, что SQL Developer при редактировании данных в гриде обновляет их таким образом: Код: plsql 1.
Можно ли считать это сочетание уникальным и постоянным в рамках сессии? безусловно нет. это специфическая форма защиты от потери чужих обновлений при использовании схемы "оптимистической блокировки". ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2020, 11:44 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
Понял, спасибо. Иногда SQL Developer не мог применить изменения в гриде, видимо по этой причине. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2020, 12:18 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
Alibek B. Понял, спасибо. Иногда SQL Developer не мог применить изменения в гриде, видимо по этой причине. в этом вся соль и смысл - сказать клиенту, что такой строки, которую я читал - больше нет . Мне без перечитывания больше нечего обновлять. В данном конкретном случае проблема в том, что "автоматически" хорошо такой заход будет работать только при включенном rowdependency, иначе у клиента будут инвалидироваться все строки одного блока при изменении любой строки в нём. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2020, 12:55 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров А так, даже без страшного админского MOVE, может проявиться и простой переезд между секциями от соседней сессии Запрос со всеми подзапросами видит замороженный и согласованный образ данных. Так что даже если строка переедет, по ROWID всё равно будет найден её первоначальный образ. В рамках запроса изменение записи может произойти только один раз. Так что даже если запись переедет, СУБД к ней всё равно уже не будет обращаться до завершения запроса. Ну а баги они в любом месте могут случиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2020, 21:54 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
Внимательней читай ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2020, 02:15 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
booby в этом вся соль и смысл - сказать клиенту, что такой строки, которую я читал - больше нет . Мне без перечитывания больше нечего обновлять. А из-за чего может возникать такая ситуация? Сейчас столкнулся тем, что не могу обновить данные в гриде в SQL Developer 20. Есть таблица, которая мало используется и уж точно не обновляется. Открываю грид с этом таблицей, кликаю на определенную строку, удаляю данные из ячейки. Нажимаю commit и получаю сообщение об ошибке: Код: plaintext 1. 2. 3. 4.
Причем такое стабильно случается с этой конкретной строкой, другие строки обновляются без проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2021, 13:42 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
При этом если сделать запрос Код: plsql 1.
то я получаю именно ту строку, которую хочу изменить. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2021, 13:52 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
Хотя нет, иногда rowscn изменяется, даже в пределах сессии и транзакции. rowid при этом не меняется, даже при переподключении (новой сессии). И подобные проблемные строки всегда одни и те же. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2021, 14:21 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
Немного поизучал, что и как получается. SQL Developer, при открытии грида, делает примерно такой запрос: Код: plsql 1. 2. 3. 4. 5.
Полученные значения rowid и ora_rowscn сохраняет где-то в гриде, чтобы использовать их при редактировании. Когда я редактирую грид и делаю коммит, то SQL Developer использует эти сохраненные значения и выполняет примерно такой запрос: Код: plsql 1.
Есть некоторые строки, на которых при этом возникает ошибка сохранения данных (Data got committed in another/same session, cannot update row.). Если в рамках этой же сессии в SQL Developer выполнить такой запрос: Код: plsql 1.
то в полученном результате будет ORA_ROWSCN=13870030810. Однако если грид обновить и снова попытаться изменить эту же строку, то в логах снова возникает ошибка и тексте запроса снова фигурирует ORA_ROWSCN=13870008488 И эти значения 13870008488 и 13870030810 так и фигурируют далее; в гриде используется первое, хотя фактическое значение другое. И даже если использовать исходный запрос: Код: plsql 1. 2. 3. 4. 5.
(то есть использовать подзапрос, как это делает SQL Developer), то в полученном результате все равно ORA_ROWSCN=13870030810. Откуда в SQL Developer может браться значение ORA_ROWSCN=13870008488? Это какой-то программный баг/глюк самого SQL Developer? Или в Oracle возможна ситуация, когда в рамках одной сессии, транзакции, при отсутствии DDL или даже DML, у строки может изменяться SCN? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2021, 14:39 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
Alibek B. Или в Oracle возможна ситуация, когда в рамках одной сессии, транзакции, при отсутствии DDL или даже DML, у строки может изменяться SCN? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2021, 15:01 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
Да, поэтому и написал про отсутствие DML/DDL. Или имелось ввиду задать rowdependencies для таблицы bm_tariff_ ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2021, 15:19 |
|
rowid в запросе
|
|||
---|---|---|---|
#18+
Видимо имелось ввиду это ? One thing to note, by default Oracle will not track SCN's at the row level in a table, so you need to enable row level dependency tracking by using the ROWDEPENDENCIES keyword in the CREATE TABLE command. This rowdependencies clause changes the default behavior of Oracle to put an SCN on every row within the tables, and not just one SCN for every physical data block. Правда этот атрибут можно задать только при (пере)создании таблицы. То есть причина в том, что в Oracle 10g SCN для строки может быть неправильным? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2021, 15:30 |
|
|
start [/forum/topic.php?fid=52&msg=40053147&tid=1880372]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
137ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 264ms |
total: | 510ms |
0 / 0 |