Backup, gbak vs api vs Firebird-Net-Provider (бэкап с удаленного сервера с доставкой результата на локальную машину)

2009-06-26 Thread Vinogradniy Eugeny
У gbak есть полезная возможность - бэкап с удаленного сервера с
доставкой результата на локальную машину.
Очень нужна данная функциональность. Отсутствует в Firebird-Net-
Provider - сохранение бэкапа только в файловой системе сервера. В
родном API клиента - не нашел, похоже тоже отсутствует.
Выходит gbak использует недокументированные возможности API?
Просто вариант с запуском из управляемого кода gbak (а значит придется
утилиты отставлять на локальную машину из дистрибутива сервера для
конкретной OS) в консоле слегка кривоват, может кто что подскажет?

Заранее спасибо за ответ.

Re: Backup, gbak vs api vs Firebird-Net-Provider (бэкап с удаленного сервера с доставкой результата на локальную машину)

2009-06-26 Thread Vinogradniy Eugeny
Спасибо за ответ.

On 26 июн, 11:58, Dmitri Kuzmenko  wrote:
> Hello, Eugeny!
>

> Соответственно имитация gbak через API - это ахинея.
И вправду уверен? Про имитацию не было и слова.


> > Просто вариант с запуском из управляемого кода gbak (а значит придется
> > утилиты отставлять на локальную машину из дистрибутива сервера для
> > конкретной OS) в консоле слегка кривоват, может кто что подскажет?
>
> кривоват чем? И зачем бэкап нужен на "локальной" машине, если голый
> клиент с этим файлом бэкапа ничего сделать не может? Разве что
> кроме как заресторить его на сервер.

Нужен например для того, чтобы автоматический бэкап осуществлялся с
другой машины(может и не одной) в сети и при этом был
кросплатформенным (.Net) и не тащил за собой дистрибутивы серверов для
всевозможных осей. На локальной машине бэкап нужен для более надежного
хранения.

Re: активация всех индексов

2009-07-01 Thread Vinogradniy Eugeny
On 1 июл, 12:38, Alexey Popov  wrote:
> Восстанавливал невосстановимый но очень нужны backup. Отключение индексов
> ключём -i помогло. Теперь вопрос на будущее: как наиболее просто их всех
> активировать обратно. Простой способ не подходит т.к. сначала нужно
> восстаналивать PK, а потом FK

Хранимые процедуры для обслуживания индексов.

/
**/
/Процедуры для обслуживания индексов
БД/
/
**/

SET TERM ^ ;

-- Расчитывает селективность всех индексов
CREATE OR ALTER PROCEDURE INDICES_REBUILD_SELECTIVITY
AS
DECLARE VARIABLE S VARCHAR(200);
BEGIN
  /*Процедура для перерасчета селективности индексов, запускать
переодически (если не было ресторинга БД),
  либо в случае больших изменений в БД.*/
  FOR SELECT RDB$INDEX_NAME FROM RDB$INDICES INTO :S DO
  BEGIN
S = 'SET statistics INDEX ' || S || ';';
EXECUTE STATEMENT :S;
  END
  SUSPEND;
END^

-- Включает/выключает индексы в БД
CREATE OR ALTER PROCEDURE INDICES_SWITCH (
ENABLE_FLAG INTEGER)
AS
DECLARE VARIABLE RELATION_NAME VARCHAR(256);
DECLARE VARIABLE INDEX_INACTIVE INTEGER;
DECLARE VARIABLE ACTION_NAME VARCHAR(50);
DECLARE VARIABLE SQL VARCHAR(256);
BEGIN
  /* Переключает состояние индексов */
  /* source SQL
  SELECT R.RDB$CONSTRAINT_NAME, R.RDB$INDEX_NAME AS REFINDEXNAME, I.RDB
$INDEX_NAME AS REALINDEX, I.RDB$RELATION_NAME, I.RDB$INDEX_INACTIVE
  FROM RDB$INDICES I RIGHT JOIN RDB$RELATION_CONSTRAINTS R ON I.RDB
$INDEX_NAME = R.RDB$INDEX_NAME
  WHERE R.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY' OR R.RDB$CONSTRAINT_TYPE
= 'PRIMARY KEY'
  ORDER BY R.RDB$CONSTRAINT_NAME
  */
  --Все активные переводим в неактивные (default)
  INDEX_INACTIVE = 0;
  ACTION_NAME = 'INACTIVE';
  IF (ENABLE_FLAG > 0) THEN
  BEGIN
