2009-10-08 30 views
3

我們公司的第三方產品使用Oracle作爲後端。我試圖登錄到Oracle數據庫並查看架構和數據。我以sys/sysdba身份登錄,創建一個具有由應用程序創建的默認表空間的用戶,並授予用戶查詢結構的所有必要權限。我還將O7_DICTIONARY_ACCESSIBILITY設置爲true以允許查詢數據字典對象。在DBA_Tables中列出的查詢表

以用戶身份登錄並查詢User_Tables後,不會返回任何內容。但是當我查詢DBA_Tables時,我希望找到的表被返回。我是Oracle的新手,所以我不太確定一個非系統表可以如何存在於表空間中,而不是一個user_table。

更重要的是,你如何查詢這些表中的數據?每當我嘗試從表格中選擇一個簡單的「Select *」時,就會出現「表格或視圖不存在」錯誤。

在此先感謝。

回答

12

您爲用戶設置的默認表空間控制創建該用戶擁有的表空間對象。它與他們可以查詢的對象無關。

  • USER_TABLES返回有關特定用戶擁有的表的信息。它聽起來不像你的用戶擁有任何表,所以你會期望它是空的。
  • ALL_TABLES返回有關特定用戶有權訪問的表的信息。如果您授予適當的權限,則用戶應該在此數據字典視圖中查看錶。
  • DBA_TABLES返回有關數據庫中每個表的信息,即使您不一定有權訪問基礎表。

如果您試圖從其中一個表中查詢數據,您是否指定了模式名稱(ALL_TABLES中的OWNER列)?如果你沒有自己的對象,一般需要使用完全限定名來引用它,即

SELECT * 
    FROM schema_owner.table_name 

你能避免,如果

  • 您創建一個同義詞(公共或私人使用完全合格的名稱)爲對象
  • 您更改會話的CURRENT_SCHEMA。這將更改名稱在其下解析的默認模式。它不影響權限和特權。你可以用命令

    ALTER SESSION SET CURRENT_SCHEMA改變當前模式= new_schema_name

    你將不得不這樣做的每個會話的用戶creates--可能在登錄觸發器。

+0

+1 ...不錯的完整答案 – dpbradley 2009-10-09 12:37:40

+0

賈斯廷,感謝您的回答。我終於可以按照您的建議使用完全限定名稱來查詢表格了。順便說一下,我希望有一天,甲骨文會聘請技術車手,並且有能力清楚地解釋事情。他們目前的DBA_Tables文檔缺乏(http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/statviews_4155.htm)。 – Brawleon 2009-10-09 15:39:29

+0

不錯的答案。只是一件額外的事情,我實際上通過'select * from ALL_OBJECTS'找出我的'可見'表。 – JoeyZhao 2017-09-07 19:31:51