Oracle表空间大小的限制和DB_BLOCK_SIZE的概念
Oracle表空间大小的限制和DB_BLOCK_SIZE的概念
之前接触的项目表空间最大也不超过10G,所以导入数据库时一直使用导入本地的oracle数据库文件的方法,即根据dmp文件大小设置一个数据文件,设定表空间最大值。
--创建表空间,数据文件为'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 50Mautoextend on next 10Mmaxsize 2048M;
生产环境考虑到数据库可能一直增加信息,所以放开表空间大小限制,语句如下:
--改变用户表空间容量限制,不做限制 ALTER USER ankangreli QUOTA UNLIMITED ON ankangrelir_data;
但是今天开会讨论了一个问题,公司接手了一个项目,新客户原先使用的系统,数据库大小有2T,现在需要对他的数据库信息进行整理和迁移,首先的步骤是把客户的数据库导入我们的服务器,为此公司特地买了块8T的外接硬盘(不到2000块!),这按我之前的方法导入,即使放开容量限制,也会到达oracle的容量限制,因此需要换种方法来导入。
导入之前了解一些概念:
表空间数据文件容量与DB_BLOCK_SIZE有关,在初始建库时,DB_BLOCK_SIZE要根据实际需要,设置为 4K、8K、16K、32K、64K等几种大小,ORACLE的物理文件最大只允许4194304个数据块(由操作系统决定),表空间数据文件的最大值为 4194304×DB_BLOCK_SIZE/1024M。
sql查看DB_BLOCK_SIZE值
查看INITIAL_EXTENT值是DB_BLOCK_SIZE的整数倍
截取的更多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大一点的话就可以避免这种情况的发生。
回到该问题,通过上面的信息我们得出:在本机单个表空间文件大小超过32G时,表空间容量就达到了最大值,数据库就不能继续增加信息了,那么该采取什么措施呢?
1. 多个数据文件累加
将表空间存储为多个数据文件,每个文件不大于32GB(精确的值为32768M)
语法如下:(不够的话继续添加数据文件)
create tablespace JC_DATA logging datafile 'F:\app\oracle\oradata\orcl\JC_DATA01.dbf' size 50m autoextend on next 50m maxsize 32767m extent management local; --为表空间增加数据文件 alter tablespace JC_DATA add datafile 'F:\app\oracle\oradata\orcl\JC_DATA02.dbf' size 50m autoextend on next 50m maxsize 32767m;
2. 扩大db_block_size
根据oracle的算法,我们很容易想到这个解决方法。数目衡定,但是db_block_size可以更改(db_block_size的最大大小为32KB)。如果把db_block_size扩大到32KB,那么我们的系统就可以支持单个数据文件最大128GB。
这个方案听起来好像很迷人,但是实际上并不是那么回事。因为要修改db_block_size并不是很容易的事。因为这个db_block_size在创建实例的时候就要指定。而且不能通过简单修改参数来指定db_block_size。db_block_size的默认值为8192 bytes,是不能被用户修改的。因为db_block_size对应于一个实例,所以意味着在数据库创建(建库)以后是不能修改的,如需修改,可行的方式是重新建库并把原库的数据export到新库。当然最好的方式是在建数据库之前就规划好,一般如果是OLTP系统,可以保持默认值;OLAP环境可以考虑适当调大。
3. 创建bigfile表空间
在oracle11g中引进了bigfile表空间,他充分利用了64位CPU的寻址能力,使oracle可以管理的数据文件总量达到8EB。单个数据文件的大小达到128TB,即使默认8K的db_block_size也达到了32TB。
创建bigfile的表空间使用的sql语句和创建表空间的语句使用基本相同。
create bigfile tablespace···
需要注意的是使用bigfile表空间,它只能支持一个数据文件。也就是说这个文件的最大大小就是表空间最大大小,你不可能通过增加数据文件来扩大该表空间的大小。
参考:
http://blog.sina.com.cn/s/blog_4b1c9e12010006vj.html
https://www.cnblogs.com/gavanwanggw/p/6714388.html
https://blog.csdn.net/zhangzheng0413/article/details/8271322
Oracle表空间大小的限制和DB_BLOCK_SIZE的概念相关推荐
- oracle创建表空间blocksize,oracle表空间大小的限制和DB_BLOCK_SIZE的概念
而Oracle默认分配的为8K,也就是对应于32768M左右的空间大小,如果想继续增大表空间的话,只需要通过alter tablespace name add datafile 'path/file_ ...
- 查询oracle表空间是否满了,查看Oracle表空间大小的方法
Oracle表空间大小的查看方法应该是我们都需要掌握的知识,下面就为您详细介绍查看Oracle表空间大小的方法,供您参考学习. 在数据库管理中,磁盘空间不足是DBA都会遇到的问题,问题比较常见. -- ...
- 更改oracle 表空间大小,更改oracle数据库表空间大小
Oracle表空间扩展 使用oracle时可能遇到无法通过8192在表空间中扩展错误,原因是数据库的表空间不足. oracle表空间数据文件容量与db_block_size有关,在初始建库时指定DB_ ...
- oracle表空间大小规划,关于oracle表空间的规划方法
事实表(如果很大)的一定要分区,而且分区方式和你的业务逻辑相关,每个分区放在一个单独的分区中.我所指的业务逻辑是指比如一个表基本粒度是 天+客户代码+产品代码,如果查询比较偏重于 时间+客户,并且每次 ...
- mysql oracle 表空间大小_Oracle各种空间大小及占用大小
1. 表占用空间大小计算方法 Select S.SEGMENT_NAME ,DECODE(SUM(BYTES), NULL, 0, SUM(BYTES) / 1024 / 1024) Mbytes F ...
- mysql oracle 表空间大小_最简单的查询表空间的使用量、剩余量的方法 - Focus on Oracle、MySQL and GNU/Linux...
比起用其它的视图写长长的一段脚本.简便多了.据说从7.x到11g都可以用 sm$ts_used & sm$ts_free idle> select * from sm$ts ...
- 如何在linux下创建表空间,linux下创建oracle表空间
来自:http://blog.sina.com.cn/s/blog_62192aed01018aep.html 1 . 登录服务器 2 . 查看磁盘空间是否够大df -h -h更具目前磁盘空间和使用情 ...
- oracle临时表空间大小查询,查看oracle 系统临时表空间、undo表空间、SGA和PGA大小...
1)检查oracle系统临时表空间大小: select sum(bytes)/1024/1024 "temp size(M)" from dba_temp_files where ...
- oracle查表文件大小,Oracle表空间使用大小查询
1.查询一个表的物理空间数量:select segment_name,sum(bytes)/1024/1024 from user_extents where segment_type = 'TABL ...
最新文章
- webpack基础+webpack配置文件常用配置项介绍+webpack-dev-server
- Linux套接字聊天
- 产品经理能力模型 答网友问
- 浏览器预连接性能测试
- HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面
- 基于RAF的一个小动画框
- mysql能将查询结果与表左查询,MySQL查询与结构
- WinEdt Latex使用人家提供的模板时无法插入参考文献的方法
- java List的简单运用
- python建模概述
- 数据结构计算机复试题,2021考研计算机408数据结构试题及答案解析
- 【老生谈算法】matlab实现追赶法算法——追赶法算法
- 戴尔服务器怎么远程安装系统,DELL-远程安装系统操作手册
- 安卓手机运行springboot 应用,做java 服务器
- Metasploit之——基本后渗透命令
- 网络推广有哪些常见的推广方法?
- 电脑无法新建文件怎么办?
- 矩阵在线计算机,矩阵计算器
- java SSM 多数据源
- Cay S.Horstmann:从Java新特性看Java的未来