Was ist eine Sequenz in Orakel
- Oracle Sequence ist ein vom Benutzer erstelltes Objekt, das von mehreren Benutzern gemeinsam genutzt werden kann, um eindeutige Ganzzahlen zu generieren
- Die allgemeinste Verwendung von Sequenzen wäre das Generieren einer Primärschlüsselspalte in der Tabelle.
- Die Sequenz wird von einer internen Oracle-Routine generiert, sodass wir uns keine Gedanken über machen müssen. Es wird tim3 speichern, da der Entwickler die Sequenzerstellungsroutine nicht generieren muss
- Ein fortlaufender Nummerngenerator, der so konfiguriert werden kann, dass er erhöht oder verringert wird
- Es existiert nur im Datenwörterbuch, kann begrenzt oder wiederholbar sein (Zyklus).
- Wir brauchen die Berechtigung zum Erstellen einer Sequenz, um die Sequenz zu erstellen
Das Erstellen einer Sequenz erfolgt mit dem
SEQUENZ ERSTELLEN
[STARTEN MIT] [ERHÖHEN UM] [NO/MINVALUE] [NO/MAXVALUE] [NEIN/ZYKLUS] [NEIN/CACHE];
|
Beschreibung der einzelnen Werte
BEGINN MIT | Er definiert den Anfangswert der Sequenz (Standard 1 ), |
ERHÖHEN UM | Definiert die Erhöhungs- oder Verringerungsstufe (Standard 1 ), |
MINWERT | Er definiert den niedrigsten Wert für eine abnehmende Sequenz |
MAXWERT | Er definiert den höchsten Wert für eine aufsteigende Sequenz |
ZYKLUS | Es definiert, ob sich die Sequenz wiederholt |
CACHE | Es definiert den Block von Sequenznummern, die im Speicher gehalten werden (Standard 20 ), NOCACHE erzwingt, dass das Data Dictionary für jede von der Sequenz generierte Zahl aktualisiert wird |
Beispiele
Sequenz erstellen test_tech start with 1 increment by 1 maxvalue 10000 cycle cache 20;
Sequenz test_tech1 erstellen
Beginne mit 1 |
Wie man Sequenzen verwendet
Um die Sequenz zu verwenden, verwenden Sie einfach die Pseudospalte CURRVAL und NEXTVAL
Pseudospalte NEXTVAL
Es wird verwendet, um die fortlaufende Sequenznummer der angegebenen Sequenz zu generieren
CURRVAL-Pseudospalte
Es enthält die Sequenz, die der Benutzer gerade generiert hat
SELECT TEST_TECH.NEXTVAL FROM DUAL;
WÄHLEN SIE TEST_TECH.CURRVAL AUS DUAL; WÄHLEN SIE TEST_TECH.NEXTVAL VON DUAL; |
So ändern Sie die Sequenzen
Wir können die Sequenzen mit Alter Sequence ändern.
SQL> ALTER SEQUENCE tech_test1 INCREMENT BY 50; |
Die Änderungen wirken sich nur auf die zukünftige Verwendung der Sequenz aus.
Sie müssen der Besitzer sein oder über Änderungsrechte für diese Sequenz verfügen
Wir können Start mit Option nicht ändern. Dafür muss diese Sequenz gelöscht und neu erstellt werden
Sequenzänderungen werden ebenfalls validiert
So löschen Sie die Sequenz
Das Löschen einer Ansicht erfolgt mit dem DROP-Sequenzbefehl.
Drop-Sequenz test_tech ; |
Wörterbuchansichten zum Anzeigen der Sequenzdaten
Sequenzdetails können aus dem Wörterbuch abgefragt werden, indem entweder USER_SEQUENCES, ALL_ SEQUENCES oder DBA_ SEQUENCES abgefragt werden. Es gibt drei Kategorien von Aufrufen
USER_% | Diese Ansicht enthält nur Informationen zu den Objekten, die dem Benutzer gehören
Beispiel USER_TABLES,USER_TAB_COLS |
ALLE-% | Diese Ansicht enthält Informationen zu den Objekten, auf die der Benutzer in der Datenbank zugreifen kann.
Beispiel ALL_TABLES,ALL_TAB_COLS |
DBA_% | Diese Ansicht enthält Informationen zu allen Objekten im System und dies sind eingeschränkte Ansichten, auf die Benutzer mit DBA-Rolle zugreifen können
Beispiel DBA_TABLES,DBA_TAB_COLS |
DBA_% Aufrufe zu Sequenzinformationen | ALL_% Ansichten über Sequenzinformationen | USER_% Aufrufe von Sequenzinformationen | |
Ansicht über Sequenzen Informationen | dba_sequences | alle_ Sequenzen | Benutzersequenzen |
Um alle Sequenzen aufzulisten, die dem aktuellen Benutzer gehören
select_ sequence_name from user_sequences;
Um alle Sequenzen in einer Datenbank aufzulisten:
Wählen Sie Eigentümer, Sequenzname aus dba_sequences;
Um Sequenzen aufzulisten, auf die der aktuelle Benutzer zugreifen kann:
select sequence_name aus all_sequences
Wie werden alle Informationen über die Sequenz ermittelt?
select sequence_name,min_value,max_value,increment_by,last_number
FROM DBA_SEQUENCES
wobei OWNER =„
und sequence_NAME =„
Wie man den aktuellen Wert einer Orakelsequenz abruft, ohne ihn zu inkrementieren
Die Spalte last_number zeigt die nächste verfügbare Sequenznummer an, wenn kein Cache angegeben ist
WÄHLEN Sie letzte_Nummer
VON user_sequences
WHERE Sequenzname =„ |
So extrahieren Sie die Sequenzdefinition (DDL-Anweisungen) aus einer Oracle-Datenbank, ohne einen Stapel von Wörterbuchansichten durchlaufen zu müssen
Syntax:
SQL> set long 1000 SQL> set pagesize 0select DBMS_METADATA.GET_DDL(‘SEQUENCE’,’
|
So legen Sie den LASTVALUE-Wert in einer Oracle-Sequenz fest
ALTER SEQUENCE tech_seq_name INCREMENT BY 250;
SELECT tech_seq_name.nextval FROM dual; ALTER SEQUENCE tech_seq_name INCREMENT BY 1; |
So setzen Sie eine Sequenz in Oracle zurück
Es gibt viele Möglichkeiten.
a) Wir können die Sequenz löschen und neu erstellen. Aber dadurch werden alle abhängigen Objekte (Trigger/gespeicherte Prozeduren usw.) ungültig
b) Wir können durch diese einfachen Schritte
zurücksetzenSchritt 1:Finden Sie den neuesten Wert der Sequenz
Wählen Sie tech_seq_name.nextval FROM dual; Schritt 2:Ändern Sie die Sequenz mit Inkrement des negativen Werts des neuesten Werts
ALTER SEQUENCE tech_seq_name INCREMENT BY - Schritt 3 Führen Sie nextval aus, um es auf Null zurückzusetzen SELECT tech_seq_name.nextval FROM dual; Schritt 4:Schrittweite zurück auf 1 ändern ALTER SEQUENCE tech_seq_name INCREMENT BY 1; Beispiel SELECT tech_seq_name.nextval FROM dual; ————————————— 250 ALTER SEQUENCE tech_seq_name INCREMENT BY -250; SELECT tech_seq_name.nextval FROM dual; ALTER SEQUENCE tech_seq_name INCREMENT BY 1; |
Weitere Informationen finden Sie unter diesem Link
So setzen Sie die Sequenz zurück
Auswirkungen des Zwischenspeicherns der Sequenzen
Sequenzen werden zwischengespeichert, um die Abrufleistung zu verbessern. In RAC speichert jede Instanz die Cache-Werte
Wir können aus folgenden Gründen Lücken in der Sequenz haben, wenn wir den Cache verwenden
- Rollback erfolgt
- Systemabsturz oder Instanzabsturz
- Sequenz wird in einer anderen Tabelle verwendet
Es gibt eine neue Funktion in Oracle 12c für Sequenzen
Sitzungssequenzen
Mit Oracle Database 12C sind die neuen Schlüsselwörter SESSION, GLOBAL verfügbar, die während einer Sequenzerstellung angegeben werden könnenCREATE SEQUENCE test_session_seq START WITH 1 INCREMENT BY 1 SESSION;
CREATE SEQUENCE test_global_seq START WITH 1 INCREMENT BY 1 GLOBAL;
Weltweit | Sitzung |
erstellt eine Standardsequenz, die in früheren Versionen bekannt ist. Dies ist die Standardeinstellung. | erstellt Sitzungssequenzen eines neuen Typs, bei denen es sich um einen speziellen Sequenztyp handelt, der speziell für die Verwendung mit globalen temporären Tabellen mit Sitzungssichtbarkeit entwickelt wurde. Die Sitzungssequenz gibt nur innerhalb einer Sitzung einen eindeutigen Bereich von Sequenznummern zurück, jedoch nicht sitzungsübergreifend. Ein weiterer Unterschied besteht darin, dass Sitzungssequenzen nicht persistent sind. Wenn eine Sitzung verschwindet, verschwindet auch der Status der Sitzungssequenzen, auf die während der Sitzung zugegriffen wurde. |