সারণীর অস্তিত্ব থাকা অবস্থায় "ORA-00942: সারণী বা দর্শন উপস্থিত নেই" পাওয়া


10

আমি ওরাকল ডাটাবেসে মোটামুটি নতুন। আমি ইনস্টল করা আছে Oracle Database 11g R2উপর Oracle Linux 6। আমি সফলভাবে একটি নতুন ডাটাবেস তৈরি করেছি dbcaএবং ব্যবহার করে ডাটাবেসের সাথে সংযুক্ত করেছি:

$ sqlplus "/ as sysdba"

আমি সফলভাবে একটি টেবিল তৈরি করেছি এবং কিছু ডেটা sertedোকিয়েছি এবং কিছু নির্বাচন সম্পাদন করেছি:

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

তারপরে আমি সংযোগ সুবিধা সহ একটি নতুন ব্যবহারকারী তৈরি করেছি:

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.

এর পরে আমি স্ক্যালপ্লাসের সাথে প্রস্থান করেছি 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স্কিমে টেবিলটি তৈরি করেছেন (যা আপনার কখনই করা উচিত নয় ever সত্যই, কখনই নয় )।

আপনি যখন লগইন করবেন তখন teacher1কোনও বিবৃতি সেই স্কিমায় থাকা বস্তুর সন্ধান করে। তবে কোনও TEACHER1.INSTRUCTORSটেবিল নেই, কারণ আসল নামটি SYS.INSTRUCTORS(এস ওয়াইএস স্কিমাতে অবজেক্ট তৈরি করা কী খারাপ ধারণা তা আমি উল্লেখ করেছি ?)।

select * from sys.instructorsএই টেবিলটিতে অ্যাক্সেস পাওয়ার জন্য আপনাকে দৌড়াতে হবে। আপনি যদি স্কিমা দিয়ে টেবিলের নামটি উপস্থাপন করতে না চান তবে স্কিমাতে একটি প্রতিশব্দ তৈরি করুন teacher1:

create synonym teacher1.instructors for sys.instructors;

তারপরে স্কিমা teacher1থেকে SYSসম্পূর্ণ যোগ্যতা ছাড়াই টেবিলটি অ্যাক্সেস করতে পারবেন ।

আবার: ডিবিএ স্টাফ নয় এমন কোনও কিছুর জন্য SYS বা SYSTEM অ্যাকাউন্ট ব্যবহার বন্ধ করুন। তার জন্য একটি নিয়মিত অ্যাকাউন্ট ব্যবহার করুন।


ধন্যবাদ। আমাকে এমন টেবিল তৈরি করতে হবে যা একাধিক ব্যবহারকারী এতে প্রবেশ করতে পারে। আপনার ব্যাখ্যা থেকে, আমি অনুমান করি যে আমার কোনও নতুন ব্যবহারকারী তৈরি করা উচিত যেমন সুবিধা dbadminসহ DBA, এবং এই ডিবিএ ব্যবহারকারীর সাথে সমস্ত টেবিল তৈরি করা উচিত। তাহলে অন্য সমস্ত ব্যবহারকারীর DBADMINস্কিমা থেকে টেবিলগুলি অ্যাক্সেস করা উচিত ... সঠিক ?!
সৈয়দ মোহাম্মদ

5
@ সাইয়েদমোহমদ: ডিবিএ ব্যবহারকারী তৈরি করার দরকার নেই। একটি নিয়মিত ব্যবহারকারী তৈরি করুন এবং সেই স্কিমে টেবিলগুলি তৈরি করুন। তারপরে অন্যান্য ব্যবহারকারীদের সেই টেবিলগুলিতে নির্বাচন করুন grant ডিবিএ কাজের বাইরে অন্য যে কোনও কিছুর জন্য ডিবিএর ভূমিকা ব্যবহার করা ভাল ধারণা নয়।
a_horse_with_no_name
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.