Autor Téma: Inštalácia FB 3, ak je na počítači FB 2.5  (Přečteno 439 krát)

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2974
  • Karma: 29
    • Verze Delphi: XE7 professional
Inštalácia FB 3, ak je na počítači FB 2.5
« kdy: 16-07-2017, 14:26:18 »
Prečítal som si narýchlo niečo o tom a vychádza mi, že pre mňa laika je asi najlepšie zlikvidovať FB 2.5 a tak nainštalovať FB 3.
Alebo sa mýlim?
Migráciou sa veľmi netrápim. Tých 72 tabuliek si definujem/vytvorím odznova. Okrem nich mám len tri generátory. A potom si prelejem údaje. Už len naštudovať ako na ten dump.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Hrdina
  • ****
  • Příspěvků: 277
  • Karma: 15
    • Verze Delphi: 10.2
Re:Inštalácia FB 3, ak je na počítači FB 2.5
« Odpověď #1 kdy: 16-07-2017, 15:08:21 »
Stávající databáze by mělo jít zálohovat:
gbak -b -user sysdba -password masterkey -v -z databaze.fdb temp.fbk

A pak obnovit už v nové verzi:
gbak -c -user sysdba -password masterkey -rep -z -v -p 4096 temp.fbk databaze.fdb

Mám pocit, že ve FB 3 standardně není vytvořen ten uživatel SYSDBA/masterkey, že se musí po instalaci vytvořit.

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2974
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:Inštalácia FB 3, ak je na počítači FB 2.5
« Odpověď #2 kdy: 17-07-2017, 09:11:08 »
Pokúšam sa o zálohu. Z príkazového riadka mi pri jednej tabuľke zahlási, že nie je inštalovaná kódová stránky WIN 1250.
Pritom záloha z EMS SQL manažéra prebehne v poriadku. Len tam neviem nastaviť parametre.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2974
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:Inštalácia FB 3, ak je na počítači FB 2.5
« Odpověď #3 kdy: 17-07-2017, 10:00:38 »
Tak som to obnovil z tej zálohy. Zahlásilo tam nejaké chyby. Celkovo to vyzerá OK.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2974
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:Inštalácia FB 3, ak je na počítači FB 2.5
« Odpověď #4 kdy: 17-07-2017, 11:13:35 »
Vyrobil som si jeden problém. Zabudol som na jednu databázu. Pokúšam sa vytvoriť backup cez príkazový riadok

d:\gbak.exe -b -user sysdba -password masterkey -v -z -y d:\Chyby.log d:\DATA1.fdb d:\DATA1.fbk

ale dostávam:

can't format message 12:169 -- message file C:\Windows\system32\firebird.msg not foundcan't format message 12:91 -- message file C:\Windows\system32\firebird.msg not found
can't format message 12:256 -- message file C:\Windows\system32\firebird.msg not foundunsupported on-disk structure for file D:\DATA1.FDB; found 11.2, support 12.0
can't format message 12:256 -- message file C:\Windows\system32\firebird.msg not found    IProvider::attachDatabase failed when loading mapping cache
 can't format message 12:169 -- message file C:\Windows\system32\firebird.msg not foundcan't format message 12:83 -- message file C:\Windows\system32\firebird.msg not found

Súbor firebird.msg tam je a je pre FB 2.5. Aj gbak.exe je pre FB 2.5.  Už mám nainštalované FB 3.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline mirus

  • Nováček
  • *
  • Příspěvků: 31
  • Karma: 8
    • Verze Delphi: Delphi 10.2
Re:Inštalácia FB 3, ak je na počítači FB 2.5
« Odpověď #5 kdy: 17-07-2017, 20:27:55 »
Zálohovat se musí s gbak.exe původní verze FB serveru a obnovit se musí gbak.exe z cílové instalace FB serveru.
Přikládám unitu k detekci verze Firebird Databázového souboru. Je nutný fyzický přístup k databázovému souboru. Viz funkce  DetectDatabaseVersion.

Kód: [Vybrat]
unit u_fbheader;
{$IFNDEF FB_TARGET25}
  {$DEFINE FB_TARGET25}
{$ENDIF}
{$IFDEF FB_TARGET30}
  {$IFDEF FB_TARGET25}
    {$UNDEF FB_TARGET25}
  {$ENDIF}
{$ENDIF}
interface

uses SysUtils, Windows, Classes;

type
  TgsServerVersion = (svUnknown, svFirebird_20, svFirebird_21, svFirebird_25, svFirebird_30);
  TgsDatabaseVersion = (dvUnknown, dvODS_11_0, dvODS_11_1, dvODS_11_2, dvODS_12);

