ORA-00969: „missing ON keyword“

31. Januar 2011

Bei der Vergabe von Objekt Berechtigungen  ( select, insert, update, delete) können diese für die gesamte Tabelle vergeben werden, z.B. 

grant select on scott.emp to new_user; 

  
oder aber auf einzele Spalten eingeschränkt werden, z.B.

grant select, insert(ENAME) on scott.emp to new_user;

Ein insert Statement funktioniert allerdings nur, wenn die Tabelle keine „not null“ Spalte enthält, z.B.
insert into scott.emp (ENAME) values (‘SCHMITT’);
Für Spaltenberechtigungen sind nur die Objekt Berechtigungen:  insert und update erlaubt – select und delete führt zu einer Fehlermeldung  ( ORA-00969: missing ON keyword )

ORA-00600: internal error code, arguments: [qmx: no ref]

25. August 2010

Auf einer neuen Oracle 11gR2 Datenbank tauchen im alert.log plötzlich folgende Fehlermeldungen auf:

Errors in file /DB/TEVISDB/diag/rdbms/tevisdb/TEVISDB/trace/TEVISDB_dw00_1478868.trc  (incident=17155):
ORA-00600: internal error code, arguments: [qmx: no ref], [], [], [], [], [], [], [], [], [], [], []
Incident details in: /DB/TEVISDB/diag/rdbms/tevisdb/TEVISDB/incident/incdir_17155/TEVISDB_dw00_1478868_i17155.trc
Errors in file /DB/TEVISDB/diag/rdbms/tevisdb/TEVISDB/trace/TEVISDB_dw00_1478868.trc  (incident=17156):
ORA-00600: internal error code, arguments: [qmx: no ref], [], [], [], [], [], [], [], [], [], [], []
ORA-06512: at „SYS.KUPW$WORKER“, line 1714
ORA-06512: at line 2
Incident details in: /DB/TEVISDB/diag/rdbms/tevisdb/TEVISDB/incident/incdir_17156/TEVISDB_dw00_1478868_i17156.trc
Thu Aug 05 10:15:12 2010

Die Ursache dieses Fehlers liegt meist in der nicht richtig setzten Variable: LD_LIBRARY_PATH
( Auf AIX Systemen wird die Variable: LIBPATH benutzt )

Lösung:
- Datenbank und Listener stoppen.
- Auf AIX System unbenutzte Libraries und Module beenden mittels:   ./usr/sbin/slibclean    als root user
- Die Variable LD_LIBRARY_PATH (LIBPATH) wird gesetzt auf:    $ORACLE_HOME/lib
- Datenbank und Listener wieder starten

Events in Oracle Datenbank

11. Mai 2010

Für verschiedene Zwecke,  z.B. tracing, tuning, ..  werden Events in der Datenbank eingestellt.
Events können z.B. für die eigene session oder systemweit gesetzt werden.
Beispiel tracing systemweit

alter system set events ’10046 trace name context forever, level 12′;

Um zu überprüfen, welche Events in der session bzw. im System gesetzt sind, kann oradebug benutzt werden.
In Oracle 10g / 11g wird folgende Syntax benutzt:

sqlplus „/As sysdba“
SQL> oradebug setmypid
SQL> oradebug eventdump session
SQL> oradebug eventdump system

Um das Event zu deaktivieren:

alter session set events ’10046 trace name context off’;
alter system set events ’10046 trace name context off’;

Es können auch mehrere Events in einem command gesetzt werden:

SQL> ALTER SYSTEM SET  EVENT=’10325 trace name context forever, level 10′,
’10015 trace name context forever, level 1′  COMMENT=’Debug tracing of control and rollback’ SCOPE=BOTH;
EVENT=’10325 trace name context forever,
*
ERROR at line 2:
ORA-02095: specified initialization parameter cannot be modified

Beim Auftreten dieses Fehlers ist es notwendig, den Zusatz:   SCOPE=SPFILE  zu benutzen.

ORA-3136 WARNING: inbound connection timed out

11. Mai 2010

Der Fehler:  „ORA-3136  WARNING: inbound connection timed out“ im alert.log einer Datenbank bedeutet, dass eine Client Verbindung zur Datenbank innerhalb der definierten Zeit des Parameters  INBOUND_CONNECT_TIMEOUT nicht erfolgreich aufgebaut werden konnte.  Der default Wert des Parameters INBOUND_CONNECT_TIMEOUT beträgt 60 Sekunden.

Gründe für diese Fehlermeldung können sein:

  • Verbindungsversuch von einem Client zur Datenbank  ohne entsprechende Zugangsdaten.
  • Der Datenbankserver kann die Verbindungsabfrage nicht innerhalb der eingestellten Zeit abarbeiten,  z.B. aufgrund zu hoher Last
  • Gültiger Verbindungsversuch von einem Client, die Authentifizierung konnte innerhalb der definierten Zeit vom Client nicht abgeschlossen werden.

Der Parameter INBOUND_CONNECT_TIMEOUT wurde als Schutz vor denial of service  und virus/wurm Attacken ab der Version 10g eingeführt.

Bei häufigen Vorkommen, sollte die Ursache ermittelt werden.

Als workaround kann die Zeitspanne (default 60 Sekunden)  auf z.B. 120 Sekunden erhöht werden.

Durchführung:

Auf der Serverseite in die Datei: sqlnet.ora folgende Zeile einfügen:

SQLNET.INBOUND_CONNECT_TIMEOUT = 120

In der Datei:  listener.ora

INBOUND_CONNECT_TIMEOUT_<listenername> = 120

Hat der listener den default Namen:  LISTENER, dann lautet der Eintrag:

INBOUND_CONNECT_TIMEOUT_LISTENER = 120
Die Oracle Dokumentation hierzu findet sich unter:  My Oracle Support  ID 4650431 

Spalte mit fortlaufender Nummer erzeugen

25. Juni 2009
    Aufgabenstellung:

Für eine bestehende Tabelle in Oracle soll eine neue Spalte hinzugefügt werden, die eine eindeutige, fortlaufende Nummer beinhaltet.

    Lösungsansatz:

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.

    Durchführung:

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:

insert into tab_bck (spalte1, spalte2, spalte3 ) select spalte1, spalte2, spalte3 from tab_org;

export unter Linux/Unix

6. Mai 2009

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)

export unter Windows

6. Mai 2009

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


Follow

Get every new post delivered to your Inbox.