Announcement

Collapse
No announcement yet.

Firebird 2.5 Backu p & Restore

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Firebird 2.5 Backu p & Restore

    Hallo seit der 2.5 Version funktionieren meine automatischen Backps nur mehr eingeschränkt.

    Per Service oder Console mache ich automatisch Backup.
    Aber wenn ich dieses fbk nun restoren will bekomme ich nun immern den Error "Malformed String"

    ich wollte nun wissen, wo ich nun ansetzen kann, damit das nicht mehr passiert
    (Ich habe zwar einen Parameter, womit ich dann trotzdem wieder das restore durchführen kann)
    Aber da ich einen Service habe, der mir automatisch ein Backup und Restore in der nacht macht, wäre es gut, das ich es auch da richtig stellen kann.

    Daher meine Frage, wo ist das eigentlich Problem, warum bei mir dieser Fehler kommt?

    gruß
    hans

  • #2
    Wird das transportable Format verwendet?

    Comment


    • #3
      Originally posted by Markus Kinzler View Post
      Wird das transportable Format verwendet?
      Mußte ich nachschauen, was defaultmässig angehackerlt ist

      Ja wird verwendet

      kann es irgendwas mit UTF-8 und co der Datenbank zu tun haben?

      Da habe ich nicht wirklich irgendwas eingestellt, verwende "nur" Deutsche Texte mit umlauten und co ...

      Comment


      • #4
        Was für locales sind den eingestellt (Verbindung/Datenbank)?

        Comment


        • #5
          Originally posted by Markus Kinzler View Post
          Was für locales sind den eingestellt (Verbindung/Datenbank)?
          Hmmm, muß leider gestehen ich weiss nun nicht wie ich da nachschauen kann ... ist sicher alles auf default gestellt.

          Ich verwende zumindest bei Chracter Set NONE wenn ich vom Client zugreife.

          Vom Backup Service greife ich mit den IBServices drauf zu, da weiss ich leider nicht, was die da eingestellt haben ...

          Werde ich nun mal bei Gelegenheit auf FIBPlus umstellen.

          Aber wie sehe ich was in der Datenbank eingestellt ist?

          Comment


          • #6
            Im Admintool sollte das ersichtlich sein

            Comment


            • #7
              So, habe umgestellt auf FIBPlus und nun funkts ohne probleme

              Comment


              • #8
                Hallo,

                bei einer Malformed String exception beim Restore, handelt es sich in der Regel um nicht Unicode-konforme Daten, die vor allem bei Verwendung von NONE vorkommen können. Da man bei NONE einfach alles reinstopfen kann.

                gbak in Firebird 2.5 bietet hierzu zwei neue Schalter an, um sowohl Metadaten als auch Daten zu reparieren.

                -fix_fss_m[etadata] <charset>
                -fix_fss_d[ata] <charset>


                Bei <charset> muss man den Zeichensatz angeben, den man zum Erstellen verwendet hat.

                Ich selbst hab das noch nie benötigt, kann daher nicht sagen, wie verläßlich das funktioniert.

                Thomas
                Thomas Steinmaurer

                Firebird Foundation Committee Member
                Upscene Productions - Database Tools for Developers
                Mein Blog

                Comment


                • #9
                  Ich habe das selbe Problem mit meiner eigenen C++-Backupanwendung, in der ich den API Service isc_action_svc_restore nutze. Nun versuche ich, bisher erfolglos, die Parameter isc_spb_res_fix_fss_data und isc_spb_res_fix_fss_metadata im Kommando-Puffer des service-start-Aufrufs unterzubringen.

                  Ist das schon jemanden gelungen? Wenn ja, wie?

                  Hoffnungsvoll
                  Bernd

                  Comment


                  • #10
                    C++ ist nicht meine Welt, aber vielleicht zeigst mal einfach her, was du schon hast?
                    Thomas Steinmaurer

                    Firebird Foundation Committee Member
                    Upscene Productions - Database Tools for Developers
                    Mein Blog

                    Comment


                    • #11
                      Anscheinend funktioniert das Hinzufügen der Flags zum Aufruf des Restore-Service nicht auf diese Weise:

                      options += (unsigned long)isc_spb_res_fix_fss_data;
                      options += (unsigned long)isc_spb_res_fix_fss_metadata;

                      Im folgenden der betreffende Ausschnitt aus meinem Sourcecode
                      ----------------------------------------------------------------------------------------
                      ....

                      SPBInit(); // Services Parameter Buffer initialisieren.

                      bool ok = ServicemanagerConnect(); // Verbindung zum Servicemanager herstellen.
                      if ( ok )
                      {
                      char thd_buff[ dkTHDBUFSIZE ];
                      char * thd = thd_buff;

                      InitBuf( thd_buff, dkTHDBUFSIZE ); // Antwortpuffer mit Nullen füllen.

                      *thd++ = isc_action_svc_restore;

                      /* Add the name of the backup file to the buffer. */
                      *thd++ = isc_spb_bkp_file;
                      ADD_SPB_LENGTH ( thd, mRestore.Length() );
                      strcpy ( thd, mRestore.c_str() );
                      thd += mRestore.Length();

                      /* Add the database name to the buffer. */
                      *thd++ = isc_spb_dbname;
                      ADD_SPB_LENGTH ( thd, mDatabase.Length() );
                      strcpy (thd, mDatabase.c_str() );
                      thd += mDatabase.Length();

                      /* Argument to specify restore options */
                      *thd++ = isc_spb_options;
                      unsigned long options = isc_spb_res_replace;

                      // Zeichensatzkorrektur bei Restore des Backups mit Version 2.0 / 2.1.
                      options += (unsigned long)isc_spb_res_fix_fss_data;
                      options += (unsigned long)isc_spb_res_fix_fss_metadata;

                      ADD_SPB_NUMERIC( thd, options );

                      InitBuf( mStatus, dkSTATUSSIZE );

                      unsigned short thdlen = thd - thd_buff;
                      ok = ( 0 == service_start( mStatus, &mSvcMgrHandle, NULL, thdlen, thd_buff ) );
                      if ( ! ok )
                      { // Fehlerbehandlung
                      ...
                      }
                      ----------------------------------------------------------------------------------------

                      Comment


                      • #12
                        Originally posted by Thomas Steinmaurer View Post
                        Hallo,

                        gbak in Firebird 2.5 bietet hierzu zwei neue Schalter an, um sowohl Metadaten als auch Daten zu reparieren.

                        -fix_fss_m[etadata] <charset>
                        -fix_fss_d[ata] <charset>

                        Bei <charset> muss man den Zeichensatz angeben, den man zum Erstellen verwendet hat.

                        Ich selbst hab das noch nie benötigt, kann daher nicht sagen, wie verläßlich das funktioniert.

                        Thomas
                        Moin

                        als Ergänzung zu Thomas: ich hab das schon mehrfach gebraucht und das
                        funktioniert normalerweise ohne Probleme, aber ganz wichtig: Die Parameter -fix_fss* beim Restore nur einmal benutzen. Wenn danach die restorte DB noch mal mit backup/Restore erstellt wird und beim Restore wieder diese Parameter benutzt werden, dann wird die DB immer größer.

                        Gruß

                        Holger
                        www.ibexpert.com

                        Comment


                        • #13
                          @Bernd: Ok, als nicht C++ler tu ich mir da schwer. Wenn sonst nichts hilft, dann könntest mal beim FlameRobin Projekt (http://sourceforge.net/projects/flamerobin/) nachsehen, ob die diese Parameter bereits unterstützen. Für FlameRobin ist nämlich auch der Source vorhanden und ist in C++ unter Verwendung der IBPP Library geschrieben.
                          Thomas Steinmaurer

                          Firebird Foundation Committee Member
                          Upscene Productions - Database Tools for Developers
                          Mein Blog

                          Comment


                          • #14
                            In der Source von Flamerobin 0.9.2 ließ sich leider kein Hinweis auf die Nutzung von isc_spb_res_fix_fss_metadata finden. Die Anwendung enthält im Restore-Dialog auch keine Option dafür.

                            Ich habe das Problem mittlerweile pragmatsich gelöst und rufe gbak.exe mit entsprechenden Parametern auf.

                            Ich bin aber immer noch an einer Lösung über den Service isc_action_svc_restore interessiert!

                            Comment

                            Working...
                            X