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 50M
autoextend on next 10M
maxsize 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时,表空间容量就达到了最大值,数据库就不能继续增加信息了,那么该采取什么措施呢
而Oracle默认分配的为8K,也就是对应于32768M左右的空间大小,如果想继续增大表空间的话,只需要通过alter tablespace name add datafile 'path/file_name' size 1024M;
添加数据文件的方式就可以了。
数据块是oracle中最小的空间分配单位,各种操作的数据就的放在这里,oracle从磁盘读写的也是块。一旦create database,db_block_size就是不可更改的。因为oracle是以块为单位存储数据的,任何一个存储元素最少占用一个块,如果你改变了db_block_size,必然导致部分块不能正常使用。
其实在unix类操作系统中,文件块和oracle块的关系非常紧密(建议相等),这样才能保证数据库的执行效率。在windows下可能就不这么讲究了。建议使用8k以上的块,有人做过测试,同样的配置,8k的块比4k快大约40%,比2k快3倍以上。
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表空间,它只能支持一个数据文件。也就是说这个文件的最大大小就是表空间最大大小,你不可能通过增加数据文件来扩大该表空间的大小。
来自:https://www.cnblogs.com/zjfjava/p/9556311.html
参考:
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
https://blog.csdn.net/dragoo1/article/details/8500241
oracle表空间大小的限制和DB_BLOCK_SIZE的概念的更多相关文章
- 开发手记:Linux下更改Oracle表空间大小
问题:同事反馈我们的测试环境数据库执行SQL和编译PKG非常慢,猜测可能是我们的测试环境数据库的表空间满了,但是我不知道数据库DBA的用户和密码. 步骤1:查看表空间占用情况 SELECT UPPER ...
- 【Oracle】查看oracle表空间大小及增加表空间的几种方法
在oracle中表空间是必不可少的.但是怎么查看表空间呢 简单的查看方式是: SQL> select tablespace_name from dba_tablespaces; 想要查看表空间对 ...
- oracle 查询数据库表空间大小和剩余空间
dba_data_files:数据库数据文件信息表.可以统计表空间大小(总空间大小). dba_free_space:可以统计剩余表空间大小. 增加表空间即向表空间增加数据文件,表空间大小就是数据文件 ...
- [转载]Oracle修改表空间大小
Oracle修改表空间大小 使用Oracle10g建立数据库后,向数据库中导入了部分数据,第二天继续向数据库中导入数据表时发生错误: 查了很多资料发现原来是Oracle表空间限制,导致无法继续导入数据 ...
- Oracle 查看表空间大小及其扩展
在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段.区.块等逻辑结构.从物理结构上看是放在数据文件中.一个表空间可由多个数据文件组成.系统中默认创建的几个表空间:S ...
- Oracle修改表空间大小
在向orale数据库导入数据的时候报 ORA-01658: 无法为表空间 XXX中的段创建 INITIAL 区错误. Oracle我在创建表空间的时候初始化大小为200M,当数据库中数据量达到这个值, ...
- oracle增加表空间大小
第一步:查看表空间的名字及文件所在位置: select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0) total_sp ...
- Oracle 扩展表空间大小的几种方式
环境:windows操作系统 增加表空间大小的四种方法Meathod1:给表空间增加数据文件 ALTER TABLESPACE app_data ADD DATAFILE 'D:\ORACLE\PRO ...
- 查看Oracle数据库表空间大小(空闲、已使用),是否要增加表空间的数据文件
查看Oracle数据库表空间大小(空闲.已使用),是否要增加表空间的数据文件 1.查看表空间已经使用的百分比 Sql代码 select a.tablespace_name,a.bytes/1024/1 ...
随机推荐
- Ajax获取Json多个集合并同时遍历
Ajax获取Json多个集合并同时遍历: 方法一.:将多个集合放入MAP集合. 后台:Servlet @Override protected void doPost(HttpServletReques ...
- #224 Profile Lookup (for in & if )
我们有一个对象数组,里面存储着通讯录. 函数 lookUp 有两个预定义参数:firstName值和prop属性 . 函数将会检查通讯录中是否存在一个与传入的 firstName 相同的联系人.如果存 ...
- 京东618:Docker扛大旗,弹性伸缩成重点 (2015-06-23)
不知不觉中,年中的618和年终的11.11已经成为中国电商的两大促销日,当然,这两天也是一年中系统访问压力最大的两天.对于京东而言,618更是这一年中最大的一次考试,考点是系统的扩展性.稳定性.容灾能 ...
- spring 装配
spring 3种装配方式: 支持混合配置:不管使用JavaConfig还是使用XML进行装配,通常都会创建一个根配置(root configuration), 这个配置会将两个或更多的装配类和/或X ...
- pwn入门之栈溢出练习
本文原创作者:W1ngs,本文属i春秋原创奖励计划,未经许可禁止转载!前言:最近在入门pwn的栈溢出,做了一下jarvisoj里的一些ctf pwn题,感觉质量都很不错,难度循序渐进,把自己做题的思路 ...
- Java 线程池(ThreadPoolExecutor)原理解析
在我们的开发中“池”的概念并不罕见,有数据库连接池.线程池.对象池.常量池等等.下面我们主要针对线程池来一步一步揭开线程池的面纱. 有关java线程技术文章还可以推荐阅读:<关于java多线程w ...
- Javascript高级编程学习笔记(61)—— 事件(5)UI事件
UI事件 UI事件是指那些不一定与用户操作有关的事件 这些事件在DOM规范出现之前,都是以各种不同的形式存在于不同的浏览器 而在DOM事件中为了保证向后兼容,现有的UI事件如下: DOMActivat ...
- Eclipse 使用前常用设置
1.常用设置的位置 Eclipse中一般的设置都是在这个位置进行设置的: 2.设置字体类型和大小 一般可以设置成这样代码比较清晰:Consolas + 常规 + 小四 3.设置各种编码 设置工作空间的 ...
- ubuntu垃圾文件清理方法
linux和windows系统不同,linux不会产生无用垃圾文件,但是在升级缓存中,linux不会自动删除这些文件,今天就来说说这些垃圾文件清理方法. 1,非常有用的清理命令:sudo apt-ge ...
- Python中函数和模块的体验与使用
函数基础 目标 函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数 01. 函数的快速体验 1.1 快速体验 所谓函数,就是把 具有独立功能的代码块 组织为一个 ...