--Перевод в активное состояние
INDEX_INACTIVE = 3;
ACTION_NAME = 'ACTIVE';
  END

  FOR SELECT I.RDB$INDEX_NAME
  FROM RDB$INDICES I
  RIGHT JOIN RDB$RELATION_CONSTRAINTS R ON I.RDB$INDEX_NAME = R.RDB
$INDEX_NAME
  WHERE (R.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY' OR R.RDB
$CONSTRAINT_TYPE = 'PRIMARY KEY')
AND (I.RDB$INDEX_INACTIVE = :INDEX_INACTIVE)
  INTO :RELATION_NAME DO
  BEGIN
SQL = 'ALTER INDEX ' || RELATION_NAME || ' ' || ACTION_NAME;
IF (SQL IS NOT NULL) THEN EXECUTE STATEMENT SQL;
  END
END^

-- Переактивация индексов через выключение-включение
CREATE OR ALTER PROCEDURE INDICES_REACTIVATE
AS
BEGIN
  EXECUTE PROCEDURE INDICES_SWITCH(0);
  EXECUTE PROCEDURE INDICES_SWITCH(1);
END^

SET TERM ; ^

С уважением, Евгений Виноградный.

Re: расширение синтаксиса в INTO

2009-07-02 Thread Vinogradniy Eugeny
> Я про ситуацию без FOR
> я про то когда просто select into вернет 0 строк и оставит переменные в
> списке INTO со старыми значениями.
> Сейчас это решается путем инициализации их перед select into
> а я предлагаю уменьшить количество букв. ;)

А что то вроде
  IF (ROW_COUNT = 0) THEN ...
Не подойдет? Там можно и сбросить если уж так надо ...


Re: активация всех индексов

2009-07-08 Thread Vinogradniy Eugeny
День добрый,  Dmitri Kouzmenkoю

> Vinogradniy Eugeny wrote:
> > /    Процедуры для обслуживания индексов
>
> как обычно, чего-нибудь посоветуешь, частное, так
> в результате сделают универсальную процедуру, на практике
> бесполезную или вредную.
>

ХрПр года 3 как есть, несколько раз пригодилась. С другой стороны ХрПр
можно обернуть в EXECUTE BLOCK и выполнить хоть через isql. В общем
то, это конкретный пример того, как можно реализовать.
P.S. В кривых руках любая вещь может превратиться в "грозное
оружие" :)


Re: OFF: нужен программист

2009-11-16 Thread Vinogradniy Eugeny
On 13 ноя, 17:18, Алексей Вишняков 
wrote:
> А сколько денег?
Компенсация ностальгией... :)

Re: Windows7 Ultimate 64 and Firebird 2.5 64

2010-06-25 Thread Vinogradniy Eugeny
Dmitri Kuzmenko wrote:
> Люди и так нихрена не понимают разницу, зачем их еще путать?

Совершенно верно.

Еще что замечу на VS под FB много кто пишет. Только в варианте
Firebird ADO.NET Data Provider + Firebird.
По умолчанию все проекты .net билдятся как AnyCPU, т.е. прекрасно
работают на x64битных ОС в родном x64 битном режиме (реализация
Firebird ADO.NET Data Provider тоже прекрасно работает в x32/x64
битном режиме).
И прекрасно подключаются к x32/x64 битным серверам.

Есть только проблемы при использовании embeded Firebird сервера. Т.к.
его дистрибутив конкретен x32 или x64. Вот в таких вариантах и
приходится либо привязывать .net приложение к конкретному процессору
x86(x64) (так мы и сделали). Либо в дистрибутиве поставлять оба
варианта embeded Firebird и определять выбор в строке подключения на
момент соединения в зависимости от типа исполнения приложения x32/x64,
но в таком случае наверное (это вопрос? к тем кто знает/пробовал)
возможны чудеса с ODS БД.