Oracle bigfile 大文件表空间

Database 是由一个或多个被称为表空间(tablespace)的逻辑存储单位构成。表空间内的逻辑存储单位为段(segment),段又可以继续划分为数据扩展(extent)。而数据扩展是由一组连续的数据块(datablock)构成。

大文件表空间

在Oracle中用户可以创建大文件表空间(bigfile tablespace)。这样Oracle数据库使用的表空间(tablespace)可以由一个单一的大文件构成,而不是若干个小数据文件。这使Oracle可以发挥64位系统的能力,创建、管理超大的文件。在64位系统中,Oracle数据库的存储能力被扩展到了8 EB(1EB =1024PB,1PB = 1024TB,1TB=1024GB)。

当 数据库文件由Oracle管理(Oracle-managed files),且使用大文件表空间(bigfile tablespace)时,数据文件对用户完全透明。换句话说,用户只须针对表空间(tablespace)执行管理操作,而无须关心处于底层的数据文件 (datafile)。使用大文件表空间,使表空间成为磁盘空间管理,备份,和恢复等操作的主要对象。使用大文件表空间,并与由Oracle管理数据库文件(Oracle-managed files)技术以及自动存储管理(Automatic Storage  Management)技术相结合,就不再需要管理员手工创建新的数据文件(datafile)并维护众多数据库文件,因此简化了数据库文件管理工作。

数 据库默认创建的是小文件表空间(smallfile tablespace),即Oracle中传统的表空间(tablespace)类型。数据库中 SYSTEM 和 SYSAUX 表空间在创建时总是使用传统类型只有本地管理的(locally managed),且段空间自动管理(automatic segmentspace  management)的表空间(tablespace)才能使用大文件表空间(bigfile

tablespace)。 但是有两个例外:本地管理的撤销表空间(undo tablespace)和临时表空间(temporary tablespace),即使其段(segment)为手工管理(manually managed),也可以使用大文件表空间。一个Oracle数据库可以同时包含大文件/小文件表空间(bigfile/smallfile  tablespace)。SQL语句执行时无需考虑表空间(tablespace)的类型,除非语句中显式地引用了数据文件(datafile)名。

管 理员可以创建一组临时表空间(temporary tablespace),用户在需要时可以利用组内各个表空间(tablespace)提供的临时空间。管理员还可以指定表空间组(tablespace group)为数据库默认的临时表空间。当用户需要大量临时空间进行排序操作时,就可以利用大文件表空间及表空间组。

使用大文件表空间的优势

● 使用大文件表空间(bigfile tablespace)可以显著地增强Oracle数据库的存储能力。一个小文件表空间(smallfile tablespace)最多可以包含1024个数据文件(datafile),而 一个大文件表空间中只包含一个文件,这个数据文件的最大容量是小数据文件的1024倍。这样看来,大文件表空间和小文件表空间的最大容量是相同的。但是由 于每个数据库最多使用64K个数据文件,因此使用大文件表空间时数据库中表空间的极限个数是使用小文件表空间时的1024倍,使用大文件表空间时的总数据 库容量比使用小文件表空间时高出三个数量级。换言之,当一个Oracle数据库使用大文件表空间,且使用最大的数据块容量时(32K),其总容量可以达到 8EB。

● 在超大型数据库中使用大文件表空间减少了数据文件的数量,因此也简化了对数据文件的管理工作。由于数据文件的减少,SGA中关于数据文件的信息,以及控制文件(control file)的容量也得以减小。

● 由于数据文件对用户透明,由此简化了数据库管理工作。

使用大文件表空间时需要考虑的因素

● 大文件表空间(bigfile tablespace)应该和自动存储管理(Automatic  Storage Management)或其他逻辑卷管理工具(logical volume manager)配合使用,这些工具应该能够支持动态扩展逻辑卷,也能支持striping(数据跨磁盘分布)或RAID。

