powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / ISQL при коннекте стартует ТРИ транзакции (делая в 3-ей SELECT CURRENT_USER, CURRENT_ROLE)
10 сообщений из 10, страница 1 из 1
ISQL при коннекте стартует ТРИ транзакции (делая в 3-ей SELECT CURRENT_USER, CURRENT_ROLE)
    #39042653
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

На пустой базе (alias = 'e30'), без каких-либо db-level триггеров, делаю:

окно-1.

C:\MIX\firebird\QA\fbt-repo\tmp>isql /3333:e30 -n
Database: /3333:e30, User: SYSDBA
SQL> commit;

окно-2.

Запускаем трейс с конфигом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  log_connections = true
  log_context = true
  log_errors = true
  log_filename = /opt/fb30cs/ztrace.log
  log_service_query = true
  log_services = true
  log_statement_finish = true
  log_sweep = true
  log_transactions = true
  log_trigger_finish = true
  max_log_size = 5000000
  max_sql_length = 8192
  time_threshold = 0

окно-3.

C:\MIX\firebird\QA\fbt-repo\tmp>isql /3333:e30
Database: /3333:e30, User: SYSDBA

Теперь гляжу в трейс и вижу, что ISQL в окне-3 стартовал не две транзакции (как всегда было раньше), а три.
В транзакции #8 он запрашивает curr_user & curr_role, но не коммитит её:
Код: 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.
45.
46.
47.
48.
49.
50.
51.
52.
Trace session ID 9 started
2015-09-03T15:06:15.6230 (2172:01201C20) TRACE_INIT
	SESSION_9  
	

2015-09-03T15:06:15.6230 (2172:01201C20) START_TRANSACTION
	C:\MIX\FIREBIRD\FB30\SECURITY3.FDB (ATT_948, SYSDBA:NONE, NONE, <internal>)
		(TRA_3053, CONCURRENCY | WAIT | READ_ONLY)

2015-09-03T15:06:15.6230 (2172:01201C20) ROLLBACK_TRANSACTION
	C:\MIX\FIREBIRD\FB30\SECURITY3.FDB (ATT_948, SYSDBA:NONE, NONE, <internal>)
		(TRA_3053, CONCURRENCY | WAIT | READ_ONLY)
      0 ms, 1 write(s), 1 fetch(es), 1 mark(s)

2015-09-03T15:06:15.6390 (2172:01206300) TRACE_INIT
	SESSION_9  
	

2015-09-03T15:06:15.6390 (2172:01206300) ATTACH_DATABASE
	e30 (ATT_7, SYSDBA:NONE, NONE, TCPv4:192.168.43.154)
	C:\MIX\Firebird\fb30\isql.exe:5472

2015-09-03T15:06:15.6550 (2172:01206300) START_TRANSACTION
	e30 (ATT_7, SYSDBA:NONE, NONE, TCPv4:192.168.43.154)
	C:\MIX\Firebird\fb30\isql.exe:5472
		(TRA_6, CONCURRENCY | WAIT | READ_WRITE)

2015-09-03T15:06:15.6550 (2172:01206300) START_TRANSACTION
	e30 (ATT_7, SYSDBA:NONE, NONE, TCPv4:192.168.43.154)
	C:\MIX\Firebird\fb30\isql.exe:5472
		(TRA_7, READ_COMMITTED | NO_REC_VERSION | WAIT | READ_WRITE)

2015-09-03T15:06:15.6550 (2172:01206300)  START_TRANSACTION 
	e30 (ATT_7, SYSDBA:NONE, NONE, TCPv4:192.168.43.154)
	C:\MIX\Firebird\fb30\isql.exe:5472
		( TRA_8 , READ_COMMITTED | NO_REC_VERSION | WAIT | READ_WRITE)

2015-09-03T15:06:15.6550 (2172:01206300) EXECUTE_STATEMENT_FINISH
	e30 (ATT_7, SYSDBA:NONE, NONE, TCPv4:192.168.43.154)
	C:\MIX\Firebird\fb30\isql.exe:5472
		( TRA_8 , READ_COMMITTED | NO_REC_VERSION | WAIT | READ_WRITE)

Statement 37:
-------------------------------------------------------------------------------
 SELECT CURRENT_USER, CURRENT_ROLE FROM RDB$DATABASE 
0 records fetched
      0 ms, 5 fetch(es)

2015-09-03T15:06:25.6230 (2172:01201C20) DETACH_DATABASE
	C:\MIX\FIREBIRD\FB30\SECURITY3.FDB (ATT_948, SYSDBA:NONE, NONE, <internal>)

2015-09-03T15:06:25.6230 (2172:01201C20) TRACE_FINI
	SESSION_9
Не веря логу трейса и подозревая, что тут часть текста буфере IO застряла, лезу в окно-1 и ввожу там:

