Probleme beim Anlegen von Datenbank-Shadows

Themen rund um den praktischen Einsatz von Firebird. Fragen zu SQL, Performance, Datenbankstrukturen, etc.

Moderator: thorben.braun

Antworten
Benutzeravatar
martin.koeditz
Beiträge: 443
Registriert: Sa 31. Mär 2018, 14:35

Hallo zusammen,

ich hatte vor Jahren mit Shadows gearbeitet. Aus aktuellem Anlass wollte ich einen Shadow zu einer bestehenden Datenbank hinzufügen.

Code: Alles auswählen

create shadow 1 '/srv/firebird/master.shd';
Die Datei wird auch erstellt, die Dateigröße ist jedoch 0. Es gibt auch keinen Eintrag in RDB$FILES.

Hier noch die isql-Ausgabe:

Code: Alles auswählen

SQL> show database |grep -i shadow;
Database: /srv/firebird/syndesk_test02.fdb
        Owner: SYSDBA
PAGE_SIZE 8192
Number of DB pages allocated = 29158
Number of DB pages used = 27879
Number of DB pages free = 1279
Sweep interval = 20000
Forced Writes are ON
Transaction - oldest = 462
Transaction - oldest active = 463
Transaction - oldest snapshot = 463
Transaction - Next = 502
ODS = 12.0
Database not encrypted
Default Character set: UTF8
Linger: 120 seconds
Server-Daten:

Code: Alles auswählen

SQL> show version;
ISQL Version: LI-V3.0.3.32900 Firebird 3.0
Server version:
Firebird/Linux/AMD/Intel/x64 (access method), version "LI-V3.0.3.32900 Firebird 3.0"
Firebird/Linux/AMD/Intel/x64 (remote server), version "LI-V3.0.3.32900 Firebird 3.0/tcp (linux-w1cs)/P15"
Firebird/Linux/AMD/Intel/x64 (remote interface), version "LI-V3.0.3.32900 Firebird 3.0/tcp (linux-w1cs)/P15"
on disk structure version 12.0
Da die Shadows ja eine Seite-für-Seite-Kopie des Originals sein sollen, müsste diese doch entsprechend Groß sein, oder?

Gruß
Martin
Martin Köditz
it & synergy GmbH
Gerd
Beiträge: 234
Registriert: Di 1. Okt 2019, 17:13

Hallo Martin.

Das ist zwar ein älterer Beitrag - sollte aber so nicht im Raum stehen bleiben.
Vielleicht wurde es ja auch bereits geklärt und anderswo begründet(?).

Du hast verwendet: ISQL Version: LI-V3.0.3.32900 Firebird 3.0

Ich habe das mit ISQL Version: LI-T4.0.0.1436 Firebird 4.0 Beta 1
Firebird 4.0 Beta 1 unter Linux Mint v19.3 Cinnamon 4.4.8 -lokal- nachvollzogen. So:

Code: Alles auswählen

gerd@gerd-MS-7641:~$ isql -z
ISQL Version: LI-T4.0.0.1436 Firebird 4.0 Beta 1
Use CONNECT or CREATE DATABASE to specify a database
SQL> CONNECT adressen.fdb USER sysdba PASSWORD 'geheimes_passwort';
Database: adressen.fdb, User: SYSDBA
SQL> CREATE SHADOW 1 '/home/gerd/Firebird/Datenbanken/adressen.shd';
SQL>
Ergebnis: 1,7 MB.

Ich war gleichfalls in Erwartung, dass die Dateigrößen (hier: 1,7 MB) identisch sind - sein müssen.
Warum es bei Dir nicht so ist, kann ich nicht sagen.
Gleiche DB-Dateigroesse bei CREATE SHADOW.png
Gleiche DB-Dateigroesse bei CREATE SHADOW.png (27.1 KiB) 9456 mal betrachtet
Auch hier scheint alles korrekt zu sein:

Code: Alles auswählen

gerd@gerd-MS-7641:~$ isql -z
ISQL Version: LI-T4.0.0.1436 Firebird 4.0 Beta 1
Use CONNECT or CREATE DATABASE to specify a database
SQL> CONNECT adressen.fdb USER sysdba PASSWORD 'geheimes_passwort';
Server version:
LI-T4.0.0.1436 Firebird 4.0 Beta 1
Database: adressen.fdb, User: SYSDBA
SQL> show database |grep -i shadow;
Database: adressen.fdb
        Owner: SYSDBA                                                         
 Shadow 1: "/home/gerd/Firebird/Datenbanken/adressen.shd" auto 
PAGE_SIZE 8192
Number of DB pages allocated = 212
Number of DB pages used = 200
Number of DB pages free = 12
Sweep interval = 20000
Forced Writes are ON
Transaction - oldest = 143
Transaction - oldest active = 144
Transaction - oldest snapshot = 144
Transaction - Next = 148
ODS = 13.0
Database not encrypted
Default Character set: NONE
SQL> 
Es gibt auch einen korrekten Eintrag in der Systemtabelle RDB$FILES:

Code: Alles auswählen

gerd@gerd-MS-7641:~$ isql -z
ISQL Version: LI-T4.0.0.1436 Firebird 4.0 Beta 1
Use CONNECT or CREATE DATABASE to specify a database
SQL> CONNECT adressen.fdb USER SYSDBA PASSWORD 'geheimes_passwort';
Database: adressen.fdb, User: SYSDBA
SQL> SET LIST ON;
SQL> SELECT * FROM RDB$FILES;

