ORACLE9实列和监听自动DOWN~~~求助

[复制链接]
查看11 | 回复9 | 2014-2-19 11:55:14 | 显示全部楼层 |阅读模式
系统:WIN2003,配置P4 2.4G,1G的内存,
ORACLE 9.0.1.0.1 实列ORCL
databases 是noarchiving
前几天监听突然出问题,工作站不能连接到服务器,
但是在服务器上TNSPING 没有问题,在工作站不能TNSPING上,那时实列也正常,在WIN的服务中监听也是起来的,因为没时间检查,就重起系统,重起后可以使用了,但是在使用4-5个小时后,监听又出现问题,工作站不能连接,重起系统又可以用了
今天在服务器上启动SQLPLUS时出现报错:

ORA-01034oracle not uvailable

ORA-27101shared memory realm does not exist
STARTUP 后,服务器又正常工作
请问那位能给我点寻错提示~~
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
1.是否mts模式?
2.可能的话打补丁到9014
3.alert.log中的错误信息?
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
数据库设置:
System parameters with non-default values:
processes
= 150
timed_statistics = TRUE
shared_pool_size = 50331648
java_pool_size = 33554432
control_files
= d:\oracle\oradata\orcl\control01.ctl, d:\oracle\oradata\orcl\control02.ctl, d:\oracle\oradata\orcl\control03.ctl
db_block_size
= 4096
db_cache_size
= 33554432
compatible
= 9.0.0
fast_start_mttr_target = 300
undo_management
= AUTO
undo_tablespace
= UNDOTBS
remote_login_passwordfile= EXCLUSIVE
db_domain
=
instance_name
= orcl
dispatchers
= (PROTOCOL=TCP)(SER=MODOSE), (PROTOCOL=TCP)(PRE=oracle.aurora.server.GiopServer), (PROTOCOL=TCP)(PRE=oracle.aurora.server.SGiopServer)
background_dump_dest = d:\oracle\admin\orcl\bdump
user_dump_dest = d:\oracle\admin\orcl\udump
core_dump_dest = d:\oracle\admin\orcl\cdump
sort_area_size = 524288
db_name
= orcl
open_cursors
= 300
ifile
= d:\oracle\admin\orcl\pfile\init.or
错误信息:先是这个错误
Thu Sep 23 09:03:30 2004
Errors in file d:\oracle\admin\orcl\udump\orclP000.TRC:
ORA-01578: ORACLE data block corrupted (file # 8, block # 1248042)
ORA-01110: data file 8: 'D:\ORACLE\ORA90\ORCL\USERS01.
后面就变成这了,前面的这个错误没再出现过
Thu Sep 23 09:03:31 2004
SMON: Restarting fast_start parallel rollback
Thu Sep 23 09:03:31 2004
Errors in file d:\oracle\admin\orcl\bdump\orclSMON.TRC:
ORA-01578: ORACLE data block corrupted (file # 2, block # 272960)
ORA-01110: data file 2: 'D:\ORACLE\ORA90\ORCL\UNDOTBS01.DBF'
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
我学ORACLE还没多久,请问还需要什么信息~~~我需要在那方面修复?MTS是共享模式,我这的服务器好象没开,库不是我建的,请问能用什么方法看的到
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
大哥,你的回滚段表空间有坏快了,称数据库还能起起来赶快做导出,然后检查磁盘,重做数据库。要是数据库起不来了,哭都来不及了
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
大哥,你的回滚段表空间有坏快了,称数据库还能起起来赶快做导出,然后检查磁盘,重做数据库。要是数据库起不来了,哭都来不及了
我都被你急死了,exp应该会用把
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
知道,谢谢~`~感谢~~
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
OK ~~那就照这里的修复回滚段那篇帖子修复好了,数据已经在备份了~~谢谢帮助我的人,
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
有回滚段修复的帖子吗,能把地址贴出来吗
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
我这有,是piner that's life企鹅兄的劳动成果~~,先感谢他辛勤劳动,把资料收集起来(他的头像是企鹅,我想我这样称呼他应该不会生气吧),我贴上来
5.3 损坏回滚数据文件的恢复方法
回滚段表空间中的一个数据文件丢失或者损坏导致数据库无法识别它,在启动数据库的时候会出现ORA-1157, ORA-1110的错误,或者操作系统级别的错误,例如ORA-7360。在关闭数据库的时候(normal或者immediate)会出现ORA-1116, ORA-1110的错误,或者操作系统级别的错误,例如ORA-7368。
感谢coolyl的辛勤工作,关于回滚段的大部分内容都是摘自他在itpub的文章。
5.3.1 损坏数据文件,但数据库处于Open状态
如果你发现有回滚段的数据文件丢失或者损坏了,而此时的数据库是处于打开的状态下并且在运行,就千万不要关闭数据库了,因为在大多数的情况下打开的时候比关闭的时候好解决问题一些。
一般也是存在有两种情况:
A。是offline丢失或损坏的数据文件,然后从一个备份中恢复,执行介质恢复以保持一致性。但是这种情况要求数据库是归档方式下才可以采用的。
B。是offline那个存在丢失或损坏的数据文件所在的整个回滚段表空间,然后删除整个回滚段表空间并重建,但是你必须要杀掉那些在回滚段中已经激活的用户进程才可以offline的。
通常第一种情况就比较简单实现,但是更多的用户事务将会出错并且回滚。
A的具体步骤:
1。offline丢失或损坏的数据文件
ALTER DATABASE DATAFILE '' OFFLINE;
2。从一个有效的备份中恢复。
3。执行以下查询
SELECT V1.GROUP#, MEMBER, SEQUENCE#
FROM V$LOG V1, V$LOGFILE V2
WHERE V1.GROUP# = V2.GROUP# ;
这个将列出你的所有redolog文件以及它们所代表的sequence numbers。
4。恢复数据文件。
RECOVER DATAFILE ''
5。确信你应用了所有的redolog文件,直至出现提示信息"Media recovery complete"。
6。online那个数据文件。
ALTER DATABASE DATAFILE '' ONLINE;
B的具体步骤:
1。offline存在丢失或损坏的数据文件的回滚段表空间中的所有回滚段。
ALTER ROLLBACK SEGMENTOFFLINE;
2。检测当然回滚段的状态。
SELECT SEGMENT_NAME, STATUS FROM DBA_ROLLBACK_SEGS
WHERE TABLESPACE_NAME = '[table]';
3。删除所有offline的回滚段
DROP ROLLBACK SEGMENT ;
4。处理那些online状态的回滚段。
重新执行第二步的查询
如果你已经执行过offline操作的回滚段状态仍然是online,则说明这个回滚段内有活动的事务。你要接着查询
SELECT SEGMENT_NAME, XACTS ACTIVE_TX, V.STATUS
FROM V$ROLLSTAT V, DBA_ROLLBACK_SEGS
WHERE TABLESPACE_NAME = '[table]' AND SEGMENT_ID = USN;
如果没有返回结果,则证明存在丢失或损坏的数据文件的回滚段表空间中的所有回滚段都已经被offline了,然后重新执行第二步,第三步。如果查询有结果返回,则状态应该是"PENDING OFFLINE".接着查看ACTIVE_TX列,如果值为0,则表明此回滚段中已经没有未处理的事务了,很快就会被offline的,然后等它offline后重新执行2,3步后跳至第六步。如果值大于0,则继续到第五步。
5。强制那些包含活动事务的回滚段offline。
活动的事务应该被提交或者回滚,执行下面的查询看看哪些用户占用了回滚段:
SELECT S.SID, S.SERIAL#, S.USERNAME, R.NAME "ROLLBACK"
FROM V$SESSION S, V$TRANSACTION T, V$ROLLNAME R
WHERE R.NAME IN ('', ... , '')
AND S.TADDR = T.ADDR AND T.XIDUSN = R.USN;
最好能直接联系到那些user让他们自己去回滚或者提交事务,如果不能做到的话,那就只能强制性的杀掉进程了。
ALTER SYSTEM KILL SESSION ', ';
杀掉进程后再过一段时间后回滚段会自动清除那些事务,然后就可以回到第二步继续查询了。
6。删除回滚段。
DROP TABLESPACE [table] INCLUDING CONTENTS;
7。重建回滚段并online它们
说明:
1、数据库如果是open状态,就可以直接在open状态下解决问题,没有必要停下数据库,增加down机时间
2、不管上上面那种恢复方法都是正常性的恢复,不会引起数据的不一致或错误。
5.3.2数据库关闭,但是数据文件中没有活动事务
这种情况下最简单的方法就是offline drop掉这个坏了的或者丢失的数据文件,然后以restricted模式打开数据库然后删除并且重建包含损坏文件的回滚段表空间。
具体步骤如下:
1。确定数据库是正常的关闭的。方法是可以去查看alert文件,到最后看是否有如下信息:
"alter database dismount
Completed: alter database dismount"
如果有的话,就证明数据库是正常关闭的,否则就不能用这个方法去恢复。
2。修改init参数文件,移去ROLLBACK_SEGMENTS中包含的损坏数据文件的回滚段表空间的回滚段,如果你不能确定哪些回滚段是坏的,简单的方法是你可以注释掉整个ROLLBACK_SEGMENTS。
3。以restricted模式去mount数据库。
STARTUP RESTRICT MOUNT
4。offline drop掉那个坏的数据文件
ALTER DATABASE DATAFILE '' OFFLINE DROP;
5。打开数据库
ALTER DATABASE OPEN
如果你看到如下信息"Statement processed",则跳到第7步,如果你看到ORA-604, ORA-376, and ORA-1110的错误信息,继续第6步。
6。正常的关闭数据库,然后在init文件中注释掉ROLLBACK_SEGMENTS,并加入隐含参数
_corrupted_rollback_segments = ( ,....,)
然后以restricted模式打开数据库
STARTUP RESTRICT
7。删除掉那个包含损坏文件的回滚段表空间。
DROP TABLESPACE [table] INCLUDING CONTENTS;
8。重建回滚段表空间,记得创建后要把回滚段都online。
9。重新使数据库对所有用户可用。
ALTER SYSTEM DISABLE RESTRICTED SESSION;
10。然后正常关闭数据库,修改init文件,如果开始只是注释掉了ROLLBACK_SEGMENTS的,就去掉注释即可,如果加了隐含参数的,注释掉它,并在ROLLBACK_SEGMENTS加入所有的回滚段。
11。正常启动数据库。
Startup
说明:
1、这种方法的前提条件是数据库是正常关闭(不是abort)可用
2、这种方法是正常方法,不会引起数据错误
5.3.3 数据库关闭,数据文件中有活动事务,没有可用备份
一般造成这种原因的情况是采用了shutdown abort或其它原因异常关机(如断电)导致的。
1、开启一个事务
SQL> set transaction use rollback segment rbs0;
Transaction set.
SQL> insert into test (a) values (1);
1 row created.
2、异常关闭
SQL> shutdown abort;
ORACLE instance shut down.
3、删除rbs的一个数据文件
C:>del D:\Oracle\oradata\chen\rbs01.
4、修改INIT.ora
rollback_segments=(system)
添加_corrupted_rollback_segments=(rbs0,rbs1,rbs2……)
5、SQL>Startup mount
6、SQL>alter database datafile ’d:\oracle\oradata\t8i\rbs01.dbf’ offline drop;
数据库已更改。
7、SQL>recover database ;
完成介质恢复。
8、SQL>alter database open ;
数据库已更改。
9、SQL>select * from v$rollname;
USN NAME
----------------- ---------------------
0 SYSTEM
10、SQL>select segment_name,tablespace_name,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------ ------------------------------------
SYSTEM SYSTEM ONLINE
RBS0 RBS NEEDS RECOVERY
RBS1 RBS NEEDS RECOVERY
RBS2 RBS NEEDS RECOVERY
11、SQL>drop rollback segment rbs0;
重算段已丢弃。
SQL>drop rollback segment rbs1;
重算段已丢弃。
SQL>drop rollback segment rbs2;
重算段已丢弃。
12、SQL>select segment_name,tablespace_name,status from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
------------------------------ ------ ------------------------------------
SYSTEM SYSTEM ONLINE
13、SQL>drop tablespace rbs including contents;
表空间已丢弃。
14、重建新的回滚表空间及回滚段,并联机。
15、SQL>shutdown abort
16、再修改INIT.ora
rollback_segments=(rbs0,rbs1,rbs2)
将_corrupted_rollback_segments=(rbs0,rbs1,rbs2)去掉。
17、SQL>startup
1、这种办法是万不得以的时候使用的方法,如果有备份,都建议从备份上进行恢复
2、这种方法恢复的数据库,可能会引起数据库的数据错误
3、恢复成功以后,建议exp/imp数据,并重新分析检查数据库
5.3.4 数据库关闭,数据文件中有活动事务,从备份恢复
1。从一个有效的备份中恢复损坏的数据文件。
2。mount数据库。
3。执行以下查询
SELECT FILE#, NAME, STATUS FROM V$DATAFILE;
如果发现要恢复的文件是offline状态的话,要先online它
ALTER DATABASE DATAFILE '' ONLINE;
4。执行以下查询
SELECT V1.GROUP#, MEMBER, SEQUENCE#, FIRST_CHANGE#
FROM V$LOG V1, V$LOGFILE V2
WHERE V1.GROUP# = V2.GROUP# ;
这个将列出redlog文件所代表的sequence和first change numbers。
5。如果数据库是非归档情况下,执行以下查询:
SELECT FILE#, CHANGE# FROM V$RECOVER_FILE;
如果CHANGE#大于最小的redolog文件的FIRST_CHANGE#,则数据文件可以被恢复,记得在应用日志的时候要把所有redolog文件全部应用一遍。
如果CHANGE#小于最小的redolog文件的FIRST_CHANGE#,则数据文件就不可以被恢复了,这时候你要从一个有效的全备份中去恢复数据库了,如果没有全备份的话,那你就只能把数据库强制打开到一个不一致的状态去exp出数据,然后重新建库导入数据,因为这种方式的恢复oracle是不推荐用户自己做的,所以这里我就不详细说明了。
6。恢复数据文件
RECOVER DATAFILE ''
7。确信你应用了所有的redolog文件,直至出现提示信息"Media recovery complete"。
8。打开数据库。
说明:
1、这种方法要求在归档有备份的方式下进行,而且是建议方式
2、这种方法不会导致数据库的错误


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行