Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Was ist sequenz in orakel

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
erhöhe um 1
Maximalwert 4500000
Zyklus
nocache;

 

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’,’’) from DUAL;

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ücksetzen
Schritt 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 -  Mindestwert 0;

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

  1. Rollback erfolgt
  2. Systemabsturz oder Instanzabsturz
  3. 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önnen
CREATE 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.