powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / странная блокировка проскочила
25 сообщений из 28, страница 1 из 2
странная блокировка проскочила
    #35957943
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создал на тестовой схеме таблицу, вытащил скрипт Toad'ом и запустил на боевой БД
Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
CREATE TABLE <USER>.OSTATOK_KRED
(
  ID_KRED    NUMBER( 12 ),
  IDD_DOC    NUMBER( 12 )                         NOT NULL,
  IDD_VEX    NUMBER( 12 ),
  BALS       VARCHAR2( 5  BYTE)                   NOT NULL,
  DTOT       DATE                               NOT NULL,
  OSTATOK    NUMBER( 17 , 2 ),
  DTKN       DATE,
  GOTG_NAKL  NUMBER( 4 ),
  REGN_NAKL  NUMBER( 8 ),
  STAT1      VARCHAR2( 50  BYTE)                  NOT NULL,
  STAT2      DATE                               NOT NULL
)
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
NOMONITORING;


CREATE INDEX <USER>.INDX_OSTATOK_KRED ON <USER>.OSTATOK_KRED
(DTOT, BALS) LOGGING NOPARALLEL;


CREATE INDEX <USER>.INDX_OSTATOK_KRED_IDD_DOC_FK ON <USER>.OSTATOK_KRED
(IDD_DOC) LOGGING NOPARALLEL;


CREATE INDEX <USER>.INDX_OSTATOK_KRED_IDD_VEX_FK ON <USER>.OSTATOK_KRED
(IDD_VEX) LOGGING NOPARALLEL;


CREATE UNIQUE INDEX <USER>.PK_OSTATOK_KRED ON <USER>.OSTATOK_KRED
(ID_KRED) LOGGING NOPARALLEL;

ALTER TABLE <USER>.OSTATOK_KRED ADD (  CONSTRAINT PK_OSTATOK_KRED  PRIMARY KEY  (ID_KRED)     USING INDEX );

ALTER TABLE <USER>.OSTATOK_KRED ADD (  CONSTRAINT FK_OSTATOK_KRED_IDD_DOC 
 FOREIGN KEY (IDD_DOC) 
 REFERENCES <USER>.<ДРУГАЯТАБЛИЦА> (IDD),
  CONSTRAINT FK_OSTATOK_KRED_IDD_VEX 
 FOREIGN KEY (IDD_VEX) 
 REFERENCES <USER>.<ДРУГАЯТАБЛИЦА> (IDD));

Через минуту захотел добавить 2 поля - не получается.
Вываливается ORA-00054
resource busy and acquire with NOWAIT specified or timeout expired
смотрю v$lock - действительно, несколько сессий уже держат мою новенькую OSTATOK_KRED.

Что я не так сделал?
Вроде на все FK повесил индексы...
На тестовой БД не могу воссоздать эту ситуацию - поклацали с аналитиком по формочке, ничего похожего.
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #35957965
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто-то уже юзает табличку?
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #35957968
_Alex_SMIRNOV_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайдите другой сессией и проадейтите какую-нибудь строчку в табличке и не комитте изменений, а потом в своей попробуйте выполнить тот же DDL оператор на эту таблицу и получите аналогичную ситуацию
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #35958172
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровКто-то уже юзает табличку?нет, никто не юзал
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #35958178
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Alex_SMIRNOV_Зайдите другой сессией и проадейтите какую-нибудь строчку в табличке и не комитте изменений, а потом в своей попробуйте выполнить тот же DDL оператор на эту таблицу и получите аналогичную ситуациюобъясните причину плиз...
В НОВУЮ таблицу точно никто не писал ничего
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #35958272
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отловил ситуацию.
1. делаю
Код: plaintext
INSERT INTO <USER>.<ДРУГАЯТАБЛИЦА> ...
2. После этого появляется Row Share на table OSTATOK_KRED.

