Сообщение было изменено IlyaS: 25 Апрель 2016 - 08:49

База на FireBird
#1
Отправлено 25 Апрель 2016 - 08:48
#2
Отправлено 25 Апрель 2016 - 08:57
В качестве внешней базы данных Сервера Dr.Web может использоваться:
◆ СУБД Oracle.
◆ СУБД PostgreSQL.
◆ Microsoft SQL Server/Microsoft SQL Server Express.
#3
Отправлено 25 Апрель 2016 - 09:59
Внешняя база данных.
Предоставляются встроенные драйвера для подключения следующих баз данных:Вы можете использовать любую базу данных, соответствующую вашим запросам.
- Oracle,
- PostgreSQL,
- ODBC-драйвер для подключения других баз данных, таких как Microsoft SQL Server/Microsoft SQL Server Express.
То есть по ODBC возможно подключение к большему списку баз.
#4
Отправлено 25 Апрель 2016 - 10:10
То есть по ODBC возможно подключение к большему списку баз.
Это в теории. Практика с теорией даже в рамках SQL-92 любит расходиться. Попробовать можно, но велика вероятность, что найдутся места, где для firebird потребуются какие-то специфичные костыли.
#5
Отправлено 25 Апрель 2016 - 10:38
Пока только ради попробовать и ставлю на FireBird.
#6
Отправлено 25 Апрель 2016 - 11:07
ODBC-драйвер для подключения других баз данных, таких как Microsoft SQL Server/Microsoft SQL Server Express.
О как !
Так с MS SQL DrWeb через ODBC работает ? А с Oracle через нативный драйвер ?
Так может быть в прослойке ODBC находятся все проблемы связанные с MS SQL Express ?
#7
Отправлено 25 Апрель 2016 - 11:25
УгуТак с MS SQL DrWeb через ODBC работает ? А с Oracle через нативный драйвер ?ODBC-драйвер для подключения других баз данных, таких как Microsoft SQL Server/Microsoft SQL Server Express.

