oracle缩减表空间大小,Oracle 19c 在线缩减 UNDO 表空间 容量

由于种种原因,数据库中可能会产生一个占用过多存储空间的 UNDO 表空间,UNDO 表空间的数据文件无法使用 RESIZE 缩减容量,唯一可行的办法就是:

1、创建一个新的 UNDO 表空间,并将其指定为当前 UNDO 表空间;

SQL> CREATE UNDO TABLESPACE UNDO_TBS DATAFILE '+DATA' SIZE 1G;

SQL> ALTER SYSTEM SET undo_tablespace=UNDO_TBS;

在事务两比较大的系统中,指定新UNDO表空间后可能会导致整个数据库无法做任何更改操作,任何的 DDL或者DML操作都会报错,这时如果允许的话可以重启数据库来解决。数据库重启之后,刚刚更改的系统默认UNDO表空间参数会失效,还是使用的旧的,应该在 NOMOUNT 状态下重新指定新的 UNDO表空间,然后再打开数据库继续做下面的操作;

2、删除 原 UNDO 表空间(一般是 UNDOTBS1);

SQL> DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;

3、创建一个新的跟原来 UNDO 表空间同名的 UNDO 表空间(UNDOTBS1),并将其指定为当前 UNDO 表空间,删除第一步创建的  UNDO 表空间;

SQL> CREATE UNDO TABLESPACE UNDOTBS1 DATAFILE '+DATA' SIZE 200M AUTOEXTEND ON;

SQL> ALTER SYSTEM SET undo_tablespace=UNDOTBS1;

SQL> DROP TABLESPACE UNDO_TBS INCLUDING CONTENTS AND DATAFILES;

注意:整个过程中是不需要重启数据库的,如果重启了数据库,参数 undo_tablespace 又会变成默认值(UNDOTBS1),所以我们最后的 UNDO 表空间还是叫 UNDOTBS1 这个名字。

5d7662a88db839ec5c5e312fc2a0f41a.png

Oracle 19c 中 UNDO 表空间是独立的,CDB 和 每个PDB 都有自己的 UNDO 表空间,因此实际操作跟 11g 是一样的。这里可以看到有3个 UNDOTBS1 表空间,分别属于不同的 CON_ID。

1875e1681a1d6db8e96b485f3a918a60.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值