Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » InterBase и FireBird: вопросы по работе и их решение

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

Открыть новую тему     Написать ответ в эту тему

noisy

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuriyRR
 
Так научите "желторотиков", примеры в студию

Всего записей: 986 | Зарегистр. 30-05-2002 | Отправлено: 10:03 23-10-2012
exteris

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
AlexCoRu

Цитата:
по-дешевле ничего?

Я больше скажу, не то что подешевле, а вообще альтернативы не нашел.

Всего записей: 382 | Зарегистр. 14-04-2003 | Отправлено: 10:49 23-10-2012
OXDBA

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexCoRu
exteris
Да, с альтернативой очень плохо.
По ценам ничего не скажу, я был бета-тестером, поэтому за софт не платил.
AlexCoRu глянь личку.

Всего записей: 426 | Зарегистр. 19-01-2005 | Отправлено: 11:11 23-10-2012
AlexPetrovich

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexCoRu

Цитата:
по-дешевле ничего?

По дешевле - еженочный бэкап/рестор  с проверкой на ошибки самопальными скриптами.
 
В принципе при нормальном железе вероятность "битья" базы ооочень низкая.
 
Нужен еще больший запас надежности - репликация( через определенный интервал вреени или сразу после изенения данных).

Всего записей: 87 | Зарегистр. 08-05-2003 | Отправлено: 13:01 23-10-2012
AlexCoRu

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я тоже думаю, что БД довольно-таки надёжная. Был один случай развалилась локальная и то электричество прыгнуло, но легко восстановили. А БД переместили на сервер с бесперебойником.
Вообще-то, мне задали вопрос: как проверить целостность бэкапа, а я как-то и не задавался таким вопросом никогда - делается и делается, если создался - значит хороший. И вот тут-то мне и подумалось, а если база битая, то и бэкапиться будет битая. Значит перед бэкапом нужна проврка целостности.

Всего записей: 911 | Зарегистр. 04-09-2003 | Отправлено: 15:11 23-10-2012
OXDBA

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
как проверить целостность бэкапа,

Контрольным рестором.
AlexPetrovich

Цитата:
Нужен еще больший запас надежности - репликация( через определенный интервал вреени или сразу после изенения данных).  

Если БД изначально проектировалась под репликацию, то да.

Всего записей: 426 | Зарегистр. 19-01-2005 | Отправлено: 16:14 23-10-2012
miwa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
exteris

Цитата:
Я больше скажу, не то что подешевле, а вообще альтернативы не нашел.

Ну почему же. Альтернатива подешевле - nagios/zabbix/whatever с пачкой самописных скриптов. Правда, для этого надо очень хорошо понимать внутреннюю кухню ФБ, чтобы знать что проверять и вовремя генерировать правильные алерты. А если таких знаний нет, тогда, как по мне, два варианта - либо база некритичная и мониторить ее особо незачем (хотя для общего развития и полезно), либо база критичная и в случае проблем $200 будут каплей в море - и тогда покупается мониторилка.

Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 18:50 25-11-2012
victor_r

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос по FB 2.5 superserver. Выполняю скрипт который бежит по ряду архивных баз и изменяет структуру базы. Из-за ряда причин (выключился свет на клиенте) в одних базах скрипт выполнился успешно, а в других нет. Как мне продолжить выполняться скрипт в нужном мне месте если я заранее не знаю где модификация прошла успешно, а где нет? Ведь отлова ошибок из скрипта нет и не предвидится.

Код:
 
