PL SQL - 从我的表空间恢复用户的卷

时间:2018-04-06 12:37:34

标签: oracle plsql

我正在尝试恢复用户在我的数据库中使用的卷。但我找不到怎么做。 这是我的代码:

FUNCTION EspaceUtilise (v_user IN VARCHAR2) RETURN NVARCHAR2 AS requetes NVARCHAR2(4000);
  BEGIN
    DECLARE
        unused_bytes NUMBER;        
        total_bytes NUMBER;
        CURSOR c_infosUser IS SELECT * FROM all_users where USER_ID = v_user;
        v_rqt NVARCHAR2(4000);
    BEGIN
      OPEN c_infosUser;
      FETCH c_infosUser INTO v_rqt;
      WHILE c_infosUser%FOUND LOOP
        -- Get user volume here 
      FETCH c_infosUser INTO v_rqt;
      END LOOP;
      CLOSE c_infosUser;
      RETURN ;
    END;
  END;

我尝试使用方法“SUM”和“DBMS_SPACE”,但我无法正常使用它。

1 个答案:

答案 0 :(得分:0)

用户占用两个空间:表和索引。使用情况按细分跟踪。有两个数据字典视图:USER_SEGMENTS,显示已连接用户的消耗; DBA_SEGMENTS,显示所有用户的消耗,并需要更高级别的特权访问。 (Segments是数据字典视图的子集之一,没有ALL_版本。)

最简单的查询版本是:

select sum(bytes) as tot_segment_size
from dba_segments
where owner = 'WHOEVER'; 

该视图包含您可能想要使用的其他各种列。 Find out more

如果您真的想要将该查询包装在一个函数中,您将需要对您的用户直接的数据字典视图(或SELECT ANY DICTIONARY角色)的相应权限,即不通过作用。