Сообщение было изменено IlyaS: 25 Апрель 2016 - 11:29
#8
Отправлено 25 Апрель 2016 - 11:47
Первая проблема:
---------------------------
Dr.Web Server
---------------------------
Ошибка при инициализации базы данных. Вы хотите продолжить установку?
---------------------------
Yes No
---------------------------
20160425.113644.04 db3 [04328 128c] stp:1 [DB] Thread has got connection "update server status" 20160425.113644.04 db3 [04328 128c] stp:1 [DB] Successful BEGIN transaction, 00.000 wait 20160425.113644.04 ERR [04328 128c] stp:1 [DB] Failed, unable to complete "execute statement" operation because of [ODBC Firebird Driver][Firebird]Dynamic SQL Error; SQL error code = -204; Table unknown; SERVER_STATUS; At line 1, column 22 (ODBC error -1, native error -204, state 42S02), 00.000, UPDATE server_status SET state=?,marker=?,uptime=? WHERE id=? [0, 20160425083644048, 4, "c0d59bd4-c00a-e611-313e-e864fda5cb06"] 20160425.113644.04 ERR [04328 128c] stp:1 [DB] Unsuccessful SQL "update server status" transaction, rolling back 20160425.113644.04 db3 [04328 128c] stp:1 [DB] Successful ROLLBACK transaction, 1 statement, 00.000 wait, 00.000 execute, 00.000 rollback 20160425.113644.04 db3 [04328 128c] stp:1 [DB] Thread has freed connection "update server status" ... 20160425.113644.07 tr1 [04328 09e0] main Unloading library "C:/Program Files/DrWeb Server/bin/database/drwdbdrv_odbc.DLL" 20160425.113644.07 ntc [04328 09e0] main [Server] Process exit code is 0x11/17 (error while initializing database)
и таблиц в базе ни одной нет...
#9
Отправлено 25 Апрель 2016 - 11:54
20160425.113639.99 db3 [04328 16e4] str:1 Loading library "C:/Program Files/DrWeb Server/bin/database/drwdbdrv_odbc.DLL" 20160425.113639.99 tr1 [04328 16e4] str:1 Dr.Web Server ODBC Module Version 10.00.0.201507030 (REL-1000, WinNT 5.1/PPro) 20160425.113639.99 tr1 [04328 16e4] str:1 Unable to find symbol `statistics' in library `C:/Program Files/DrWeb Server/bin/database/drwdbdrv_odbc.DLL' because of The specified procedure could not be found (code=127) and runtime error is No such file or directory (errno=2) 20160425.113639.99 tr0 [04328 16e4] str:1 Database "drwdbdrv_odbc" from "C:/Program Files/DrWeb Server/bin/database/drwdbdrv_odbc.DLL" successfully loaded 20160425.113639.99 inf [04328 16e4] str:1 Dr.Web Server Version 10.00.0.201507030 (REL-1000, WinNT 5.1/PPro) has risen 20160425.113640.00 tr0 [04328 09e0] main [Server] Started well after 00.701 20160425.113642.44 wrn [04328 09e0] main [ODBC] Detected untested "Firebird" driver (reported only once) 20160425.113642.44 tr1 [04328 09e0] main [ODBC] Created Firebird V6.3 instance #002B9828 @003A0998 (gen. #1) using E:\SQL_DATA\DRWEBES.FDB as SYSDBA@FLAWLESS (Firebird V06.03.32483 WI-V Firebird 3.0) 20160425.113642.73 tr1 [04328 09e0] main [ODBC] Created Firebird V6.3 instance #00EA0BD8 @0039B0D0 (gen. #1) using E:\SQL_DATA\DRWEBES.FDB as SYSDBA@FLAWLESS (Firebird V06.03.32483 WI-V Firebird 3.0) 20160425.113642.73 db3 [04328 09e0] main Loading library "C:/Program Files/DrWeb Server/bin/database/drwdb_manager.DLL" 20160425.113642.83 tr1 [04328 09e0] main Dr.Web Server DB Management Library Version 10.00.0.201507030 (REL-1000, WinNT 5.1/PPro) 20160425.113642.83 db3 [04328 09e0] main [DB] Thread has got connection "initialize DB" 20160425.113642.83 db3 [04328 09e0] main [DB] Successful BEGIN transaction, 00.000 wait 20160425.113643.12 ERR [04328 09e0] main [DB] Failed, unable to complete "execute statement" operation because of [ODBC Firebird Driver][Firebird]Dynamic SQL Error; SQL error code = -204; Table unknown; TABLES_LIST; At line 1, column 30 (ODBC error -1, native error -204, state 42S02), 00.296, SELECT name FROM tables_list WHERE name = 'dbstruct' 20160425.113643.12 ERR [04328 09e0] main [DB] Unsuccessful SQL "SELECT name FROM tables_list WHERE name = 'dbstruct'" transaction, rolling back 20160425.113643.12 db3 [04328 09e0] main [DB] Successful ROLLBACK transaction, 1 statement, 00.000 wait, 00.296 execute, 00.000 rollback 20160425.113643.14 tr0 [04328 09e0] main [DbMgr] Initialization with Server uuid "c0d59bd4-c00a-e611-313e-e864fda5cb06", Agent key "C:\Program Files\DrWeb Server\etc\agent.key", SQL script "-", Lua script "-", Ini file "-", password "admin" 20160425.113643.17 db3 [04328 09e0] main [DB] Successful BEGIN transaction, 00.000 wait 20160425.113644.00 ERR [04328 09e0] main [DB] Failed, unable to complete "execute statement" operation because of [ODBC Firebird Driver][Firebird]invalid statement handle (ODBC error -1, native error -901, state HY000), 00.826, CREATE TABLE dbstruct( dbver INTEGER, PRIMARY KEY(dbver) ) 20160425.113644.00 ERR [04328 09e0] main [DB] Unsuccessful SQL "batch" transaction, rolling back 20160425.113644.00 db3 [04328 09e0] main [DB] Successful ROLLBACK transaction, 1 statement, 00.000 wait, 00.826 execute, 00.000 rollback 20160425.113644.00 ERR [04328 09e0] main [DbMgr] Unable to execute SQL transaction because of 20160425.113644.01 ntc [04328 09e0] main [DbMgr] SQL transaction was "''CREATE TABLE dbstruct( dbver INTEGER, PRIMARY KEY(dbver) )''; ''INSERT INTO dbstruct VALUES( 221 )''; ... 20160425.113644.01 db3 [04328 09e0] main [DB] Thread has freed connection "initialize DB" 20160425.113644.01 FTL [04328 09e0] main Database initialization error. See the log file for details.Инициализация какой-то TABLES_LIST хочет видеть.
Сообщение было изменено IlyaS: 25 Апрель 2016 - 11:55
#10
Отправлено 25 Апрель 2016 - 12:12
Так с MS SQL DrWeb через ODBC работает ? А с Oracle через нативный драйвер ?
С орацле тоже может через odbc, но не без проблем.
Инициализация какой-то TABLES_LIST хочет видеть.
Хочет, если есть. Если нет, проблема дальше.
#11
Отправлено 25 Апрель 2016 - 12:20
База пустая осталась, наверное, ROLLBACK все зачистил. Собираюсь попробовать drwcsd initdb.
Не судьба с пустой базой.
А в чем может быть проблема?
Сообщение было изменено IlyaS: 25 Апрель 2016 - 12:22
#12
Отправлено 25 Апрель 2016 - 12:27
Предлагаете погадать?
#13
Отправлено 25 Апрель 2016 - 12:39

