Tablo varken “ORA-00942: tablo veya görünüm mevcut değil” alma


10

Oracle veritabanında oldukça yeniyim. Ben yüklemiş Oracle Database 11g R2üzerinde Oracle Linux 6. Başarıyla yeni bir veritabanı oluşturduk dbcave kullanarak veritabanına bağladım:

$ sqlplus "/ as sysdba"

Başarıyla bir tablo oluşturdum ve bazı veriler ekledim ve bazı seçimler yaptım:

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

Sonra CONNECT ayrıcalığına sahip yeni bir kullanıcı oluşturdum:

SQL> CREATE USER teacher1 IDENTIFIED BY pass1;

User created.

SQL> GRANT CONNECT TO teacher1;

Grant succeeded.

Sonra uygun nesne ayrıcalıklarına sahip yeni bir rol oluşturdum:

SQL> CREATE ROLE instructor;

Role created.

SQL> GRANT SELECT, UPDATE ON Instructors TO instructor;

Grant succeeded.

Ve kullanıcıya rolünü verdi:

SQL> GRANT instructor TO teacher1;

Grant succeeded.

Sonra sqlplus'tan çıktım exit;ve test etmek için yeni kullanıcı olarak bağlandım. Veritabanına başarıyla giriş yaptım:

$ 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>

Ama tablodan seçmeye çalıştığımda şöyle diyor:

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

Burada eksik olan ne?

Yanıtlar:


19

Tabloyu SYSşemada oluşturdunuz (ki asla , asla yapmamalısınız . Gerçekten, asla ).

teacher1Herhangi bir deyim olarak giriş yaptığınızda o şemadaki nesneleri arar. Ama TEACHER1.INSTRUCTORStablo yok , çünkü gerçek isim SYS.INSTRUCTORS( SYS şemasında nesneler oluşturmak ne kadar kötü bir fikirden bahsetmiş miydim ?).

Bu select * from sys.instructorstabloya erişmek için çalıştırmanız gerekiyor . Tablo adını şemaya önek eklemek istemiyorsanız, şemada bir eşanlamlı oluşturun teacher1:

create synonym teacher1.instructors for sys.instructors;

Sonra şemadan tam olarak nitelendirmeden teacher1tabloya erişebilirsiniz SYS.

Yine: DBA olmayan şeyler için SYS veya SYSTEM hesabını kullanmayı bırakın. Bunun için normal bir hesap kullanın.


Teşekkürler. Birden fazla kullanıcının erişebileceği tablolar oluşturmam gerekiyor. Senin açıklama itibaren, ben gibi yeni bir kullanıcı oluşturmak gerektiğini anlaması dbadminile DBAayrıcalıkları ve bu DBA kullanıcı ile bütün tablolar oluşturun. Sonra diğer tüm kullanıcılar DBADMINşemadan tablolara erişmelidir ... Doğru mu?!
Seyed Mohammad

5
@SeyedMohammad: DBA kullanıcısı oluşturmanıza gerek yok. Normal bir kullanıcı oluşturun ve bu şemadaki tabloları oluşturun. Ardından bu tablolarda diğer kullanıcılara seçme izni verin. DBA rollerini DBA çalışması dışındaki herhangi bir şey için kullanmak iyi bir fikir değildir.
a_horse_with_no_name
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.