● 应该避免在不支持striping的系统上使用大文件表空间,因为这将不利于并行执行(parallel execution)及 RMAN 的并行备份(backup

parallelization)。

● 当表空间正在使用的磁盘组(disk group)可能没有足够的空间,且扩展表空间的唯一办法是向另一个磁盘组加入数据文件时,应避免使用

大文件表空间。

● 不建议在不支持大文件的平台上使用大文件表空间,这会限制表空间(tablespace)的容量。参考相关的操作系统文档了解其支持的最大文

件容量。

● 如果使用大文件表空间替代传统的表空间,数据库开启(open),checkpoints,以及 DBWR 进程的性能会得到提高。但是增大数据文件

(datafile)容量可能会增加备份与恢复的时间。

提示:

当用户在创建表空间(tablespace)时没有指定数据扩展

(extent)的管理方式,默认使用本地管理(locally managed)。

10g 新增的表空间类型:大文件 (Bigfile) 表空间。

大文件表空间从某种角度来说提高了 Oracle 在 VLDB 上的管理能力。只有自动段空间管理的 LMT (Locally Managed Tablespaces ) 支持 BIGFILE 表空间。 大文件表空间只能包含一个文件,但是文件可以达到 4G 个数据块大小。(以下用 BFT 指代 BIGFILE Tablespace。

BFT 可以和以下存储技术结合使用:

自动存储管理(ASM)

LVM

OMF

理论上的 BFT 可以达到下面所列的值:

数据块大小(单位:K) BFT 最大值(单位:T)

2k                                      8T

4k                                     16T

8k                                      32T

16k                                    64T

32k                                   128T

在实际环境中,这还受到操作系统的文件系统的限制。

BFT基本操作

10g 数据库在创建的时候,会指定默认的表空间类型。如果不特殊指定的话,默认为 SMALLFILE 类型的表空间。

SQL> SELECT *

2  FROM database_properties

3                  WHERE property_name = ‘DEFAULT_TBS_TYPE‘;

PROPERTY_NAME    PROPERTY_VALUE DESCRIPTION

-------------------- --------------- ----------------------------------------

DEFAULT_TBS_TYPE   SMALLFILE    Default tablespace type

这种情况下,如果我们创建表空间的时候不指定类型,那么默认创建的都是 SMALLFILE 类型的表空间。可以通过 ALTER DATABASE 命令来修改数据库默认的表空间类型:

SQL> ALTER DATABASE SET DEFAULT bigfile TABLESPACE;

Database altered.

SQL> SELECT *

2   FROM database_properties

3   WHERE property_name = ‘DEFAULT_TBS_TYPE‘;

PROPERTY_NAME    PROPERTY_VALUE DESCRIPTION

-------------------- --------------- ----------------------------------------

DEFAULT_TBS_TYPE   BIGFILE Default tablespace type

SQL>

SQL> ALTER DATABASE SET DEFAULT smallfile TABLESPACE;

创建 BIGFILE 类型的表空间,只需指定额外的一个参数 BIGFILE 即可,其他和原有创建表空间语法类似:

CREATE     BIGFILE     TABLESPACE     bftbs

DATAFILE ‘/u01/app/oracle/oradata/DEMO/bftbs01.dbf‘ SIZE 5M;

DBA_TABLESPACES (USER_TABLESPACES)与 V$TABLESPACE 这两个视图可以查看 BIGFILE 表空间的相关信息。先看看 DBA_TABLESPACES 在 10g 中有了什么变化:

SQL> SELECT tablespace_name, bigfile

2  FROM dba_tablespaces;

TABLESPACE_NAME        BIG

------------------------------ ---

SYSTEM             NO

UNDOTBS            NO

SYSAUX             NO

TEMP              NO

USERS             NO

EXAMPLE            NO

TEST              NO

BFTBS             YES

8 rows selected.

BFT 属性

BFT有一些特有的属性。

1.每个表空间只能包含一个数据文件。如果试图添加新的文件,则会报告 ORA-32771 错误:

SQL> ALTER TABLESPACE bftbs

2 ADD DATAFILE ‘/u01/app/oracle/oradata/DEMO/bftbs02.dbf‘ SIZE 5M;

ALTER TABLESPACE bftbs

*

ERROR at line 1:

ORA-32771: cannot add file to bigfile tablespace

2.只有自动段空间管理的 LMT (locally managed tablespaces ) 支持 BFT

SQL> CREATE BIGFILE TABLESPACE bftbs02

2   DATAFILE ‘/u01/app/oracle/oradata/DEMO/bftbs02.dbf‘ SIZE 5M

3 EXTENT MANAGEMENT DICTIONARY;

CREATE BIGFILE TABLESPACE bftbs02

*

ERROR at line 1:

ORA-12913: Cannot create dictionary managed tablespace

SQL> CREATE BIGFILE TABLESPACE bftbs02

2     DATAFILE ‘/u01/app/oracle/oradata/DEMO/bftbs02.dbf‘ SIZE 5M

3   SEGMENT SPACE MANAGEMENT MANUAL;

CREATE BIGFILE TABLESPACE bftbs02

*

ERROR at line 1:

ORA-32772: BIGFILE is invalid option for this type of tablespace

3.相对文件号(RELATIVE_FNO)为1024 ( 4096 on OS/390)

因为BFT只有一个数据文件,所以其相对文件号也是固定的:1024

SQL> SELECT tablespace_name, file_id, relative_fno

2  FROM dba_data_files;

TABLESPACE_NAME          FILE_ID RELATIVE_FNO

------------------------------ ---------- ------------

USERS                  4      4

SYSAUX                 3      3

UNDOTBS                 2      2

SYSTEM                 1      1

EXAMPLE                 5      5

TEST                  6      6

BFTBS                  7     1024

7 rows selected.

SQL>

http://www.51CTO提醒您,请勿滥发广告!/xueyuanzhuanqu/jishuwenzhang/201110/jishuwenzhang-1107.html

========================

oracle10g中的bigfile tablespace

http://www.ixpub.net/blog-25038273-410563.html

bigfile tablespace是Oracle10g的新特性。Bigfile tablespaces包含1个最大4G个blocks 的datafile。因此,使用8KBdata blocks 的bigfile tablespace 最大可以达到32TB。

Bigfile tablespaces 常用于非常大的DB。 如果很大的DB有成千的 read/write datafiles, 那么checkpoints之类的操作将非常费时。如果用一个很大的datafile,减少datafiles的数量,将会提高效率。

创建时使用BIGFILE关键字如下:

CREATE BIGFILE TABLESPACE BIG_DEMO
DATAFILE ‘/ORADATA/PROD/BIG_DEMO.DBF‘ SIZE 25G;

Smallfile tablespace是原Oracle tablespace datafile 选项的新名字。 smallfile tablespace中,你可以包含多个datafiles。每个datafile 有最多4M个data blocks。因此, 使用8KB data blocks的smallfile tablespace 中的datafiles 最大32GB。smallfile tablespace最多有1,023 个datafiles。SYSTEM和SYSAUX tablespaces总是smallfile tablespaces。

1.问题:大文件表空间和只有一个数据文件的小文件表空间(也就是我们常用的)区别在哪?

一下是关于BIGFILE网友的解释:

bigfile tablespace是Oracle10g的新特性。Bigfile tablespaces包含1个最大4G个blocks 的datafile。因此,使用8KBdata blocks 的bigfile tablespace 最大可以达到32TB。

Bigfile tablespaces 常用于非常大的DB。 如果很大的DB有成千的 read/write datafiles, 那么checkpoints之类的操作将非常费时。如果用一个很大的datafile,减少datafiles的数量,将会提高效率。

创建时使用BIGFILE关键字如下:

CREATE BIGFILE TABLESPACE BIG_DEMO
DATAFILE ‘/ORADATA/PROD/BIG_DEMO.DBF‘ SIZE 25G;

Smallfile tablespace是原Oracle tablespace datafile 选项的新名字。 smallfile tablespace中,你可以包含多个datafiles。每个datafile 有最多4M个data blocks。因此, 使用8KB data blocks的smallfile tablespace 中的datafiles 最大32GB。smallfile tablespace最多有1,023 个datafiles。SYSTEM和SYSAUX tablespaces总是smallfile tablespaces。

根据ROWID关于上面红字部分的理解

ROWID   rfile# block# row#分别为 10BIT,22BIT,16BIT

所以单个数据文件最大包含2^22-1(4194303)个数据块 ,一个数据块8K算   8*最大是32G

Bigfile tablespaces包含1个最大4G个blocks 的datafile

2.问题ORACLE 最多可以见多少个表空间?每个表空间可以建多少个数据文件?

也是根据ROWID格式分析:

8I之前表空间数 ==数据文件最大数 1024个
8i之后,表空间数2^32-1 ,数据文件数 表空间数*1023

rowid就是唯一标志记录物理位置的一个id,在oracle 8版本以前,rowid由file# block# row#组成,占用6个bytes的空间,10 bit 的 file# ,22bit 的 block# ,16 bit 的 row#。

从oracle 8开始rowid变成了extend rowid,由data_object_id# rfile# block# row#组成,占用10个bytes的空间, 32bit的 data_object_id#,10 bit 的 rfile#,22bit 的 block#,16 bit 的 row#.由于rowid的组成从file#变成了rfile#,所以数据文件数的限制也从整个库不能超过1023个变成了每个表空间不能超过1023个 数据文件。 
说了rowid的组成,那么我们再来看看rowid在索引里面占用的字节数又是什么样子的。在oracle 8以前索引中存储的rowid占用字节数也是6bytes,在oracle8之后,虽然oracle使用了extend rowid,但是在普通索引里面依然存储了bytes的rowid,只有在global index中存储的是10bytes的extend rowid,而extend rowid也是global index出现的一个必要条件,下面我们会解释原因。

为什么golbal index需要把data_object_id#也包含在index rowid entry中呢?如果不包含会这么样?首先我们需要知道index的rowid entry的存在是为了能根据它找到表的这条记录存在哪个具体的物理位置,我们需要知道它在哪个数据文件,在哪个block,在那一行,普通的索引 oracle根据rfile#,block#,row#就可以知道了,但是partition table可以分布在多个表空间,也就是可以分布在多个数据文件,当我们建立local index时,index rowid entry并不包含data_object_id#,因为oracle可以知道这个index对应的是哪一个table分区,并可以得到table分区的 ts#(tablespace号),那么oracle根据ts#和rfile#就可以找到具体的数据文件。但是如果换成是golbal index,如果不包含data_object_id#,那么我们并不能知道这个索引对应着哪个表分区,也自然不能知道它的rfile#和file#的转 换关系,所以它将找不到所对应的记录。包含data_object_id#后,oracle可以根据data_object_id#实现rfile#和 file#的转换然后找到记录对应的物理位置。需要注意的是要理解以上概念我们还是需要了解file#和rfile#的区别

时间: 09-12

Oracle bigfile 大文件表空间的相关文章

Oracle 数据库 数据文件 表 表空间 用户的关系

这涉及到数据库的物理结构和逻辑结构. 首先,你需要明白的一点是:数据库的物理结构是由数据库的操作系统文件所决定,每一个Oracle数据库是由三种类型的文件组成:数据文件.日志文件和控制文件.数据库的文件为数据库信息提供真正的物理存储. 每一个Oracle数据库有一个或多个物理的数据文件(data file).一个数据库的数据文件包含全部数据库数据.逻辑数据库结构(如表.索引等)的数据物理地存储在数据库的数据文件中.数据文件通常为*.dbf格式,例如:userCIMS.dbf.数据文件有下列特征:

Oracle数据导入指定表空间

Oracle数据导入指定表空间 1. 打开工具Oracle SQL Plus 以dba身份登录sys用户sqlplus /nologconn [email protected] as sysdba 2. 创建用户并指定表空间 使用客户端工具或者Web管理控制台创建表空间以及用户给用户赋予connect.resource.dba权限grant connect,resource,dba to username; 注意:给oracle用户分配connect.resource角色时,此时connect

实例讲解Oracle数据库设置默认表空间问题

实例讲解Oracle数据库设置默认表空间问题 实例讲解Oracle数据库设置默认表空间问题,阅读实例讲解Oracle数据库设置默认表空间问题,DBA们经常会遇到一个这样令人头疼的问题:不知道谁在Oracle上创建了一个用户,创建时,没有给这个用户指定默认表空间,所以这个用户就会采用默认的表空间——system表空 DBA们经常会遇到一个这样令人头疼的问题:不知道谁在Oracle上创建了一个用户,创建时,没有给这个用户指定默认表空间,所以这个用户就会采用默认的表空间——system表空间.导致系统

Oracle 表文件,表空间,用户,的创建 和删除

[本文谢绝转载,原文来自http://990487026.blog.51cto.com] 连接超级用户: [[email protected] ~]$ sqlplus /nolog SQL> conn /as sysdba Connected. 查数据文件: SQL> select * from v$dbfile;   4 /opt/oracle/app/oradata/orcl/users01.dbf  3 /opt/oracle/app/oradata/orcl/undotbs01.dbf

oracle 11g 手动删除表空间文件导致数据库报错处理方法

简单说下原因:当时图方便没进数据库,直接在datafile目录下删除了表空间对应的数据文件 导致后来数据库报错,并且不能删除表空间 错误如下:ORA-01116:error in opening database ****ORA-01110:data file 54:'/home3/datafile/arrange/NewArrange.dbf'ORA-27041:unable to open fileLinux Error:2: No Such file or directoryAdditio

Oracle学习笔记八 表空间

表空间 表空间是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间 . 分区表 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区.表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表. 注意:已经存在的表没有方法可以直接转化为分区表 Oracle允许用户将一个表分成多个分区,用户可以执行查询,只访问表中的特定分区,也

Oracle学习——dmp文件(表)导入与导出

前言 关于dmp文件我们用的还是比较多的,dmp文件它是作为oracle导入和导出表使用的文件格式,今天就将dmp文件导出和导入进行学习. dmp文件导出 dmp文件导出用的比较多的一般是三种,他们分别是:导出整个数据库实例下的所有数据.导出指定用户的所有表.导出指定表. 这里已我的数据库为例,进行介绍,我的Oracle数据库实例为"ORACLE",查看自己数据库实例可以从"任务管理器-->服务"中进行查看,如下图 打开命令行: 1,将数据库ORACLE完全导

oracle下正确删除表空间的方法

Oracle因为本身的多重验证机制所有在删除表空间时不像MySQL中删除database一样,可以通过外部的删除直接删除掉database文件夹就可以删除掉database,当然这两者是2种不同的东西,在此仅用于举例说明.在Oracle中表空间相当于系统中的硬盘,Oracle可以通过修改配置表空间来对Oracle下的数据进行存储,所以在Oracle下表空间是非常重要的,尤其是在表空间文件处理不当都会造成Oracle的不稳定,在此就说一说如何正确的删除Oracle的表空间. 删除表空间时,需要确定

Oracle添加数据文件创建表空间,创建用户代码

1,添加数据文件创建表空间 1 CREATE TABLESPACE "TEST1" DATAFILE 'D:\ORACLE\11G\ORADATA\ORCL\TEST1.DBF' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO 部署时需要根据需要改动部分: TABLESPACE(表空间)后的表空间名TEST1