powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
25 сообщений из 87, страница 2 из 4
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39313330
vitkud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисПорицается не использование shutdown, а бессмысленное использование backup/restore. Точнее backup нужен всегда, а вот постоянный рестор для уменьшения БД абсолютно бессмысленное занятие.
Но мой вопрос именно про shutdown, backup/restore используется совсем не часто, но используется и эффект есть... А гораздо чаще я использую shutdown для подмены базы в интеграционных тестах, но это не имеет отношения к теме..
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39313334
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkudПлюс нужно придумать механизм для оповещения, в том числе и удалённых приложений (без доступа к ФС).

http://www.sql.ru/forum/187250
http://www.firebirdsql.org/file/documentation/papers_presentations/Power_Firebird_events.pdf
http://firebirdsql.org/file/documentation/reference_manuals/reference_material/Firebird-2_5-LangRef-Update-Russian.pdf
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39313336
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkudЕсли не использовать механизм shutdown, то для удаления базы надо как-то оповестить все приложения о том что эта база готовится к удалению

еще можно попробовать отстрелить соединения с помощью monitoring tables вроде бы, но говорят не всегда хорошо получается

а сервер - супер или классик?
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39313409
vitkud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arioch http://www.sql.ru/forum/187250
http://www.firebirdsql.org/file/documentation/papers_presentations/Power_Firebird_events.pdf
http://firebirdsql.org/file/documentation/reference_manuals/reference_material/Firebird-2_5-LangRef-Update-Russian.pdf
Спасибо, но это вариант не подходит, т.к. приложению еще нужно понять что подсоединяться к БД можно, а как сделать это не соединяясь с ней?
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39313417
vitkud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ariochа сервер - супер или классик?
SS... Но хотелось бы, конечно, универсальное решение...
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39313558
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkudAriochа сервер - супер или классик?
SS... Но хотелось бы, конечно, универсальное решение...

просто на классике можно отстреливать через процессы

попробуй отключать всех через мониторинговые таблицы.
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39313563
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkudприложению еще нужно понять что подсоединяться к БД можно, а как сделать это не соединяясь с ней?

а как оно это поймёт в случае shutdown'a ?

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

Либо уже заводи отдельную цетнрализованную БД "доступность рабочих БД" и пуст ьвсе аппликухи туда поглядывают.
Заодно сможешь сделать веб-страничку "статус наших баз данных"
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39313607
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochvitkudпропущено...

SS... Но хотелось бы, конечно, универсальное решение...

просто на классике можно отстреливать через процессы

попробуй отключать всех через мониторинговые таблицы.

не забудь прибить sweep заодно. очень полезно для здоровья базы.
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39313659
vitkud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ariochа как оно это поймёт в случае shutdown'a ?
в случае shutdown force 0 база сразу переходит в shutdown и обычные пользователи не могут подключиться, но это работало до 2.5.3. А в 2.5.3-2.5.6 все зависают...

А shutdown attach с таймаутом не получатся использовать, потому как он не только "замораживает" попытки открытия баз, но и попытки закрытия, и если в одном потоке несколько соединений, то поток ждёт пока не закончится таймаут у shutdown'а, и только потом закрывает все соединения, а сам shutdown, соответственно, завершается неудачей...

Ariochсделай после события достаточно большую паузу между пересоединениями чтобы все успели отключиться и shutdown успел отработать
получается что нельзя запускать shutdown пока все не отключатся, а как узнать что все отключились?
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39313663
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkudа как узнать что все отключились?

через мониторинговые таблицы от SYSDBA

ну или таки сделай все же центральную БД доступности
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39313664
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkud,

ну и да, служебные пoдключения типа sweep'a тоже учитывай
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39313732
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkudбаза остаётся огромных размеров...
например? 100 гиг, 500 гиг?
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39313942
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkudSS... Но хотелось бы, конечно, универсальное решение...Самым универсальным решением будет написать управляющую службу по типу fbguard, которая по отдельному tcp порту будет "рассказывать" клиентам о состоянии службы сервера и баз данных, а также, при необходимости, производить все необходимые манипуляции по shutdown'у баз, остановки службы сервера и т.д.
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39313960
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkudКак вообще организовать shutdown базы, если есть приложение с пулом соединений?
Почему-то при попытке shutdown базы с ключом -attach приложение зависает на попытке закрытия одного соединения до тех пор пока не закончится timeout у shutdown'а... "-at[tach] : this parameter prevents any new connections to the database from being made with the exception of the SYSDBA and the database owner. The shutdown will fail if there are any sessions connected after the timeout period has expired. It makes no difference if those connected sessions belong to the SYSDBA, the database owner or any other user."
Gfix - Database Housekeeping -> Database Startup and Shutdown

Что мешает рубануть запросом в isql из имени SYSDBA или владельца БД все пользовательские соединения, пока выполняется:
gfix -shut -attach <timeout> <db> ?
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39313964
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*из isql от имени SYSDBA

P.S. И почему на форуме не сделана возможность исправления своих сообщений? Не понимаю.
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39314072
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

1) потому что NNTP
2) потому что тролли этим пользовались, чтобы задним числом удалять компромат
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39314086
vitkud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvнапример? 100 гиг, 500 гиг?
Ха, бывает что в системе всего 32 гига, а нужно еще место для бэкапов..
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39314098
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkudбывает что в системе всего 32 гига, а нужно еще место для бэкапов..

