Страница 1 от 1

!!! Смяна на Firebird сървъра с версия 2.1

Публикувано: 15-05-2008 12:34
от mIRCata
Започнете смяната на Firebird сървърите с версия 2.1.
Започваме да вграждаме в програмата, неща които ще вървят само под 2.1. И е добре когато ги пуснем сървъра да е сменен, за да няма неприятни изненади при конвертиране на базата или при самата и работа.
На сървъра в common съм качил инсталатор за Windows.

И да не забравите да преместите fb_udf_tools.dll в директорията на новата инсталация.

За да се възползвате от пълните възможности на версия 2.1 трябва да се направи backup/restore(b/r за по-кратко) на базата. Но!
Във документацията на Firebird 2.1 казват, че в предишните версии са имали неточност в работата с различните character sets в meta даннните при b/r. Затова преди да пуснете b/r трябва да се изпълни следния скрипт (само един път, при втори вече ще дава грешка) :

Код: Избери всички

set term !;

create or alter procedure rdb$fix_metadata
    (charset varchar(31) character set ascii)
returns
    (table_name char(31) character set unicode_fss,
     field_name char(31) character set unicode_fss,
     name1 char(31) character set unicode_fss,
     name2 char(31) character set unicode_fss)
as
    declare variable system integer;
    declare variable field1 char(31) character set unicode_fss;
    declare variable field2 char(31) character set unicode_fss;
    declare variable has_records integer;
