linux ora 01157,ORA-01157错误的解决

今天,我在SQL*PLUS想看下查询数字字典的执行计划:

SQL> SET TIMING ON;

SQL> SET AUTOTRACE TRACEONLY;

SQL> SELECT * FROM DBA_ROLES WHERE NOT EXISTS

2  (SELECT NULL FROM DBA_ROLE_PRIVS PR WHERE PR.granted_role=DBA_ROLES.role);

已用时间:  00: 00: 00.51

执行计划

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

ERROR:

ORA-01157: 无法标识/锁定数据文件  - 请参阅 DBWR 跟踪文件

SP2-0612: 生成 AUTOTRACE EXPLAIN 报告时出错

统计信息

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

15  recursive calls

0  db block gets

473  consistent gets

0  physical reads

0  redo size

509  bytes sent via SQL*Net to client

512  bytes received via SQL*Net from client

2  SQL*Net roundtrips to/from client

33  sorts (memory)

0  sorts (disk)

1  rows processed

难道是我的数据库不能跑出执行计划?

我用了select * from prd where code='04COCA04000'去测试,正常,再用了select * from dba_roles去跑执行计划,一样的错误,这证明查询数据字典的数据都不能跑执行计划,什么原因呢?

这才想起去看DBWR跟踪文件.

看到了这样一段话:

***********END PLSQL RUNTIME DUMP************

*** KEWUXS - encountered error: (ORA-01157: cannot identify/lock data file 201 - see DBWR trace file

ORA-01110: data file 201: 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB\TEMP01.DBF'

)

*** KEWFADS: Error=13515 encountered by Auto DBFUS slave.

我初步确定是临时文件出了问题.

我查了一下临时文件:

SQL> select * from v$tempfile;

FILE# CREATION_CHANGE# CREATION_TIME        TS#     RFILE# STATUS  ENABLED         BYTES     BLOCKS CREATE_BYTES BLOCK_SIZE NAME

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

1                0                        3          1 ONLINE  READ WRITE          0          0     20971520       8192 C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB\TEMP01.DBF

我知道了,现在这个数据库是我前天才建的,文件是拿其他数据库备份下来的,放在d:\oracle\product\10.1.0\oradata\db目录下,数据文件,重做日记,控制文件都rename了,就是忘了rename临时文件.于是重建临时文件.

SQL> alter database tempfile 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB\TEMP01.DBF'  offline drop;

SQL> alter tablespace temp add tempfile 'd:\oracle\product\10.1.0\oradata\TEMP01.DBF' size 100M;

Tablespace altered

SQL> select * from v$tempfile;

FILE# CREATION_CHANGE# CREATION_TIME        TS#     RFILE# STATUS  ENABLED         BYTES     BLOCKS CREATE_BYTES BLOCK_SIZE NAME

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

1                0                        3          1 ONLINE  READ WRITE  104857600      12800    104857600       8192 D:\ORACLE\PRODUCT\10.1.0\ORADATA\TEMP01.DBF

SQL> SELECT * FROM DBA_ROLES WHERE NOT EXISTS

2  (SELECT NULL FROM DBA_ROLE_PRIVS PR WHERE PR.granted_role=DBA_ROLES.role);

已用时间:  00: 00: 00.45

执行计划

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

0      SELECT STATEMENT ptimizer=ALL_ROWS (Cost=142 Card=34 Bytes=

816)

1    0   FILTER

2    1     TABLE ACCESS (FULL) OF 'USER$' (CLUSTER) (Cost=3 Card=34

Bytes=816)

3    1     SORT (GROUP BY) (Cost=8 Card=4 Bytes=256)

4    3       NESTED LOOPS (OUTER) (Cost=7 Card=4 Bytes=256)

5    4         HASH JOIN (Cost=7 Card=4 Bytes=152)

6    5           TABLE ACCESS (BY INDEX ROWID) OF 'USER$' (CLUSTER)

(Cost=1 Card=1 Bytes=15)

7    6             INDEX (UNIQUE SCAN) OF 'I_USER1' (INDEX (UNIQUE)

) (Cost=0 Card=1)

8    5           HASH JOIN (Cost=6 Card=673 Bytes=15479)

9    8             INDEX (FAST FULL SCAN) OF 'I_SYSAUTH1' (INDEX (U

NIQUE)) (Cost=2 Card=673 Bytes=5384)

10    8             TABLE ACCESS (FULL) OF 'USER$' (CLUSTER) (Cost=3

Card=64 Bytes=960)

11    4         INDEX (UNIQUE SCAN) OF 'I_DEFROLE1' (INDEX (UNIQUE))

(Cost=0 Card=1 Bytes=26)

统计信息

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

0  recursive calls

0  db block gets

469  consistent gets

0  physical reads

0  redo size

509  bytes sent via SQL*Net to client

512  bytes received via SQL*Net from client

2  SQL*Net roundtrips to/from client

33  sorts (memory)

0  sorts (disk)

1  rows processed

ok,正常,这说明查询数字字典视图的执行计划跟临时文件有关.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值