И уже
Код: plaintext
alter table OSTATOK_KRED add(...
не работает.
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #35958388
sqlplus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторсмотрю v$lock - действительно, несколько сессий уже держат мою новенькую OSTATOK_KRED.

andreymxВячеслав ЛюбомудровКто-то уже юзает табличку?нет, никто не юзал

Мне кажется ты сам себе противоречишь.
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #35958392
sqlplus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxОтловил ситуацию.
1. делаю
Код: plaintext
INSERT INTO <USER>.<ДРУГАЯТАБЛИЦА> ...
2. После этого появляется Row Share на table OSTATOK_KRED.

И уже
Код: plaintext
alter table OSTATOK_KRED add(...
не работает.

дело не в Row Share, а TM-блокировке, которая предотвращает таблицу от изменений во время DML
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #35958501
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, мы весьма нечасто кочевряжим рабочие таблицы в рабочее время... ищем окна и паузы - поэтому опыта немного.
Т.е. что получается - если я вставил строку в таблицу Т1, то я не могу изменить структуру ни одной таблицы из тех, которые ссылаются по FK на Т1?
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #35958644
Lecter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

Нет, можете, главное столбец по которому идет ФК не менять.
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #35958685
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lecterandreymx,

Нет, можете, главное столбец по которому идет ФК не менять.вот и я думаю - пытаюсь сделать alter table add(column ...
и результат

Кстати, на всяк случай: Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #35958716
sqlplus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxДа, мы весьма нечасто кочевряжим рабочие таблицы в рабочее время... ищем окна и паузы - поэтому опыта немного.
Т.е. что получается - если я вставил строку в таблицу Т1, то я не могу изменить структуру ни одной таблицы из тех, которые ссылаются по FK на Т1?

Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
SQL> create table emp_test
   2   (
   3    emp_id number constraint pk_emp_test primary key,
   4    emp_name varchar2( 30 )
   5   )
   6   ;

Table created.

SQL> create table orders_test
   2   (
   3    order_id number,
   4    emp_id number
   5   )
   6   ;

Table created.

SQL> 
SQL> alter table orders_test add constraint fk_orders_test foreign key(emp_id) references emp_test(emp_id);

Table altered.

SQL> create unique index u_orders_test on orders_test(emp_id);

Index created.

SQL> insert into emp_test values( 1 ,'First emp');

 1  row created.

SQL> select (select object_name from dba_objects where object_id= l.object_id) obj from v$locked_object l;

OBJ
---------------------------------------------------------------------------------------------------------------
ORDERS_TEST
EMP_TEST


В другой сессии
Код: plaintext
1.
2.
3.
4.
SQL> alter table orders_test add (add_filed varchar2( 200 ));
alter table orders_test add (add_filed varchar2( 200 ))
*
ERROR at line  1 :
ORA- 00054 : resource busy and acquire with NOWAIT specified

v$locked_objects показывает именно TM-блокировки.
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #35958727
Lecter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

Ну чего тут думать когда можно посмортреть ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE TABLE t1( i iNT );
CREATE TABLE t2( j INT );

ALTER TABLE t2
    ADD CONSTRAINT pk_t1 PRIMARY KEY( j );
	
ALTER TABLE t1
    ADD CONSTRAINT ref_t1_t2 FOREIGN KEY (i) REFERENCES t2(j);
	 
INSERT INTO t2(j) VALUES( 1 );

ALTER TABLE t1
    ADD j2 INT;

ROLLBACK;

DROP TABLE t1;
DROP TABLE t2;

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Table created.
Table created.
Table altered.
Table altered.
 1  row created.
Table altered.
Rollback complete.
Table dropped.
Table dropped.
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #35958733
Lecter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sqlplus,

Так ведь топик стартер пишет:
автор
объясните причину плиз...
В НОВУЮ таблицу точно никто не писал ничего
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #35958751
sqlplus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lecterandreymx,

Ну чего тут думать когда можно посмортреть ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE TABLE t1( i iNT );
CREATE TABLE t2( j INT );

ALTER TABLE t2
    ADD CONSTRAINT pk_t1 PRIMARY KEY( j );
	
ALTER TABLE t1
    ADD CONSTRAINT ref_t1_t2 FOREIGN KEY (i) REFERENCES t2(j);
	 
INSERT INTO t2(j) VALUES( 1 );

ALTER TABLE t1
    ADD j2 INT;

ROLLBACK;

DROP TABLE t1;
DROP TABLE t2;

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Table created.
Table created.
Table altered.
Table altered.
 1  row created.
Table altered.
Rollback complete.
Table dropped.
Table dropped.


Ты в одной сессии всё делаешь?

Аналогично:

1 сессия:

Код: 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> CREATE TABLE t1( i iNT );

Table created.

SQL> CREATE TABLE t2( j INT );

Table created.

SQL> 
SQL> ALTER TABLE t2
   2       ADD CONSTRAINT pk_t1 PRIMARY KEY( j );

Table altered.

SQL>  
SQL> ALTER TABLE t1
   2       ADD CONSTRAINT ref_t1_t2 FOREIGN KEY (i) REFERENCES t2(j);

Table altered.

SQL>   
SQL> INSERT INTO t2(j) VALUES( 1 );

 1  row created.

2-ая сессия:
Код: plaintext
1.
2.
3.
4.
5.
6.
SQL> ALTER TABLE t1
   2       ADD j2 INT;
ALTER TABLE t1
*
ERROR at line  1 :
ORA- 00054 : resource busy and acquire with NOWAIT specified
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #35958756
sqlplus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lectersqlplus,

Так ведь топик стартер пишет:
автор
объясните причину плиз...
В НОВУЮ таблицу точно никто не писал ничего


Новая это какая, дочерняя? Так и я в неё не пишу. И в твоём примере тоже.
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #35958759
_Alex_SMIRNOV_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle
Table Locks (TM)

Table-level locks are primarily used to do concurrency control with concurrent DDL operations, such as preventing a table from being dropped in the middle of a DML operation. When a DDL or DML statement is on a table, a table lock is acquired. Table locks do not affect concurrency of DML operations. For partitioned tables, table locks can be acquired at both the table and the subpartition level.

A transaction acquires a table lock when a table is modified in the following DML statements: INSERT, UPDATE, DELETE, SELECT with the FOR UPDATE clause, and LOCK TABLE. These DML operations require table locks for two purposes: to reserve DML access to the table on behalf of a transaction and to prevent DDL operations that would conflict with the transaction. Any table lock prevents the acquisition of an exclusive DDL lock on the same table and thereby prevents DDL operations that require such locks. For example, a table cannot be altered or dropped if an uncommitted transaction holds a table lock for it.
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #35958760
Сына
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lecter, а rollback вам зачем?
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #35958784
Lecter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СынаLecter, а rollback вам зачем?
Просочился :)
ЗЫ я в курсе что там он не нужен :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
странная блокировка проскочила
    #39255702
140907
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
С помощью скрипта создаются:
таблица,
индексы (на pk-колонку и на fk-колонки),
триггер (срабатывает на любой dml в эту таблицу, апдейтит одну строку в другой (старой)),
pk-констрейнт,
fk-констрейнты - и вот тут выдается ORA-00054.
Все описанные действия происходят в течение одной секунды.
Никто не выполняет dml-операции в эту таблицу (она же только что создана).
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
Почему ошибка?
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #39255725
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
140907Почему ошибка?Иногда ружьё стреляет.
Воспроизводится?
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #39255762
140907
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic, я вас часто не понимаю. Этот скрипт много раз прошел через суровые руки тестировщиков, но бабахнул уже после этого. И в прошлый раз так было. Куда же копать?
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #39255766
Casper_ora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #39255796
140907
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Casper_ora,
Мне кажется, эту таблицу никто не мог блокировать, т.к. она была создана секунду назад.
Она не партиционирована. Она была пустой на момент ошибки.
Запросы из вашей ссылки сейчас ничего не показывают, конечно.
...
Рейтинг: 0 / 0
странная блокировка проскочила
    #39255803
140907
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или созданию констрейнтов могла помешать блокировка тех таблиц, на которые ссылаются новые констрейнты?
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / странная блокировка проскочила
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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