[20121114]Oracle数据文件大小限制.txt

[20121114]Oracle数据文件大小限制.txt

SQL> show parameter db_block_size

NAME           TYPE        VALUE
-------------- ----------- ------
db_block_size  integer     8192

SQL> SELECT file_name, file_id, tablespace_name, BYTES, blocks, status, relative_fno, maxbytes, maxblocks, online_status FROM dba_data_files;
FILE_NAME                                         FILE_ID TABLESPACE_NAME           BYTES     BLOCKS STATUS    RELATIVE_FNO               MAXBYTES  MAXBLOCKS ONLINE_
---------------------------------------------- ---------- -------------------- ---------- ---------- --------- ------------ ---------------------- ---------- -------
/u01/app/oracle11g/oradata/test/system01.dbf            1 SYSTEM                807403520      98560 AVAILABLE            1            34359721984    4194302 SYSTEM
/u01/app/oracle11g/oradata/test/sysaux01.dbf            2 SYSAUX                880803840     107520 AVAILABLE            2            34359721984    4194302 ONLINE
/u01/app/oracle11g/oradata/test/undotbs01.dbf           3 UNDOTBS1             1073741824     131072 AVAILABLE            3            34359721984    4194302 ONLINE
/u01/app/oracle11g/oradata/test/users01.dbf             4 USERS                 687865856      83968 AVAILABLE            4            34359721984    4194302 ONLINE
/u01/app/oracle11g/oradata/test/example01.dbf           5 EXAMPLE               104857600      12800 AVAILABLE            5            34359721984    4194302 ONLINE
/u01/app/oracle11g/oradata/test/rman01.dbf              6 RMAN                   67108864       8192 AVAILABLE            6            34359721984    4194302 ONLINE
/u01/app/oracle11g/oradata/test/tools01.dbf             7 TOOLS                  67108864       8192 AVAILABLE            7            34359721984    4194302 ONLINE
/u01/app/oracle11g/oradata/test/test01.dbf              8 TEST                   67108864       8192 AVAILABLE            8            34359721984    4194302 ONLINE

8 rows selected.

--我使用的数据文件都是smallfile,可以发现最大文件大小MAXBYTES=34359721984,最大允许的块MAXBLOCKS=4194302。
--4194302 *8192 正好等于 34359721984。

SQL> select 34359721984/1024/1024/1024 from dual ;

34359721984/1024/1024/1024
--------------------------
                31.9999847

并没有达到32G。为什么呢?

主要是由于在Oracle的Rowid中使用22位来代表Block号,这22位最多只能代表2^22-1(4194303)个数据块.
[补充一点,每个数据文件的第一个块(block 0 )是OS block header,在数据库中查询不到信息,记录的是OS信息,以及文件大小的等信息]

$ ls -l /u01/app/oracle11g/oradata/test/test01.dbf
-rw-r-----  1 oracle11g oinstall 67117056 Nov 14 00:06 /u01/app/oracle11g/oradata/test/test01.dbf

--可以发现ls -l看到的与dba_data_files查询到的存在差异! 67117056 - 67108864 = 8192.正好相差1个块。
--也就是如果你建立一个64M的数据文件,实际上的os看文件的大小是64*1024*1024+8192=67117056.
--从v$datafile视图也可以发现:

SQL> SELECT block1_offset,name FROM v$datafile;
BLOCK1_OFFSET NAME
------------- --------------------------------------------------
         8192 /u01/app/oracle11g/oradata/test/system01.dbf
         8192 /u01/app/oracle11g/oradata/test/sysaux01.dbf
         8192 /u01/app/oracle11g/oradata/test/undotbs01.dbf
         8192 /u01/app/oracle11g/oradata/test/users01.dbf
         8192 /u01/app/oracle11g/oradata/test/example01.dbf
         8192 /u01/app/oracle11g/oradata/test/rman01.dbf
         8192 /u01/app/oracle11g/oradata/test/tools01.dbf
         8192 /u01/app/oracle11g/oradata/test/test01.dbf
8 rows selected.

这样实际上2^22-2=4194302.也就是最大允许的数据块是4194302。实际8k数据块数据文件最大从OS看就是34359721984+8192=34359730176.

