Habe zusätzliche Verbindungen zu Derby (schreibgeschützt)

8

Was ich tun möchte: Meine Anwendung hat eine vollständige Verbindung zu einer Derby-DB, und ich möchte parallel (mit einem anderen Tool) in der DB (schreibgeschützt) herumstochern.

Ich bin nicht sicher, wie Derby tatsächlich intern arbeitet, aber ich verstehe, dass ich nur 1 aktive Verbindung zu einer Derby DB haben kann. Da die Datenbank jedoch nur aus Dateien auf meiner Festplatte besteht, kann ich im schreibgeschützten Modus keine weiteren Verbindungen zu ihr öffnen?

Gibt es irgendwelche Werkzeuge, um genau das zu tun?

    
BennyInc 09.09.2010, 16:16
quelle

4 Antworten

7

Es gibt zwei Möglichkeiten, Apache Derby DB auszuführen.

  1. Eingebettet : Sie führen DB innerhalb Ihrer Anwendung aus → nur eine Verbindung möglich
  2. Client : Sie starten DB als Server in einem separaten Prozess → klassische DB mit vielen Verbindungen

Sie können den Typ anhand der Treibergröße erkennen. Wenn der Treiber mehr als 2 MB hat, verwenden Sie die eingebettete Version.

Aktualisieren

Wenn Sie die Derby-Engine (Server oder Embedded) starten, erhält sie exklusiven Zugriff auf Datenbankdateien.

  

Wenn Sie von mehr als einer Java Virtual Machine (JVM) aus auf eine einzelne Datenbank zugreifen müssen, müssen Sie eine Serverlösung installieren. Sie können Anwendungen von mehreren JVMs, die auf diese Datenbank zugreifen müssen, erlauben, eine Verbindung zum Server herzustellen.

Weitere Informationen finden Sie unter Systemverhalten beim Double-Boot .

    
amra 09.09.2010, 16:37
quelle
5

Ich weiß, dass dies eine alte Frage ist, aber ich dachte, ich könnte etwas mehr Details zu einer Lösung hinzufügen, da die Links in der derzeit akzeptierten Antwort gebrochen sind.

Es ist möglich, den Derby Network Server in einer JVM auszuführen, die bereits die eingebettete Datenbank verwendet. Der Code, der die eingebettete Derby-Datenbank verwendet, muss nichts ändern und kann weiterhin die DB verwenden, aber wenn Derby Network Server gestartet wurde, können andere Programme eine Verbindung mit Derby herstellen und auf die Datenbank zugreifen.

Alles, was Sie tun müssen, ist sicherzustellen, dass derbynet.jar im Klassenpfad ist

Und dann können Sie einen der folgenden tun

  • Fügen Sie die folgende Zeile in die Datei derby.properties ein: derby.drda.startNetworkServer=true

  • Geben Sie die Eigenschaft als Systemeigenschaft bei Java-Start an java -Dderby.drda.startNetworkServer=true

  • Sie können die NetworkServerControl-API verwenden, um den Netzwerkserver über einen separaten Thread innerhalb einer Java-Anwendung zu starten: NetworkServerControl server = new NetworkServerControl(); server.start (new PrintWriter(System.out));

Weitere Details hier: Ссылка

Beachten Sie, dass dadurch keine Sicherheit für diese Verbindung aktiviert wird. Daher ist es keine gute Idee, dies auf einem Produktionssystem zu tun. Es ist jedoch möglich, Sicherheit hinzuzufügen, und das ist hier dokumentiert: Ссылка

    
Bert Lamb 09.03.2013 01:14
quelle
1

Zwei andere Ideen:

  1. Fahren Sie in Ihrer Anwendung die Datenbank herunter, und schließen Sie die Verbindung, wenn die Datenbank nicht aktiv verwendet wird. Dann stört Ihre Anwendung nicht ein anderes Tool, das versucht, die Datenbank zu öffnen.
  2. Erstellen Sie eine Kopie Ihrer Datenbank, indem Sie eine Sicherungskopie erstellen (dies können Sie tun, während die Datenbank von Ihrer Anwendung geöffnet wird) und diese Sicherung dann an einem anderen Ort auf Ihrer Festplatte wiederherstellen. Dann können Sie mit einem anderen Tool auf die kopierte Datenbank zugreifen.
Bryan Pendleton 09.09.2010 19:15
quelle
1

Wenn Sie sich den Speicher leisten können und keine aktuellen Daten benötigen, können Sie schreibgeschützte Datenbanken von mehreren JVMs aus aufrufen, indem Sie speicherinterne Kopien erstellen:

%Vor%     
mvanle 27.04.2017 09:22
quelle

Tags und Links