Ошибка Precision в TABLES_FIELDS, из-за нее все остальное "валится":
> "C:\Program Files\Firebird\Firebird_3_0\isql.exe" -u SYSDBA -p drweb0 -i "init.sql" -o fbinitdb.log -m -m2 E:\SQL_DATA\DRWEBES.FDB Statement failed, SQLSTATE = HY104 Dynamic SQL Error -SQL error code = -842 -Precision must be from 1 to 18 After line 4 in file init.sql Statement failed, SQLSTATE = 42S02 Dynamic SQL Error -SQL error code = -204 -Table unknown -TABLES_FIELDS -At line 1, column 13 At line 29 in file init.sql ...В isql.exe есть набор параметров:
Может, с выбором диалекта -s поиграть?
По ходу, NUMERIC(19) - это много для FB3

Прикрепленные файлы:
Сообщение было изменено IlyaS: 25 Апрель 2016 - 12:41
#15
Отправлено 25 Апрель 2016 - 12:57
Тут вроде понятно почему:
> >So the mapping NUMERIC(18,0) to BIGINT is an illegal one and must be removed until firebird have a INT64 field.
No. Numerics between 10 and 18 digits are stored as quadwords which are precisely int64.
>How did Borland manage to claim that NUMERIC( 18, 0) was equivalent to 64 bit integer?
>(2^63-1 == 9223372036854775807, 19 digits)
Numeric (18, x) is a subset of int64. They couldn't claim numeric (19, x) because there are 19 digit numbers that don't fit.
А в сравнении еще понятнее написано: DECIMAL (p,s) / NUMERIC (p,s) precision<19,s<p.
Запилите скрипт в инсталл, или пока ручками поправить?
Сообщение было изменено IlyaS: 25 Апрель 2016 - 13:00
#16
Отправлено 25 Апрель 2016 - 12:58
Оно не поддерживает даже 64-разрядные целые в NUMERIC? Ужас.
Вот они и костыли, нужно местами вместо NUMERIC вкорячивать BIGINT, если это вообще поможет. ODBC тут не спасёт, нужна поддержка со стороны приложения.
#17
Отправлено 25 Апрель 2016 - 13:01
Оно не поддерживает даже 64-разрядные целые в NUMERIC? Ужас.
Вот они и костыли, нужно местами вместо NUMERIC вкорячивать BIGINT, если это вообще поможет. ODBC тут не спасёт, нужна поддержка со стороны приложения.
Та зачем? Достаточно поменять везде NUMERIC(>=19) на NUMERIC(18)
Сообщение было изменено IlyaS: 25 Апрель 2016 - 13:01
#18
Отправлено 25 Апрель 2016 - 13:04
И туда влезут числа в 19 десятичных знаков?
#19
Отправлено 25 Апрель 2016 - 13:10
Нет. А у вас будут такие числа?
Всего три поля NUMERIC(19):
tables_fields.maxval NUMERIC(19) -- field's max. value (numeric) or length -- attributes bitmask -- 1: has default (DEFAULT), -- 2: not nullable (NOT NULL). tables_fields.attributes NUMERIC(19) -- field's attrbutes bitmask, see above -- index attributes bitmask -- 1: simple table index, (incompatible with 2) -- 2: table primary key, (incompatible with 1) -- 4: PgSQL clustering index. -- 8: unique index (with 1). tables_indices.attrs NUMERIC(19) -- index type bitmask, see comments above
пока с лихвой NUMERIC(18) хватит. Опасаетесь за maxval? ИМХО, переполнение обязательно будет, но очень не скоро.
#20
Отправлено 25 Апрель 2016 - 13:17
BIGINT как maxval выглядит логичнее, и он поддерживается FB. Но стоит ли переделка усилий...
С NUMERIC(18) уже лучше:
Осталось условное выполнение убрать.
Прикрепленные файлы:
Сообщение было изменено IlyaS: 25 Апрель 2016 - 13:22