execute block
returns(
city varchar(20),
a_path varchar(512),
a_serv varchar(512)
)
as
declare a_per int;
declare auser varchar(35);
declare apass varchar(35);
declare SQL_1 varchar(8196);
declare SQL_2 varchar(8196);
declare CQ varchar(1);
declare CR varchar(1);
declare LF varchar(1);
declare A_NAME varchar(50);
declare arch_id int;
declare arch_per varchar(6);
declare arch_server varchar(1024);
declare path_archiv varchar(512);
begin
  CQ = ASCII_CHAR(39);
  CR = ASCII_CHAR(13);
  LF = ASCII_CHAR(10);
  auser='SYSDBA';
  apass='пароль';
  SQL_1='CREATE DOMAIN D_INT AS INTEGER';
  SQL_2='ALTER TABLE E_CONT ADD CONTSTR VARCHAR(12) COLLATE WIN1251_UA';
  --
  for
    SELECT FIRST 1 'D:\DATA\Work1\', 'Work1' FROM MON$DATABASE UNION ALL
    SELECT FIRST 1 'D:\DATA\Work2\', 'Work2' FROM MON$DATABASE
    into :path_archiv, :city
  do begin
    path_archiv=trim(:path_archiv)||'archiv.gdb';
    for
      execute statement ('select path,server from archives where Upper(per)<>'||CQ||'DEF'||CQ)
        ON EXTERNAL :PATH_ARCHIV AS USER :AUSER PASSWORD :APASS
      into :A_PATH, :A_SERV
    do begin
      --
      EXECUTE STATEMENT (:SQL_1) ON EXTERNAL :A_SERV||':'||:A_PATH AS USER :AUSER PASSWORD :APASS WITH AUTONOMOUS TRANSACTION;
      EXECUTE STATEMENT (:SQL_2) ON EXTERNAL :A_SERV||':'||:A_PATH AS USER :AUSER PASSWORD :APASS WITH AUTONOMOUS TRANSACTION;
      --
      SUSPEND;
    end
  end
  --
end
 

Простите за длинный код, простых не пишем, а как укоротить пост не нашел по быстрому.

Всего записей: 17 | Зарегистр. 23-11-2009 | Отправлено: 13:15 12-12-2012 | Исправлено: victor_r, 13:20 12-12-2012
noisy

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
victor_r
 
Проверить есть ли в E_CONT CONTSTR
и если нет, выполнить запрос

Всего записей: 986 | Зарегистр. 30-05-2002 | Отправлено: 14:43 12-12-2012
victor_r

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо noisy я так и сделал, вот мой рабочий вариант (лишнее повырезал):  

Код:
 
  SQL_1='SELECT rdb$field_name'
    ||' FROM rdb$relation_fields'
    ||' WHERE UPPER(rdb$relation_name)='||CQ||'ES_HOUSE'||CQ
    ||' AND UPPER(rdb$field_name)='||CQ||'CITYID'||CQ;
  SQL_2='ALTER TABLE ES_HOUSE ADD CITYID INTEGER';
 
  SQL_3='SELECT rdb$field_name FROM rdb$fields'
    ||' WHERE rdb$system_flag=0 and rdb$field_name='||CQ||'D_INT'||CQ;
  SQL_4='CREATE DOMAIN D_INT AS INTEGER';
...
      --
      S_FIELDS=null;
      EXECUTE STATEMENT (:SQL_1) ON EXTERNAL :A_SERV||':'||:A_PATH AS USER :AUSER PASSWORD :APASS
        WITH AUTONOMOUS TRANSACTION
      INTO :S_FIELDS;
      S_FIELDS=trim(coalesce(S_FIELDS,''));
      if (S_FIELDS='')
      then begin
        EXECUTE STATEMENT (:SQL_2) ON EXTERNAL :A_SERV||':'||:A_PATH AS USER :AUSER PASSWORD :APASS
          WITH AUTONOMOUS TRANSACTION;
      end
 

Аналогично с доменом. Давно пытаюсь такую штуку написать универсальную для любых структур баз. Держать структуру в каком нибудь формате и вызывать для корректировки в случае различий. Но охватить все случаи не хватает времени описать, вот и обходишься по быстрому.

