数据库正常启动与文件大小的关系

1073阅读 0评论2012-08-18 TOMSYAN
分类:Oracle

在数据库启动的时候,oracle将会验证OS文件大小与文件头记录的大小进行比较。
如果OS文件大小不是数据库参数DB_BLOCK_SIZE的整数倍,将会报ORA-27046。
 

点击(此处)折叠或打开

  1. ORA-27046: file size is not a multiple of logical block size
如果OS文件大小是数据库参数DB_BLOCK_SIZE的整数倍,但是OS显示的文件大小比文件头记录的小,那么数据库启动将会报ORA-01200错误。

点击(此处)折叠或打开

  1. ORA-01200: actual file size of 7399 is smaller than correct size of 12800.
如果OS文件大小是数据库参数DB_BLOCK_SIZE的整数倍,而且OS显示的文件大小和文件头记录一样大,那么数据库将会正常启动。
如果OS文件大小是数据库参数DB_BLOCK_SIZE的整数倍,但是OS显示的文件大小比文件头记录的大,那么数据能正常启动吗?
我测试了一下,确实能正常启动。
 

点击(此处)折叠或打开

  1. SQL> select file#,blocks,name from v$datafile_header;

  2.      FILE# BLOCKS NAME
  3. ---------- ---------- --------------------------------------------------

  4.          1 88320 /u01/app/oracle/oradata/huateng/system01.dbf
  5.          2 62720 /u01/app/oracle/oradata/huateng/sysaux01.dbf
  6.          3 10880 /u01/app/oracle/oradata/huateng/undotbs01.dbf
  7.          4 640 /u01/app/oracle/oradata/huateng/users01.dbf
  8.          5 12800 /u01/app/oracle/oradata/huateng/example01.dbf
  9.          6 5120 /u01/app/oracle/oradata/huateng/htyansp01.dbf
  10.          7 2000 /u01/app/oracle/oradata/huateng/file01.dbf


  11. SQL> select file_id,file_name,blocks from dba_data_files;

  12.    FILE_ID FILE_NAME BLOCKS
  13. ---------- -------------------------------------------------- ----------

  14.          4 /u01/app/oracle/oradata/huateng/users01.dbf 640
  15.          3 /u01/app/oracle/oradata/huateng/undotbs01.dbf 10880
  16.          2 /u01/app/oracle/oradata/huateng/sysaux01.dbf 62720
  17.          1 /u01/app/oracle/oradata/huateng/system01.dbf 88320
  18.          5 /u01/app/oracle/oradata/huateng/example01.dbf 12800
  19.          6 /u01/app/oracle/oradata/huateng/htyansp01.dbf 5120
  20.          7 /u01/app/oracle/oradata/huateng/file01.dbf 2000

  21. 7 rows selected.
如下是文件头信息:

点击(此处)折叠或打开

  1. [oracle@db2server ~]$ bbed filename=/u01/app/oracle/oradata/huateng/htyansp01.dbf password=blockedit

  2. BBED: Release 2.0.0.0.0 - Limited Production on Thu Aug 16 15:17:38 2012

  3. Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

  4. ************* !!! For Oracle Internal Use only !!! ***************

  5. BBED> p offset 44
  6. kcvfh.kcvfhhdr.kccfhfsz
  7. -----------------------

  8. ub4 kccfhfsz @44 0x00001400

文件头记录的文件大小为5120个BLOCKS
 

点击(此处)折叠或打开

  1. SQL> ! ls -ltr /u01/app/oracle/oradata/huateng/htyansp01.dbf
  2. -rw-r--r-- 1 oracle oinstall 60620800 08-16 14:45 /u01/app/oracle/oradata/huateng/htyansp01.dbf


  3. SQL> show parameter db_block_size

  4. NAME TYPE VALUE
  5. ------------------------------------ ----------- ------------------------------

  6. db_block_size integer 8192

  7. SQL> select 60620800/8192 -1 from dual;

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

  10.          7399

OS显示文件的大小为7399个BLOCKS,比文件头记录的多了2000多个。

数据库也能正常启动,也能建表。
 

点击(此处)折叠或打开

  1. SQL> startup force
  2. ORACLE instance started.

  3. Total System Global Area 380817408 bytes
  4. Fixed Size 1336680 bytes
  5. Variable Size 268438168 bytes
  6. Database Buffers 104857600 bytes
  7. Redo Buffers 6184960 bytes
  8. Database mounted.
  9. Database opened.
  10. SQL> create table itpub(id int) tablespace htyansp;

  11. Table created.


上一篇:巧用dd来解决ORA-27046错误
下一篇:数据文件大小信息的来源