- 浏览: 191496 次
- 性别:
- 来自: 杭州
文章分类
最新评论
Oracle表空间Tablespace是逻辑结构的最高层次,其他分别对应段对象segment、区extent和块block。而物理层面的Oracle数据库是通过一系列的文件构成,其中数据文件datafile是与Tablespace进行对应的对象。
Tablespace与Datafile的关系是一对多的关系。一个表空间Tablespace可以对应多个Datafile,Datafile则是只能归属在一个Tablespace里。传统的Oracle管理概念中,倡导一个表空间中创建多个数据文件,特别是创建分布在多个存储磁盘上,以期分散I/O。但是,Oracle10g推出的BigFile Tablespace大文件表空间,将这个概念有所变化。
1、 Bigfile tablespace
在Oracle10g中,推出了Bigfile tablespace的概念。表空间Tablespace从Oracle10g以后就分为两个类型,smallfile tablespace和bigfile tablespace。过去一个表空间对应多个数据文件我们成为Smallfile Tablespace。
所谓Bigfile Tablespace最显著的差别就是一个表空间只能对应一个数据文件。Bigfile Tablespace虽只对应一个数据文件,但数据文件对应的最大体积大大增加。传统的small datafile每个文件中最多包括4M个数据块,按照一个数据块8K的大小核算,最大文件大小为32G。每个Small Tablespace理论上能够包括1024个数据文件,这样计算理论的最大值为32TB大小。而Bigfile Datafile具有更强大的数据块block容纳能力,最多能够包括4G个数据块。同样按照数据块8K计算,Bigfile Datafile大小为32KG=32TB。理论上small tablespace和big tablespace总容量相同。
下面我们通过一连串的实验来观察Bigfile Tablespace。
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database10gEnterpriseEdition Release10.2.0.1.0 - Prod
PL/SQL Release10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version10.2.0.1.0 - Production
NLSRTL Version10.2.0.1.0 - Production
SQL> createbigfile tablespacebttest datafile 'D:\ORADATA\ORCL\BTTEST.dbf' size10mautoextend off
2 extent management local uniform. size1m
3 segment space management auto;
Tablespace created
此处,我们通过create bigfile tablespace语句建立Bigfile Tablespace。注意两方面的问题,其一是Bigfile Tablespace必须使用local本地extent管理方式,不允许使用DMT(Dictionary Managed Tablespace)。另一方面是段segment空间使用auto自动方式,不要使用manual。
不过这两个条件在Undo或者临时Bigfile表空间的时候,是允许例外的。
Small Tablespace和Bigfile Tablespace是可以并存的。
SQL> select tablespace_name, bigfile from dba_tablespaces;
TABLESPACE_NAME BIGFILE
------------------------------ -------
(篇幅原因,省略……)
QCDATA NO
QCTEMP NO
BTTEST YES
11 rows selected
在创建bigfile tablespace的时候,就已经指定了数据文件。如果此时我们尝试加入一个新的数据文件,Oracle系统会报错。
SQL> alter tablespace bttest add datafile 'D:\ORADATA\ORCL\BTTEST02.dbf' size10mautoextend off;
alter tablespace bttest add datafile 'D:\ORADATA\ORCL\BTTEST02.dbf' size10mautoextend off
ORA-32771:无法在大文件表空间中添加文件
下面我们分析一下bigfile tablespace的特性。
2、Bigfile的相对文件编号
此处我们观察一下Bigfile Tablespace体系下的一些特征。
SQL> select file_name, file_id, relative_fno from dba_data_files;
FILE_NAME FILE_ID RELATIVE_FNO
------------------------------ ---------- ------------
D:\ORADATA\ORCL\USERS01.DBF 4 4
D:\ORADATA\ORCL\SYSAUX01.DBF 3 3
D:\ORADATA\ORCL\UNDOTBS01.DBF 2 2
D:\ORADATA\ORCL\SYSTEM01.DBF 1 1
D:\ORADATA\ORCL\EXAMPLE01.DBF 5 5
D:\ORADATA\ORCL\SPTABLESPACE 6 6
D:\ORADATA\ORCL\QCDATA.DBF 7 7
D:\ORADATA\ORCL\BTTEST.DBF 8 1024
8 rows selected
每个文件都包括两个编号,一个是绝对文件编号file_id,另一个是相对文件编号relative_fno。在文件数量较少,或者创建删除文件比较少情况下的数据库,file_id和relative_fno是相同的。Relative_fno是一个循环周期,以1024为一个循环。当file_id依次递增到1024整数倍之后,file_id会继续增加,而relative_fno会形成一个内部循环。
这种机制让我们联想起了Oracle Small Tablespace的数据文件上限限制,也是1023个文件。我们设想一种极端的情况,如果一个表空间中的数据文件个数超过了1024,也就是一个表空间内的数据文件中,存在相同的relative_fno。这种情况首先是不被允许的。
设置1024的relative_fno是进行Oracle数据寻址的需要。这里我们要关注到Oracle定位数据行的rowid信息,rowid是Oracle内部唯一标注一行记录的地址。Rowid包括四部分组成,对象号+文件号+块号+slot行号。Rowid长度固定,所以四部分的长度都是固定的,这里的文件号fno是相对文件编号。这里的查找顺序是,对象号获取所在表空间的编号,在表空间内部使用相对文件号来定位到文件。如果一个表空间内出现相同的relative_fno文件,定位就不可能了。所以,small tablepsace的内部文件上限必然是1023。
但是,Bigfile Tablespace存在一些不同之处。如果一个表空间只有一个数据文件且只能拥有一个数据文件,那么relative_fno就失去了存在的意义。所以在dba_data_files中的relative_fno列上,bigfile tablespace对应的datafile是直接1024。
SQL> create table t_big tablespace bttest as select * from dba_tables;
Table created
SQL> select dbms_rowid.rowid_object(t.rowid) obj_id, dbms_rowid.rowid_relative_fno(t.rowid,'BIGFILE') relative_fno,
2 dbms_rowid.rowid_block_number(t.rowid) block_num, dbms_rowid.rowid_row_number(t.rowid) rownums,
3 dbms_rowid.rowid_to_absolute_fno(t.rowid,'SYS','T_BIG') abso_fno
4 from t_BIG t where rownum<4;
OBJ_ID RELATIVE_FNO BLOCK_NUM ROWNUMS ABSO_FNO
---------- ------------ ---------- ---------- ----------
55707 1024 21 0 8
55707 1024 21 1 8
55707 1024 21 2 8
借助dbms_rowid包的相应方法,我们也可以看清bigfile tablespace上rowid行的relative_fno信息。
3、Bigfile Datafile大小探索
一个数据文件最大能有多大,在Oracle中有两个因素控制,一个是Oracle内部寻址能够寻找到的最大范围多少个块,另一个是数据库每个块大小是多大。
我们首先来看看Small Datafile的情况。Rowid是一个用16进制表示的18位长度类字符串。其中,前6位表示object_id,之后3位表示文件编号,之后6位表示块号,最后3位表示row的slot编号。
SQL> select substr(rowid,1,6) "object",
substr(rowid,7,3) "file",
substr(rowid,10,6) "block",
substr(rowid,16,3) "row"
from test;
object fil block row
------ --- ------ ---
AAABPW AAF AAAAv1 AAA
在small datafile中,对数据块有6×4=24位二进制表示。Oracle利用中间的22位进行块地址存储。这样,22位二进制可以表示的数据块编号范围为(2^22-1)=4M个数据块。如果按照每个数据块8K的普遍大小计算,这样每个small datafile大小上限就是32G。如果按照每个数据块上限32K计算,这样每个small datafile大小上限就是128G。
在bigfile datafile中,事情有所不同。由于没有relative_fno的问题,这样rowid中就不需要保存relative_fno的最多1024的数值。这样就节省出10位二进制位给数据块定位,相同长度的rowid就可以进行32位二进制长度的数据块寻址。每个bigfile datafile中,最多可以包括到(2^32-1)=4G个数据块。在数据块大小8K的环境下,最大为32TB数据。如果是数据块大小为32K环境下,文件最大可以到128TB大小。
4、结论和讨论
在本文第一部分中,我们讨论了Bigfile Tablespace和Small Tablespace的理论分析,两者理论上最大容量值是一样的。只是Bigfile的单个文件容量上限很大,我们如何看待这种新类型呢?
首先,实际生产环境下,Bigfile Tablespace在应对大数据量存储的时候略有优势。因为Small Tablespace在实现相同的存储大小时,要消耗大量的多文件管理开销。同时控制文件为了维护多位置上的文件,协同检查点和文件头SCN等内容,要消耗很大精力。
其次,Small Tablespace的存储量只是理论,很少有系统真的建立上千个文件在一个表空间中。从这个角度看,Bigfile吸引力是不小的。
最后,Oracle对于Bigfile Tablespace支持是全面的。存储层面上,ASM、Logical Volumn Manager/RAID、Dynamically Extensible Logical Volumes和OMF都提供了比较全面的支持。
但是,Bigfile Tablespace并不是万灵药。Bigfile是Oracle层面的Bigfile,并不涉及到OS层面的支持。使用Bigfile的时候,要选择合适的底层存储系统提供支持。此外,Bigfile的理念违背了我们过去宣称的I/O分散理论。所以,最好在有底层强大存储支持(如ASM)的情况下使用Bigfile,达到最优的性能平衡点。
http://space.itpub.net/17203031/viewspace-702593
发表评论
-
oracle数组游标批量插入
2013-12-07 16:40 3390declare type ary is table ... -
使用PL/SQL DEVELOPER 经常会碰到“DYNAMIC PERFORMANCE TABLES NOT ACCESSIBLE”错误
2012-10-16 08:45 934在使用PL/SQL Developer工具登陆一个新 ... -
buffer busy waits 等待事件(热点块竞争)
2012-08-31 16:31 1740*************************** ... -
ora-00054:resource busy and acquire with nowait specified解决方法
2012-06-16 09:35 947当某个数据库用户在数据库中插入、更新、删除一个表的数据, ... -
Oracle 9i 使用Statpack snap 步骤和说明
2012-06-14 08:40 17441、telnet到远程的数据库服务器 CMD>t ... -
oracle Statspack 报告解析之 Shared Pool Statistics(共享池统计信息)
2012-06-21 12:57 1219Shared Pool Statistics ... -
ORACLE里锁模式v$locked_object , locked_mode
2012-06-16 09:37 1448ORACLE里锁有以下几种模式: 0:none ... -
Oracle全面优化:如何对Oracle进行系统的全面优化?
2012-06-13 08:36 1193数据库系统和操作系统一样,在计算机上安装成功后,还需要进 ... -
oracle 参数 FAST_START_MTTR_TARGET
2012-06-14 08:41 1281参数FAST_START_MTTR_TARGET ... -
ORA-12519: TNS:no appropriate service handler found 解决
2012-06-15 08:35 838ORA-12519: TNS:no appropriat ... -
oracle 10g dataguard搭建步骤
2012-06-17 08:49 1724一、主库操作 1、修改主库属性: alter sys ... -
oracle Statspack 报告解析之 Top 5 Timed Events(等待事件)
2012-06-20 08:29 2004常见等待事件说明: ... -
index cluster/hash cluster/sort hash cluster
2012-06-15 08:36 1258簇是一个或多个表的组合,这些表的数据存储在相同的数据块 ... -
Oracle flashback几种方式
2012-06-20 08:26 691flashback(闪回)是Oracle10 ... -
ORACLE Audit 审计
2012-06-21 12:58 13351、什么是审计 审计(A ... -
Oracle建立用户 ,限制用户访问资源
2012-06-14 08:38 1114一、目的: Oracle系 ... -
oracle block 格式
2012-06-19 08:35 1089create table t(n number); ... -
oracle Statspack 报告解析之 Load Profile
2012-06-21 12:57 2099该部分提供每秒和每个事物的统计信息,是监控系统吞吐量和负载变化 ... -
数据库突然变慢,怎么办?
2012-06-16 09:38 2878第一章 检查系统的状态 1.1 使用sar来检查操作系 ... -
oracle library cache 中的hash算法原理
2012-06-18 08:24 1123详细文章:http://bkeep.blog.163.com/ ...
相关推荐
CREATE BIGFILE TABLESPACE bigfile DATAFILE '/app/oracle/oradata/orcl/bigfile.dbf' SIZE 500M AUTOEXTEND ON; ``` 创建完成后,可以通过查询`v$datafile`来验证新表空间的存在及其数据文件的位置。 #### 添加...
同时,数据库默认创建的表空间类型可通过`ALTER DATABASE SET DEFAULT`语句进行设置,可选择`bigfile TABLESPACE`或`smallfile TABLESPACE`。 总的来说,理解Oracle中的表空间与数据文件是管理和优化数据库性能的...
大文件表空间(BIGFILE TABLESPACE)则是另一种创建方式,允许单个数据文件存储大量数据,如`CREATE BIGFILE TABLESPACE bigtbs`所示。 控制文件是Oracle数据库的核心组件,记录了数据库的物理结构和状态。通过查询...
Oracle 表空间的创建可以使用 CREATE TABLESPACE 语句,包括 BIGFILE、SMALLFILE 和 TEMPORARY 三种类型。创建表空间时需要指定数据文件的路径和名称,数据文件的大小和存储方式等。创建表空间时还需要指定表空间的...
表空间可以进一步分为大文件表空间(Bigfile Tablespaces)和小文件表空间(Smallfile Tablespaces)。大文件表空间允许单个文件的大小显著增大,最多可包含4G个数据块,并且能够提升检查点的性能,减少大型数据库的...
SQL> create bigfile tablespace bigfile_ts1 datafile '%oracle_home%\database\bigfile_ts1.dbf' size 50M reuse; ``` 在调整数据表空间时,需要注意表空间的大小和块大小等参数。例如,调整数据表空间 data_ts1 ...
CREATE BIGFILE TABLESPACE "REPORT_TS_BAK" DATAFILE '/usr/local/oracle/ordata_ext/REPORT_TS_BAK.DBF' SIZE 120G autoextend OFF; ``` 2. **确定最大block_id**:计算出当前表空间中最大的block_id,并将...
CREATE BIGFILE TABLESPACE MID_DATA LOGGING DATAFILE 'D:\\app\Administrator\oradata\tablespace\MID_DATA.dbf' SIZE 50M AUTOEXTEND ON NEXT 50M MAXSIZE 20480M EXTENT MANAGEMENT LOCAL; ``` **5. 创建Oracle...
在Oracle 10g及以后的版本中,引入了大文件表空间(Bigfile Tablespace)的概念,允许创建一个数据文件可以非常大,甚至可以超过4MB,这种情况下不再有1023个数据文件的限制。 每个数据块都有自己的唯一标识,通常...
大文件表空间(Bigfile Tablespace)允许单个数据文件跨越多个操作系统文件,简化管理。非标准数据块表空间允许自定义数据块大小,以适应特定应用需求。撤消表空间(UNDOTABLESPACE)专门用于存储撤销信息,保证事务...
CREATE [BIGFILE | SMALLFILE] [TEMPORARY] TABLESPACE tablespace_name DATAFILE datafile_spec | TEMPFILE temp_file_spec [MINIMUM EXTENT minimum_extent_size] [BLOCKSIZE blocksize] [[COMPRESS | NOCOMPRESS]...
两种方法,一种是为表空间增加数据文件: 代码如下: alter tablespace users add datafile ‘/opt/oracle/oradata/esop/so_data02.dbf’ size 200M; 另一种方法是增加表空间原有数据文件尺寸: 代码如下: alter ...
在Oracle中,你可以通过`CREATE TABLESPACE`语句来创建表空间。例如,创建一个名为`TEST1`的表空间,禁止自动扩展数据文件,代码如下: ```sql CREATE TABLESPACE test1 LOGGING DATAFILE 'c:\test101.dbf' SIZE 5M...
- **创建表空间命令**: `CREATE BIGFILE TABLESPACE "TBS_TEST"`,创建了一个大文件表空间。 - **数据文件属性**: SIZE参数指定初始大小,AUTOEXTEND ON允许文件自动扩展,NEXT参数定义了每次扩展的增量,MAXSIZE ...
直接划一个xxG的裸设备就行 然后执行alter tablespace xxx add datfile '***' size 30000M autoextend off; 建裸设备时,裸设备的大小要大于文件的大小,下面以是建设备system01的命令:
create bigfile tablespace big_table_01 datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\XIANWEI\big_table_xianwei01.DBF' size 500M autoextend on; ``` - **解释**:此命令创建了一个名为`big_table_01`的大...
在Oracle 10g中,新增了大文件表空间(Bigfile Tablespace)的概念,允许在一个表空间内创建一个大数据文件,提供更高的存储效率。与之相对的是小文件表空间,可以包含多个较小的数据文件。 了解这些逻辑存储结构...
设置默认的表空间类型可以使用`ALTER DATABASE SET DEFAULT TABLESPACE`语句,分别指定为`bigfile`或`smallfile`。 获取表空间信息和管理数据文件的操作,可以通过SQL查询如`DBA_DATA_FILES`、`DBA_TABLESPACES`等...
3. 按文件大小和数量划分:大文件表空间(Bigfile Tablespace)适合大型数据库,数据文件可包含大量数据块,最大可达32TB;小文件表空间则允许更多的数据文件,更适合小型到中型数据库。 表空间的管理包括对区...