| 德滨's profileOracle空间PhotosBlogLists | Help |
|
Oracle空间July 08 索引的管理一、索引的分类1、逻辑上分为:
1)单行/联合索引:索引是否是由一行组成的。 2)唯一/非唯一索引:索引中的数据是否唯一。 3)函数索引:通过使用表中一行或者几行进行函数或者表达式计算而形成的索引,oracle会对函数或者表达式提前进行计算并将结果存放在索引中。可以是B-tree索引也可以是位图索引。 4)域(Domain)索引:暂时还没弄明白。 2、物理上分: 1)分区/非分区索引:对大的分区表进行索引的需要。 2)B-tree索引 3)位图索引 二、B-tree索引所有的索引都是以B-tree结构来存储的,但是B-tree索引通常是指一个索引对每一个键都存储一个ROWID。
1、B-tree索引的结构:在索引的根部是指向下一层的入口。索引的下一层是枝干块(branch block),也是指向下一个层次。在索引的最底层是叶结点,含有指向表中特定行的入口,叶结点块是双向连接的,这样无论根据键进行升序或者降序排列都是非常方便的。 2、叶结点入口的格式: 一个叶结点入口是由以下几个部分组成的: 1)一个入口头,存放着列的编号和锁状态; 2)键的长度/值对,存放了列中键的长度后面紧跟着它的值(这个长度/值对的数量就是列的最大数量); 3)行的ROWID 3、索引叶结点入口的特点:(在非分区表中B-tree索引) 1)如果表中几行的键值相等则索引中的键值也将重复; 2)对于键值是NULL的列,在索引中是没有入口的,因此在WHERE子句中对索引指定为NULL进行搜索将对全表进行扫描; 3)由于所有的行都在一个段中,因此使用的是相对ROWID指向表中的一行。 4、DML语句对索引的影响:Oracle Server在DML对表进行操作后将自动维护所有的索引。 1)插入操作在相应的块中插入索引入口; 2)删除仅仅是在逻辑上删除了索引的入口,被删除行使用的空间需要等到整个Block的行的入口被删除后才能再次使用; 3)对列的键进行更新操作将在逻辑上对索引进行删除并插入操作,PCTFREE参数值是在新产生索引的时候才生效,一个新的入口也可以加到已经超过PCTFREE值得块中。 三、位图索引1、位图索引相对于B-tree索引的好处:
1)当一个表有成百万的行但是集却非常低,就是说列的值之间相差不是非常大。比如对于存放护照信息的表中像性别和婚姻状况的列使用位图索引就要比B-tree要好的多; 2)当WHERE子句中经常使用OR关键字来连接的情况使用位图索引要好;
3)对键列不是经常更新或是只读的情况。
2、位图索引的结构:位图索引也是使用B-tree的结构来组织的,但是在叶结点中存放的是每一个将的位图而不是ROWID列表。位图中的每一位表示一个ROWID,如果这个位有值说明这个ROWID中含有这个键值。叶结点的结构如下:
1)一个入口头:列的编号和锁的信息;
2)对于每一键的列都有一个长度/值对;
3)开始ROWID;
4)结束ROWID;
5)位图段:是一串位图,如果哪一位有1则说明这一行含有这个键值。
3、使用位图索引
B-tree用来一个给定键值定位到叶结点,开始ROWID和位图段用来定位给定键值的行。
当键的值被修改了,位图必须也要修改。这样就需要对相关的位图段进行锁定,因为需要对整个位图段进行加锁,这个位图涉及到所有的行在这个事物处理没有完成之前是都不能进行更新的。
July 07 表的管理一、表的类型常用表、分区表、索引组织表(Index-organized)、族表
二、Oracle数据类型用户定义类型内部定义类型:1、数量:CHAR(N)/NCHAR(N)、VARCHAR2(N)/NVARCHAR2(N)、NUMBER(P,S)、DATE、TIMESTAMP、RAW(N)、BLOB/CLOB/NCLOB/BFILE、LONG/LONG RAW、ROWID/UROWID 2、集合:变量、表 3、关系:参考 其中: RAW(N):存储小的二进制数据,在将RAW的数据类型通过应用工具传送到其他数据库的过程中Oracle Server不会对其进行字符集的转换。 LONG/LONG RAW:为9i之前使用的LOB类型。 三、ROWID格式1、扩展ROWID格式 OOOOOO FFF BBBBBB RRR 数据对象编号:在数据库对象产生的时候指定的全数据库唯一的编号。 相关文件编号:在一个表空间中是唯一的。 块编号:表示包含行块的位置。 行编号:在block(块)头中关于行信息位置的编号。 数据对象编号需要32位,相关文件编号需要10位,块编号22位,行编号16位,加在一起是80位或者10个字节。 一个扩展ROWID使用64进制编码来显示,使用6位显示对象编号,3位显示相关文件编号,6位显示块编号,3位显示行编号。64进制码使用“A-Z"、“a-z“、“0-9“加上“+”和“/”一共64个字符。 2、相对ROWID:在Oracle8以前使用相对ROWID,只使用6个字节存储。 3、使用ROWID定位一行 因为一个段只能在一个表空间中,使用数据对象编号就可以确定一行所在的表空间。表空间中相关的数据文件编号就可以确定文件,块编号就可以确定查找行所在的块,而行号就确定了这个唯一的行。行字典入口可以用来确定一行开始的地方。 四、行的结构1、行头:纪录行中列的数量,连接信息和行琐状态。 2、行数据:对于每一列Oracle都会保存列的长度和值(如果列的值大小不超过250字节列的长度需要一个字节来存储。一个列的大小如果超过250个字节就需要3个字节来存储列的长度。列的值直接存放在列的后面。) 相邻的两行之间不需要额外的空间。在块中的每一行在行目录中都有一个位置(slot)。目录中的slot直接指向行开始的地方。 五、创建表CREATE TABLE命令可以用来创建关系型表或者对象表。关系型表:基本的用户数据存储结构。对象表:用来存储对象类型的列,一个对象表默认情况下就是用来存储特定的对象类型数据。
创建表的原则:
1、将不同的表存放在不同的表空间。
2、使用本地模式管理表避免碎片。
在自己的方案(schema)中创建表,必须有CREATE TABLE权限,在其他方案中创建表必须有CREATE ANY TABLE权限。 June 30 这几天做Oracle ERP升级培训。这人和人不一样,顾问和顾问更不一样,到现在已经听了三个顾问讲课了,先不说水平怎么样,师德就差距很大,有的顾问根本就没打算做到“授业解惑”的作用,即使再有水平谁要是请了这样的顾问就两个字——上火!!。
现在已经做完了财务各个模块、成本和OM,明天开始做库存了。我还是明天讲课的顾问好,水平高师德又好。 June 24 UNDO数据一、管理UNDO数据的两种方式 二、Undo段 三、Undo段的作用 四、读取的一致性
关于Tablespace的MINIMUM EXTENT和default_storage两个参数的疑问。在Itpub上发了一个帖子,有好心人回了,将帖子摘录如下: zorrofox 05-06-22 13:14: 关于Tablespace的minimum extent和DEFAULT storage_clause两个参数的使用 在9i中系统默认的表空间的管理模式是local方式,而在SG中说local方式不能使用DEFAULT storage_clause、MINIMUM EXTENT和TEMPORARY参数。我使用9iRelease2做实验,单独使用create tablespace MINIMUM EXTENT命令报错,但是把DEFAULT storage_clause参数加上去以后就不会报错而且可以顺利创建表空间。我想问的是:SG既然说这两个参数在local模式下不能使用为什么还可以在实际操作中用,而用过这两个参数以后是否还对local模式管理的表空间有作用呢? overmars 05-06-22 15:33: zorrofox 05-06-22 15:50: 哦,谢谢明白了,真是混乱呀,怪不等使用了MINIMUM EXTENT指定了最小的区大小,而在storage_clause使用initial和next的大小都不是minimum值的倍数,oracle也不报错。我觉得既然不让带这几个参数就应该给个提示才是。 Oracle Database Block一、概览 二、Block的组成结构 三、控制参数 四、Data Block的管理方式 June 16 Tablespace的Local管理方式。前几天做OCP030课程的SG第八章练习题,创建一个Dictionary管理方式的Tablespace,结果在我的10g上运行带extent management dictionary参数的create tablespace命令出错,错误代码为“ORA-12913: 无法创建字典管理的表空间”。开始以为是10g的版本的问题,遂卸载重新安装9iR2,错误竟然依旧存在。上网一查才知道问题的所在,是oracle DB在9iR2以后的system表空间的默认管理方式就是local方式,而如果system表空间的管理方式为local则其他表空间的管理方式也必须是local。 重新理解两种Tablespace的管理方式: 1、local方式:在表空间的datafile中维护一个位图用来表示在这个表空间中所有的datafile中的block的状态(空闲/已用)。在位图中每一个字节都表示一个或者一组block,当一个extent重新定位或者空闲位图中相应的值。这种方式在9i中是默认的管理方式。 2、Dictionary方式:是一种即将淘汰的管理方式。是数据字典来管理所有的extent。当extent发生变化就需要DB的数据字典的表中修改相应的信息。 3、使用local方式的好处:
4、使用local方式的注意事项:
老太太恢复得不错。昨天下班就去看姥姥,她竟然看见我一进门就大声地说“滨子又胖了!”,这老太太恢复的真快。还是体质好性格开朗,不然别说一个74岁高龄的老人遭此重创,就是像我们这样年轻力壮的人也不一定能恢复这么快。 |
||||||||||||||
|
|