帮朋友问个ORACLE 9的问题,由于表空间不足,有个应用程序将一个30G的数据文件里的内容删掉一部分,在EnterPrise Manager已经显示已用空间9G,但就用程序再写数据进去时,已经写不进去了,停止在那里,不知是否需压缩或修复,请高手详细说一下步骤!

解决方案 »

  1.   

    alter tablespace 表空间名 add datafile '/u1/oradata/userdata_002.dbf' size 1024m; 
      

  2.   

    1.请先用下面的SQL检查表空间的情况
    剩余空间大小
    select tablespace_name, sum(nvl(bytes,0))/1024/1024 free from dba_free_space where 
    tablespace_name='USERS' group by tablespace_name查看我的表空间大小及所剩空间大小! 
    col tablespace_name format a10; 
    select f.tablespace_name,a.total,u.used,f.free,round((u.used/a.total)*100) "% used", round((f.free/a.total)*100) "% Free" from (select tablespace_name, sum(bytes/(1024*1024)) total from dba_data_files group by tablespace_name) a, (select tablespace_name, round(sum(bytes/(1024*1024))) used from dba_extents group by tablespace_name) u, (select tablespace_name, round(sum(bytes/(1024*1024))) free from dba_free_space group by tablespace_name) f WHERE a.tablespace_name = f.tablespace_name and a.tablespace_name = u.tablespace_name;2.写不进去了,报了什么错误?
      

  3.   

    请给出具体的报错信息!
    提问请看此帖:http://topic.csdn.net/u/20080424/18/927ed2fa-38b0-42fd-bd18-631afed615b6.html
      

  4.   

    查看表空间的使用情况
     
    select sum(bytes)/(1024*1024) as free_space,tablespace_name 
    from dba_free_space
    group by tablespace_name;
     
    SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,
    (B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"
    FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C
    WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME; 查询表空间使用情况
    select a.tablespace_name "表空间名称",
    100-round((nvl(b.bytes_free,0)/a.bytes_alloc)*100,2) "占用率(%)",
    round(a.bytes_alloc/1024/1024,2) "容量(M)",
    round(nvl(b.bytes_free,0)/1024/1024,2) "空闲(M)",
    round((a.bytes_alloc-nvl(b.bytes_free,0))/1024/1024,2) "使用(M)",
    Largest "最大扩展段(M)",
    to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') "采样时间" 
    from  (select f.tablespace_name,
       sum(f.bytes) bytes_alloc,
       sum(decode(f.autoextensible,'YES',f.maxbytes,'NO',f.bytes)) maxbytes 
    from dba_data_files f 
    group by tablespace_name) a,
    (select  f.tablespace_name,
        sum(f.bytes) bytes_free 
    from dba_free_space f 
    group by tablespace_name) b,
    (select round(max(ff.length)*16/1024,2) Largest,
       ts.name tablespace_name 
    from sys.fet$ ff, sys.file$ tf,sys.ts$ ts 
    where ts.ts#=ff.ts# and ff.file#=tf.relfile# and ts.ts#=tf.ts# 
    group by ts.name, tf.blocks) c 
    where a.tablespace_name = b.tablespace_name and a.tablespace_name = c.tablespace_name
     
      

  5.   

    用这句alter database datafile 'd:\oracle9\abc.ora' resize 400m
    结果为2,不知什么意思?
      

  6.   

    晕,alter database datafile 'd:\oracle9\abc.ora' resize 400m
    后面没加分号
    不过现在有个问题,.ORA文件不能压缩,.DBF就可以,究竟怎么回事?
      

  7.   

    而且.ORA文件是存放在表里面的,听说是什么参数文件
      

  8.   

    alter tablespace 表空间名 coalesce;
      

  9.   

    问题重述:
    别人写的软件,可以操作ORACLE数据库,已建立几个表空间数据文件(*.ORA),软件可以进行写数据、删除数据,
    现在情况是:
    有以下表空间ABC_MR_DATA,包含数据文件:
    ABC_MR1ORCL.ORA,
    ABC_MR2ORCL.ORA,
    ABC_MR3ORCL.ORA,
    ABC_MR4ORCL.ORA,
    ABC_MR5ORCL.ORA
    每个数据文件分配2G空间,总共是10G当数据文件快达到10G时,软件写数据会提示表空间已满,打开企业管理器发现已用空间是9.9G左右于是增加数据文件的空间至每个30G,总共是150G
    但当软件写数据至一半时进度条停止了,呈死机状态,打开企业管理器发现已用空间才50G左右,
    究竟为何写不进去了呢?当用alter database datafile 'd:\oracle9\ABC_MR1ORCL.ORA' resize 50000m
    发现resize不能设置为小于50000m(50G)
    那么既然数据已经被软件删除,为何还不让压缩呢?怎样删除这些被删除的数据?