ORACLE 高手请指教:我都快哭了!

SmMpfei 2006-01-05 05:28:40
我们公司一台服务器,ups也意外断电,从新开机后,ORACLE 就出现了这样的问题:
登陆Enterprise Manager Console 可以登陆,但是登陆后安全性和存储中的下拉文件内容都打不开,
出现以下报错提示:ORA-01219:数据库未打开:仅允许在固定表/视图中查询.不知道是怎么回事?请指教!!!
我估计是断电导致数据库初始化文件被损坏了,就想登陆Application Development中的SQL Plus,看能不能恢复。可是在登陆时输入正确的用户名、密码、主机字符串登陆后,又提示报错,内容如下:
ERROR:
ORA-01033:ORACLE initialization or shutdown in progress.
然后就又弹出了登陆注册对话框???
还想请问一下:登陆SQL Plus 时用system 还是 sys ???
急请高手解决,不介意的话可以留下电话交流指教,真的很着急,我快疯了,救救我吧!!!
...全文
951 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjjzcgao 2006-03-15
  • 打赏
  • 举报
回复
原因很简单,数据库正在进行事务处理,突然断电的话,数据库不能保证数据的完整性与正确性,于是需要通过日志、历史记录等信息重新恢复数据,因而你会看到数据库一直在初始化,实际上是数据库正在恢复数据,这段时间会把数据库锁住,禁止访问。
如果数据不多,等一段时间就好了。
guishuanglin 2006-03-10
  • 打赏
  • 举报
回复
上面说的好,
zhangdinghua 2006-03-09
  • 打赏
  • 举报
回复
sql>shutdown immediate
sql>startup mount
sql>alter database open;

alter database open
执行上述步骤后,报如下错误:
*
ERROR 位于第 1 行:
ORA-00368: 重做日志块中的校验和错误
ORA-00353: 日志损坏接近块 192763 更改 1237346 时间 03/03/2006 17:26:10
ORA-00312: 联机日志 1 线程 1: 'C:\ORACLE\ORADATA\ZDH\REDO01.LOG'

接下来该怎么解决啊?
开发者开聊 2006-03-09
  • 打赏
  • 举报
回复
日志被破坏了
gcj0426 2006-03-09
  • 打赏
  • 举报
回复
仅供参考!!!
损坏非当前联机日志:
1、启动数据库,遇到ORA-00312 or ORA-00313错误,如:
ORA-00313: open failed for members of log group 4 of thread 1
ORA-00312: online log 3 thread 1: '/opt/oracle/db04/oradata/ORCL/redo03.log'
从这里我们知道日志组1的数据文件损坏或丢失了
从报警文件可以看到更详细的信息
2、查看V$log视图:
SQL> select group#,sequence#,archived,status from v$log;

GROUP# SEQUENCE# ARC STATUS

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

1 54 YES INACTIVE

2 55 NO CURRENT

3 53 YES INACTIVE


可以知道,该组是非当前状态,而且已经归档。
3、用CLEAR命令重建该日志文件
SQL>alter database clear logfile group 3;
如果是该日志组还没有归档,则需要用
SQL>alter database clear unarchived logfile group 3;
4、打开数据库,重新备份数据库
SQL>alter database open;
说明:
1)、如果损坏的是非当前的联机日志文件,一般只需要clear就可以重建该日志文件,但是如果该数据库处于归档状态但该日志还没有归档,就需要强行clear。
2)、建议clear,特别是强行clear后作一次数据库的全备份。
3)、此方法适用于归档与非归档数据库。

损坏当前联机日志:

归档模式下当前日志的损坏有两种情况,
一、是数据库是正常关闭,日志文件中没有未决的事务需要实例恢复,当前日志组的损坏就可以直接用alter database clear unarchived logfile group n来重建。
二、是日志组中有活动的事务,数据库需要媒体恢复,日志组需要用来同步,有两种补救办法
A. 最好的办法就是通过不完全恢复,可以保证数据库的一致性,但是这种办法要求在归档方式下,并且有可用的备份
B. 通过强制性恢复,但是可能导致数据库不一致。
下面分别用来说明这两种恢复方法
5.1.2.1 通过备份来恢复
1、打开数据库,会遇到一个类似的错误
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\TEST\REDO01.LOG'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系统找不到指定的文件

2、查看V$log,发现是当前日志
SQL> select group#,sequence#,archived,status from v$log;

GROUP# SEQUENCE# ARCHIVED STATUS
---------- ---------- -------- ----------------
1 1 NO CURRENT
2 2 YES INACTIVE
3 3 YES INACTIVE

3、发现clear不成功
SQL> alter database clear unarchived logfile group 1;
alter database clear unarchived logfile group 1
*
ERROR at line 1:
ORA-01624: log 1 needed for crash recovery of thread 1
ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\TEST\REDO01.LOG'

4、拷贝有效的数据库的全备份,并不完全恢复数据库
可以采用获取最近的SCN的办法用until scn恢复或用until cnacel恢复
recover database until cancel
先选择auto,尽量恢复可以利用的归档日志,然后重新
recover database until cancel
这次输入cancel,完成不完全恢复,也就是说恢复两次。
如:
SQL> recover database until cancel;
Auto
……
SQL> recover database until cancel;
Cancel;
5、利用alter database open resetlogs打开数据库
说明:
1、这种办法恢复的数据库是一致的不完全恢复,会丢失当前联机日志中的事务数据
2、这种方法适合于归档数据库并且有可用的数据库全备份。
3、恢复成功之后,记得再做一次数据库的全备份。
4、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。

