2016-03-24 81 views
0

如何編寫查詢以顯示數據庫中的所有表空間假設數據庫及其相應的數據文件屬於用戶SCOTT。我可以連接到SCOTT帳戶並查看它,但我想以sysdba身份連接到sys以查看屬於SCOTT的所有表空間和數據文件。查詢以顯示數據庫和數據文件中的所有表空間

+0

http://docs.oracle.com/database/121/REFRN/GUID-B28A7D79- 24E3-49B5-B948-7C2277CB1FB8.htm#REFRN23287和http://docs.oracle.com/database/121/REFRN/GUID-0FA17297-73ED-4B5D-B511-103993C003D3.htm#REFRN23049 –

+0

無論是數據庫,也沒有表空間也不數據文件屬於任何用戶。你是從MS SQL背景來的嗎? – EdStevens

回答

0

數據庫,表空間和數據文件都不屬於任何用戶。你是從MS SQL背景來的嗎?

select tablespace_name, 
     file_name 
from dba_tablespaces 
order by tablespace_name, 
     file_name; 
0

在oracle中,一般來說,有事實,我將在下面的章節提到的數字:

  • 每個數據庫可以有很多模式/用戶(邏輯分區)。
  • 每個數據庫可以有很多表空間(邏輯分區)。
  • 模式是屬於用戶的一組對象(表,索引,視圖等)。
  • 在Oracle中,可以將用戶視爲與架構相同。
  • 數據庫被分成稱爲表空間的邏輯存儲單元,它將相關的邏輯結構分組在一起。例如,表空間通常將應用程序的所有對象分組以簡化一些管理操作。您可能有一個應用程序數據的表空間,另外一個用於應用程序索引。

因此,你的問題,「看到所有的表空間和數據文件屬於SCOTT」是有點錯誤。

但是,有些DBA視圖包含有關所有數據庫對象的信息,而不管所有者。只有擁有DBA權限的用戶才能訪問這些視圖: DBA_DATA_FILES,DBA_TABLESPACES,DBA_FREE_SPACE,DBA_SEGMENTS。

因此,請以sysdba身份連接到您的數據庫,並通過這些有用的視圖運行查詢。 例如此查詢可以幫助你找到你的用戶的對象位於所有表和它們的數據文件:

SELECT DISTINCT sgm.TABLESPACE_NAME , dtf.FILE_NAME 
FROM DBA_SEGMENTS sgm 
JOIN DBA_DATA_FILES dtf ON (sgm.TABLESPACE_NAME = dtf.TABLESPACE_NAME) 
WHERE sgm.OWNER = 'SCOTT' 
相關問題