oracle UNDO表空间重建(一)

本文详细介绍了如何创建新的UNDO表空间'UNDOTBS2',包括数据文件的创建、查看表空间状态、切换当前UNDO表空间,并在遇到问题时如何调整SPFILE设置,确保重启后设置生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

早上wang开始分析数据,分析一段时间,说有报错,发送截图过来。
oracle <wbr>UNDO表空间重建(一)
 
google后发现,盖国强有相关的一个帖子
其中说,是硬件故障,要么尝试重新格式化,要么更换硬盘……不置可否。但是,有个问题是肯定的,这个文件是undo表空间的的,而undo表空间的作用是:在数据异常的时候回滚,保证数据的读一致性。如果不需要回滚,而事务正常结束(rollback,commit也就是不存在读一致性的问题),那么undo表空间内的数据并不是很重要。所以跟wang商量后,打算等他分析完后,重建undo表空间
 
具体实施过程:
为保证重建后的undo表空间与之前完全一致。先做好如下准备:
1.查看undotbs1的数据文件是否是可扩展
select FILE_NAME,TABLESPACE_NAME,STATUS,AUTOEXTENSIBLE from dba_data_files
where tablespace_name='UNDOTBS1'
/

FILE_NAME                                                                                  TABLESPACE_NAME STATUS      AUT
-------------------------------------------------- --------------- --------- ---
/oracle/qgzx/u01/oradata/qgzx_undotbs01.dbf              UNDOTBS1              AVAILABLE YES
/oracle/qgzx/u01/oradata/qgzx_undotbs02.dbf              UNDOTBS1              AVAILABLE NO
 
2.查看需要创建的目录是否有足够的空间
[oracle@yz2]$df -h /oracle/qgzx/u01/oradata/
Filesystem                      容量  已用 可用 已用% 挂载点
/dev/sda1                          68G    49G    16G  77% /
 
开始切换,创建一个叫UNDOTBS2回滚表空间,起始大小5G,自动扩展打开(跟UNDOTBS1一致)

SQL> CREATE SMALLFILE UNDO TABLESPACE "UNDOTBS2" DATAFILE '/oracle/qgzx/u01/oradata/qgzx_undotbs02a.dbf' SIZE 5G AUTOEXTEND ON RETENTION NOGUARANTEE;

Tablespace created.

 

查看是否创建完成

select FILE_NAME,TABLESPACE_NAME,STATUS,AUTOEXTENSIBLE from dba_data_files
where tablespace_name like 'UNDOTBS%'
/

FILE_NAME                                     TABLESPACE_NAME                STATUS    AUT
--------------------------------------------- ------------------------------ --------- ---
/oracle/qgzx/u01/oradata/qgzx_undotbs01.dbf   UNDOTBS1                       AVAILABLE YES
/oracle/qgzx/u01/oradata/qgzx_undotbs02.dbf   UNDOTBS1                       AVAILABLE NO
/oracle/qgzx/u01/oradata/qgzx_undotbs02a.dbf  UNDOTBS2                       AVAILABLE YES

 

2.查看现在正在使用的undo表空间
SQL> show parameter undo;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS1

 

3.切换UNDO表空间为undotbs2
SQL> alter system set undo_tablespace=undotbs2;           --开始的时候没加scope=both,重启后发现系统还原了。文章后面查看系统启动是以pfile启动,所以当然没有scope=spfile的功能,只能做到scope=memory。

System altered.

 

SQL> show parameter undo;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS2

 

4.关闭自动增长(因为undotbs1的自动增长没有关闭,所以暂时打算与保持undotbs1一样,不关闭
alter database datafile '/oracle/qgzx/u01/oradata/qgzx_undotbs01.dbf' autoextend off;


 

5.重启后检查

发现parameter 的undo_tablespace还是undotbs1,使用如下命令,确定spfile也被修改。报错

SQL> alter system set undo_tablespace=undotbs2 scope=both;
alter system set undo_tablespace=undotbs2 scope=both
*
ERROR at line 1:
ORA-32001: write to SPFILE requested but no SPFILE specified at startup
 
错误告知,不是以spfile启动的数据库。查看spfile参数竟然是 ,表示是以pfile启动的

SQL> show parameter spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string

cd $ORACLE_HOME/dba        查看发现,该目录下没有spfile,囧……,注数据库启动的过程是,spfile<sid>.ora-->spfile.ora-->init<sid>.ora-->init.ora
 
进入数据库,在默认路径生成spfile文件,请注意如果文件已存在,应该会被覆盖。

SQL> create spfile from pfile; 

File created.

 

之后重启数据库,让数据库以spfile启动。

SQL> alter system checkpoint;

System altered.

SQL> startup force;
ORACLE instance started.

Total System Global Area 6442450944 bytes
Fixed Size                  2030368 bytes
Variable Size            1090520288 bytes
Database Buffers         5335154688 bytes
Redo Buffers               14745600 bytes
Database mounted.
Database opened.


SQL> show parameter spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /opt/oracle/product/10.2.0/dbs
                                                 /spfileqgzx.ora

SQL> alter system set undo_tablespace=undotbs2;

System altered.

 

重启数据库,查看已经正常,对于alter system的操作,会在alert日志中记录,可以进去查看scope是both,还是memory,或者是spfile。这个我忘记看了,大家可以不加scope语句,查看alert日志,看是不是默认为both。
 

SQL> show parameter undo;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值