菜鸟维护一个linux+oracle9.2.0生产库,基础很差,不敢随便弄,当前数据库有两个可用回滚段(UNDOTBS1和UNDOTBS2),当前应该是使用的UNDOTBS1,因为这个回滚段占用了60%,另外一个基本没有使用,但是有几个问题我感觉很迷惑,还请各位大虾指点:
1、为什么我shutdown然后startup,回滚段空间还是占用了60%
2、如何通过sql语句查询当前使用的是哪个回滚段。
3、通过,“set transaction use rollback segment 回滚段名” 可用指定回滚段,但是这个是生产库,不敢随便操作,会不会有问题?
请大虾们指点哦!
1、为什么我shutdown然后startup,回滚段空间还是占用了60%
2、如何通过sql语句查询当前使用的是哪个回滚段。
3、通过,“set transaction use rollback segment 回滚段名” 可用指定回滚段,但是这个是生产库,不敢随便操作,会不会有问题?
请大虾们指点哦!
你可以使用以下命令查看:
show parameter UNDO_MANAGEMENT
应该是auto的。
你可以新建个新的撤销表空间
create undo tablespace undo_tbs1 datafile '/U01/.../.DBF' size 1024M maxsize 2048M;
然后切换到你新建的撤销表空间上:
alter system set undo_tablespace=undo_tbs1;
切忌,设置前请注意测试和备份;
重启有可能会导致重大失误...
undo_tablespace string UNDOTBS1呵呵,找到了,如果另外一个回滚段有6G的数据,我直接修改成UNDOTBS1,感觉会出现数据混乱啊,怕怕,有没有精通的人?
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
我们生产库是linux系统,表空间是直接建立在磁盘上的,不过应该跟你说的差不多,我现在只是不明确如果切换的话会有什么影响,所以不敢轻易执行。
还是感动ing。。
undo表空间增大是你因为你dml操作过多而导致频繁记录undo信息。