时间: 2024-10-09 02:45:37

[20121114]Oracle数据文件大小限制.txt的相关文章

[20150527]bbed解决数据文件大小问题.txt

[20150527]bbed解决数据文件大小问题.txt --模拟一个数据文件大小不一致的问题. 1.建立测试环境: SCOTT@test> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- ---------------------------------------------------------------- x86

[20161123]oracle数据块类型.txt

[20161123]oracle数据块类型.txt --oracle 数据块有许多类型,自己平时很少关注与记忆,自己做一个归纳总结: 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- ------------------------------------------------------

[20121127]rman备份数据文件大小与truncate.txt

[20121127]rman备份数据文件大小与truncate.txt 记得以前看rman的书,rman仅仅备份已经格式话的块,如果这样一个表被truncate后,即使空间回收了.但是在rman备份时,备份大小不会变画太多,这些前面使用的块一定会备份. 自己做一个测试看看. 1.建立测试环境:SQL> select * from v$version where rownumBANNER--------------------------------------------------------

[20121115]关于oracle数据文件的第1块.txt

[20121115]关于oracle数据文件的第1块.txt 每个数据文件的第一个块(block 0)是OS block header,在数据库中查询不到信息,记录的是OS信息,以及文件大小的等信息.今天做一些简单的研究. SQL> select * from v$version where rownum BANNER -------------------------------------------------------------------------------- Oracle D

[20150113]关于oracle的存储结构.txt

[20150113]关于oracle的存储结构.txt --这阵子在看vage写的>,里面第一章提到: --P2 --每个文件的前128个块,都是文件头,被Oracle留用了.在oracle 10g中是0-8号块被oracle留用.而从oracle 11GR2开始,一下就留用 -- 128个块. 而实际的情况呢?自己做一个测试: 1.测试环境: --我的测试环境:数据块大小8K. SCOTT@test> @ver1 PORT_STRING                    VERSION 

如何查看Oracle数据表的建表语句

oracle|数据|语句 如何查看Oracle数据表的建表语句? 系统环境:  1.操作系统:Windows 2000 Server,机器内存128M 2.数据库: Oracle 8i R2 (8.1.6) for NT 企业版 3.安装路径:C:\ORACLE 实现步骤:  1.用EXP工具导出 2.导入时使用show=y选项.log选项 3.查看.编辑日志文件 具体实例:  1.调出SQL*Plus conn system/manager grant connect,resource to

如何查看Oracle数据表的建表语句?

oracle|数据|语句 如何查看Oracle数据表的建表语句? 系统环境:  1.操作系统:Windows 2000 Server,机器内存128M 2.数据库: Oracle 8i R2 (8.1.6) for NT 企业版 3.安装路径:C:\ORACLE 实现步骤:  1.用EXP工具导出 2.导入时使用show=y选项.log选项 3.查看.编辑日志文件 具体实例:  1.调出SQL*Plus conn system/manager grant connect,resource to 

为ASP.NET应用缓存Oracle数据

asp.net|oracle|缓存|数据 为了创建可扩展.高性能的基于WEB的应用,ASP.NET提供一个称为数据缓存(Data Caching)的特性.数据缓存支持将频繁访问的数据对象可编程地存放在内存中.这一特性可扩展以广泛地提高查询Oracle数据库中数据的ASP.NET应用的性能.本文讲述一个策略,可用于采用Web Farm环境中的ASP.NET Web应用缓存Oracle数据库数据.这个技巧允许在内存中缓存频繁访问的Oracle数据库数据,而不是频繁访问数据库来取数据.这可以帮助避免到

Oracle数据导出到文本文件的方法

利用Oracle中的Spool缓冲池技术可以实现Oracle数据导出到文本文件. 1).在Oracle PL/SQL中输入缓冲开始命令,并指定输出的文件名: spool d:\output.txt 2).在命令行中随便输入你的SQL查询: select mobile from customer; select mobile from client; -- 3).在命令行中输入缓冲结果命令: spool off; 则系统将缓冲池中的结果都输出到"output.txt"文件中. 以TAB键