const
{$IFDEF FB_TARGET25}
  CONVERT_SERVER_VERSION = svFirebird_25;
  {$MESSAGE 'Target Firebird 2.5'}
{$ENDIF}
{$IFDEF FB_TARGET30}
  CONVERT_SERVER_VERSION = svFirebird_30;
  {$MESSAGE 'Target Firebird 3.0'}
{$ENDIF}

  {$IFDEF WIN32}
  SERVER_DIR_PATH = '..\dll';
  {$ENDIF}
  {$IFDEF WIN64}
  SERVER_DIR_PATH = '..\dll_x64';
  {$ENDIF}

  FBEMB_DLL = 'fbembed.dll';
  FBASE_DLL = 'fbclient.dll';
  IBASE_DLL = 'gds32.dll';

//  FBBACKUP_25_PATH = SERVER_DIR_PATH + '\fbbackup25';

  FIREBIRD_25_PATH = SERVER_DIR_PATH + '\fbbackup25';
  FIREBIRD_30_PATH = SERVER_DIR_PATH + '\fbserver30';

  DefaultFBUserName = 'SYSDBA';

  function DetectDatabaseVersion(aDatabase : string) : TgsDatabaseVersion;
  function DetectServerTypeByDatabase(aDatabase : string) : TgsServerVersion;
  function GetTextOfServerVersion(const AServerVersion : TgsServerVersion): string;
  function CheckServerDir(const AServerVersion : TgsServerVersion): Boolean;
  function GetPathToServer(const AServerVersion : TgsServerVersion) : string;

implementation

uses StrUtils;

type

  SLONG = Int32;
  SSHORT = Int8;

  SCHAR = Int8;

  Tpag =packed record
    pag_type : SCHAR;
    pag_flags : UCHAR;
    pag_checksum : USHORT;
    pag_generation : ULONG;
    pag_scn : ULONG;
    reserved : ULONG;
  end;

  TFBHeader_Page = packed record
    hdr_header : Tpag;
    hdr_page_size : USHORT;
    hdr_ods_version : USHORT;
    hdr_PAGES : SLONG;
    hdr_next_page : ULONG ;
    hdr_oldest_transaction : SLONG;
    hdr_oldest_active : SLONG;
    hdr_next_transaction :SLONG;
    hdr_sequence : USHORT;
    hdr_flags : USHORT;
    hdr_creation_date : array[0..1] of SLONG;
    hdr_attachment_id : SLONG;
    hdr_shadow_count : SLONG ;
    hdr_implementation : SSHORT;
    hdr_ods_minor : USHORT;
    hdr_ods_minor_original : USHORT;
    hdr_end : USHORT;
    hdr_page_buffers : ULONG;
    hdr_bumped_transaction : SLONG;
    hdr_oldest_snapshot : SLONG;
    hdr_backup_pages : SLONG;
    hdr_misc : array[0..2] of SLONG;
    hdr_data : USHORT;
  end;


function GetPathToServerDirectory(const AServerVersion: TgsServerVersion): String;
var
  ServerPath, OldCurDir: String;

  function GetApplicationDirectory: string;
  begin
    Result := ExtractFileDir(ParamStr(0));
  end;

begin
  case AServerVersion of
    svFirebird_25:
      ServerPath := FIREBIRD_25_PATH;

    svFirebird_30:
      ServerPath := FIREBIRD_30_PATH;
  else
    ServerPath := '';
  end;

  if ServerPath <> '' then
  begin
    OldCurDir := GetCurrentDir;
    SetCurrentDir(GetApplicationDirectory);
    ServerPath := IncludeTrailingPathDelimiter(ExpandFileName(ServerPath));
    SetCurrentDir(OldCurDir);
  end;

  Result := ServerPath;
end;

