`
yanghuidang
  • 浏览: 949994 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

[Oracle 10g] 大文件表空间

阅读更多

作者:Fenng
日期:27-Nov-2004 
出处:http://www.dbanotes.net
版本:0.1


简单介绍

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 。"你要把鸡蛋都放到一个篮子里么? "

参考信息


Oracle Database Administrator's Guide 10g Release 1 (10.1) Part Number B10739-01 ( Note 62294.1 )
Large File Support in Linux - http://www.suse.de/~aj/linux_lfs.html
Metalink [NOTE:262472.1] 10g: BIGFILE Type Tablespaces Versus SMALLFILE Type


本文作者

Fenng,某美资公司DBA,业余时间混迹于各数据库相关的技术论坛且乐此不疲。目前关注如何利用ORACLE数据库有效地构建企业应用。对Oracle tuning、troubleshooting有一点研究。
个人技术站点:http://www.dbanotes.net/ 。可以通过电子邮件 dbanotes@gmail.com 联系到他。

原文出处

http://www.dbanotes.net/Oracle/10g_Bigfile_Tablespaces.htm



All Articles (by Fenng) are licensed under a Creative Commons License.
I would welcome any feedback. Please send questions, comments or corrections to dbanotes@gmail.com
分享到:
评论

相关推荐

    ORACLE10G 使用RMAN表空间的恢复

    在Oracle 10G版本中,RMAN提供了多种功能,包括表空间级别的恢复,这在数据丢失或系统故障时尤为重要。下面将详细介绍如何在Oracle 10G中使用RMAN进行表空间恢复。 首先,了解RMAN的基本结构。RMAN是通过PL/SQL接口...

    oracle 查询表空间使用情况

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

    oracle11g创建表空间 .docx

    Oracle 11g 创建表空间详解 在 Oracle 11g 中,创建表空间是一个非常重要的步骤,它直接关系到数据库的性能和安全性。在本文中,我们将详细介绍如何使用控制台命令创建表空间,并对相关的知识点进行详细的解释。 ...

    oracle10G创建用户和表空间

    本文将围绕“Oracle 10g创建用户和表空间”这一主题展开,深入探讨如何在Oracle 10g环境中创建、修改和删除用户及其相关的表空间。 ### 创建用户 在Oracle 10g中,创建用户是数据库管理员的一项基本任务。用户是...

    oracle 11G新建加密表空间

    在Oracle 11G中,加密表空间是一项重要的安全特性,它允许数据库管理员对整个表空间的数据进行加密,而不仅仅是特定的列或表。这种技术的引入极大地增强了数据的安全性,因为它不仅保护了数据库中的数据,还防止了...

    oracle10g表空间操作命令

    在Oracle 10g数据库管理中,表空间(Tablespace)是重要的逻辑存储结构单元,用于组织和管理数据库中的数据文件。本文将详细介绍如何通过Oracle 10g SQL命令进行表空间的操作,包括创建、调整大小、删除等,并提供...

    oracle10g的用户和表空间重建

    ### Oracle 10g 用户与表空间重建 在Oracle 10g数据库管理中,有时候我们需要对特定的用户和表空间进行重建操作。这通常发生在需要优化存储结构、解决存储空间不足或者数据损坏等问题时。本文将详细介绍Oracle 10g...

    \Oracle 表空间与数据文件

    - **USERS**:在Oracle 10g及以上版本中,用户的大部分数据都从`SYSTEM`表空间分离出来,放置在这个表空间中。 #### 二、Oracle的存储结构 Oracle数据库的存储结构可以从逻辑和物理两个层面来理解。 1. **逻辑...

    oracle11g-exp文件

    在给定的“oracle11g-exp”文件中,重点涉及了Oracle数据库的数据导出和导入工具,即EXP(Export)和IMP(Import)。这两个实用程序是数据库管理员和开发人员日常工作中不可或缺的部分,主要用于数据迁移、备份和...

    oracle11g连接文件oci.zip

    这个oci.zip文件包含的应该是Oracle 11g的OCI驱动或者相关的配置文件,用于PL/SQL Developer或其他支持OCI的应用程序建立到Oracle数据库的连接。 在PL/SQL Developer中,当你需要连接到Oracle数据库时,通常需要...

    Win764位安装Oracle11g及新建表空间和用户

    在Win7 64位操作系统上安装Oracle Database 11g Release 2(11.2)企业版并新建表空间和用户,涉及以下几个主要步骤: 1. 安装准备: - 首先需要从Oracle官方网站下载适合Win7 64位的Oracle Database 11g Release ...

    oracle11g创建临时表空间组

    在Oracle 11g R2版本中,引入了临时表空间组的概念,这一特性为数据库管理提供了更大的灵活性。与传统的单个临时表空间相比,临时表空间组允许多个临时表空间协同工作,从而提高并发性能和资源利用率。下面将详细...

    Oracle 表空间 收缩

    1. **创建临时表空间**:创建一个用于临时存放对象的大表空间。 ```sql CREATE BIGFILE TABLESPACE "REPORT_TS_BAK" DATAFILE '/usr/local/oracle/ordata_ext/REPORT_TS_BAK.DBF' SIZE 120G autoextend OFF; ``...

    oracle 10G命令建立表空间、用户、权限实例简单易懂

    在Oracle 10G数据库管理中,创建表空间、用户及分配权限是基本且关键的操作。以下将基于给定的文件信息,详细解析如何通过Oracle 10G命令行进行这些操作。 ### 创建表空间 表空间是Oracle数据库中最大的逻辑存储...

    oracle 11g ,10g软件资源 百度云下载

    Oracle 10g(10g代表10th Generation,即第十代)是Oracle公司发布的一个重要版本,发布于2004年。这一版本在之前的版本基础上进行了大量的改进和优化,引入了许多新特性,特别是在网格计算方面有着显著的进步。以下...

    Oracle10g创建、修改、删除用户和用户表空间

    在Oracle 10g数据库管理中,创建、修改和删除用户以及用户表空间是数据库管理员(DBA)的常见任务。这些操作对于维护数据库的安全性、性能和数据完整性至关重要。下面将详细阐述如何在Oracle 10g中执行这些操作。 ###...

    oracle定时删除表空间的数据并释放表空间

    7. **表分区和段压缩**:为了更有效地管理表空间,可以考虑对大表进行分区,根据日期或其他业务关键字段将数据分段存储。此外,Oracle还提供了压缩选项,如ROW STORE COMPRESSION和COLUMN STORE COMPRESSION,可以在...

    Oracle 10g客户端连接文件

    Oracle 10g客户端连接文件是Oracle数据库管理系统中用于远程连接Oracle服务器的重要组成部分。这个客户端组件使得用户可以在本地计算机上,无需安装完整的Oracle客户端软件,就能通过特定的配置连接到远程Oracle...

Global site tag (gtag.js) - Google Analytics