UNDO表空间损坏,爆满,ORA-600[4194]/[4193]错误解决

模拟手工删除UNDO表空间 在ORADATA 中把UNDOTBS01.DBF 删除
模拟启库
SQL> STARUP;
*
第 1 行出现错误:
ORA-01157: 无法标识/锁定数据文件 2 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 2: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF'

利用系统本身的默认手动管理 MANUAL UNDO 表空间 SYSTEM 启动库 
SQL> CREATE PFILE='C:\PFILE20130930.ORA' FROM SPFILE;
SQL> SHUTDOWN IMMEDIATE;
编辑PFILE 文件 修改

*.undo_management='MANUAL'   
*.undo_tablespace='SYSTEM'
保存
SQL> startup  pfile='c:\pfile1.ora'
ORACLE 例程已经启动。
Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              83887460 bytes
Database Buffers           79691776 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 2 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 2: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF'
SQL> show parameter undo;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ----------------
undo_management                      string      MANUAL
undo_retention                       integer     900
undo_tablespace                      string      system
SQL> alter database datafile 2 offline;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> create undo tablespace undotbs02 datafile 'C:\ORACLE\PRODUCT\10.2.0\ORADATA
\ORCL\UNDOTBS02.DBF' size 100M;
表空间已创建。
SQL> alter system set undo_tablespace='undotbs02' scope=spfile;
alter system set undo_tablespace='undotbs02' scope=spfile
*
第 1 行出现错误:
ORA-32001: 已请求写入 SPFILE, 但是在启动时未指定 SPFILE

--因为我们是利用PFILE启动的 这个时候我们应该去修改PFILE 文件,再重新启库

*.undo_management='AUTO'   
*.undo_tablespace='UNDOTBS02'

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup  pfile='c:\pfile1.ora'
ORACLE 例程已经启动。

Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              83887460 bytes
Database Buffers           79691776 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
数据库已经打开。
SQL>
SQL>
SQL> show parameter undo;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS02
SQL>create spfile from pfile

文件已创建。
这里我们UNDO表空间恢复完毕

此方法还可以解决启动的时候出现ORA-600[4194]/[4193]错误
Tue Feb 14 09:34:11 2012
Errors in file d:\oracle\product\10.2.0\admin\interlib\bdump\interlib_smon_2784.trc:
ORA-01595: error freeing extent (2) of rollback segment (3))
ORA-00607: Internal error occurred while making a change to a data block
ORA-00600: internal error code, arguments: [4194], [6], [30], [], [], [], [], []
如果出现极端的情况可能需要做如下处理:
1.使用_offline_rollback_segments和_corrupted_rollback_segments屏蔽掉有问题的undo segment
2.继续可能出现ora-600[2662],需要推进scn

这个错误一般是由于 undo 表空间损坏或不存在导致的。 首先,你可以检查一下数据库中是否存在该 undo 表空间,可以通过执行以下 SQL 语句进行检查: ``` SELECT tablespace_name FROM dba_tablespaces WHERE tablespace_name='<undo_tablespace_name>'; ``` 其中 `<undo_tablespace_name>` 应该替换成你要检查的 undo 表空间的名称。 如果查询结果为空,说明该表空间不存在,你需要创建一个新的 undo 表空间。如果查询结果不为空,则需要进一步检查该 undo 表空间是否正常。 你可以执行以下 SQL 语句检查 undo 表空间是否正常: ``` SELECT status FROM v$rollstat WHERE segment_name='<undo_tablespace_name>'; ``` 其中 `<undo_tablespace_name>` 应该替换成你要检查的 undo 表空间的名称。 如果查询结果为 `ONLINE`,则说明该 undo 表空间正常。如果查询结果为 `OFFLINE` 或者其他异常状态,则说明该 undo 表空间存在问题,需要进行修复或者重建。 如果你需要创建一个新的 undo 表空间,可以执行以下 SQL 语句: ``` CREATE UNDO TABLESPACE <undo_tablespace_name> DATAFILE '<path_to_undo_datafile>' SIZE <size_in_MB>; ``` 其中 `<undo_tablespace_name>` 是你要创建的 undo 表空间名称,`<path_to_undo_datafile>` 是你要指定的 undo 数据文件路径,`<size_in_MB>` 是你要指定的 undo 表空间大小,单位为 MB。 如果你需要修复一个存在问题的 undo 表空间,可以参考以下步骤: 1. 首先备份该 undo 表空间对应的数据文件,以防止数据丢失。 2. 尝试在线修复该 undo 表空间,你可以执行以下 SQL 语句: ``` ALTER TABLESPACE <undo_tablespace_name> BEGIN BACKUP; ALTER TABLESPACE <undo_tablespace_name> END BACKUP; ``` 这两条 SQL 语句可以将该 undo 表空间置于备份模式,然后再退出备份模式。如果该 undo 表空间存在一些逻辑损坏,这两条 SQL 语句可能会修复这些问题。 3. 如果在线修复失败,你可以尝试离线修复该 undo 表空间,你可以执行以下 SQL 语句: ``` ALTER DATABASE DATAFILE '<path_to_undo_datafile>' OFFLINE; RECOVER DATAFILE '<path_to_undo_datafile>'; ALTER DATABASE DATAFILE '<path_to_undo_datafile>' ONLINE; ``` 这三条 SQL 语句可以将该 undo 数据文件置为离线状态,然后进行数据文件恢复,最后再将该数据文件置为在线状态。 4. 如果无法修复该 undo 表空间,你可以考虑重建该 undo 表空间,你可以执行以下 SQL 语句: ``` DROP TABLESPACE <undo_tablespace_name> INCLUDING CONTENTS AND DATAFILES; CREATE UNDO TABLESPACE <undo_tablespace_name> DATAFILE '<path_to_undo_datafile>' SIZE <size_in_MB>; ``` 这两条 SQL 语句可以先删除存在问题的 undo 表空间,然后重新创建一个新的 undo 表空间。请注意,这个操作会删除该 undo 表空间中的所有数据,所以请务必提前备份数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值