begin
    for select rf.rdb$relation_name, rf.rdb$field_name,
               (select 1 from rdb$relation_fields
                   where rdb$relation_name = rf.rdb$relation_name and
                         rdb$field_name = 'RDB$SYSTEM_FLAG'),
               case rdb$relation_name
                   when 'RDB$CHARACTER_SETS' then 'RDB$CHARACTER_SET_NAME'
                   when 'RDB$COLLATIONS' then 'RDB$COLLATION_NAME'
                   when 'RDB$EXCEPTIONS' then 'RDB$EXCEPTION_NAME'
                   when 'RDB$FIELDS' then 'RDB$FIELD_NAME'
                   when 'RDB$FILTERS' then 'RDB$INPUT_SUB_TYPE'
                   when 'RDB$FUNCTIONS' then 'RDB$FUNCTION_NAME'
                   when 'RDB$GENERATORS' then 'RDB$GENERATOR_NAME'
                   when 'RDB$INDICES' then 'RDB$INDEX_NAME'
                   when 'RDB$PROCEDURES' then 'RDB$PROCEDURE_NAME'
                   when 'RDB$PROCEDURE_PARAMETERS' then 'RDB$PROCEDURE_NAME'
                   when 'RDB$RELATIONS' then 'RDB$RELATION_NAME'
                   when 'RDB$RELATION_FIELDS' then 'RDB$RELATION_NAME'
                   when 'RDB$ROLES' then 'RDB$ROLE_NAME'
                   when 'RDB$TRIGGERS' then 'RDB$TRIGGER_NAME'
                   else NULL
               end,
               case rdb$relation_name
                   when 'RDB$FILTERS' then 'RDB$OUTPUT_SUB_TYPE'
                   when 'RDB$PROCEDURE_PARAMETERS' then 'RDB$PARAMETER_NAME'
                   when 'RDB$RELATION_FIELDS' then 'RDB$FIELD_NAME'
                   else NULL
               end
            from rdb$relation_fields rf
            join rdb$fields f
                on (rf.rdb$field_source = f.rdb$field_name)
            where f.rdb$field_type = 261 and f.rdb$field_sub_type = 1 and
                  f.rdb$field_name <> 'RDB$SPECIFIC_ATTRIBUTES' and
                  rf.rdb$relation_name starting with 'RDB$'
            order by rf.rdb$relation_name
        into :table_name, :field_name, :system, :field1, :field2
    do
    begin
        name1 = null;
        name2 = null;

        if (field1 is null and field2 is null) then
        begin
            has_records = null;

            execute statement
                'select first 1 1 from ' || table_name ||
                '    where ' || field_name || ' is not null' ||
                iif(system = 1, ' and coalesce(rdb$system_flag, 0) in (0, 3)', '')
                into :has_records;

            if (has_records = 1) then
            begin
                suspend;

                execute statement
                    'update ' || table_name || ' set ' || field_name || ' = ' ||
                    '    cast(cast(' || field_name || ' as blob sub_type text character set none) as ' ||
                    '        blob sub_type text character set ' || charset || ') ' ||
                    iif(system = 1, 'where coalesce(rdb$system_flag, 0) in (0, 3)', '');
            end
        end
        else
        begin
            for execute statement
                    'select ' || field1 || ', ' || coalesce(field2, ' null') || ' from ' || table_name ||
                    '    where ' || field_name || ' is not null' ||
                    iif(system = 1, ' and coalesce(rdb$system_flag, 0) in (0, 3)', '')
                into :name1, :name2
            do
            begin
                suspend;

                execute statement
                    'update ' || table_name || ' set ' || field_name || ' = ' ||
                    '    cast(cast(' || field_name || ' as blob sub_type text character set none) as ' ||
                    '        blob sub_type text character set ' || charset || ') ' ||
                    '    where ' || field1 || ' = ''' || name1 || '''' ||
                    iif(name2 is null, '', ' and ' || field2 || ' = ''' || name2 || '''');
            end
        end
    end
end!

commit!

select * from rdb$fix_metadata('WIN1251')!

commit!

drop procedure rdb$fix_metadata!

commit!

Няма да го слагаме в конверт на базата, защото не се знае след като е минал, дали с базата не е правен нов b/r със стара версия на Firebird, което най-вероятно ще е довело до същия проблем, който този скрипт оправя и така ще се загуби целия смисъл от пускането му.
Скрипта сваляте от тук

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 15-05-2008 13:27
от atomik
В common на сървъра не виждам инсталатора

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 15-05-2008 13:31
от mIRCata
atomik написа:В common на сървъра не виждам инсталатора
Там е, там е.

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 15-05-2008 13:43
от stoar08
http://intelrullz.data.bg/Firebird-2.1. ... _Win32.exe


И си правете "defragment" (backup/restore) на базите, особено ако идват от версия на firebird, по-малка от 2. Има неща, които не вървят на ODS 10 (дали се ползват или не е друга тема, но лично на мен не ми се струва оправдан експеримента).
От 2.0.3 към 11.1 не е тооолкова фатално, но пак не е лошо да се направи.

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 15-05-2008 15:46
от kondev
mIRCata написа:
atomik написа:В common на сървъра не виждам инсталатора
Там е, там е.
По-убедително от двойното "там е", щеше да е линк ;)

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 16-05-2008 09:11
от mIRCata
Редакция на първото мнение.

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 16-05-2008 09:41
от stoar08
Това предупреждение и аз го забелязах, но не разбрах точно какво не им е ок на метаданните ... забелязах само разлика в поведението на новия и стария gbak.exe (стария така и не разчете имената на операциите,но до момента Aton не е дал грешки при работа).
Да се подготвям ли психически да пиша нова база ?:)

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 20-05-2008 09:27
от radoslav.radulov
Това за(от) коя версия на Aton се отнася?

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 20-05-2008 09:57
от mIRCata
Предварително няма как да ти кажа, в коя версия ще се вградят неща от 2.1.
Заова пуснах тази тема, за да се подготвят нещата предварително, да няма неприятни изненади при някой ъпдейт, който уж трябва да стане бързо, а да се появят усложнения и непредвидено спиране работата на обекта.

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 20-05-2008 15:56
от radoslav.radulov
Това ще рече ли да дейсваме на този етап и с тези версии на Aton с които разполагаме?

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 25-05-2008 22:18
от stoar08
Скрипта ми даде грешки и на двете бази, на които реших да го пробвам, поради което реших да прочета release notes.
The procedure involves multiple passes through the database, using scripts. It is strongly recommended that
you disconnect and reconnect before each pass.
The database should already have been converted to ODS11.1 by way of a gbak backup and restore.
Before doing anything, make a copy of the database.
Това поне аз го разбирам като "трябва вече да сте преминали през b/r цикъл". Интересното е, че и 11.0 и 11.1 ми гърмят при изпълнение на скрипта, за което не намерих логично обяснение. В същото време имам база, на която се изпълнява неограничен брой пъти без да "гръмне" ...

Би ли трябвало да ме притесняват двете бази, на които скрипа не се изпълни успешно (и 2те бяха с ODS 11.0).

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 26-05-2008 14:33
от mIRCata
В документацията на Firebird там където са скриптовете има един друг, с който се "тества" доколко базата има проблем с тия кодировки. Там казват, че като се пусне със select там където гръмне излиза като последен ред от резултатите. Вземи пусни описаната там процедура и заявка и виж къде ти гръмва. Да не е нещо правено допълнително към базата и там да гърми. По принцип даваха, че може да има проблем, когато има полета с различна кодировка - поне аз така го разбрах.
Иначе за скрипта съм го изпълнявал и преди да направя b/r на бази с ODS 10.1 и не съм имал проблеми.

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 27-05-2008 08:19
от stoar08
Ами ще опитам ... но едната база е служебната ми на Aton, другата на 1 клиент. Опитах и с базата, с която идват последните инсталации (и тя гърми, а предполагам, че кодировките в нея са оправени), но ми е странно защо 1 база "върти" скрипта безкрайно, а друга не може да го изпълни дори веднъж. Естествено всички тестове са при FB 2.1.
Ще пиша пак когато ми остане време да го проверя.

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 27-05-2008 16:43
от mIRCata
Редакция на първото мнение.

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 04-06-2008 10:18
от mIRCata
Излезе, че начина, по който променяхме броя знаци в цените, в същност е било бъг на Firebird и той е оправен във версия 2.1. Във версии на Атон след 1.2.918.742 вече става по нов начин и не би трябвало да има проблеми. И на преминаването към 2.1

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 20-07-2008 10:15
от mIRCata
Сървъра ни вече е на версия 2.1.1

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 21-07-2008 10:49
от rad
mIRCata написа:Сървъра ни вече е на версия 2.1.1
това ще рече, че
-1."вътрешния" Атон на ЪнриълСофт е на 2.1.1
-2.трябва да сменяме по клиенти, за да нямаме проблеми ?

:roll:

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 21-07-2008 11:52
от mIRCata
rad написа:
mIRCata написа:Сървъра ни вече е на версия 2.1.1
това ще рече, че
-1."вътрешния" Атон на ЪнриълСофт е на 2.1.1
-2.трябва да сменяме по клиенти, за да нямаме проблеми ?

:roll:
1 Да
2. За смяната - то една от целите на тази тема, като цяло беше да се предупреди, че наближава преминаването към 2.1 и да може обектите плавно - по време на профилактики и т.н постепенно да минат към тази версия. Така ако в един момент започнем да използваме нещо, което налага задължителна смяна на версията - да не ви се натрупа наведнъж на сума места. А така като има гратисен период спокойно и в удобно време да се смени.

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 28-07-2008 17:42
от detelin
А линк към 2.1.1?
И от коя версия ще е вече задължителен?

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 29-07-2008 08:10
от mIRCata
Че линка горе е за 2.1.1

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 29-07-2008 10:08
от detelin
Ами като си редактираш мненията поне си оправи "верися"-та....
Сигурно така си коригираш и линковете, поне като гледам е добавен 15-тина минути преди поста ми в common директорията :evil:

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 29-07-2008 11:03
от mIRCata
detelin написа:Ами като си редактираш мненията поне си оправи "верися"-та....
Сигурно така си коригираш и линковете, поне като гледам е добавен 15-тина минути преди поста ми в common директорията :evil:
Версията на кое? Firebirda си е 2.1. 2.5 все още е във alpha версия, така, че скоро няма да минаваме на него.
Файла беше сложен повече от час преди твоето мнение.
Пък последна версия на firebird sql server, винаги може да се свали от сайта им, нали?

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 29-07-2008 11:11
от detelin
За корекцията на "верися" просто имах предвид реда на буквите :wink:

Re: !!! Смяна на Firebird сървъра с верися 2.1

Публикувано: 29-07-2008 11:13
от mIRCata
detelin написа:За корекцията на "верися" просто имах предвид реда на буквите :wink:
Дидчоо .....

Re: !!! Смяна на Firebird сървъра с версия 2.1

Публикувано: 05-12-2008 11:02
от mIRCata
Новите промени по базата данни, които подготвяме свързани с реорганизирането на работата с партиди ще работят само на 2.1 и по нови версии на Firebird. Добре е където още не са сменени сървърите и конвертирани базите да го направите.
http://www.unrealsoft.bg/forum/viewtopi ... =45&t=2775 - тук сме обсъждали някои настройки на Firebird за по-добра работа.