热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

表空间数据文件详解(一)

一.表空间的创建创建表空间:CreatetablespacefelixDatafileu01apporacleoradatafelixfelixtbs.dbfSize100mautoextendonnext10mmaxsize1024mExtentmanagementlocaluniformsize128kSegmentspacemanagementauto;这个很重要,如何查看创建的

一.表空间的创建 创建表空间: Create tablespace felix Datafile/u01/app/oracle/oradata/felix/felixtbs.dbf Size100m autoextendonnext10m maxsize1024m Extentmanagementlocaluniformsize128k Segmentspacemanagementauto; 这个很重要,如何查看创建的

一.表空间的创建

创建表空间:

Create tablespace felix

Datafile'/u01/app/oracle/oradata/felix/felixtbs.dbf'

Size100m autoextendonnext10m maxsize1024m

Extentmanagementlocaluniformsize128k

Segmentspacemanagementauto;

这个很重要,如何查看创建的表空间属性,就用如下的语句:

selecttablespace_name,block_size,contents,extent_management,allocation_type,segment_space_management

from dba_tablespaces

where tablespace_name='FELIX';

如果需要查看表空间的扩展属性,需要通过dba_data_files进行查看:

selecttablespace_name,autoextensible,increment_by,maxbytes

fromdba_data_files

where tablespace_name='FELIX';

--为应用创建用户

createuser felix identifiedby felix

defaulttablespace felix

temporarytablespace temp;

#创建用户的相关信息则可以通过DBA_USERS 视图查询得到:

selectusername,user_id,password,default_tablespace,temporary_tablespace

fromdba_users

whereusername='FELIX'

#进行相应的权限的授予:

grantconnect,resourceto felix;

revokeunnlimited tablesapce from felix;

alteruser felix quotaunlimitedon felix;

二.表空间管理技术

(1)数据字典表空间管理技术(DMT):所谓的数据字典管理表空间是指,当创建或者删除对象时,oracle的表空间分配或回收是通过数据库中的数据字典来记录和管理的,用于管理的两个数据字典分别是:UET$ (used extents,已使用的空间)和FET$ (free extents,空闲表空间)。

SQL> DESC UET$;

Name Type Nullable Default Comments

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

SEGFILE# NUMBER

SEGBLOCK# NUMBER

EXT# NUMBER

TS# NUMBER

FILE# NUMBER

BLOCK# NUMBER

LENGTH NUMBER

SQL> DESC FET$;

Name Type Nullable Default Comments

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

TS# NUMBER

FILE# NUMBER

BLOCK# NUMBER

LENGTH NUMBER