如果没有备份,进行强制性恢复
1、打开数据库,会遇到一个类似的错误
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\TEST\REDO01.LOG'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系统找不到指定的文件

2、查看V$log,发现是当前日志
SQL> select group#,sequence#,archived,status from v$log;

GROUP# SEQUENCE# ARCHIVED STATUS
---------- ---------- -------- ----------------
1 1 NO CURRENT
2 2 YES INACTIVE
3 3 YES INACTIVE

3、发现clear不成功
SQL> alter database clear unarchived logfile group 1;
alter database clear unarchived logfile group 1
*
ERROR at line 1:
ORA-01624: log 1 needed for crash recovery of thread 1
ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\TEST\REDO01.LOG'

4、把数据库down掉
SQL>shutdown immediate

5、在init<sid>.ora中加入如下参数
_allow_resetlogs_corruption=TRUE

6、重新启动数据库,利用until cancel恢复
SQL>recover database until cancel;
Cancel
如果出错,不再理会,发出
SQL>alter database open resetlogs;

7、数据库被打开后,马上执行一个full export

8、shutdown数据库,去掉_all_resetlogs_corrupt参数

9、重建库

10、import并完成恢复

11、建议执行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE;
说明:
1、该恢复方法是没有办法之后的恢复方法,一般情况下建议不要采用,因为该方法可能导致数据库的不一致
2、该方法也丢失数据,但是丢失的数据没有上一种方法的数据多,主要是未写入数据文件的已提交或未提交数据。
3、建议成功后严格执行以上的7到11步,完成数据库的检查与分析
4、全部完成后做一次数据库的全备份
5、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。
gcj0426 2006-03-09
  • 打赏
  • 举报
回复
先做备份在搞它。。
联机日志错问题了。。联机日志分为当前联机日志和非当前联机日志。不知是哪种。。
cxn0808 2006-03-06
  • 打赏
  • 举报
回复
shutdown abort
再startup

或startup force
guangli_zhang 2006-02-09
  • 打赏
  • 举报
回复
你试试,在操作系统下,停止Oracle服务,再启动Oracle服务
chengtwn 2006-01-18
  • 打赏
  • 举报
回复
在运行里执行:conn internal/oracle as sysdba进行SQL模式
sql>shutdown immediate
sql>startup mount
sql>alter database open;

把以上这些步骤执行一下,看在哪里报错了,这就是手工启动数据库。
至于创建密码文件:在DOS下
orapwd file=d:\oracle\database\PWDoracle9.ora password=oracle
其中PWDoracle9.ora中的oracle9为你数据库的实例名并且要注意大小写
password=oracle中的oracle为internal的密码
gytyl 2006-01-12
  • 打赏
  • 举报
回复
这个问题,首先你要确定你是何种操作系统
何种版本的oracle
最好手工启动数据库
看看到底报什么错误
cenlmmx 2006-01-11
  • 打赏
  • 举报
回复
出现以下报错提示:ORA-01219:数据库未打开:仅允许在固定表/视图中查询
------------------------------
你处在mount状态

ORA-01033:ORACLE initialization or shutdown in progress.
-------------------------------------------------------
startup force
njhart2003 2006-01-09
  • 打赏
  • 举报
回复
在sqlplus里:
conn internal/oracle
SmMpfei 2006-01-09
  • 打赏
  • 举报
回复
在sqlplus里如何用internal登陆,密码是什么?在哪里可以找到???
谢谢!!!
SmMpfei 2006-01-09
  • 打赏
  • 举报
回复
可是sqlplus用system无法登陆啊!!!
我试试用internal登陆看看! 谢谢了
如果不能登陆,在哪里重做密码文件?
在哪里执行shutdown immediate和start mount呢?是不是在dos命令提示符底下?
在dos底下执行connect /as sysdba可以连接到数据库,提示“已连接”
starbzj 2006-01-07
  • 打赏
  • 举报
回复
这样的问题就是数据库崩溃啦。
有类似的问题可以找我啦,经常给人恢复数据库的。
我的MSN:starbzj2@hotmail.com
njhart2003 2006-01-06
  • 打赏
  • 举报
回复
如果是Windows系统的话,先在服务里把OracleXXXX服务重启一下,然后在Sqlplus里用internal用户登录,(如果不能登录,重做密码文件)shutdown immediate 后start mount,再打开数据库,看有什么提示...
tiger_hs 2006-01-06
  • 打赏
  • 举报
回复
执行 alter database open 看有什么错误
bobfang 2006-01-06
  • 打赏
  • 举报
回复
在服务器上执行sqlplus "/ as sysdba",看看是连接到数据库?
SmMpfei 2006-01-06
  • 打赏
  • 举报
回复
太让人失望了,怎么没有人理睬我呢?!!!
njhart2003 2006-01-06
  • 打赏
  • 举报
回复
>...现在就可以启动数据库了,开始无法连接数据库,...

你说的启动,是指Open吗?是以什么用户身份internal?

无法连接是以普通用户无法登陆?还是客户端无法连接?

有什么出错提示?
加载更多回复(3)

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