Am 24.04.2016 um 10:54 schrieb Peter J. Holzer:
> On 2016-04-22 08:00, Harald Fuchs <
hari....@gmail.com> wrote:
>>
m...@informatik.uni-goettingen.de (Wolfgang May) writes:
>>
>>> Stefan Ram <
r...@zedat.fu-berlin.de> wrote:
>>>> Man sollte ja bestimmte Experimente mit einer Datenbank nicht
>>>> im laufenden Betrieb machen, sondern besser auf einer extra
>>>> Kopie für Testzwecke.
>>>>
>>>> Neulich vertrat jemand die Meinung, man könnte doch solche
>>>> Experimente als Transaktionen machen, da man sie ja dann am
>>>> Schluß mit ROLLBACK wieder rückgängig machen könne.
>>>
>>> Rollback betrifft ueblicherweise ausschliesslich DML-Kommandos.
>>> Das ist sicher nicht das, was man als "Experimente mit einer
>>> Datenbank" versteht.
>>
>> Es gibt auch Datenbanken, die diesbezüglich nicht zwischen DML und DDL
>> unterscheiden, z.B. PostgreSQL.
>
> Ja. Wobei das Verhalten von PostgreSQL standardkonform ist, das
> implizite Commit von Oracle und MySQL hingegen ziemlich sicher nicht.
> Das hilft aber natürlich dem Oracle-User nicht: Wenn er Oracle
> verwendet, muss er mit den Bugs/Features dieses Systems leben.
Oracle hat keine Bugs, sondern nur wunderbare Features. ;-)
> Aber auch in PostgreSQL ist kann man nicht uneingeschränkt Experimente
> in einer Transaktion machen.
>
> Zum einen gibt es sehr wohl die Gefahr, dass man den Rest des Systems
> stört (ein »drop table« z.B. braucht einen exklusiven Lock und blockiert
> damit alle anderen Zugriffe auf diese Tabelle bis zum Ende der
> Transaktion).
Alle DML Kommandos brauchen zumindest Share Locks auf Tabellen und Row
Exclusive Locks auf die angefaßten Daten.
> Zum anderen - und das ist für mich häufig der wichtigere Grund - möchte
> man die Ergebnisse seiner Experimente auch sehen; und zwar nicht in der
> SQL-Session, sondern in einer Applikation, die auf die Datenbank
> zugreift. Die hat aber natürlich auf den temporären Zustand einer
> nicht-abgeschlossenen Transaktion einer anderen Session keinen Zugriff.
>
> Somit komme ich für Experimente nicht um eine Test-Datenbank herum.
Test-DBs sind zum Testen. Zum Spielen und möglicherweise Verbasteln
nimmt man eine Dev-DB.
> Wofür sich Transaktionen hingegen gut eignen, sind manuelle, komplexere
> Updates, also insert/update/delete-Statements mit komplexen Bedingungen
> (oft mit (sub)selects oder CTEs), wo ich mir beim Tippen nicht so 100%
> sicher bin, dass ich das fehlerfrei hinkriege. Da kann ich mir das
> Ergebnis noch ansehen und anschließend ein commit oder rollback machen.
> (auch hier sollte man beachten, dass MVCC seine Grenzen hat und eine
> Transaktion eine andere blockieren kann, wenn es Konflikte gibt.)
Ja, es wäre zum Beispiel denkbar, daß man sich in Konkurrenz mit einer
echten, "legitimen" Production Transaction ein Deadlock bastelt.
Auf Production-DBs spielt man nicht.
Gruß
Peter
--
Climb the mountain not to plant your flag, but to embrace the challenge,
enjoy the air and behold the view. Climb it so you can see the world,
not so the world can see you. -- David McCullough Jr.