function GetPathToServer(const AServerVersion: TgsServerVersion): string;
  function GetAvailableIBLibraryName(const AServerPath: String): String;
  begin
    if FileExists(AServerPath + FBEMB_DLL) then
      Result := FBEMB_DLL
    else if FileExists(AServerPath + FBASE_DLL) then
      Result := FBASE_DLL
    else if FileExists(AServerPath + 'bin\' + FBASE_DLL) then
      Result := 'bin\' + FBASE_DLL
    else if FileExists(AServerPath + IBASE_DLL) then
      Result := IBASE_DLL;
  end;

begin
  Result := GetPathToServerDirectory(AServerVersion);
  if Result <> '' then
    begin
      Result := Result + GetAvailableIBLibraryName(Result);
      if not FileExists(Result) then Result := '';
    end;
end;

function CheckServerDir(const AServerVersion: TgsServerVersion): Boolean;
var
  ServerPath: String;
begin
  Result := False;
  ServerPath := GetPathToServer(AServerVersion);
  if ServerPath <> '' then
    Result := True;
end;



function ExtractDatabaseFileName(aDatabase: string): string;
begin
  if PosEx(':', aDatabase) > 0 then
    Result := Copy(aDatabase, PosEx(':', aDatabase) + 1)
  else
    Result := aDatabase;
end;

function DetectDatabaseVersion(aDatabase: string): TgsDatabaseVersion;
var
  fbhdr : TFBHeader_Page;
  fs : TFileStream;
  bRead : Integer;
  ODSMajorVersion, ODSMinorVersion : Integer;
  aFileName : string;
begin
  result := dvUnknown;
  if not FileExists(aDatabase) then exit;
  aFileName := ExtractDatabaseFileName(aDatabase);
  fs := TFileStream.Create(aFileName, fmOpenRead);
  try
    FillChar(fbhdr, SizeOf(fbhdr), 0);
    bRead :=  fs.Read(fbhdr, SizeOf(fbhdr));
    if bRead > 0 then
      begin
        ODSMajorVersion := fbhdr.hdr_ods_version - (fbhdr.hdr_ods_version and $8000);
        ODSMinorVersion := Hi(fbhdr.hdr_ods_minor);

        case ODSMajorVersion of
          11 : // Firebird 2.0 +
            case ODSMinorVersion of
              0: Result := dvODS_11_0;   // 2.0
              1: Result := dvODS_11_1;   // 2.1
              2: Result := dvODS_11_2;   // 2.5
            end;

          12 : Result := dvODS_12;
        end;
      end;
  finally
    fs.Free;
  end;
end;

function DetectServerTypeByDatabase(aDatabase: string): TgsServerVersion;
begin
  Result := svUnknown;
  case DetectDatabaseVersion(aDatabase) of
    dvODS_11_0 : Result := svFirebird_20;
    dvODS_11_1 : Result := svFirebird_21;
    dvODS_11_2 : Result := svFirebird_25;
    dvODS_12   : Result := svFirebird_30;
  end;
end;

function GetTextOfServerVersion(const AServerVersion : TgsServerVersion): string;
begin
  Result := 'Unknown';
  case AServerVersion of
    svUnknown: Result := 'Unknown';
    svFirebird_20: Result := 'Firebird 2.0';
    svFirebird_21: Result := 'Firebird 2.1';
    svFirebird_25: Result := 'Firebird 2.5';
    svFirebird_30: Result := 'Firebird 3.0';
  end;
end;


end.

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2974
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:Inštalácia FB 3, ak je na počítači FB 2.5
« Odpověď #6 kdy: 17-07-2017, 20:36:36 »
Citace
Zálohovat se musí s gbak.exe původní verze FB serveru a obnovit se musí gbak.exe z cílové instalace FB serveru.
To písal Vandrovník a vyplýva to aj z podstaty veci. Samozrejme som to dodržal. A po ozname aj poriadne skontroloval a zopakoval.
Verziu DB súboru mám v poriadku.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline mirus

  • Nováček
  • *
  • Příspěvků: 31
  • Karma: 8
    • Verze Delphi: Delphi 10.2
Re:Inštalácia FB 3, ak je na počítači FB 2.5
« Odpověď #7 kdy: 17-07-2017, 21:19:41 »
Vyrobil som si jeden problém. Zabudol som na jednu databázu. Pokúšam sa vytvoriť backup cez príkazový riadok

d:\gbak.exe -b -user sysdba -password masterkey -v -z -y d:\Chyby.log d:\DATA1.fdb d:\DATA1.fbk

ale dostávam:

can't format message 12:256 -- message file C:\Windows\system32\firebird.msg not foundunsupported on-disk structure for file D:\DATA1.FDB; found 11.2, support 12.0

Súbor firebird.msg tam je a je pre FB 2.5. Aj gbak.exe je pre FB 2.5.  Už mám nainštalované FB 3.
Význam chyb:
Soubor D:\DATA1.FDB (11.2) byl vytvořen v FB 2.5, ale d:\gbak.exe je z FB 3.0 (podporuje pouze 12.0)

Offline mirus

  • Nováček
  • *
  • Příspěvků: 31
  • Karma: 8
    • Verze Delphi: Delphi 10.2
Re:Inštalácia FB 3, ak je na počítači FB 2.5
« Odpověď #8 kdy: 17-07-2017, 21:32:11 »
gbak.exe potřebuje také fbclient.dll z původní instalace. Chce to zřejmě dohrát k tomu gbak.exe i soubory z původní instalace FB 2.5
např.
Kód: [Vybrat]
[intl]                        [udf]
fbclient.dll                  firebird.conf                 firebird.msg                  gbak.exe
gfix.exe                      gstat.exe                     ib_util.dll                   icudt30.dll
icuin30.dll                   icuuc30.dll                   IDPLicense.txt                IPLicense.txt
Microsoft.VC80.CRT.manifest   msvcp80.dll                   msvcr80.dll                   nbackup.exe
Readme.txt

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2974
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:Inštalácia FB 3, ak je na počítači FB 2.5
« Odpověď #9 kdy: 18-07-2017, 08:01:04 »
Citace
Soubor D:\DATA1.FDB (11.2) byl vytvořen v FB 2.5, ale d:\gbak.exe je z FB 3.0 (podporuje pouze 12.0)
Ten gbak.exe a fbclient.dll sú určite FB 2.5. Ale o ostatné nie, lebo ak si ich ťahal, tak len zo systémového disku. A tam je už iba FB 3.0.
Vyskúšam to na PC bez FB. Tam budem mať 100 % istotu. Ale to bude najskôr v sobotu. Dám vedieť.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: