菜鸟维护一个linux+oracle9.2.0生产库,基础很差,不敢随便弄,当前数据库有两个可用回滚段(UNDOTBS1和UNDOTBS2),当前应该是使用的UNDOTBS1,因为这个回滚段占用了60%,另外一个基本没有使用,但是有几个问题我感觉很迷惑,还请各位大虾指点:
1、为什么我shutdown然后startup,回滚段空间还是占用了60%
2、如何通过sql语句查询当前使用的是哪个回滚段。
3、通过,“set   transaction   use   rollback   segment   回滚段名” 可用指定回滚段,但是这个是生产库,不敢随便操作,会不会有问题?
请大虾们指点哦!

解决方案 »

  1.   

    1:貌似不能自动收缩,如果使用率过大,考虑resize 收缩表空间,如果resize 也不行,创建新的undo 替换现有的2:show parameters undo_tablespace;
      

  2.   

    默认是设置大小并可以自动收缩的。
    你可以使用以下命令查看:
    show parameter UNDO_MANAGEMENT
    应该是auto的。
    你可以新建个新的撤销表空间
    create undo tablespace undo_tbs1 datafile '/U01/.../.DBF' size 1024M maxsize 2048M;
    然后切换到你新建的撤销表空间上:
    alter system set undo_tablespace=undo_tbs1;
    切忌,设置前请注意测试和备份;
      

  3.   

    最好克服一下回滚段什么使用和维护的办法,重新启动不是办法,不象windows的重新,
    重启有可能会导致重大失误...
      

  4.   

    我看了是auto回滚的,我向查看一下当前使用的是哪个回滚段,如果切换不成功的话在切换回来,问题是不知道怎么看,呵呵
      

  5.   

    show parameter UNDO
    undo_tablespace                      string      UNDOTBS1呵呵,找到了,如果另外一个回滚段有6G的数据,我直接修改成UNDOTBS1,感觉会出现数据混乱啊,怕怕,有没有精通的人?
      

  6.   

    undo一般是数据库自动管理的,没事最好不要碰,出了问题麻烦.
      

  7.   

    首先你查看你的表空间
    SQL> select tablespace_name,sum(bytes)/1024/1024/1024 GB
      2  from dba_data_files group by tablespace_name;
     
    TABLESPACE_NAME                        GB
    ------------------------------ ----------
    SYSAUX                         0.25390625
    SOCDATA                        2.50195312
    USERS                          0.00488281
    SYSTEM                         1.11328125
    RMAN_T                          0.1953125
    UNDO_TBS1                           0.125
     
    6 rows selected
    1、显示你现在正在使用的undo表空间
    SQL> Show parameter undo_tablespace;
     
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    undo_tablespace                      string      UNDO_TBS1
    2、创建新的undo表空间
    SQL> CREATE UNDO TABLESPACE undo_tbs2 DATAFILE  'D:\oracle\product\10.2.0\oradata\undo2.DBF'
      2  SIZE 200M REUSE AUTOEXTEND ON NEXT 10M  MAXSIZE 1024M; 
    Tablespace created
    根据自己情况新建
    3、然后切换到你新建的撤销表空间上:
    SQL> alter system set undo_tablespace=undo_tbs2 scope=both;
    System altered
    如果你再切换回来
    SQL> alter system set undo_tablespace=undo_tbs1 scope=both;
     
    System altered
     
    如果不想要原来的undo表空间:
    drop tablespace undo_tbs1 including contents;
    表空间已删除;
    4:查看
    Show parameter undo_tablespace;
    SQL> Show parameter undo_tablespace;
     
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    undo_tablespace                      string      UNDO_TBS2
     
      

  8.   

    感动ing............能不能告诉我,为什么在没有active进程的时候,我的undo表空间有6G被占用,
    我们生产库是linux系统,表空间是直接建立在磁盘上的,不过应该跟你说的差不多,我现在只是不明确如果切换的话会有什么影响,所以不敢轻易执行。
    还是感动ing。。
      

  9.   

    为什么在没有active进程的时候,我的undo表空间有6G被占用:我自己的解释是用户在执行完DDL语句后,没有commit,但是在数据库重新启动后,应该有一个check piont操作哦?怎么可能!
      

  10.   

    不会有太多影响的。我这的就是之前undo表空间占了好多。后来切到自己建的了。
    undo表空间增大是你因为你dml操作过多而导致频繁记录undo信息。