oracle for col,ORA-00701 warmstarting对象的另类解决方法

ORA-00701 warmstarting对象的另类解决方法

6ee5639a40442445944d63b514b2dd02.png

有朋友在ITPUB问到一个问题,如何resize一个SYSTEM表空间。

从常规来说,如果我们希望resize一个文件,这个文件能够resize的部分必然是没有数据,未被使用的,也就是说,我们需要找到一个文件最高的Extent号,这个Extent之外的空间是可以被resize的,以下一个查询可以帮我们找到一个文件最末端的对象:col segment_name for a30

col owner for a10

SELECT *

FROM (SELECT   owner, segment_name,segment_type,block_id, blocks

FROM dba_extents

WHERE tablespace_name = 'SYSTEM' and file_id='&fileid'

ORDER BY block_id DESC)

WHERE ROWNUM < 11;

看一下我的一个数据库:SQL> col segment_name for a30

SQL> col owner for a10

SQL> SELECT *

2    FROM (SELECT   owner, segment_name,segment_type,block_id, blocks

3              FROM dba_extents

4             WHERE tablespace_name = 'SYSTEM' and file_id='&fileid'

5          ORDER BY block_id DESC)

6  WHERE ROWNUM < 11;

Enter value for fileid: 1

old   4:            WHERE tablespace_name = 'SYSTEM' and file_id='&fileid'

new   4:            WHERE tablespace_name = 'SYSTEM' and file_id='1'

OWNER      SEGMENT_NAME                   SEGMENT_TYPE         BLOCK_ID     BLOCKS

---------- ------------------------------ ------------------ ---------- ----------

SYS        EYGLE_IP                       TABLE                   25609        128

SYS        EYGLE_IP                       TABLE                   25481        128

SYS        EYGLE_IP                       TABLE                   25353        128

SYS        I_H_OBJ#_COL#                  INDEX                   25305          8

SYS        TEST                           TABLE                   25297          8

SYS        I_TEST                         INDEX                   25289          8

SYS        TEST                           TABLE                   25281          8

SYS        T                              TABLE                   25273          8

SYS        EYGLE_IP                       TABLE                   25265          8

SYS        EYGLE_IP                       TABLE                   25257          8

10 rows selected.

我们注意到高水位上有些索引是可以通过rebuild来改变其位置的,但是在正常模式下,Oracle不允许rebuild这些索引:SQL> alter index I_H_OBJ#_COL# rebuild;

alter index I_H_OBJ#_COL# rebuild

*

ERROR at line 1:

ORA-00701: object necessary for warmstarting database cannot be altered

有两种方式可以使得这些对象允许被重建:

1.通过migrate模式SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup migrate;

ORACLE instance started.

Total System Global Area 139531744 bytes

Fixed Size 452064 bytes

Variable Size 121634816 bytes

Database Buffers 16777216 bytes

Redo Buffers 667648 bytes

Database mounted.

Database opened.

SQL> alter index I_H_OBJ#_COL# rebuild;

Index altered.

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area 139531744 bytes

Fixed Size 452064 bytes

Variable Size 121634816 bytes

Database Buffers 16777216 bytes

Redo Buffers 667648 bytes

Database mounted.

Database opened.

2.通过一个内部事件SQL> alter system set event='38003 trace name context forever, level 10' scope=spfile;

System altered.

SQL> startup force;

ORACLE instance started.

Total System Global Area 139531744 bytes

Fixed Size 452064 bytes

Variable Size 121634816 bytes

Database Buffers 16777216 bytes

Redo Buffers 667648 bytes

Database mounted.

Database opened.

SQL> alter index i_h_obj#_col# rebuild;

Index altered.

38003事件的作用是:CBO Disable column stats for the dictionary objects in recursive SQL

也就是说可以将部分对象从启动的bootstrap$需要里剥离出来,从而可以被在线rebuild.

这个事件能够影响的对象很有限,这类操作也是极其危险的,所以不在这里详细列出。

-The End-

By eygle on 2007-02-15 10:07 |

Comments (4) |

Internal | 1359 |

4 Comments

eygle有没有验证下系统有没有什么异常?

这样的操作还是不敢玩呀

没问题阿,对于索引一般问题不大,出现坏块如果数据库无法启动可以照此处理,正常情况下不推荐这样操作。

我以前遇到一例,在I_OBJ1索引上出现坏块,

在startup migrate后rebuild直接报死锁,设置38003也一样

以上两种方法能修正的情况极为有限,I_OBJ1可能是bootstrap必须的,那就只能通过备份来恢复了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值