可以清晰的看到文件号(FILE#),数据块号(BLOCK#)等信息来管理空间的分配和回收;

数据字典管理表空间的工作方式;当一个新的段或者段在表空间中请求新的空间时,oracle通过执行一系列的sql语句来完成这个工作,这些工作包括从FET$找到可用的自由空间移动或增减相应的行到UET$中,并在FET$中删除相应的记录;当删除一个段的时候,oracle则移动UET$中相应的行到FET$;这个过程是连续的、串行的,在繁忙的数据库中,这类操作极可能导致竞争和等待,产生数据字典的争用;另一方面,当数据字典的表的信息被修改时,系统同样要记录undo和redo信息,频繁的修改又不可避免的对整个数据库的性能产生影响;

然而,数据字典管理表空间面临的另外一个问题就是:空间碎片

(2)本地管理表空间技术(LMT):oracle不再使用数据字典管理而是在每个表空间的数据文件头加了一个位图区域,在其中记录每个extent的使用情况,每当一个extent被使用,或者被释放以供重新使用时oracle都会跟新数据文件头的这个记录,反应这个变化;

创建语法如下:

CREATE TABLESPACEtablespace_name

DATAFILE ‘datafile_path_name’

[EXTENT MANASGEMENT { LOCAL| AUTOALLOCATION | UNIFORM [SIZEINTER [K|M]]}];

由于区间(extent)是oracle创建对象时的最小分配单元,所以表空间的管理实际上就是针对区间的管理;

--通过DBA_TABLESPACES视图查询表空间的类型:

select tablespace_name,extent_management,allocation_type

from dba_tablespaces;

DBA_EXTENTS记录了每个对象分配的区间(EXTENT),哪些对象分配了多少空间以及区间具体位于的文件等信息:

SQL> SELECTEXTENT_ID,BLOCK_ID,BLOCKS FROM DBA_EXTENTS WHERE SEGMENT_NAME='TS_TEST';

EXTENT_ID BLOCK_ID BLOCKS

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

0 536 8

1 544 8

2 552 8

3 560 8

4 568 8

5 576 8

6 584 8

7 592 8

8 600 8

9 608 8

... …

11 624 8

12 632 8

13 640 8

14 1800 8

15 1808 8

16 768 128

17 896 128

18 1024 128

19 1152 128

20 1280 128

21 1408 128

56 7040 128

57 7168 128

58 rowsselected

转储数据块信息:

select object_id,

dbms_rowid.rowid_relative_fno(rowid) file#,

dbms_rowid.rowid_block_number(rowid) block#

from ts_test

where rownum<=100;

进行dump查看:

#alter systemdumpdatafile3blockmax 1blockmin 6;

selectvaluefrom v$diag_info;

[oracle@felix ~]$ vi /u01/app/oracle/diag/rdbms/felix/felix/trace/felix_ora_3219.trc

*** 2014-03-25 00:53:38.498

Block 1 (file header) not dumped:use dump file header command

Block dump from cache:

Dump of buffer cache at level 4 for tsn=2rdba=12582914

BH (0x6dbf97a8) file#: 3 rdba: 0x00c00002(3/2) class: 13 ba: 0x6db88000

set: 3 pool: 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,25

dbwrid: 0 obj: -1 objn: -1 tsn: 2 afn: 3 hint: f

hash: [0x77fb7be0,0x77fb7be0] lru: [0x6dbf9e80,0x6dbf9760]

lru-flags: hot_buffer

obj-flags: object_ckpt_list

ckptq: [0x6a3ed9a8,0x6a3e4eb8] fileq: [0x6c7e74c8,0x6bfe75f8] objq:[0x6d3e5e08,0x6dbf9788] objaq: [0x6dbf9eb8,0x6dbf9798]

st:XCURRENT md: NULL tch: 13

flags: buffer_dirty block_written_once redo_since_read

LRBA: [0x14.4b5f.0] LSCN: [0x0.14de1c] HSCN: [0x0.14de27] HSUB: [1]

Block dump from disk:

buffer tsn: 2 rdba: 0x00c00002 (3/2)

scn: 0x0000.00145380 seq: 0x02 flg: 0x04tail: 0x53801d02

frmt: 0x02 chkval: 0x1352 type: 0x1d=KTFB Bitmapped FileSpace Header

Hex dump of block: st=0, typ_found=1

Dump of memory from 0x00007FAD09B98200 to0x00007FAD09B9A200

7FAD09B98200 0000A21D 00C00002 0014538004020000 [.........S......]

7FAD09B98210 00001352 00000003 0000000800003700 [R............7..]

7FAD09B98220 00000009 00000280 003FFFFE0000007E [..........?.~...]

7FAD09B98230 000036FF 00000060 000004DA00145375 [.6..`.......uS..]

7FAD09B98240 00000000 00000000 0000000000000000 [................]

alter session set events &#39;immediate trace name file_hdrs level 10&#39;;

1 select file_id,extent_id,block_id,blocks

2 from dba_extents

3*where segment_name=&#39;TS_TEST&#39;

FILE_ID EXTENT_ID BLOCK_ID BLOCKS

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

4 0 536 8

4 1 544 8

4 2 552 8

4 13 640 8

4 14 1800 8

4 15 1808 8

4 16 768 128

4 17 896 128

4 18 1024 128

4 19 1152 128

4 20 1280 128

4 21 1408 128

4 22 1536 128

4 23 1664 128

4 24 2944 128

4 25 3072 128

4 26 3200 128

4 56 7040 128

4 57 7168 128

4 58 7296 128

59 rows selected.

SQL> select block_size,tablespace_name,min_extents,max_extents fromdba_tablespaces;

BLOCK_SIZE TABLESPACE_NAME MIN_EXTENTS MAX_EXTENTS

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

8192 SYSTEM 1 2147483645

8192 SYSAUX 1 2147483645

8192 UNDOTBS1 1 2147483645

8192 TEMP 1

8192 USERS 1 2147483645

8192 EXAMPLE 1 2147483645

8192 STATSPACK 1 2147483645

8192 STATSPACKTEMP 1

8192 FELIX 1 2147483645

9 rows selected

段空间管理技术:

段内则是以block为单位进行空间使用和管理的;

主要段的类型有:

SQL>select distinct(segment_type) fromdba_segments;

SEGMENT_TYPE

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

LOBINDEX

INDEX PARTITION

TABLE SUBPARTITION

TABLE PARTITION

NESTED TABLE

ROLLBACK

LOB PARTITION

LOBSEGMENT

INDEX

TABLE

CLUSTER

TYPE2 UNDO

12 rows selected.

(1) 手工段空间管理(manual Segment space management):这种技术(9i之前的做法)是室通过段头分配的自由列表(pctlist)来管理block的使用,简单一点就是把自由列表想象成一个数据表,oracle依赖一系列的算法通过自由列表中加入或移出block来管理段空间;

(2) 自动断管理方式(autosegment space management):通过位图实现管理

ASSM的巨大优势是位图组能够减轻缓冲区忙等待(Bufferbusy wait)的负担,在9i以前的版本里曾是一个严重的问题;并且显著提高了并发性,因为位图数组的不同部分可以被同时使用,这样就消除了寻找剩余空间的串行化。

ASSM的管理机制,首先前2个数据块为数据文件头,3~8个数据块为位图区,接下来的第9个块和第10个块就是ASSM位图块;

进行dump第9个块:

Alter database dump datafile 3 block 9;

SQL>alter systemdump datafile 3 block 9;

System altered.

SQL>select value from v$diag_info;

VALUE

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

TRUE

/u01/app/oracle

/u01/app/oracle/diag/rdbms/felix/felix

/u01/app/oracle/diag/rdbms/felix/felix/trace

/u01/app/oracle/diag/rdbms/felix/felix/alert

/u01/app/oracle/diag/rdbms/felix/felix/incident

/u01/app/oracle/diag/rdbms/felix/felix/cdump

/u01/app/oracle/diag/rdbms/felix/felix/hm

/u01/app/oracle/diag/rdbms/felix/felix/trace/felix_ora_3050.trc

0

0

11 rows selected.

tail -300 /u01/app/oracle/diag/rdbms/felix/felix/trace/felix_ora_3050.trc

*** 2014-03-25 02:07:30.355

Block dump from cache:

Dump of buffer cache at level 4 for tsn=2rdba=12582921

Block dump from disk:

buffer tsn: 2 rdba: 0x00c00009 (3/9)

scn: 0x0000.000f2557 seq: 0x01 flg: 0x04tail: 0x25571e01

frmt: 0x02 chkval: 0xc075 type: 0x1e=KTFBBitmapped File Space Bitmap

Hex dump of block: st=0, typ_found=1

Dump of memory from 0x00007FAD0893C600 to0x00007FAD0893E600

7FAD0893C600 0000A21E 00C00009 000F255704010000 [........W%......]

7FAD0893C610 0000C075 00000003 002E808000000000 [u...............]

7FAD0893C620 00000000 0000F800 0000000000000000 [................]

7FAD0893C630 00000000 00000000 0000000000000000 [................]

Repeat 507 times

7FAD0893E5F0 00000000 00000000 0000000025571E01 [..............W%]

File Space Bitmap Block:

BitMap Control:

RelFno: 3, BeginBlock: 3047552, Flag: 0,First: 0, Free: 63488

0000000000000000 0000000000000000 00000000000000000000000000000000

0000000000000000 00000000000000000000000000000000 0000000000000000

0000000000000000 00000000000000000000000000000000 0000000000000000

查询segment header,可以使用dba_segment视图:

SQL> selectsegment_name,header_file,header_file,header_block from dba_segments

2 where segment_NAME=&#39;TS_TEST&#39;;

SEGMENT_NAME HEADER_FILE HEADER_FILE HEADER_BLOCK

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

TS_TEST 4 4 538


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 计算机网络复习:第五章 网络层控制平面
    本文探讨了网络层的控制平面,包括转发和路由选择的基本原理。转发在数据平面上实现,通过配置路由器中的转发表完成;而路由选择则在控制平面上进行,涉及路由器中路由表的配置与更新。此外,文章还介绍了ICMP协议、两种控制平面的实现方法、路由选择算法及其分类等内容。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 线性Kalman滤波器在多自由度车辆悬架主动控制中的应用研究
    本文探讨了线性Kalman滤波器(LKF)在不同自由度(2、4、7)的车辆悬架系统中进行主动控制的应用。通过详细的仿真分析,展示了LKF在提升悬架性能方面的潜力,并总结了调参过程中的关键要点。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨如何设计一个安全的加密和验证算法,确保生成的密码具有高随机性和低重复率,并提供相应的验证机制。 ... [详细]
author-avatar
上善若水纯_310
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有