在Oracle10g 中新增加了RECYCLE BIN功能,由於我才入门有很多不懂得地方,还劳烦各位大哥大姐赐教! 1、如何在DROP 一个表的时候不让它进回收站(RECYCLE BIN)而直接被删除?
 2、RECYCLE BIN 有没有大小的限制,有的话怎么查看和设置RECYCLE BIN的大小?
 3、查看表空间大小时,是不是只有具有DBA权限才能查看?
 劳烦各位大哥大姐赐教!(最好附上测试图片)谢谢!

解决方案 »

  1.   

    drop table tableName purge
      

  2.   

    select * from user_tablespaces;
      

  3.   

    好像确实要DBA权限,才能看表空间大小,dba_data_files
      

  4.   

    问题一,
    同意一楼,增加一个purge
    drop table sometable purge;
    另外一个方法是在sqlplus下,drop table前先执行一个sqlplus语句
    ALTER SESSION SET RECYCLEBIN=OFF;
    这样drop table不用purge也能彻底删除了问题二
    recyclebin有大小的限制,其限制就是所在表空间的大小,也就是删除的表并没有从表空间中删除,还保留了下来,只不过变了个名字。但是recyclebin中的空间对于oracle来说是自由的空间,也就是说当表空间不足时,Oracle会自动将recyclebin中最先进入数据删除,为正常的数据让地方。问题二,看表空间大小只要能够查询dba_tablespaces,dba_segments,dba_free_space等表空是即可,不用有dba权限,只要有select any dictionary权限即可。下面是一个查看表空间大小的sql语句,供楼主参考COLUMN "Tablespace" format a13
    COLUMN "Used MB"    format 99,999,999
    COLUMN "Free MB"    format 99,999,999
    COLUMN "Total MB"   format 99,999,999SELECT fs.tablespace_name "Tablespace",
           (df.totalspace - fs.freespace)     "Used MB", 
           fs.freespace         "Free MB",
           df.totalspace         "Total MB",
           ROUND (100 * (fs.freespace / df.totalspace)) "Pct. Free"
      FROM (SELECT   tablespace_name, ROUND (SUM (BYTES) / 1024 / 1024)
                                                                       totalspace
                FROM dba_data_files
            GROUP BY tablespace_name) df,
           (SELECT   tablespace_name, ROUND (SUM (BYTES) / 1024 / 1024) freespace
                FROM dba_free_space
            GROUP BY tablespace_name) fs
     WHERE df.tablespace_name = fs.tablespace_name;