0
点赞
收藏
分享

微信扫一扫

oracle表空间大小的限制和DB_BLOCK_SIZE的概念

1、创建表空间、数据文件

--创建表空间,数据文件为'F:\app\zang\oradata\orcl\charge_zang.dbf',初始大小50M,递增10M,最大递增到2G
create tablespace charge_zang datafile 'F:\app\zang\oradata\orcl\charge_zang.dbf'
  size 50M
  autoextend on next 10M
  maxsize 2048M;
--改变用户表空间容量限制,不做限制
ALTER USER ankangreli QUOTA UNLIMITED ON ankangrelir_data;

2、表空间数据文件容量和DB_BLOCK_SIZE大小的关系

表空间数据文件容量与DB_BLOCK_SIZE有关,在初始建库时,DB_BLOCK_SIZE要根据实际需要,设置为 4K、8K、16K、32K、64K等几种大小,ORACLE的物理文件最大只允许4194304个数据块(由操作系统决定),表空间数据文件的最大值为 4194304×DB_BLOCK_SIZE/1024M。

2.1、sql查看DB_BLOCK_SIZE值

select value from v$parameter where name='db_block_size';

oracle表空间大小的限制和DB_BLOCK_SIZE的概念_表空间

2.1、查看INITIAL_EXTENT值是DB_BLOCK_SIZE的整数倍

select initial_extent/8192

oracle表空间大小的限制和DB_BLOCK_SIZE的概念_表空间_02

截取的更多DB_BLOCK_SIZE作用如下:【​​来源​​

  • DB_BLOCK_SIZE作为数据库的最小操作单位,是在创建数据库的时候指定的,在创建完数据库之后便不可修改。要修改DB_BLOCK_SIZE,需要重建数据库。一般可以将数据EXP出来,然后重建数据库,指定新的DB_BLOCK_SIZE,然后再将数据IMP进数据库。
  • DB_BLOCK_SIZE一般设置为操作系统块的倍数,即2K,4K,8K,16K或32K,但它的大小一般受数据库用途的影响。对于联机事务,其特点是事务量大,但每个事务处理的数据量小,所以DB_BLOCK_SIZE设置小点就足够了,一般为4K或者8K,设置太大话一次读出的数据有部分是没用的,会拖慢数据库的读写时间,同时增加无必要的IO操作。而对于数据仓库和ERP方面的应用,每个事务处理的数据量很大,所以DB_BLOCK_SIZE一般设置得比较大,一般为8K,16K或者32K,此时如果DB_BLOCK_SIZE小的话,那么I/O自然就多,消耗太大。
  • 大一点的DB_BLOCK_SIZE对索引的性能有一定的提高。因为DB_BLOCK_SIZE比较大的话,一个DB_BLOCK一次能够索引的行数就比较多。
  • 对于行比较大的话,比如一个DB_BLOCK放不下一行,数据库在读取数据的时候就需要进行行链接,从而影响读取性能。此时DB_BLOCK_SIZE大一点的话就可以避免这种情况的发生。

3、如果表空间容量达到最大值,应该怎么解决?

3.1、增加表空间数据文件

将表空间存储为多个数据文件,每个文件不大于32GB(精确的值为32768M)

---创建表空间
create tablespace 表空间名称
logging
datafile '表空间.dbf文件位置'
size 50m
autoextend on
next 50m maxsize 32767m
extent management local;

--为表空间增加数据文件
alter tablespace 表空间名称
add datafile '表空间.dbf文件位置' size 50m
autoextend on next 50m maxsize 32767m;


eg:SMS表空间满了,需要增加数据文件,则
1、查询数据文件位置
2、为sms.dbf增加数据文件
### TablespaceName是表空间名称
SELECT * FROM Dba_Data_Files ddf WHERE ddf.tablespace_name = 'TablespaceName';

alter tablespace SMS
add datafile '/disk/u01/app/oracle/oradata/orcl/sms02.dbf' size 50m
autoextend on next 50m maxsize 32767m;

3.2、扩大db_block_size

根据oracle的算法,我们很容易想到这个解决方法。数目衡定,但是db_block_size可以更改(db_block_size的最大大小为32KB)。如果把db_block_size扩大到32KB,那么我们的系统就可以支持单个数据文件最大128GB。

oracle表空间大小的限制和DB_BLOCK_SIZE的概念_数据库_03

这个方案听起来好像很迷人,但是实际上并不是那么回事。因为要修改db_block_size并不是很容易的事。因为这个db_block_size在创建实例的时候就要指定。而且不能通过简单修改参数来指定db_block_size。db_block_size的默认值为8192 bytes,是不能被用户修改的。因为db_block_size对应于一个实例,所以意味着在数据库创建(建库)以后是不能修改的,如需修改,可行的方式是重新建库并把原库的数据export到新库。当然最好的方式是在建数据库之前就规划好,一般如果是OLTP系统,可以保持默认值;OLAP环境可以考虑适当调大。

3.3、创建bigfile

在oracle11g中引进了bigfile表空间,他充分利用了64位CPU的寻址能力,使oracle可以管理的数据文件总量达到8EB。单个数据文件的大小达到128TB,即使默认8K的db_block_size也达到了32TB。

oracle表空间大小的限制和DB_BLOCK_SIZE的概念_数据库_04

创建bigfile的表空间使用的sql语句和创建表空间的语句使用基本相同。

create bigfile tablespace···

需要注意的是使用bigfile表空间,它只能支持一个数据文件。也就是说这个文件的最大大小就是表空间最大大小,你不可能通过增加数据文件来扩大该表空间的大小。

举报

相关推荐

0 条评论