Single Row vs. Multirow
Eine mehrzeilige Einfügung verwendet eine Unterabfrage anstelle der Werte-Klausel. Dadurch wird der Zieltabelle für jede von der Select-Anweisung zurückgegebene Zeile eine Zeile hinzugefügt.
Mehrzeilige Anweisungen sind in der Regel schneller als einzeilige Einfügungen. Das liegt daran, dass für jede neue Anweisung, die Sie ausführen, ein gewisser Overhead entsteht. Es ist in der Regel schneller, so viele Zeilen mit so wenigen Ausführungen wie möglich zu verarbeiten.
Aber Einfügungen sind so schnell, dass Sie diesen Unterschied nur bemerken, wenn Sie eine große Anzahl von Zeilen hinzufügen. Für die meisten Anwendungen, bei denen nur wenige Zeilen auf einmal eingegeben werden, ist es also in Ordnung, die Werteklausel zu verwenden.
To create a table, you need to specify its:
If you omit any of these the statement will fail.
Table Clusters
Wie kann ich Zeilen einer Tabelle löschen und worauf muss ich achten?
Was ist ein Deadlock?
Die überwiegende Mehrheit der Deadlocks wird durch schlechtes Anwendungsdesign und Bugs verursacht. Sie entstehen, wenn zwei oder mehr Sessions versuchen, die gleichen Zeilen in unterschiedlicher Reihenfolge zu aktualisieren.
z.B. wenn ein Konto gleichzeitig bearbeitet wird
Kann ich so eine Tabelle erstellen?
create table toys (
toy_name varchar2 );
This choice is incorrect, but you got it wrong.
You must specify a maximum size for varchar2 columns. But this doesn’t have one! So it fails with “ORA-00906: missing left parenthesis”.
Was ist eine Virtuelle private Datenbank (VPD)?
VPD definiert Richtlinien für Ihre Daten. Sie verknüpfen Funktionen mit jeder Richtlinie. Diese können je nach Benutzer und anderen Sitzungseinstellungen eine Where-Klausel zu Ihren Abfragen hinzufügen.
Sobald die Richtlinie eingerichtet ist, fügt Oracle Database die Where-Klausel bei Bedarf automatisch hinzu. Sie brauchen also Ihren Code nicht zu ändern. Das bedeutet weniger Arbeit für Sie!
Wenn Sie VPD verwenden, kann sich die Abfrage, die Sie in Ihrem Code sehen, von der Abfrage unterscheiden, die Ihr Benutzer ausführt. Das kann die Fehlersuche in Ihrer Anwendung erschweren. Außerdem ist VPD eine Funktion, die nur in der Enterprise Edition enthalten ist und Ihnen daher möglicherweise nicht zur Verfügung steht.
True or false:
You can use aggregate functions directly in a where clause like this:
where count(*) > 10
FALSE
You can filter the result of an aggregate function in the having clause. For example, to return the number of rows in the bricks table only if there are more than 10 rows, you can write:
select count(*) from bricks having count(*) > 10
Wie kann ich eine zusätzliche Spalte (is_deleted) in der Tabelle toys für den Soft Delete hinzufügen?
alter table toys
add is_deleted varchar2(1) default ‘N’;
Was ist Pessimistisches Sperren (pesimistic locking)? Und in welchen Anwendungen funktioniert das?
Damit werden die Zeilen gesperrt, wenn der Benutzer sie mit select for update liest. Dies blockiert alle anderen Aktualisierungen oder Versuche, sie zu sperren. So kann niemand sonst die betroffenen Zeilen ändern. Dadurch wird sichergestellt, dass die Benutzer immer mit der aktuellen Sicht auf die Daten arbeiten. Sie können also immer die Aktualisierungen der anderen sehen.
Dies ist einfach zu programmieren. Aber pessimistisches Sperren funktioniert nur in zustandsabhängigen (stateful) Anwendungen. Webanwendungen sind in der Regel zustandslos (stateless).
Lesen und Schreiben der Daten sind also getrennte Transaktionen. Das macht diese Methode in diesen Umgebungen unbrauchbar.
Index Organized Table (IOT)
Was ist In-Database Archiving?
Die datenbankinterne Archivierung übernimmt das Ausblenden von gelöschten Zeilen für Sie. Dazu wird eine ora_archive_state-Spalte zu Ihren Tabellen hinzugefügt. Oracle Database verbirgt dann alle Zeilen, in denen diese Spalte gesetzt ist. Sie können diese Zeilen wieder sichtbar machen, indem Sie in Ihrer Sitzung die Sichtbarkeit der Zeilenarchivierung zwischen “aktiv” und “alle” umschalten.
Dazu aktivieren Sie die Zeilenarchivierung für eine Tabelle wie folgt:
alter table TABLENAME row archival;
Diese Funktion ist neu in Oracle Database 12c.
Was sind Heap Tables?
Dies ist der Standard-Tabellentyp. Sie sind gut für den allgemeinen Datenzugriff geeignet. Die meisten der von Ihnen erstellten Tabellen werden Heaps sein.
Aggregate rows: Was ist der Unterschied zwischen
count(NAME OF COLUMN)
und
count(*)
Welche Tabellentypen werden von einer Oracle Datenbank unterstützt?
The table types Oracle Database supports includes:
You can also place heap tables in a cluster.
Was ist eine Transaktion?
Eine Transaktion ist eine Verarbeitungseinheit, die in einer Datenbank durchgeführt wird. Transaktionen sind Einheiten oder Sequenzen von Vorgängen, die in einer logischen Reihenfolge ausgeführt werden, entweder manuell durch einen Benutzer oder automatisch durch ein Datenbankprogramm.
Eine Transaktion ist die Weitergabe einer oder mehrerer Änderungen an die Datenbank. Wenn Sie z. B. einen Datensatz erstellen, aktualisieren oder aus einer Tabelle löschen, führen Sie eine Transaktion in dieser Tabelle durch. Es ist wichtig, diese Transaktionen zu kontrollieren, um die Datenintegrität zu gewährleisten und um Datenbankfehler zu behandeln.
In der Praxis werden Sie viele SQL-Abfragen in einer Gruppe zusammenfassen und sie alle zusammen als Teil einer Transaktion ausführen.
Was ist optimistisches Sperren (Optimistic Locking)?
Hier werden die Zeilen zwischen dem Lesen und Schreiben nicht gesperrt. Daher kann jemand anderes zwischen diesen Schritten Änderungen vornehmen. Um zu verhindern, dass Ihre Aktualisierung die der anderen überschreibt, prüft die Where-Klausel, ob die Daten dieselben sind wie beim Lesen. Optimistisches Sperren dient dazu, verlorene Aktualisierungen (lost updates) zu verhindern. Sie dient nicht der Verhinderung von Deadlocks.
Es gibt mehrere Möglichkeiten, optimisches Sperren durchzuführen, darunter:
Was ist CLOB?
CLOB stands for Character Large OBject. You can use this to store text up to (2^32 - 1 bytes) * (database block size). The default block size in Oracle Database is 8k (8 * 2^10). Which gives a maximum size of 2^45 - 1 bytes.
Was ist BLOB?
BLOB steht für Binary Large OBject. Sie verwenden es für die Speicherung von Binärdaten, wie Bilder, PDFs, Word-Dokumente usw.
Wofür können External Table verwendet werden?
Sie können externe Tabellen verwenden, um Nicht-Datenbankdateien mit SQL zu lesen. Diese sind ideal, wenn Sie CSV-Dateien (comma separate value) in Ihre Datenbank laden müssen.
Was macht ROLLUP?
Damit können Untermengen gebildet werden. Dabei werden die von rechts nach links gebildet.
Wie kann ich die Spalte einer Tabelle komplett anpassen?
Sie können eine Spalte mit Bezug auf ihren aktuellen Wert ändern. Um zum Beispiel einer Spalte einen Wert hinzuzufügen, schreiben Sie:
set column = column + 1
How to create an external table?
To create an external table, you must first create a directory. This provides the location on the database server your files are in. Note you’re not able to create these on LiveSQL, so the statement fails with an “insufficient privileges” error.
create** **or** **replace** **directory tmp** **as** **‘/tmp’
An external table reads from the file listed in location (file.txt) in the folder the directory points to.
create table toys_ext (
toy_name varchar2(100)
)
organization external (
default directory tmp
location (‘toys.csv’)
);
Partitioned Table
Durch die Partitionierung wird Ihre Tabelle in kleinere Tabellen aufgeteilt. Sie können Heap-Tabellen und IOTs partitionieren. Wie bei einer Standard-Heap-Tabelle fügt Oracle Database Zeilen zu einem partitionierten Heap hinzu, wo immer in der Partition Platz ist. Zeilen in einem partitionierten IOT müssen jedoch an der richtigen Stelle innerhalb der durch den Primärschlüssel definierten Partition eingefügt werden.
Sie müssen eine Partitionierungsstrategie wählen, um dies zu nutzen. Diese legt fest, wie Oracle Database die Zeilen den Partitionen zuordnet. Die verfügbaren Methoden sind Hash, Range und List. Weitere Einzelheiten hierzu finden Sie im Handbuch Partitionierungskonzepte.
Hinweis: Partitionierung ist eine kostenpflichtige Option! Vergewissern Sie sich, dass Sie für die Verwendung dieser Option lizenziert sind, bevor Sie damit beginnen.