Skip to Main Content

Chinese

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

关于底层视图更新的问题

957374Aug 23 2012 — edited Aug 23 2012
猜测背景:
某个测试数据库中,有人在建立表空间的时候将数据文件制定到了$ORACLE_HOME/dbs,而最终导致了oracle的安装目录100%。
随后在释放空间的时候,管理员将该目录下面的几个数据文件删除掉了。当然如果发现的及时,则应该可以挽救。但是这是测试库,平时鲜有人关心。
之后由于硬件故障导致了主机重启,最终导致故障发生。


之后电话通知了我们,发现alert中大量出现:
Exception [type: SIGSEGV, Address not mapped to object] [ADDR:0x100380A50] [PC:0x4000000003F1E0E0, kcbgtcr()+13184] [exception issued by pid: 3672656, uid: 0]
Errors in file /oracle/app/diag/rdbms/tsdb/tsdb/trace/tsdb_ora_14117.trc (incident=460572):
ORA-07445: exception encountered: core dump [kcbgtcr()+13184] [SIGSEGV] [ADDR:0x100380A50] [PC:0x4000000003F1E0E0] [Address not mapped to object] []
Incident details in: /oracle/app/diag/rdbms/tsdb/tsdb/incident/incdir_460572/tsdb_ora_14117_i460572.trc
而且alert中记录的日志最早是"Mon Aug 13 09:09:03 2012"的,就是说这之前由于空间一直是100%,alert中都没有记录。

推测宕机原因和7445有关。
该数据库是非归档模式。
检查该数据库的状态,为非归档模式。
SQL> archive log list
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /oracle/app/product/11.1.0/db_1/dbs/arch
Oldest online log sequence 19201
Current log sequence 19203

检查表空间状态:
SELECT r.FILE# AS df#, d.NAME AS df_name, t.NAME AS tbsp_name,
d.STATUS, r.ERROR, r.CHANGE#, r.TIME
FROM V$RECOVER_FILE r, V$DATAFILE d, V$TABLESPACE t
WHERE t.TS# = d.TS#
AND d.FILE# = r.FILE#;

DF# DF_NAME TBSP_NAME STATUS ERROR CHANGE# TIME
---- ------------------------------------------------------------ --------------- ------- ------------------------------ --------------------- ------------
31 /oracle/app/product/11.1.0/db_1/dbs/TBS_ABC1 TBS_ABC RECOVER FILE NOT FOUND 0
32 /oracle/app/product/11.1.0/db_1/dbs/TBS_ABC2 TBS_ABC RECOVER FILE NOT FOUND 0
33 /oracle/app/product/11.1.0/db_1/dbs/TBS_ABC3 TBS_ABC RECOVER FILE NOT FOUND 0
34 /oracle/app/product/11.1.0/db_1/dbs/TBS_ABC4 TBS_ABC RECOVER FILE NOT FOUND 0

这几个数据文件都不存在了。
尝试执行:
drop tablespace tbs_abc include contents and datafiles;
提示表空间不存在。
之后删除数据文件,提示成功,但是执行上面的SQL,还是存在。
alter database datafile '/oracle/app/product/11.1.0/db_1/dbs/TBS_ABC1' offline drop;
alter database datafile '/oracle/app/product/11.1.0/db_1/dbs/TBS_ABC2' offline drop;
alter database datafile '/oracle/app/product/11.1.0/db_1/dbs/TBS_ABC3' offline drop;
alter database datafile '/oracle/app/product/11.1.0/db_1/dbs/TBS_ABC4' offline drop;

为了删除该表空间在数据库中的信息,我手工update了file$和TS$中的和TBS_ABC表空间相关的状态信息,并重启了DB,还是没有效果。
随后就脑残了,由于人为file$的文件编号是可以重用的,于是就手工将这四个数据文件的信息delete了。重启后故障依旧。

dump出了controlfile之后看到了这几个数据文件的信息仍旧存在,本来人为重建控制文件,在重建时候讲这几个datafile信息删除掉应该就能解决问题的。
但是已经将问题提交到了上级,重建控制文件必然导致一些信息的丢失。因此就没有操作。

之后我使用10046对create tablespace和drop tablespace进行了分析,这两个操作只对file$和ts$进行了数据的操作,并未对其他表进行维护。

背景讲完了,我有如下疑问:
1.数据库中的X$类视图的信息是不是都是从??$类的基表中读取的信息而构成的。
2.如果??$的基表信息改变了,那么x$表中的信息在什么情况下会更新?
3.如果像我做的手工将file$中的信息删除了,更新ts$中对应表空间的状态为删除,同时在重建控制文件时候讲对应信息删除后,启动数据库的时候是否会将所有相关的信息自动删除?
4.如果使用hccheck检查一下,出来的不一致情况,要如何进行维护?







This post has been answered by LiuMaclean(刘相兵) on Aug 23 2012
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Sep 20 2012
Added on Aug 23 2012
4 comments
460 views