Всего записей: 17 | Зарегистр. 23-11-2009 | Отправлено: 15:32 12-12-2012 | Исправлено: victor_r, 15:32 12-12-2012
salexn1



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
victor_r
Прокатит, если в скриптах обновления нет скрипта для изменения данных.
Если же есть - то так не достаточно.
Нужно где-то хранить номер последнего обновления и стартовать с последнего.

Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 16:45 12-12-2012
miwa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
salexn1
+1 насчет хранения номера последнего изменения. Правда, лично я храню также дату-время накатки каждого обновления - пару раз такая информация сохранила кучу времени.
 
Добавлено:
victor_r
Кстати, рекомендую разделить обновление на два скрипта - в одном только SQL, во втором - подключения и вызовы первого скрипта. Оно так логичнее.

Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 18:17 14-12-2012
salexn1



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
miwa
я для себя выработал правило: один апдейт(скрипт) на один номер.  
я также храню дату и время.

Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 18:34 14-12-2012
YuriyRR



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexPetrovich

Цитата:
[/q]
[q]Ага, счаз.  
 Приведи пример запроса определения начисленной суммы за услугу, если тариф менялся несколько раз за период ?

Привожу запрос тарифа на дату:
SELECT FIRST 1 TARIF FROM TARIFS WHERE DATA_TARIF <= ТРЕБУЕМАЯ ДАТА
ORDER BY DATA_TARIF DESC
заводим только нужный индекс

Всего записей: 516 | Зарегистр. 07-06-2007 | Отправлено: 04:04 15-12-2012
AlexPetrovich

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Привожу запрос тарифа на дату:  
 SELECT FIRST 1 TARIF FROM TARIFS WHERE DATA_TARIF <= ТРЕБУЕМАЯ ДАТА  
 ORDER BY DATA_TARIF DESC  
 заводим только нужный индекс

 
Ага, счаз
Запрос хороший, но надо было "начисленной суммы за услугу",
сам по себе тариф мало когда нужен, главное деньги с клиента
 
Т.е. есть таблица "дата, количество" и таблица "дата, тариф",
надо получить, например, "итого сумма за месяц".
Попробуй это решить через "first 1".
 
А вот если таблица тарифов имеет две даты, то все просто и БЫСТРО:
 
select (usluga.kol_vo * tarifs.tarif)
from usluga
join tarifs on (usluga.data between tarifs.data_begin and tarifs.data_end)
where (usluga.data between '01.01.2012' and '01.02.2012')  

Всего записей: 87 | Зарегистр. 08-05-2003 | Отправлено: 11:05 19-12-2012
YuriyRR



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexPetrovich

Цитата:
Ага, счаз

SELECT  USLUGA * (SELECT FIRST 1 TAR FROM tarif WHERE DT <= U.dt ORDER BY DT DESC)  
FROM USL U
теперь согласен со мной? )))

Цитата:
то все просто и БЫСТРО

я больше экпериментально на массивах данных проверяю эффективность запросов
но что-то мне подсказывает что быстрый подселект уделает джоин по битвин как тузик грелку
хотя в этой задаче вообще без разницы

Всего записей: 516 | Зарегистр. 07-06-2007 | Отправлено: 18:25 19-12-2012 | Исправлено: YuriyRR, 19:07 19-12-2012
salexn1



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuriyRR
[q]SELECT  USLUGA * (SELECT FIRST 1 TAR FROM tarif WHERE DT <= U.dt ORDER BY DT DESC)  
FROM USL U  
 
 
Вы уверены, что этот запрос валидный????

Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 11:49 20-12-2012
YuriyRR



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да.

Всего записей: 516 | Зарегистр. 07-06-2007 | Отправлено: 06:04 23-12-2012
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скажите ошибка BLR offset только при косяках с UDF-кой или ещё возникает?

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 19:02 22-01-2013
exteris

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
delover
В процедурах и вьюхах тоже бывает.

Всего записей: 382 | Зарегистр. 14-04-2003 | Отправлено: 09:41 23-01-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » InterBase и FireBird: вопросы по работе и их решение


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru