"ORA-00942: टेबल या दृश्य मौजूद नहीं है" हो रही है जबकि टेबल मौजूद है


10

मैं Oracle डेटाबेस के लिए काफी नया हूँ। मैंने स्थापित Oracle Database 11g R2किया है Oracle Linux 6। मैंने सफलतापूर्वक एक नया डेटाबेस बनाया है dbcaऔर डेटाबेस से जुड़ा हुआ है:

$ sqlplus "/ as sysdba"

मैंने सफलतापूर्वक एक तालिका बनाई और कुछ डेटा डाले और कुछ चयन किए:

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

फिर मैंने CONNECT विशेषाधिकार के साथ एक नया उपयोगकर्ता बनाया:

SQL> CREATE USER teacher1 IDENTIFIED BY pass1;

User created.

SQL> GRANT CONNECT TO teacher1;

Grant succeeded.

तब मैंने उचित ऑब्जेक्ट विशेषाधिकारों के साथ एक नई भूमिका बनाई:

SQL> CREATE ROLE instructor;

Role created.

SQL> GRANT SELECT, UPDATE ON Instructors TO instructor;

Grant succeeded.

और उपयोगकर्ता को भूमिका प्रदान की:

SQL> GRANT instructor TO teacher1;

Grant succeeded.

इसके बाद, मैं sqlplus के साथ बाहर निकल गया exit;और इसे परीक्षण करने के लिए नए उपयोगकर्ता के रूप में जुड़ा। मैंने सफलतापूर्वक डेटाबेस में लॉग इन किया:

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

लेकिन जब मैं तालिका से यह कहने की कोशिश करता हूं:

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

मुझे यहाँ क्या याद आ रहा है ?!

जवाबों:


19

आपने SYSस्कीमा में तालिका बनाई (जिसे आपको कभी नहीं , कभी भी करना चाहिए । वास्तव में, कभी नहीं )।

जब आप teacher1उस स्कीमा में ऑब्जेक्ट्स के लिए किसी स्टेटमेंट के रूप में लॉग इन करते हैं। लेकिन कोई TEACHER1.INSTRUCTORSतालिका नहीं है, क्योंकि असली नाम है SYS.INSTRUCTORS(क्या मैंने उल्लेख किया है कि एसवाईएस स्कीमा में ऑब्जेक्ट बनाने के लिए एक बुरा विचार क्या है ?)।

आपको select * from sys.instructorsउस तालिका तक पहुंचने के लिए दौड़ने की आवश्यकता है । यदि आप स्कीमा के साथ तालिका का नाम उपसर्ग नहीं करना चाहते हैं, तो teacher1स्कीमा में एक समानार्थी शब्द बनाएँ :

create synonym teacher1.instructors for sys.instructors;

फिर स्कीमा teacher1से तालिका SYSको पूरी तरह से योग्य किए बिना उपयोग कर सकते हैं ।

फिर से: कुछ भी जो डीबीए सामान नहीं है, उसके लिए एसवाईएस या सिस्टम खाते का उपयोग करना बंद करें। उसके लिए एक नियमित खाते का उपयोग करें।


धन्यवाद। मुझे ऐसी तालिकाएँ बनानी होंगी जो कई उपयोगकर्ता इसे एक्सेस कर सकें। आपके स्पष्टीकरण से, मुझे अनुमान है कि मुझे विशेषाधिकार के dbadminसाथ एक नया उपयोगकर्ता बनाना चाहिए DBA, और इस डीबीए उपयोगकर्ता के साथ सभी तालिकाओं का निर्माण करना चाहिए । तब अन्य सभी उपयोगकर्ताओं को DBADMINस्कीमा से तालिकाओं का उपयोग करना चाहिए ... सही है?!
सय्यद मोहम्मद

5
@SeyedMohammad: DBA उपयोगकर्ता बनाने की आवश्यकता नहीं है। एक नियमित उपयोगकर्ता बनाएं और उस स्कीमा में तालिकाओं का निर्माण करें। फिर अन्य उपयोगकर्ताओं को उन तालिकाओं पर चयन प्रदान करें। डीबीए कार्य के अलावा किसी और चीज के लिए डीबीए की भूमिकाओं का उपयोग करना एक अच्छा विचार नहीं है।
a_horse_with_no_name
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.