ORA-01114: 将块写入文件 35 时出现 IO 错误

参考文档:

https://blog.csdn.net/z_x_1000/article/details/17263077

https://www.cnblogs.com/login2012/p/5775602.html

https://www.iteye.com/blog/yangyangcom-2200174


一、问题背景

最开始发现应用服务打不开,于是登录服务器发现Oracle数据关闭了,按照步骤重启,但是数据库启动后,应用程序还是无法连接数据库。开始查找原因,原来数据库表空间出现问题。解决过程中,前后出现了三个问题:

  1. ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询
  2. ORA-01114: 将块写入文件 时出现 IO 错误
  3. ORA-01041: 内部错误,hostdef 扩展名不存在

本文分别介绍三个问题的处理过程。

二、问题1-ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询

问题描述:

我们在操作Oracle时常常会遇到一个莫名其妙的问题,首先是用plsql登录的时候用sys能够登录,但是无法操作左边的表啊,表空间之类的,报错为ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询

到网上一查应该是某个.dbf文件残留;或者误删除(有意删除).dbf文件导致出现上述警告

解决方案:

一、首先介绍3种进入sql*plus操作的方式(编辑代码后续给出)

方式1:登录到本地sql*plus解决

 

 

以管理员身份登录,用户名Scott 密码为tiger(是具体情况而定)

方式2.登录当本地网页版主页处

utl:http://localhost:1158/em

 

sysdba身份登录上去,用户名可以是sys,至于登录口令是你安装的时候设置的(哈哈傻了吧,忘了吧。。。)登录后显示右边图片中的维护,找到sql*plus链接处,或者直接点击下面的sql*plus处

如图

 

显示如下sql*plus登录页面,登录时需要以数据库管理员身份登录

就可以进入编码阶段了

 

 

方式3.到运行处输入sqlplus/nolog 命令即可(如果显示你的命名无效之类的,说明你的Oracle路径没配置到path上,路径配置直参考:C:\oracle\product\10.2.0\db_1\bin)

然后就显示如下页面

 

 

二、接下来说到核心了,进入sql*plus可编辑处窗口后即输入以下编码(文字可忽略)

1.先链接 输入SQL> conn 用户名/密码 as sysdba 参考SQL> conn sys/orcl as sysdba

2.查看你的数据库信息SQL> select * from v$log;

3.关闭 例程,并卸载了数据库(放心,不是那个卸载意思,没事儿!) SQL> shutdown immediate;

4.从启数据库,并装载数据库 SQL> startup

5.修改数据库打开方式SQL> alter database open; 
6.SQL> alter database open resetlogs;

三、问题2-ORA-01114: 将块写入文件 时出现 IO 错误

今天应用服务器后台报一下错误:

2015-04-08 08:59:56,986 WARN [org.hibernate.util.JDBCExceptionReporter] - <SQL Error: 1114, SQLState: 64000>

2015-04-08 08:59:56,986 ERROR [org.hibernate.util.JDBCExceptionReporter] - <ORA-01114: 将块写入文件  时出现 IO 错误 (块 # )

ORA-01114: 将块写入文件 201 时出现 IO 错误 (块 # 47520)

ORA-27072: 文件 I/O 错误

Additional information: 4

Additional information: 47520

Additional information: 65536

在网上找资料说,是数据库临时表空间满了或者坏掉了。

查询临时表空间的大小
 select name, bytes/1024/1024 as "大小(M)" from v$tempfile order by bytes;

看到系统中最大数据文件/oradata/esbmonitor/temp01.dbf大小为372M,初步估计是temp表空间无法扩展的原因。

解决办法:

 

1、查询该用户下的默认临时表空间
   select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';
2、创建新的临时表空间
   create temporary tablespace temp01   tempfile '/oradata/esbmonitor/temp01.dbf'
   size 1000M autoextend on;
3、修改默认表空间
   alter database default temporary tablespace temp01;

四、问题3-ORA-01041: 内部错误,hostdef 扩展名不存在

在工作中打算将生产环境的数据库设置成归档模式时,遇到的问题。

一、重启数据库 

Sql代码:

  1. shutdown immediate;  
  2. startup mount;  

也就是在我执行startup mount时报了一个"ORA-01041: 内部错误,hostdef 扩展名不存在"这样的错误. 

二、原因:本人页碰到类似的错误,主要是我在toad中执行了sqlpus的命令,关闭了数据库,此时的监听也关闭了,然后我直接在服务器上面登录sqlpus,开启数据库,监听自己开启,此问题也没有了。

三、解决办法:

  1. 关掉当前的sqlplus窗口
  2. 打开cmd窗口,输入sqlplus /nolog
  3. conn /as sysdba;
  4. startup; 即可

四、验证:本人为此做了一个错误验证,电脑A为服务器,电脑B为远程访问端服务器处于一切正常状态,客户端进行访问,sys用户连接到服务器后执行shutdown immediate操作,数据库正常关闭,此时在服务器端登录cmd执行lsnrctl stop命令停止oracle监听服务,停止成功后客户端再执行startup mount操作,提示报错:未启动监听(该报错是正常的),然后在服务器端再执行lsnrctl start命令启动oracle监听服务,启动成功后客户端再执行startu mount操作,就会出现上述所产生的错误(ORA-01041: 内部错误,hostdef 扩展名不存在),按照上述方法可以解决问题。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值