Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2837844
  • 博文数量: 599
  • 博客积分: 16398
  • 博客等级: 上将
  • 技术积分: 6875
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-30 12:04
个人简介

WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606

文章分类

全部博文(599)

文章存档

2014年(12)

2013年(56)

2012年(199)

2011年(105)

2010年(128)

2009年(99)

分类: Oracle

2012-08-06 16:18:30

在数据库启动的过程中可能遇到如下的错误:
 

点击(此处)折叠或打开

  1. [oracle@db2server huateng]$ sqlplus / as sysdba

  2. SQL*Plus: Release 11.2.0.1.0 Production on Sun Aug 5 17:24:07 2012

  3. Copyright (c) 1982, 2009, Oracle. All rights reserved.

  4. Connected to an idle instance.

  5. SQL> startup
  6. ORACLE instance started.

  7. Total System Global Area 506368000 bytes
  8. Fixed Size 1337520 bytes
  9. Variable Size 331351888 bytes
  10. Database Buffers 167772160 bytes
  11. Redo Buffers 5906432 bytes
  12. Database mounted.
  13. ORA-01122: database file 6 failed verification check
  14. ORA-01110: data file 6: '/u01/app/oracle/oradata/huateng/htyansp01.dbf'
  15. ORA-01200: actual file size of 7399 is smaller than correct size of 12800
  16. blocks


  17. SQL>

这个错误表示文件头记录的数据文件的大小与实际不一致:
 

点击(此处)折叠或打开

  1. SQL> ! ls -ltr /u01/app/oracle/oradata/huateng/htyansp01.dbf
  2. -rw-r--r-- 1 oracle oinstall 60620800 08-05 17:25 /u01/app/oracle/oradata/huateng/htyansp01.dbf


  3. SQL> select bytes from v$datafile where name='/u01/app/oracle/oradata/huateng/htyansp01.dbf';

  4.      BYTES
  5. ----------

  6.  104857600

  7. SQL> select 60620800-8192 from dual;

  8. 60620800-8192
  9. -------------

  10.      60612608

  11. SQL> select 60612608/8192 from dual;

  12. 60612608/8192
  13. -------------

  14.          7399

  15. 实际文件的大小为 7399 个BLOCKS。
  16.          

  17. SQL> select bytes from v$datafile where name='/u01/app/oracle/oradata/huateng/htyansp01.dbf';

  18.      BYTES
  19. ----------

  20.  104857600

  21. SQL> select 104857600/8192 from dual;

  22. 104857600/8192
  23. --------------

  24.          12800

而控制文件中记录的文件大小为12800个 BLOCKS。
如果有备份的话可以通过备份恢复的方法来解决这个问题。如果没有备份的话,
一种简单解决这个错误的方法是通过把数据文件构造到和控制文件记录的一模一样来骗过oracle。
如下:
 

点击(此处)折叠或打开

  1. SQL> alter database open;
  2. alter database open
  3. *
  4. ERROR at line 1:
  5. ORA-01122: database file 6 failed verification check
  6. ORA-01110: data file 6: '/u01/app/oracle/oradata/huateng/htyansp01.dbf'
  7. ORA-01200: actual file size of 7399 is smaller than correct size of 12800
  8. blocks


  9. SQL> select 12800-7399 from dual
  10.   2 ;

  11. 12800-7399
  12. ----------

  13.       5401

  14. SQL> ! dd if=/dev/zero of=/u01/app/oracle/oradata/huateng/htyansp01.dbf bs=8192 count=5401 seek=7400
  15. 5401+0 records in
  16. 5401+0 records out
  17. 44244992 bytes (44 MB) copied, 0.152335 seconds, 290 MB/s

  18. SQL> ! ls -ltr /u01/app/oracle/oradata/huateng/htyansp01.dbf
  19. -rw-r--r-- 1 oracle oinstall 104865792 08-05 17:37 /u01/app/oracle/oradata/huateng/htyansp01.dbf


  20. SQL> alter database open;

  21. Database altered.

  22. SQL>

阅读(4884) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~