it-swarm.com.de

Abrufen von "ORA-00942: Tabelle oder Ansicht existiert nicht", während Tabelle existiert

Ich bin ziemlich neu in der Oracle-Datenbank. Ich habe Oracle Database 11g R2 Auf Oracle Linux 6 Installiert. Ich habe erfolgreich eine neue Datenbank mit dbca erstellt und eine Verbindung zur Datenbank hergestellt über:

$ sqlplus "/ as sysdba"

Ich habe erfolgreich eine Tabelle erstellt, einige Daten eingefügt und einige Auswahlen durchgeführt:

SQL> CREATE TABLE Instructors (
         tid    NUMBER(7) PRIMARY KEY,
         fname  VARCHAR2(32),
         lname  VARCHAR2(32),
         tel    NUMBER(16),
         adrs   VARCHAR2(128) );

Table created.

SQL> INSERT INTO Instructors (tid, fname, lname, tel, adrs)
     VALUES (8431001, 'John', 'Smith', 654321, 'London');

1 row created.

SQL> SELECT count(*) FROM Instructors;

  COUNT(*)
----------
        1

Dann habe ich einen neuen Benutzer mit dem Privileg CONNECT erstellt:

SQL> CREATE USER teacher1 IDENTIFIED BY pass1;

User created.

SQL> GRANT CONNECT TO teacher1;

Grant succeeded.

Dann habe ich eine neue Rolle mit entsprechenden Objektberechtigungen erstellt:

SQL> CREATE ROLE instructor;

Role created.

SQL> GRANT SELECT, UPDATE ON Instructors TO instructor;

Grant succeeded.

Und dem Benutzer die Rolle gewährt:

SQL> GRANT instructor TO teacher1;

Grant succeeded.

Als nächstes habe ich sqlplus mit exit; Beendet und mich als neuer Benutzer verbunden, um es zu testen. Ich habe mich erfolgreich bei der Datenbank angemeldet mit:

$ sqlplus teacher1

SQL*Plus: Release 11.2.0.1.0 Production on Thu Jul 25 03:20:50 2013
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Enter password: *****

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

Aber wenn ich versuche, aus der Tabelle auszuwählen, heißt es:

SQL> SELECT * FROM Instructors;
SELECT * FROM Instructors
              *
ERROR at line 1:
ORA-00942: table or view does not exist

Was fehlt mir hier ?!

10
Seyed Mohammad

Sie haben die Tabelle im Schema SYS erstellt (was Sie nie jemals tun sollten. Wirklich nie).

Wenn Sie sich als teacher1 Anmelden, sucht jede Anweisung nach Objekten in diesem Schema. Es gibt jedoch keine TEACHER1.INSTRUCTORS - Tabelle, da der tatsächliche Name SYS.INSTRUCTORS Lautet (habe ich erwähnt, was für eine schlechte Idee es ist, Objekte im SYS-Schema zu erstellen?).

Sie müssen select * from sys.instructors Ausführen, um Zugriff auf diese Tabelle zu erhalten. Wenn Sie dem Tabellennamen nicht das Schema voranstellen möchten, erstellen Sie ein Synonym im Schema teacher1:

create synonym teacher1.instructors for sys.instructors;

Dann kann teacher1 Über das Schema SYS auf die Tabelle zugreifen, ohne sie vollständig zu qualifizieren.

Nochmals: Verwenden Sie das SYS- oder SYSTEM-Konto nicht mehr für DBA-Inhalte. Verwenden Sie dafür ein reguläres Konto.

19