设为首页 收藏本站
查看: 540|回复: 0

[经验分享] Oracle bigfile 大文件表空间

[复制链接]

尚未签到

发表于 2018-9-7 12:29:19 | 显示全部楼层 |阅读模式
  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 类型的表空间。可以通过>
  SQL>>
  Database>  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>>  创建 BIGFILE 类型的表空间,只需指定额外的一个参数 BIGFILE 即可,其他和原有创建表空间语法类似:
  CREATE     BIGFILE     TABLESPACE     bftbs

  DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs01.dbf'>  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>>
  2 ADD DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf'>  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'>  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'>  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,>  2  FROM dba_data_files;

  TABLESPACE_NAME          FILE_ID>  ------------------------------ ---------- ------------
  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'>  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'>  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#的区别


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-566072-1-1.html 上篇帖子: oracle中怎样查询用户权限 下篇帖子: Oracle 11g数据库的部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表