ORACLE的逻辑结构的实体,从小到大依次为: 数据块(data block):数据块是ORACLE的存储基础,它由磁盘空间上的若干字节组成。 区(extent):一个区是两个或多个相邻的ORACLE数据块,它是空间分配单元。 段(segment):一个段是分配给一个逻辑结构(表,索引等对象)的一组区。 表空间(tablespace):表空间是一组数据文件,通常由相关的段组成。数据文件包含表空间中的所有逻辑结构的数据,如表和索引的数据。 下面我们来依次细聊各个逻辑机构。 1.数据块 上面介绍了,数据块是由操作系统的存储系统中磁盘空间的一定数目的字节组成。ORACLE数据块是ORACLE的最小存储逻辑部件,驻留ORACLE块的存储磁盘分为若干个磁盘块(disk block),一个磁盘块是一个包含指定字节数的相邻的存储区域---例如,4 096字节或32 768字节。那摸,ORACLE的数据块到底应该多大才合适呢?首先介绍一个初始化参数DB_BLOCK_SIZE,修改这个参数就能指定ORACLE数据块的大小。块尺寸是处理ORACLE的更新、选择或插入数据事务的最小单位,举个例子:如果使用64KB的ORACLE块尺寸,即使只想检索仅4个字符的名字,也必须读取含有这4个字符的整个64KB块。对于大多数系统来说,oracle建议使用8KB。 ORACLE块尺寸的确定应该基于数据库将要做的工作。如果行比较小且访问很随机,则选择较小的块尺寸,如果行比较小且访问主要是连续的(或是随机且连续的),或者如果有较大行,则选择较大的块尺寸。但是请务必将ORACLE数据块尺寸设定为磁盘块尺寸的倍数,这样能够提高大多数操作系统的性能。 可以使用ORACLE的转储功能将数据块转储出来细看里面的内容,下面我们就来做这个工作。首相查出某表对象的块ID:SQL> select segment_name,file_id,block_id from dba_extents where wner='XXXX' and segment_name like 'HANDLE_%';SEGMENT_NAME FILE_ID BLOCK_ID----------------------------------------------------------- ---------- ----------HANDLE_LOG 10 79488HANDLE_LOG 12 53248HANDLE_LOG 13 147584HANDLE_LOG 14 1071360HANDLE_LOG 15 512512同样可以使用下面的手段来查询:SQL> select header_file,header_block from dba_segments where segment_name='HANDLE_LOG';HEADER_FILE HEADER_BLOCK----------- ------------ 6 52257 13 56865 15 82961 10 79505 12 119953 12 233233然后将10这个file转储出来:SQL> alter system dump datafile 10 block 79505;System altered.去到udump目录,找到转储出来的文件,查看udump的路径使用下面的方法:SQL> show parameter user_dump_destNAME TYPE VALUE------------------------------------ ----------- ------------------------------user_dump_dest string /xx/xxx/xxxxx/xxxx/xxxx/xxxx /xxxx/traceSQL>转储文件内容如下:Trace file /xx/xxx/xxxxxx/xxxx/xxxxx/xxxxx/xxxxx/xxxxx/xxxxx_ora_24510612.trcOracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the OLAP optionORACLE_HOME = /xx/xxx/xxxxxx/xxxxxxx/11.2.0/db_1System name: AIXNode name: xxxxxRelease: 1Version: 6Machine: XXXXXInstance name: xxxxxRedo thread mounted by this instance: 1Oracle process number: 27Unix process pid: 24510612, image: oracle@xxxxxx (TNS V1-V3).................... Start dump data blocks tsn: 6 file#:10 minblk 79505 maxblk 79505Block dump from cache:Dump of buffer cache at level 4 for tsn=6, rdba=42022545BH (0x700000071fb6888) file#: 10 rdba: 0x02813691 (10/79505) class: 4 ba: 0x70000007187c000 set: 17 pool 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,25 dbwrid: 0 obj: 311139 objn: 311139 tsn: 6 afn: 10 hint: f hash: [0x7000000c999fe30,0x7000000c999fe30] lru: [0x70000005ff97ca0,0x700000069fdd1c0] lru-flags: hot_buffer ckptq: [NULL] fileq: [NULL] objq: [0x70000008b82a310,0x70000008b82a310] st: XCURRENT md: NULL tch: 2 flags: block_written_once redo_since_read LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [3] cr pin refcnt: 0 sh pin refcnt: 0Block dump from disk:buffer tsn: 6 rdba: 0x02813691 (10/79505)scn: 0x0000.0729bae3 seq: 0x01 flg: 0x04 tail: 0xbae32301frmt: 0x02 chkval: 0x790e type: 0x23=PAGETABLE SEGMENT HEADERHex dump of block: st=0, typ_found=1Dump of memory from 0x0000000110B5FE00 to 0x0000000110B61E00110B5FE00 23A20000 02813691 0729BAE3 00000104 [#.....6..)......]110B5FE10 790E0000 00000000 00000000 00000000 [y...............]110B5FE20 00000000 00000005 00001400 0A9C0000 [................]110B5FE30 00000004 00000354 00000400 03C7D554 [.......T.......T]110B5FE40 00000000 00000004 00000000 00001354 [...............T]110B5FE50 00000000 00000000 00000000 00000004 [................]110B5FE60 00000354 00000400 03C7D554 00000000 [...T.......T....]110B5FE70 00000004 00000000 00001354 03C7D20D [...........T....]110B5FE80 03C7D20D 00000000 00000000 00000000 [................]110B5FE90 00000000 00000000 00000000 00000000 [................] Repeat 3 times110B5FED0 00010000 00002000 00000000 00001434 [...... ........4]110B5FEE0 00000000 02813690 00000001 03C7D20F [......6.........]110B5FEF0 02813690 00000000 00000000 00000000 [..6.............]110B5FF00 00000000 00000000 00000005 00000000 [................]110B5FF10 0004BF63 10000000 02813680 00000400 [...c......6.....]110B5FF20 0300D000 00000400 03424080 00000400 [.........B@.....]110B5FF30 03905900 00000400 03C7D200 00000400 [..Y.............]110B5FF40 00000000 00000000 00000000 00000000 [................] Repeat 150 times110B608B0 02813680 02813692 0300D000 0300D010 [..6...6.........]110B608C0 03424080 03424090 03905900 03905910 [.B@..B@...Y...Y.]110B608D0 03C7D200 03C7D210 00000000 00000000 [................]110B608E0 00000000 00000000 00000000 00000000 [................] Repeat 149 times110B61240 00000000 00000000 02813690 00000000 [..........6.....]110B61250 00000000 00000000 00000000 00000000 [................] Repeat 185 times110B61DF0 00000000 00000000 00000000 BAE32301 [..............#.] Extent Control Header ----------------------------------------------------------------- Extent Header:: spare1: 0 spare2: 0 #extents: 5 #blocks: 5120 last map 0x00000000 #maps: 0 offset: 2716 Highwater:: 0x03c7d554 ext#: 4 blk#: 852 ext size: 1024 #blocks in seg. hdr's freelists: 0 #blocks below: 4948 mapblk 0x00000000 offset: 4 Unlocked -------------------------------------------------------- Low HighWater Mark : Highwater:: 0x03c7d554 ext#: 4 blk#: 852 ext size: 1024 #blocks in seg. hdr's freelists: 0 #blocks below: 4948 mapblk 0x00000000 offset: 4 Level 1 BMB for High HWM block: 0x03c7d20d Level 1 BMB for Low HWM block: 0x03c7d20d -------------------------------------------------------- Segment Type: 1 nl2: 1 blksz: 8192 fbsz: 0 L2 Array start offset: 0x00001434 First Level 3 BMB: 0x00000000 L2 Hint for inserts: 0x02813690 Last Level 1 BMB: 0x03c7d20f Last Level II BMB: 0x02813690 Last Level III BMB: 0x00000000 Map Header:: next 0x00000000 #extents: 5 obj#: 311139 flag: 0x10000000 Inc # 0 Extent Map ----------------------------------------------------------------- 0x02813680 length: 1024 0x0300d000 length: 1024 0x03424080 length: 1024 0x03905900 length: 1024 0x03c7d200 length: 1024 Auxillary Map -------------------------------------------------------- Extent 0 : L1 dba: 0x02813680 Data dba: 0x02813692 Extent 1 : L1 dba: 0x0300d000 Data dba: 0x0300d010 Extent 2 : L1 dba: 0x03424080 Data dba: 0x03424090 Extent 3 : L1 dba: 0x03905900 Data dba: 0x03905910 Extent 4 : L1 dba: 0x03c7d200 Data dba: 0x03c7d210 -------------------------------------------------------- Second Level Bitmap block DBAs -------------------------------------------------------- DBA 1: 0x02813690 End dump data blocks tsn: 6 file#: 10 minblk 79505 maxblk 79505这些信息能够帮助我们查找表或索引中相关内容。比如obj#: 311139,就能够查到handle_log对象:
SQL> select name from obj$ where obj#=311139;
NAME
------------------------------
HANDLE_LOG
SQL>
2.区
当创建诸如表或索引这样的数据库对象时,要分配给它一个初始的空间量,称为初始区(initial extent),还要为对象指定下一个区的空间量。区分配了表或索引后,在从数据库中删除此对象之前,区都会一直保护它们。一旦对象从数据库中是删除,区空间也就回到数据库可分配的可用空间池中。
3.段
ORACLE分配给任一数据库对象的所有空间为一个段。比如,handle_log表,分配给它的空间就叫handle_log段。数据段和索引段都是最常见的ORACLE段,还有临时段(如数据库用于涉及分类事务的段)和撤销段(数据库用来存储撤销信息)。
4.表空间
ORACLE在逻辑上划分为一个或多个表空间。ORACLE表空间是包含物理数据文件的逻辑实体。表空间存储数据库所有可用的数据,并且表空间中的数据都物理的存放在一个或多个数据文件里。数据文件是ORACLE格式的操作系统文件。因为表空间还担当了逻辑段的逻辑容器角色,所以一般情况下应该将相关的表都放在同一个表空间下。
但并不是所有数据库都采用表空间。ORACLE的表空间有如下优点:
·表空间更容易将空间限额分配给不同用户。
·可以把表空间作为单元执行部分备份和部分恢复。
·由于像数据仓库分区表这样的大对象可以分布在几个表空间上,因此可以使表空间横跨几个磁盘和控制器,以便提高性能。
·可以使一个表空间脱机而不必停止整个数据库。
·表空间是分配数据库空间的一种便利方法。
·使用表空间级导入导出实用程序可以导入导出指定的应用数据。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25915379/viewspace-714790/
,如需转载,请注明出处,否则将追究法律责任。