Если бэкапы делаются на тот же диск, где и сама база, то можно сэкономить: вообще их не
делать. Всё равно они совершенно бесполезны.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39314177
vitkud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev "-at[tach] : this parameter prevents any new connections to the database from being made with the exception of the SYSDBA and the database owner. The shutdown will fail if there are any sessions connected after the timeout period has expired. It makes no difference if those connected sessions belong to the SYSDBA, the database owner or any other user."
Gfix - Database Housekeeping -> Database Startup and Shutdown
Да в описании всё хорошо, но на практике, вызывая gfix -shut -attach <timeout> мы блокируем клиентов, которые хотят "добровольно" закрыть все свои соединения (если их больше одного)...

rdb_devЧто мешает рубануть запросом в isql из имени SYSDBA или владельца БД все пользовательские соединения, пока выполняется:
gfix -shut -attach <timeout> <db> ?
Я просто не знал что есть такая возможность... пойду искать как это делается..
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39314261
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkudно на практике, вызывая gfix -shut -attach <timeout> мы блокируем клиентов, которые хотят "добровольно" закрыть все свои соединения (если их больше одного)...Это что-то новое
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39314369
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkudЯ просто не знал что есть такая возможность... пойду искать как это делается..Вот как-то так:
Код: cmd
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.
@echo off
setlocal
if "%~1"=="" goto :drop_attachments
set db_path=%~1
if "%~2"=="" (
  set db_user=sysdba
  set db_password=masterkey
) else (
  set db_user=%~2
  set db_password=%~3
)

start test.cmd
gfix -user "%db_user%" -password "%db_password%" -shut single -attach 3 "%db_path%"
endlocal
goto :eof

:drop_attachments
ping -n 1 -w 1000 -k "127.0.0.2" 1.1.1.1>nul
echo SET SQL DIALECT 3;^
 CONNECT '%db_path%' USER '%db_user%' PASSWORD '%db_password%';^
 DELETE FROM MON$ATTACHMENTS WHERE MON$USER != '%db_user%';^
 COMMIT WORK;^
 QUIT;^
 | isql -quiet -z
echo %sql%
exit
Вызываешь примерно так: db_shutdown.cmd "127.0.0.1/gds_db:my_database" "SYSDBA" "masterke"
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39314371
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот же кривущий форматтер!... Не забудь убрать лишние строки, особенно после строк, заканчивающихся на ^
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39314541
vitkud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvladЭто что-то новое
Вот скрипт на Groovy:
Код: java
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.
53.
54.
55.
@Grapes([
        @Grab(group='org.firebirdsql.jdbc', module='jaybird-jdk18', version='2.2.11'),
        @GrabConfig(systemClassLoader = true),
])

def dbUser = 'someUser'
def dbPassword = 'somePassword'

// Create database
File dbFile = File.createTempFile 'tmp', '.fdb'
dbFile.delete()
dbFile.deleteOnExit()
org.firebirdsql.management.FBManager.newInstance().with {
    start()
    createDatabase dbFile.path, 'SYSDBA', 'masterkey'
    stop()
}
def dbUrl = 'jdbc:firebirdsql:localhost:' + dbFile.path

// Open connection pool
def connPool = [
        java.sql.DriverManager.getConnection(dbUrl, dbUser, dbPassword),
        java.sql.DriverManager.getConnection(dbUrl, dbUser, dbPassword),
        java.sql.DriverManager.getConnection(dbUrl, dbUser, dbPassword),
]

// Gradual closing of connections in another thread
Thread.start {
    connPool.each {
        Thread.sleep(1000)
        println 'close connection begin'
        it.close()
        println 'close connection end'
    }
}

// Shutdown database
println 'shutdown started'
try {
    org.firebirdsql.management.FBMaintenanceManager.newInstance().with {
        host = 'localhost'
        database = dbFile.path
        user = 'SYSDBA'
        password = 'masterkey'
        shutdownDatabase OPERATION_MODE_MULTI, SHUTDOWNEX_ATTACHMENTS, 20
    }
    println 'shutdown finished'
} catch (Exception e) {
    println "shutdown error: $e"
}

// Delete database
while (!dbFile.delete())
    Thread.sleep 100
println 'database removed'


который создаёт пустую базу, открывает 3 соединения к ней, и пытается перевести её в режим shutdown в течении 20 сек. Параллельно, в отдельном потоке, пытается закрыть по одному соединению в секунду. Но при попытке закрыть первое же соединение, поток "замирает" до неудачного завершения shutdown'а, и только после этого закрывает остальные соединения.
Вот такой вывод у меня в консоль:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
shutdown started
close connection begin
 ... спустя 19 секунд ...
close connection end
shutdown error: org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544557. database shutdown unsuccessful
close connection begin
close connection end
close connection begin
close connection end
database removed
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39314559
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkudПараллельно, в отдельном потоке, пытается закрыть по одному соединению в секунду. Но при попытке закрыть первое же соединение, поток "замирает" до неудачного завершения shutdown'а, и только после этого закрывает остальные соединения.Есс-но. Оно же всё в одном потоке.
У тебя в примере нет никаких
vitkudклиентов, которые хотят "добровольно" закрыть все свои соединения (если их больше одного).Ибо кроме gfix'а есть ровно один клиент, который что-то там хочет.
...
Рейтинг: 0 / 0
FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
    #39314563
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил с isql:
запустил 3 штуки isql

запустил gfix -shut -force 0
он висит

в каждом isql делаю exit - никакого ожидания, мгновенный дисконнект с ошибкой database shutdown на попытках коммита своих тр-ций.
Если сделать commit заранее (сразу после старта isql и до запуска gfix) - никаких ошибок на exit нет.

После последнего дисконнекта gfix просыпается и тоже отключается, без ошибки
...
Рейтинг: 0 / 0
25 сообщений из 87, страница 2 из 4
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FB >2.5.2: gfix -shut -force 0 - зависает при двух открытых соединениях
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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