RDB$FILE_NAME                   /home/gerd/Firebird/Datenbanken/adressen.shd
RDB$FILE_SEQUENCE               0
RDB$FILE_START                  0
RDB$FILE_LENGTH                 0
RDB$FILE_FLAGS                  1
RDB$SHADOW_NUMBER               1
SQL> 
Vielleicht ist es ja vom hierfür verwendeten DB-System (v3.0.3 / 4.0) abhängig. (?)

UPDATE: 01.03.2020, 16:07 Uhr:
Es wird u. a. geschrieben:
"Ein shadow ist eine exakte Seite-für-Seite-Kopie einer Datenbank. Sobald ein Shadow erstellt wurde, spiegeln sich alle Änderungen in der Datenbank sofort im Shadow wider. Wenn die primäre Datenbankdatei aus irgendeinem Grund nicht verfügbar ist, wechselt das DBMS auf den Shadow."


Das mit den sofortigen Änderungen, die sich im Shadow widerspiegeln, wurde von mir geprüft und kann ich bestätigen. OK

Wie bitte könnte ich unter lokalen Bedingungen das checken?
Wenn die primäre Datenbankdatei aus irgendeinem Grund nicht verfügbar ist, wechselt das DBMS auf den Shadow.
Das muss ja auch klappen - möchte ich bei der Gelegenheit gerne mit der v4.0 Beta 1 einmal überprüft haben.

Viele Grüße
Gerd
Linux Mint 21.3 Virginia Cinnamon 6.0.4
Firebird 5.0.0., Embedded, ISQL: LI-V5.0.0.1306
Lazarus 3.0.0 - FPC 3.2.2
Gerd
Beiträge: 234
Registriert: Di 1. Okt 2019, 17:13

Gerd hat geschrieben: So 1. Mär 2020, 13:32
Wie bitte könnte ich unter lokalen Bedingungen das checken?
Wenn die primäre Datenbankdatei aus irgendeinem Grund nicht verfügbar ist, wechselt das DBMS auf den Shadow.
Das muss ja auch klappen - möchte ich bei der Gelegenheit gerne mit der v4.0 Beta 1 einmal überprüft haben.
Hier mein Test-Vorgehen:

Habe mich zur Datenbank zeit.fdb verbunden. Sie hat einen Schatten zeit.shd
Während des Weiterlaufens der zeit.fdb sie auf Dateiebene umbenannt zu _zeit.fdb
Weiter mit der Datenbank (jetzt wohl automatisch mit dem Schatten) problemfrei gearbeitet.
Änderungen wurde sowohl in _zeit.fdb als auch zeit.shd übernommen.

Code: Alles auswählen

gerd@gerd-MS-7641:~$ isql -z
ISQL Version: LI-T4.0.0.1436 Firebird 4.0 Beta 1
Use CONNECT or CREATE DATABASE to specify a database
SQL> CONNECT /home/gerd/Firebird/Datenbanken/zeit.fdb USER sysdba PASSWORD 'geheimes_passwort';
Server version:
LI-T4.0.0.1436 Firebird 4.0 Beta 1
Database: /home/gerd/Firebird/Datenbanken/zeit.fdb, User: SYSDBA
SQL> SHOW TABLES;
TEST

SQL> SHOW TABLE test;
ID                              INTEGER Not Null 
ZEITPUNKT                       TIMESTAMP Nullable 
DUZEN                           BOOLEAN Nullable 
PRUEFZIFFERBERECHNUNGSMETHODE   VARCHAR(2) Nullable 
CONSTRAINT INTEG_2:
  Primary key (ID)
SQL> SHOW TABLE;
TEST

SQL> SHOW TABLE test;
ID                              INTEGER Not Null 
ZEITPUNKT                       TIMESTAMP Nullable 
DUZEN                           BOOLEAN Nullable 
PRUEFZIFFERBERECHNUNGSMETHODE   VARCHAR(2) Nullable 
CONSTRAINT INTEG_2:
  Primary key (ID)
SQL> 
Hier auch noch ein Bild von der Dateiebene:
Schatten wird fortgefuehrt obwohl fdb waehrend ihres Laufens umbenannt wurde.png
Schatten wird fortgefuehrt obwohl fdb waehrend ihres Laufens umbenannt wurde.png (9.23 KiB) 9442 mal betrachtet
Funktioniert also. OK

Viele Grüße
Gerd
Linux Mint 21.3 Virginia Cinnamon 6.0.4
Firebird 5.0.0., Embedded, ISQL: LI-V5.0.0.1306
Lazarus 3.0.0 - FPC 3.2.2
Gerd
Beiträge: 234
Registriert: Di 1. Okt 2019, 17:13

Hallo.

Noch ein, wie ich meine, wissenswertes Fragment zum Thema Schatten-Datenbank und dem Firebird Tool gbak (Option: -REP).

Szenario:
Von der Datenbank zeit.fdb ohne Schatten wird mit dem Backup-Tool gbak eine Sicherung zeit.fbk angelegt.
Nun wird zur Datenbank zeit.fdb ein Schatten zeit.shd erzeugt.
Als nächstes wird die zeit.fdb mittels gbak -REP durch die zeit.fbk ersetzt.

Und tatsächlich wird bei dieser Operation auch daran 'gedacht' die zeit.shd automatisch zu löschen. OK


Viele Grüße
Gerd
Linux Mint 21.3 Virginia Cinnamon 6.0.4
Firebird 5.0.0., Embedded, ISQL: LI-V5.0.0.1306
Lazarus 3.0.0 - FPC 3.2.2
Antworten