`

Oracle 10g大文件表空间(转)

阅读更多

 

简单介绍

 

Oracle 10g 的存储能力有了显著的增强。这表现在很多方面,下面介绍 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> desc DBA_TABLESPACES

 Name                                      Null?    Type

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

 TABLESPACE_NAME                           NOT NULL VARCHAR2(30)

 BLOCK_SIZE                                NOT NULL NUMBER

 INITIAL_EXTENT                                     NUMBER

 NEXT_EXTENT                                        NUMBER

 MIN_EXTENTS                               NOT NULL NUMBER

 MAX_EXTENTS                                        NUMBER

 PCT_INCREASE                                       NUMBER

 MIN_EXTLEN                                         NUMBER

 STATUS                                             VARCHAR2(9)

 CONTENTS                                           VARCHAR2(9)

 LOGGING                                            VARCHAR2(9)

 FORCE_LOGGING                                      VARCHAR2(3)

 EXTENT_MANAGEMENT                                  VARCHAR2(10)

 ALLOCATION_TYPE                                    VARCHAR2(9)

 PLUGGED_IN                                         VARCHAR2(3)

 SEGMENT_SPACE_MANAGEMENT                           VARCHAR2(6)

 DEF_TAB_COMPRESSION                                VARCHAR2(8)

 RETENTION                                          VARCHAR2(11)

 BIGFILE                                            VARCHAR2(3)

 

SQL>

 

9i 相比, DBA_TABLESPACES 视图多了两列:RETENTION BIGFILE。其中 BIGFILE 列说明该表空间是否为 BFT

 

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.

 

V$TABLESPACE 视图相对 9i 也增加了新的列:

 

SQL> desc V$TABLESPACE

 Name                                      Null?    Type

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

 TS#                                                NUMBER

 NAME                                               VARCHAR2(30)

 INCLUDED_IN_DATABASE_BACKUP                        VARCHAR2(3)

 BIGFILE                                            VARCHAR2(3)

 FLASHBACK_ON                                       VARCHAR2(3)

 

其中 FlASHBACK_ON BIGFILE 列都是新增的。

 

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>

 

4.rowid的变化

 

BFT 上存储的表的 ROWID smallfile 表空间上的 rowid 结构有些不同的。要正确得到 rowid 信息,dbms_rowid 包增加了一个新的参数 ts_type_in 来解决这个问题。参考这个范例:

 

SQL> SELECT DBMS_ROWID.rowid_block_number (ROWID, 'BIGFILE')

  2    FROM foo;

 

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID,'BIGFILE')

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

                                            24

 

SQL>

 

你可以创建多大的表空间?

 

我们在前面提及,BFT 还受到操作系统的文件系统的限制。下面我们以 Linux 操作系统为例:

 

SQL> SHOW parameters db_block_size

 

NAME                                 TYPE        VALUE

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

db_block_size                        integer     8192

SQL>

 

也就是说,理论上我们可以创建最大 32T (4G*8K) 的表空间。我们可以做到么?

 

SQL> CREATE BIGFILE TABLESPACE bftbs02

  2      DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 20T reuse;

CREATE BIGFILE TABLESPACE bftbs02

*

ERROR at line 1:

ORA-01119: error in creating database file '/u01/app/oracle/oradata/DEMO/bftbs02.dbf'

ORA-27059: could not reduce file size

Linux Error: 27: File too large

Additional information: 2

 

SQL>

 

注意我们得到的操作系统信息(黑色部分)File too large 。这说明超出了操作系统允许值。我所用的环境是Fedora Core Linux, 内核的版本是2.6.9,文件系统是 EXT3 2.4以后的版本的内核都是支持 LFS (Large File Support)的。

 

文件系统()

文件大小限制

文件系统大小限制

ext2/3 (2K)

256G

8T

ext2/3 (4K)

2T

16T

ext2/3 (8K)

64T

32T

ReiserFS 3.6

1E

16T

 

我们检查一下OS文件系统块大小:

 

[root@FC3 ~]# tune2fs -l /dev/hda7 | grep Block

Block count:              2621440

Block size:               4096

Blocks per group:         32768

[root@FC3 ~]#

 

也即,我们可以在操作系统上创建不大于 2T 的文件。虽然我们没有那么大的存储空间,不妨也测试一下:

 

SQL> CREATE BIGFILE TABLESPACE bftbs02

  2      DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 1800g;

 

在另外一个终端中,观察该目录的变化情况:

 

[root@FC3 DEMO]# ls -ltr

total 1159048

-rw-------  1 oracle oracle       5251072 Nov 28 20:05 bftbs01.dbf

-rw-------  1 oracle oracle 1932735291392 Nov 28 20:49 bftbs02.dbf

[root@FC3 DEMO]#

 

哇,我们真的能观察到Oracle在创建超大文件呢,接近1.8T 的文件 :-) 要过一会儿,Oracle 才会报告错误(毕竟1800G 的大文件):

 

CREATE BIGFILE TABLESPACE bftbs02

*

ERROR at line 1:

ORA-19502: write error on file "/u01/app/oracle/oradata/DEMO/bftbs02.dbf",

blockno 898048 (blocksize=8192)

ORA-27072: File I/O error

Additional information: 898047

 

可见,在本例中,由于操作系统文件系统的限制,我们只可以创建2T以下的 BFT

 

你需要BFT?

 

应用 BFT 的话,优点缺点都存在。根据 Oracle 官方的文档,DB_FILES MAXDATAFILES 这两个参数的值给 SGA 带来的压力会减轻(原来的压力就很大么?)。数据库中最大数据文件数是有限的 (64K files)BFT 的出现的确对海量数据库有一定的积极意义。从一定程度上来说,BFT 简化了管理多个数据文件的复杂性,但是在恢复的时候可能是一场灾难。

 

在笔者看来,至少我们现在在大多数情况下不需要用 BFT "你要把鸡蛋都放到一个篮子里么? "

 

 

 

分享到:
评论

相关推荐

    oracle10g表空间操作命令

    包括:表空间的创建,调整表空间,删除表空间,删除数据文件,增加数据文件,维护表空间的自动扩展属性,设置表空间脱机,联机,读写 移动表空间 查看表空间使用情况

    oracle9i oracle11g oracle10g 性能调优 基础学习 视频地址

    1z0-033-11(B) 发布不同oracle文件的原因 诊断表空间 表空间分区原因 检查点工作 检查点优化 调整重做日志 13 1z0-033-13 关于自动段空间管理 ext 与oracle 空间使用 percent oracle块参数 行迁移问题 什么时间进行...

    oracle10g课堂练习I(1)

    Oracle Database 10 g :“g”代表网格 1-6 Oracle 数据库体系结构 1-8 数据库结构 1-9 Oracle 内存结构 1-10 进程结构 1-12 Oracle 实例管理 1-13 服务器进程和数据库缓冲区高速缓存 1-14 物理数据库结构 1-...

    oracle 查询表空间使用情况

    查询oracle表空间使用情况,表空间文件详情,创建或者变更表空间大小

    Oracle 10g 学习笔记

    │ oracle10g系统管理之应对大表(三) - lvhuiqing的专栏 - CSDN博客.mht.lnk │ oracle10g系统管理之控制文件 - lvhuiqing的专栏 - CSDN博客.mht │ oracle10g系统管理之控制文件 - lvhuiqing的专栏 - CSDN博客....

    Oracle10g数据库维护手册

    常用文件、DBA最需要监控的项目、数据库和实例概述、创建数据库、如何进行表空间规划和管理、表空间的规划、逻辑设计、如何评估IO读写量、文件位置、数据库空间使用概述、确定数据文件大小、数据库文件的移动、段...

    Oracle10G完全教程ppt

    Oracle是目前最流行的关系型数据库管理系统,被越来越多的用户在信息系统管理、企业...在Oracle 10g中,第一次提出数据自动镜像存储、数据闪回功能以及功能强大的数据导出工具、大文件表空间以及表空间组管理等概念。

    ORACLE11G宝典.rar 是光盘里面的内容,书太厚咧没法影印啊

    程序设计,第5~9章分别介绍了Oracle11g的体系结构、表空间与数据文件的管理、启动和关闭数据库、网络服务与管理,第10—13章介绍了有关安全的几个内容(权限、角色、概要文件、用户的管理),第14—17章介绍了几种...

    Oracle 10g Concepts 中文版

    Chapter 3, Tablespaces, Datafiles, and Control Files 第 3 章,表空间,数据文件,及控制文件 Chapter 4, Transaction Management 第 4 章,事务管理 Chapter 5, Schema Objects 第 5 章,方案对象 Chapter 6,...

    Oracle11g从入门到精通2

    9.2.2 向表空间增加数据文件 9.3 解决空间不足的方法 9.3.1 增加数据文件大小 9.3.2 创建新表空间 9.3.3 动态增加表空间 9.3.4 三种方法的区别与比较 9.4 合理利用存储空间 9.4.1 采用正确的数据类型 ...

    oracle 10g经典实用教程——从入门到精通,ppt格式 便于命令复制

    希望 对您的学习有所帮助 Oracle是目前最流行的关系型数据库管理系统,被越来越多的...在Oracle 10g中,第一次提出数据自动镜像存储、数据闪回功能以及功能强大的数据导出工具、大文件表空间以及表空间组管理等概念。

    oracle 11g图形创建实例、表表空间、dmp导入命令

    oracle 11g图形创建实例、表表空间,都是在控制台操作,图文教程,原创,另附SQL命令创建表空间、角色和导入dmp文件

    Oracle系统紧急故障处理(数据文件、日志文件以及表空间损坏的处理).rar

    Oracle系统紧急故障处理(数据文件、日志文件以及表空间损坏的处理)

    Oracle表空间详解

    Oracle表空间详解 PPT培训资料 oracle9i&10g&11g

    误删oracle11g表空间文件后,数据库起不来了.doc

    误删oracle11g表空间文件后,数据库起不来了

    oracle10g企业应用培训文档

    1:数据库基础:概念,关系数据库,范式,DML,DDL 2:oracle Server的构成:oracle实例,数据结构...6:数据库的管理和存储:数据库结构,区管理,表空间,存储结构 7:备份和恢复:逻辑备份exp--imp;物理备份:冷备份和热备份

    Oracle 10g应用指导

    第1章Oracle的安装卸载与使用环境,主要包括Oracle安装环境及方法,安装后的基本环境及服务,Oracle卸载,还包括验证数据库的安装,系统临时空间不足、监听服务无法启动以及Oracle默认帐户/口令等问题的精讲。...

    Oracle 从入门到精通视频教程(11G版本)(ppt)

    Oracle 11G从入门到精通视频的PPT 第1章-Oracle 11g数据库简介 认识Oracle 11g 回忆Oracle的产品版本 学习Oracle 11g的新特性 第2章-Oracle 11g的安装与测试 能够使用Oracle 11g的基本条件 在Windows 2003上...

    Oracle Concepts中英文对照版(10g R2).chm

    Oracle Concepts中英文对照版(10g R2).chm <br>Part I What Is Oracle? 第一部分 何为 Oracle? Chapter 1, Introduction to the Oracle Database 第 1 章,Oracle 数据库简介 Part II Oracle Database ...

Global site tag (gtag.js) - Google Analytics