Код: plaintext
1.
2.
3.
4.
5.
SQL> set list on; 
SQL> select mon$attachment_id,mon$transaction_id,mon$state 
CON> from mon$transactions 
CON> where mon$attachment_id<>current_connection 
CON> order by 1,2;

И получаю ответ: TRA_8 мало того, что есть, так еще и со state = 1:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
MON$ATTACHMENT_ID               7
MON$TRANSACTION_ID              6
MON$STATE                       0

MON$ATTACHMENT_ID               7
MON$TRANSACTION_ID              7
MON$STATE                       0

MON$ATTACHMENT_ID               7
 MON$TRANSACTION_ID              8 
MON$STATE                        1 

А завершится эта TRA_8 только при вводе очередного стейтмента в окне-3. Причём, даже если там 'QUIT' ввести, трейс всё равно покажет, что эта транзакция завершилась COMMIT'ом (в отличие от двух остальных).

Зачем нужна третья транзакция при старте ISQL, да еще в каком-то "висячем" состоянии ? Это всё так и было задумано ?

PS. WI-V3.0.0.32008
...
Рейтинг: 0 / 0
ISQL при коннекте стартует ТРИ транзакции (делая в 3-ей SELECT CURRENT_USER, CURRENT_ROLE)
    #39042707
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидЗачем нужна третья транзакция при старте ISQL, да еще в каком-то "висячем"
состоянии ?
Судя по запросу, это твой ON LOGON триггер.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ISQL при коннекте стартует ТРИ транзакции (делая в 3-ей SELECT CURRENT_USER, CURRENT_ROLE)
    #39042710
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидНа пустой базе (alias = 'e30'), без каких-либо db-level триггеров
Извини, не заметил.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ISQL при коннекте стартует ТРИ транзакции (делая в 3-ей SELECT CURRENT_USER, CURRENT_ROLE)
    #39042745
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я что-то смутное сомнение имею.
Не могли вот эти штуки так повлиять:

http://sourceforge.net/p/firebird/code/62017
http://sourceforge.net/p/firebird/code/62018

- ?
...
Рейтинг: 0 / 0
ISQL при коннекте стартует ТРИ транзакции (делая в 3-ей SELECT CURRENT_USER, CURRENT_ROLE)
    #39042749
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

не угадал. Скорее всего из-за того что теперь ISQL выдаёт настоящего пользователя и роль, а не тех что указали при входе.

см. http://sourceforge.net/p/firebird/code/62031
...
Рейтинг: 0 / 0
ISQL при коннекте стартует ТРИ транзакции (делая в 3-ей SELECT CURRENT_USER, CURRENT_ROLE)
    #39042758
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что я "не угадал" ? ты привёл бубликат коммита http://sourceforge.net/p/firebird/code/62018, у него другой номер ввиду epic-fail'a на sf, который был в июле.

Но таки вопрос остаётся в силе: почему эта тр-ция, что выводит "SELECT CURRENT_USER, CURRENT_ROLE FROM RDB$DATABASE", остаётся активной ?
...
Рейтинг: 0 / 0
ISQL при коннекте стартует ТРИ транзакции (делая в 3-ей SELECT CURRENT_USER, CURRENT_ROLE)
    #39042767
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

извини. Ты привёл ссылки на коммиты, я вошёл по ним и увидел код который к этому никак не мог привести.

Значит так внедрено неаккуратненько. Тут вот в чём вопрос, а может ли это навредить?

Если да, то почему бы вывод пользователя и роли не сделать в транзакции которая и так стартует по-умолчанию для выполнения DML. Или же делать коммит той транзакции сразу же после отображения user и role
...
Рейтинг: 0 / 0
ISQL при коннекте стартует ТРИ транзакции (делая в 3-ей SELECT CURRENT_USER, CURRENT_ROLE)
    #39042772
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисможет ли это навредить? Не более, чем две остальные тр-ции, которые автоматом стартует ISQL. Эта "третья" тр-ция захлопнется сразу же при первом коммите. Далее ISQL будет стартовать только по две тр-ции.
Мну просто показалось странным, что трейс на старте стал какой-то более "пухлый". Пригляделся - и поймал её за хвост :-)

Симонов Дениспочему бы вывод пользователя и роли не сделать в транзакции которая и так стартует по-умолчанию для выполнения DML
+1
...
Рейтинг: 0 / 0
ISQL при коннекте стартует ТРИ транзакции (делая в 3-ей SELECT CURRENT_USER, CURRENT_ROLE)
    #39042789
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично я бы вообще изменил логику isql, оставив только одну транзакцию и приведя работу
autoddl к ораклятому варианту.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ISQL при коннекте стартует ТРИ транзакции (делая в 3-ей SELECT CURRENT_USER, CURRENT_ROLE)
    #39042842
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

пиши Алексу, это его работа :-)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / ISQL при коннекте стартует ТРИ транзакции (делая в 3-ей SELECT CURRENT_USER, CURRENT_ROLE)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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