25. Juni 2009 von Lothar
Für eine bestehende Tabelle in Oracle soll eine neue Spalte hinzugefügt werden, die eine eindeutige, fortlaufende Nummer beinhaltet.
Es bieten sich je nach Größe, Umfang der Tabelle verschiedene Lösungsansätze an. Im folgenden möchte ich eine Lösung zeigen, die mittels einer Sequenz und eines Triggers automatisch beim Einfügen von neuen Zeilen einen Zähler hochzählt und diese Werte in die neue Spalte einfügt. Da ich für dieses Lösungsansatz die komplette Tabelle kopiere, eigent sich dieses Verfahren nicht unbedingt für sehr grosse Tabellen im GByte Bereich.
1. Die neue Tabelle „tab_bck“ als kopie der Tabelle „tab_org“ erstellen:
create table tab_bck as select * from tab_org;
2. Den Inhalt der neu erstellten Tabelle löschen, da alle Zeilen später neu, per insert eingefügt werden sollen:
truncate table tab_bck;
3. In der neu erstellten tabelle eine neue Spalte vom Typ number einfügen:
ALTER TABLE tab_bck ADD („MYID“ NUMBER);
4. Den primary key für die Eindeutigkeit einzufügenden Zahlenwerte einstellen:
ALTER TABLE tab_bck ADD CONSTRAINT ora_bck_pk PRIMARY KEY( „MYID“ ) ENABLE;
5. Eine sequence erzeugen, die den Startwert vorgibt, ggf. zusätzliche Parameter definieren:
CREATE SEQUENCE MY_SEQ START WITH 1000;
6. Den Trigger anlegen, der bei jedem insert in die Tabelle org_bck die eindeuten Zalenwert in die Spalte myid einträgt.
create or replace trigger my_auto_insert
before insert on tab_bck
for each row
begin
select my_seq.nextval into :new.myid from dual;
end;
/
7. Alle Spalten der Tabelle „tab_org“ auslesen in die Tabelle „tab_bck“ schreiben, gleichzeitig wird der eindeutige Zahlenwert automatisch eingefügt:
select spalte1, spalte2, spalte3 from tab_org insert into tab_bck (spalte1, spalte2, spalte3 );
Schlagworte: auto Wert, CONSTRAINT; PRIMARY KEY, fortlaufende Zahl, fortlaufender Nummer, Oracle, sequence, TRIGGER
Veröffentlicht in Uncategorized | 1 Kommentar »
14. Mai 2009 von Lothar
Seit der Oracle DB Version 10g ist im default Profil die Funktion implementiert, dass ein user Account nach 10 erfolglosen Anmeldeversuchen gesperrt wird. Für die erfolglosen Anmeldeversuche erscheint jeweils die Fehlermeldung: ORA-01017: invalid username/password; logon denied
Nach dem 10.ten Anmeldeversuch erscheint die Fehlermeldung: ORA-28000: Account ist gesperrt und der Account ist gesperrt (timed locked).
Es stellt sich nun die Frage, wie finde ich heraus, wer führt diese Anmeldeversuche durch ?
Zur Beantwortung dieser Frage gibt es mehrere Möglichkeiten (siehe Metalink Note: 352389.1)
Eine recht einfache, schnelle Möglichkeit besteht darin einen Event im laufenden Datenbankbetrieb zu setzen, wodurch eine Oracle Fehlermeldung ins alert.log file geschrieben wird und gleichzeitig ein trace file erzeugt wird. Im trace file kann ich die Maschine auslesen, von der der Anmeldeversuch gestartet wird. Je nach Verbindungstyp (z.B. SQL-Plus, JDBC, ..) werden zusätzlich user und terminal angegeben.
Durchführung:
Event in der Datenbank setzen:
alter system set events '1017 trace name errorstack level 10';
Nach einem erfolglosen Anmeldeversuch wird ein ORA-01017 im alert.log file geschrieben und ein trace file erzeugt.
Im trace file nach der Textstelle: service name: suchen.
In der folgenden Zeile findet sich die gesuchten Informationen zu user, term, machine
Schlagworte: account, locked, Oracle, user
Veröffentlicht in Uncategorized | Kommentar schreiben »
6. Mai 2009 von Lothar
einfaches Beispiel für einen user export unter Linux/Unix:
environment setzten:
export ORACLE_HOME=/oracle/product/92
export ORACLE_SID=MAX
export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15
Bei Verwendung einer Parmeterdatei heißt der export Auffruf z.B.
exp system/password parfile=MAX_schema_exp.par
Der Inhalt eines Parameterfile für den export zweier schematas könnte so ausschauen:
file=/DB/MAX/data/MAX_schema_exp.dmp
log=/DB/MAX/data/MAX_schema_exp.log
buffer=3000000
consistent=y
feedback=20000
owner=(schema1, schema2)
Schlagworte: export, Linux, Oracle, parameter, Unix
Veröffentlicht in Uncategorized | Kommentar schreiben »
6. Mai 2009 von Lothar
einfaches Beispiel für einen user export unter Windows, die Textdatei als *.bat abspeichern und ausführen…
@echo on
SET LOG=APPL_schema_exp.log
SET NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15
time /T >> %LOG%
exp user/password@SID file=APPL_schema_exp.dmp log=%LOG% consistent=y BUFFER=3000000 FEEDBACK=20000 STATISTICS=NONE
time /T >> %LOG%
@echo FERTIG !!!
pause
Schlagworte: export, Oracle, parameter, Windows
Veröffentlicht in Uncategorized | Kommentar schreiben »