ORACLE数据库管理系统的逻辑组成.ppt

上传人:sh****n 文档编号:6394558 上传时间:2020-02-24 格式:PPT 页数:51 大小:1.16MB
返回 下载 相关 举报
ORACLE数据库管理系统的逻辑组成.ppt_第1页
第1页 / 共51页
ORACLE数据库管理系统的逻辑组成.ppt_第2页
第2页 / 共51页
ORACLE数据库管理系统的逻辑组成.ppt_第3页
第3页 / 共51页
点击查看更多>>
资源描述
Oracle数据库管理系统的逻辑结构 Owner 庞家进 Oracle逻辑结构 用户层 Oracle视图 View 1 Oracle表 Table 2 Oracle索引 Index 3 Oracle序数 Sequence 4 Oracle视图 View 查看视图信息使用数据字典视图dba views DBA视图描述数据库中的所有视图all views ALL视图描述用户 可访问的 视图user views USER视图描述 用户拥有的 视图dba tab columns DBA视图描述数据库中的所有视图的列 或表的列 all tab columns ALL视图描述用户 可访问的 视图的列 或表的列 user tab columns USER视图描述 用户拥有的 视图的列 或表的列 dba updatable columns 显示数据库所有视图中的所有列的可更新状态all updatable columns 显示用户可访问的视图中的所有列的可更新状态user updatable columns 显示用户拥有的视图中的所有列的可更新状态 Oracle视图 View 创建视图完整语法 create orreplace force view schema view name column1 column2 asselect withcheckoption constraintconstraint name withreadonly 例子 createviewvw emp checkasselectempno ename job hiredate deptnofromempwheredeptno 10withcheckoptionconstraintvw emp chk 创建检查视图 对通过视图进行的增删改操作进行检查 要求增删改操作的数据必须是select查询所能查询到的数据 Oracle视图 View orreplace 如果存在同名的视图 则使用新视图 替代 已有的视图force 强制 创建视图 不考虑基表是否存在 也不考虑是否具有使用基表的权限column1 column2 视图的列名 列名的个数必须与select查询中列的个数相同 如果select查询包含函数或表达式 则必须为其定义列名 此时 既可以用column1 column2指定列名 也可以在select查询中指定列名 withcheckoption 指定对视图执行的DML操作必须满足 视图子查询 的条件即 对通过视图进行的增删改操作进行 检查 要求增删改操作的数据 必须是select查询所能查询到的数据 否则不允许操作并返回错误提示 默认情况下 在增删改之前 并不会检查 这些行是否能被select查询检索到 constraintconstraint name定义约束的名字withreadonly 创建的视图只能用于查询数据 而不能用于更改数据 与withcheckoption是排斥的 Oracle视图 View 1 3删除视图可以删除当前模式中的任何视图 如果要删除其他模式中的视图 必须拥有DROPANYVIEW系统权限 视图被删除后 该视图的定义会从词典中被删除 并且在该视图上授予的 权限 也将被删除 视图被删除后 其他引用该视图的视图及存储过程等都会失效 示例1 dropviewvw test tab Oracle视图 View 视图的重新编译语法 alterview视图名compile 作用 当视图依赖的基表改变后 视图会 失效 为了确保这种改变 不影响 视图和依赖于该视图的其他对象 应该使用alterview语句 明确的重新编译 该视图 从而在运行视图前发现重新编译的错误 视图被重新编译后 若发现错误 则依赖该视图的对象也会失效 若没有错误 视图会变为 有效 权限 为了重新编译其他模式中的视图 必须拥有alteranytable系统权限 注意 当访问基表改变后的视图时 oracle会 自动重新编译 这些视图 例子 altertabletest tabmodify c2varchar2 30 修改c2列的长度selectlast ddl time object name statusfromuser objectswhereobject name V TEST TAB 视图的状态 失效 Oracle视图 View 在视图上执行DML操作的步骤和原理第一步 将针对视图的SQL语句与视图的定义语句 保存在数据字典中 合并 成一条SQL语句第二步 在内存结构的共享SQL区中 解析 并优化 合并后的SQL语句第三步 执行 SQL语句示例 createviewv empasselectempno ename locfromemployeesemp departmentsdeptwhereemp deptno dept deptnoanddept deptno 10 当用户执行如下查询语句时 selectenamefromv empwhereempno 9876 oracle将把这条SQL语句与视图定义语句 合并 成如下查询语句 selectenamefromemployeesemp departmentsdeptwhereemp deptno dept deptnoanddept deptno 10andempno 9876 然后 解析 并优化 合并后的查询语句 并执行查询语句 Oracle视图 View 如果创建连接视图的select查询 不包含 如下结构 并且遵守连接视图的 更新准则 则这样的连接视图是 可更新 的 之一 集合运算符 union intersect minus 之二 DISTINCT关键字之三 GROUPBY ORDERBY CONNECTBY或STARTWITH子句之四 子查询之五 分组函数之六 需要更新的列不是由 列表达式 定义的之七 基表中所有NOTNULL列均属于该视图 Oracle视图 View 连接视图的更新准则insert准则 在insert语句中不能使用 非键值保存表 中的列 包括 连接列 执行insert操作的视图 至少应该 包含 键值保存表中所有设置了约束的列如果在定义连接视图时使用了WITHCHECKOPTION选项 则 不能 针对连接视图执行insert操作update准则键值保存表中的列是可以更新的 如果在定义连接视图时使用了WITHCHECKOPTION选项 则连接视图中的连接列 一般就是 共有列 和基表中的 其他共有列 是 不可 更新的 连接列和共有列之外的其他列是 可以 更新的delete准则如果在定义连接视图时使用了WITHCHECKOPTION选项 依然 可以 针对连接视图执行delete操作如果连接视图中的一个 基表的键 主键 唯一键 在它的视图中仍然存在 并且 基表的键 仍然是 连接视图中的键 主键 唯一键 即 某列在基表中是主键 唯一键 在视图中仍然是主键 唯一键则称这个基表为 键值保存表 Oracle表 Table 数字字典 user objects dba tablesUser tablesall tablesdba tab columnsuser tab columnsall tab columns Oracle表 Table 数据表的介绍数据表是数据库中一个非常重要的对象 是其他对象的基础 没有数据表 关键字 主键 索引等也就无从谈起 在数据库画板中可以显示数据库中的所有数据表 创建数据表 修改表的定义等数据表是数据库中一个非常重要的对象 是其他对象的基础 数据表 或称表 是数据库最重要的组成部分之一 数据库只是一个框架 数据表才是其实质内容 根据信息的分类情况 一个数据库中可能包含若干个数据表 数据表是用行 字段 和列 属性 构成的一张二维表 Oracle表 Table 一般方式创建表表名最大长度为30个字符 在同一个用户下 同一个数据库 表不能重名 但不同用户表的名称可以相重 另外 表的名称不能使用Oracle的保留字 在一张表中最多可以包含2000列 语法 CREATETABLE表名 列名数据类型 DEFAULT表达式 COLUMNCONSTRAINT TABLECONSTRAINT TABLE PARTITION CLAUSE DEFAULT表达式 用来定义列的默认值 COLUMNCONSTRAINT 用来定义列级的约束条件 TABLECONSTRAINT 用来定义表级的约束条件 TABLE PARTITION CLAUSE 定义表的分区子句 Oracle表 Table 通过子查询创建表如果要创建一个同已有的表结构相同或部分相同的表语法 CREATETABLE表名 列名 ASSQL查询语句 该语法既可以复制表的结构 也可以复制表的内容 并可以为新表命名新的列名 新的列名在表名后的括号中给出 如果省略将采用原来表的列名 复制的内容由查询语句的WHERE条件决定 Oracle表 Table 表的修改 这些操作都无法回滚 改表名 altertable当前表名renameto新表名 改列名 altertable表名renamecolumn当前列名to新列名 增加列 Altertable表名add columndatatype defaultexpr columndatatype 修改列 Altertabletable namemodify column namedatatype defaultexpr columndatatype 删除列 Altertabletable namedropcolumncolumn name Oracle表 Table 删除已创建的表语法如下 DROPTABLE表名 CASCADECONSTRAINTS 表的删除者必须是表的创建者或具有DROPANYTABLE权限 CASCADECONSTRAINTS表示当要删除的表被其他表参照时 删除参照此表的约束条件 Oracle表 Table 的补充 oracle数据类型 Oracle表 Table 的补充 oracle数据类型字符型charnchar 都是2000字节 定长 速度快 占空间大 需处理varchar2nvarchar2varchar 都是4000字节 不定长 空间小 速度慢 无需处理格式如下char size byte char nchar size 无n开头的系统默认为byte单位 有n开头的不用指定byte或者char 其一定是char的 char和nchar为固定长度 自己设定的那个 不够则用空格补充 最多可以存储2000字节 是字符 也不是汉字 注意转化后的值 varchar2nvarchar2varchar为变长字符串类型 不用空格补充 最多可以储存4000字节 varchar尽量不用 oracle可能把他废弃 有n开头 nchar nvarchar2 两种数据类型用于包含unicode格式的字符串 其采用国家字符来储存和管理 而不是默认的字符集 长度总是字符数 而没有n肯能会指定字节还是字符 Oracle表 Table 的补充 oracle数据类型数值类型number precision scale precision 精度 也称为总位数 取值为1 38默认为38 也可以用 表示number 5 2 可以存储1234567其为1234600 number 5 10 可以储存 0000scale 小数位数 也称小数右边的位数 合法值为 48 127 默认取值取决于是否指定了精度如果精度没有指定这默认为最大的取值区间 如果指定这默认为0 number类型是一中变长格式 长度为0 22字节每增加两位数字就增加一个自己的储存空间 Oracle表 Table 的补充 Oracle其他一些数据类型DATE日期和时间类型LOB超长字符 最大可达4GCLOB超长文本字符串BLOB超长二进制字符串BFILE超长二进制字符串 保存在数据库外的文件里是只读的 默认值 DEFAULTSYSDATE 加当前时间default 默认值 default1 加上一个默认数值 Oracle表 Table 的补充 oracle约束数字字典 user constraints user cons columns primarykeynotnulluniqueForeignkeycheck 如constraint名字check 列 100 格式 列级在列定义后面加上这些语句表级 在表的后面加上 如constraint名字unique 列名字 可以多个 constraintxxx fkforeignkey 该表的某个列名 references某表 某列 Oracle表 Table 的补充 约束的修改altertable语句对约束进行修改 可以添加或者删除 但是不能修改有效化和无效化约束添加notnull约束时要用modify语句如 altertableemployeesaddconstraintemp manager fkforeignkey manager id referenstable column altertableemployeesdropconstraintemp manager fk可以使用cascadealtertableemployeesdropprimarykeycascade Oracle索引 Index Index常用的数据字典User indexes 可以获取有关用户已创建的索引的详细信息 User ind partitions 可以获取有关用户已创建的分区索引的详细信息User ind columns 获取有关列 用户的索引是基于这些列创建的 的详细信息其外还有all indexesall ind partitionsall ind columnsdba indexesdba ind partitionsdba ind columns Oracle索引 Index 索引目标是为了提高查询的速度 当用户对查询速度不满意而需要对数据库的性能进行调校时 优先考虑建立索引 数据库中索引的概念与书索引的概念非常类似 不同之处在于数据库索引用来在表中查找特定的行 索引缺点 向表中 添加 删除 行时 必须花费额外的时间来更新该行的索引 创建索引的时机 当需要从大表中检索少数几行时 都应该对列创建索引 基本准则 当任何单个查询要检索的行 整个表行数的10 时 索引就非常有用 索引的候选列 应该是用来存储很大范围的值的列自动创建索引 表的主键和唯一键将自动创建索引语法create unique bitmap index索引名 unique指定索引列中的值是唯一的 索引名建议以idx打头on表名 列1 列2 可以对多列创建索引 这种索引称为 复合索引 tablespace表空间名 省去后 索引将被存储到用户的默认表空间中提示 出于性能方面的原因 通常应该将索引与表存储到不同的表空间中 Oracle索引 Index 的补充 索引的类型B 树索引位图索引HASH索引索引编排表反转键索引基于函数的索引分区索引本地和全局索引简要解释 b treeindex 几乎所有的关系型数据库中都有b tree类型索引 也是被最多使用的 其树结构与二叉树比较类似 根据rid快速定位所访问的行 反向索引 反转了b tree索引码中的字节 是索引条目分配更均匀 多用于并行服务器环境下 用于减少索引叶的竞争 降序索引 8i中新出现的索引类型 针对逆向排序的查询 位图索引 使用位图来管理与数据行的对应关系 多用于OLAP系统 函数索引 这种索引中保存了数据列基于function返回的值 在select fromtablewherefunction column value这种类型的语句中起作用 Oracle索引 Index 各种索引的创建方法 1 B Tree索引Createindexindexnameontablename columnname columnname tablespacetablespacename 2 反向索引 Createindexindexnameontablename columnname columnname reverse tablespacetablespacename 3 降序索引 Createindexindexnameontablename columnnameDESC columnname tablespacetablespacename 4 位图索引 CreateBITMAPindexindexnameontablename columnname columnname tablespacetablespacename 5 函数索引 Createindexindexnameontablename functionname columnname tablespacetablespacename 删除索引dropindexindexname Oracle序列 Sequence Sequence介绍Sequence是数据库系统按照一定规则自动增加的数字序列 这个序列一般作为代主键 因为不会重复 Sequence是数据库系统的特性 有的数据库有Sequence 有的没有 比如Oracle DB2 PostgreSQL数据库有Sequence MySQL SQLServer Sybase等数据库没有Sequence identity Sequence与indentity的基本作用都差不多 都可以生成自增数字序列 Sequence是数据库系统中的一个对象 可以在整个数据库中使用 和表没有任何关系 indentity仅仅是指定在表中某一列上 作用范围就是这个表 Oracle序列 Sequence Sequence完整语法CREATESEQUENCE schema sequence STARTWITHinteger INCREMENTBYinteger MAXVALUEinteger NOMAXVALUE MINVALUEinteger NOMINVALUE CYCLE NOCYCLE CACHEinteger NOCACHE ORDER NOORDER 例子 createsequencejaking seqstartwith1startwith不能小于minvalueincrementby1maxvalue9999999minvalue1NocyclenoCacheorder Oracle序列 Sequence 语法解析 schema 是架构包含序列 如果省略模式 oracle为您创建自己的模式序列 STARTWITHinteger 不能省略ThedefaultisNOMINVALUE ThedefaultisNOMAXVALUE ThedefaultisNOCYCLE 如果省略 INCREMENTBYinteger 这默认为1 CACHEinteger NOCACHE 此最低值参数为2如果此处省略时候着默认为CACHE并且设置为20如果你省略这两个ORDER和NOORDER选项 oracle选择NOORDER默认如果指定CACHE值 ORACLE就可以预先在内存里面放置一些sequence 这样存取的快些cache里面的取完后 oracle自动再取一组到cache 使用cache或许会跳号 比如数据库突然不正常down掉 shutdownabort cache中的sequence就会丢失 所以可以在createsequence的时候用nocache防止这种情况 Oracle序列 Sequence 一些注意的事项定义好SEQUENCE 你就可以用CURRVAL NEXTVAL获得值CURRVAL为返回SEQUENCE的当前值NEXTVAL为增加SEQUENCE的值 然后返回SEQUENCE值 此处在数据库中存储的LastValue CURRVAL只有当NEXTVAL执行一次以后才可以用 在创建表的时候 可以使用序列 NEXTVAL一次后序数就会往上加 永远都是存最新的那个数 只要调用SEQUENCE名 nextVal sequence不属于某个表 也不属于某个字段 sequence仅仅属于某个用户 其实在创建了sequence后 每个表都可以使用这个sequence 但是这样会引起应用的很多麻烦 因此 建议每个表都使用一个sequence 可以使用SEQUENCE的地方 不包含子查询 snapshot VIEW的SELECT语句 INSERT语句的子查询中 INSERT语句的VALUES中 UPDATE的SET中 Oracle序列 Sequence 修改 删除序列修改前提是sequence的owner 或者有ALTERANYSEQUENCE权限才能改动sequence 可以alter除start至以外的所有sequence参数 如果想要改变start值 必须dropsequencere create 例子 ALTERSEQUENCEemp sequenceINCREMENTBY10MAXvalue10000CYCLE 到10000后从头开始NOCACHEaltersequencemySeqmaxvalue500注意 不能改startwith 设置minvalue值的时候不能大于当前值 其他随便改删除 dropsequence序列名称 Oracle逻辑结构 系统层 Oracle块 Block 1 Oracle区 Extend 2 Oracle段 Segment 3 Oracle表空间 Tablespace 4 Oracle块 Block 数据块Oracle数据块 DataBlock 是一组连续的操作系统块 分配数据库块大小是在Oracle数据库创建时设置的 数据块是Oracle读写的基本单位 数据块的大小一般是操作系统块大小的整数倍 这样可以避免不必要的系统I O操作 从Oracle9i开始 在同一数据库中不同表空间的数据块大小可以不同 数据块是Oracle最基本的存储单位 而表空间 段 区间则是逻辑组织的构成成员 在数据库缓冲区中的每一个块都是一个数据块 一个数据块不能跨越多个文件 Oracle块 Block 数据块头 包括标准内容和可变内容 数据块头 header 中包含了此数据块的概要信息 例如块地址 blockaddress 及此数据块所属的段 segment 的类型 例如 表或索引 表目录区如果一个数据表在此数据块中储存了数据行 那么数据表的信息将被记录在数据块的表目录 tabledirectory 中 行目录区此区域包含数据块中存储的数据行的信息 每个数据行片断 rowpiece 在行数据区 rowdataarea 中的地址 一个数据块中可能保存一个完整的数据行 也可能只保存数据行的一部分 所以文中使用rowpiece 当一个数据块 datablock 的行目录区 rowdirectory 空间被使用后 即使数据行被删除 delete 行目录区空间也不会被回收 举例来说 当一个曾经包含50条记录的数据块被清空后 其块头 header 的行目录区仍然占用100字节 byte 的空间 只有在数据块中插入 insert 新数据时 行目录区空间才会被重新利用 Oracle块 Block 行数据数据块 datablock 中行数据区 rowdata 包含了表或索引的实际数据 一个数据行可以跨多个数据块 可用空间区在插入新数据行 或在更新数据行需要更多空间时 例如 原来某行最后一个字段为空 trailingnull 现在要更新为非空值 将使用可用空间区 freespace 中的空间 如果一个数据块 datablock 属于表或簇表的数据段 datasegment 或属于索引的索引段 indexsegment 那么在其可用空间区中还可能会存储事务条目 transactionentry 如果一个数据块中的数据行 row 正在由INSERT UPDATE DELETE 及SELECT FORUPDATE语句访问 此数据块中就需要保存事务条目 事务条目所需的存储空间依据操作系统而定 在常见的操作系统中事务条目大约需要占用23字节 byte Oracle块 Block 数据块的结构主要包括 标题 包括一般的块信息 如块地址 段类型等 表目录 包括有关表在该数据块中的行信息 行目录 包括有关在该数据块中行地址等信息 行数据 包括表或索引数据 一行可跨越多个数据块 空闲空间 分配空闲空间是用于插入新的行和需要额外空间的行更新 在数据操作中 有两种语句可以增加数据库块的空闲空间 一个是Delete删除语句 另一个是Update更新现有行 释放的空闲空间可用于insert语句 如果insert语句是与产生空闲空间的语句在同一个事务之中 并在其后执行 则insert语句可直接使用生成的空闲空间 如果insert语句是在一个与产生空闲空间的语句相分离的事务中 则insert语句可在其他事务提交后 并在其需要空间时 使用之前产生的空闲空间 数据块中释放的空间可能是连续的 也可能不连续 Oracle只有在出现下列情况时 才会合并数据块的空闲空间 当insert或update语句要使用一个数据块 该数据块的空闲空间足以存储新的一行 而且空闲空间均是碎片 数据块中连续空间无法插入一行的时候 除此而外Oracle在系统性能下降时也需要压缩数据块的空间 Oracle块 Block 确定数据块大小有两个因素需要考虑 一是数据库环境类型 例如 是DSS环境还是OLTP环境 在数据仓库环境 OLAP或DSS 下 用户需要进行许多运行时间很长的查询 所以应当使用大的数据块 在OLTP系统中 用户处理大量的小型事务 采用较小数据块能够获得更好的效果 二是SGA的大小 数据库缓冲区的大小由数据块大小和初始化文件的db block buffers参数决定 最好设为操作系统I O的整数倍 Oracle区 Extend 区 Extend 的介绍也称为数据区 是一组连续的数据块 当一个表 回滚段或临时段创建或需要附加空间时 系统总是为之分配一个新的数据区 一个数据区不能跨越多个文件 因为它包含连续的数据块 使用区的目的是用来保存特定数据类型的数据 也是表中数据增长的基本单位 在Oracle数据库中 分配空间就是以数据区为单位的 一个Oracle对象包含至少一个数据区 设置一个表或索引的存储参数包含设置它的数据区大小 在一个段中可以存在多个区间 区间是为数据一次性预留的一个较大的存储空间 直到那个区间被用满 数据库会继续申请一个新的预留存储空间 即新的区间 一直到段的最大区间数 MaxExtent 或没有可用的磁盘空间可以申请 在ORACLE8i以上版本 理论上一个段可以无穷个区间 但是多个区间对ORACLE却是有性能影响的 ORACLE建议把数据分布在尽量少的区间上 以减少ORACLE的管理与磁头的移动 但是在某些特殊情况下 需要把一个段分布在多个数据文件或多个设备上 适当的加多区间数也是有很大好处的 Oracle段 Segment 段 Segment 段 Segment 是由多个数据区构成的 它是为特定的数据库对象 如表段 索引段 回滚段 临时段 分配的一系列数据区 段内包含的数据区可以不连续 并且可以跨越多个文件 使用段的目的是用来保存特定对象 段是对象在数据库中占用的空间 虽然段和数据库对象是一一对应的 但段是从数据库存储的角度来看的 一个段只能属于一个表空间 当然一个表空间可以有多个段 表空间和数据文件是物理存储上的一对多的关系 表空间和段是逻辑存储上的一对多的关系 段不直接和数据文件发生关系 一个段可以属于多个数据文件 关于段可以指定扩展到哪个数据文件上面 数据段 数据段也称为表段 它包含数据并且与表和簇相关 当创建一个表时 系统自动创建一个以该表的名字命名的数据段 索引段 包含了用于提高系统性能的索引 一旦建立索引 系统自动创建一个以该索引的名字命名的索引段 回滚段 包含了回滚信息 并在数据库恢复期间使用 以便为数据库提供读入一致性和回滚未提交的事务 即用来回滚事务的数据空间 当一个事务开始处理时 系统为之分配回滚段 回滚段可以动态创建和撤销 系统有个默认的回滚段 其管理方式既可以是自动的 也可以是手工的 临时段 它是Oracle在运行过程中自行创建的段 当一个SQL语句需要临时工作区时 由Oracle建立临时段 一旦语句执行完毕 临时段的区间便退回给系统 Oracle段 Segment 段是对象在数据库中占用的空间 虽然段和数据库对象是一一对应的 但段是从数据库存储的角度来看的 每一个segment都是一个表空间下有一系列extent组成的逻辑存储结构 如 当数据库用户创建一个表 那么oracle将分配一个或多个extent来组成表的数据段 创建一个索引 oracle也会分配一个extent给索引数据 当你创建一个非分区并且非聚焦表的时候 或者一个分区表的一个分区 多个表合用的一个聚簇 都将是一个oracle将处理数据的单个datasegment 而一个indexsegment 对于非分区索引 就是createindex创建的索引就会分配一个segment来处理数据 分区索引则对每一个分区分配一个segment来处理数据 当一个进程查询的时候 oracle常常需要一个临时的工作区存放sql的解析和执行的中间状态 oracle自动分配的磁盘空间temporarysegment 特别当内存的排序区不足时 oracle将会分配一个temporarysegment Oracle段 Segment 有时候 下面一些语句有时候需要用到temporarysegment createindex select orderby selectdistinct select groupbyselect unionselect intersectselect minus还有就是对一个子查询来说也会用到temporarysegment 如果一个查询包含distinct子句 一个orderby 一个groupby 那么就需要两个temporarysegment 当创建一个临时表或索引 oracle也会分配一些temporarysegment 对于temporarysegment oracle只是在一个用户的会话 session 中分配 但sql语句执行结束或者会话断开 将释放所有的temporarysegment 分配这些temporarysegment的磁盘空间都是在临时表空间 如果没有定义临时表空间 那么默认的临时表空间将是system表空间 对于DBA来说 由于分配和释放这些temporarysegment将非常频繁 所以至少要定义一个temporarysegment 这样可以避免system表空间的碎片 对于临时表来说 如果多个会话公用一个临时表 那么知道所有的会话全部结束 那才会释放这个临时表分配的temporarysegment Oracle表空间 Tablespace 表空间介绍Oracle数据库是由若干个表空间构成的 任何数据库对象在存储时都必须存储在某个表空间中 表空间对应于若干个磁盘文件 即表空间是由一个或多个磁盘文件构成的 表空间相当于操作系统中的文件夹 也是数据库逻辑结构与物理文件之间的一个映射 每个数据库至少有一个表空间 表空间的大小等于所有从属于它的数据文件大小的总和 表空间中包含有 系统表空间 System 系统辅助表空间 sysaux 用户表空间 Users 临时表空间 Temporary 回滚段表空间 Rollback 例子表空间 example 数字字典 select fromdba tablespaces Oracle表空间 Tablespace 系统表空间 System 该表空间包含的数据文件称为系统数据文件 该存放系统表和数据字典 一般不放用户的数据 但是用户脚本 如过程 函数 包等却是保存在数据字典中的 数据字典是一些系统表或视图 他存放系统的信息 他包括数据库版本 数据文件信息 表与索引等段信息 系统的运行状态等各种和系统有关的信息和用户脚本信息 数据库管理员可以通过对数据字典的查询 就可以了解到Oracle的运行状态 查看数据数据字典select fromdict 查看内部系统表select fromv fixed view definition 大量的读少量的写是该表空间的一个显著的特点 再次提醒 该表空间不能脱机例子表空间 example 它是数据库在操作系统中的存储位置 常见的物理结构包括 控制文件 数据文件 重作日志文件 归档日志文件 初始化参数文件 还有其它文件 密码文件 报警日志文件和后台及用户跟踪文件 Oracle表空间 Tablespace 系统辅助表空间 sysaux SYSAUX表空间在OracleDatabase10g中引入 作为SYSTEM表空间的辅助表空间 以前一些使用独立表空间或系统表空间的数据库组件现在在SYSAUX表空间中创建 通过分离这些组件和功能 SYSTEM表空间的负荷得以减轻 反复创建一些相关对象及组件引起SYSTEM表空间的碎片问题得以避免 SYSAUX表空间是随着数据库的创建而创建的 它充当SYSTEM的辅助表空间 主要存储除数据字典以外的其他对象 它减少了由数据库和DBA管理的表空间数量 降低了SYSTEM表空间的负荷 用户表空间 Users 其包含的数据文件称为用户数据文件 一般是由用户建立 来存取用户数据的表空间 一般有两类常见的用户型数据 数据和索引 一般来说 如果条件许可的话 可以考虑放在不同的磁盘上 临时表空间 Temporary 该表空间包含的数据文件称为临时数据文件 主要存放用户的排序等临时数据 因为没有办法在一个永久表空间上开辟临时段 所以就必须有一个临时表空间 主要用于不能在内存上进行的排序操作 我们必须为用户指定一个临时表空间 临时段占有的空间会在下次系统启动的时候全部被释放 Oracle表空间 Tablespace 回滚段表空间 Rollback 如果数据库进行对数据的修改 那么就必须使用回滚段 回滚段是用来临时存放修改前的数据 UNDO 回滚段通常都放在一个单独的表空间上 回滚表空间 避免表空间碎片化 这个表空间包含的数据文件就是回滚数据文件 在Oracle9i中 提供了单独的表空间用于保存回滚段 不再需要手工干预1 回滚段在系统中的作用当数据库进行更新插入删除等操作的时候 新的数据被更新到原来的数据文件 而旧的数据 BeforeImage 就被放到回滚段中 如果数据需要回滚 那么可以从回滚段将数据再复制到数据文件中 来完成数据的回滚 在系统恢复的时候 回滚段可以用来回滚没有被commit的数据 解决系统的一直性读 回滚段在什么情况下都是大量的写 一般是少量读 因此建议把回滚段单独出来放在一个单独的设备 如单独的磁盘或RAID 以减少磁盘的IO争用 2 回滚段的工作方式 一个回滚表空间可以被划分成多个回滚段 一个回滚段可以保存多个会话的数据 回滚段是一个圆形的数据模型 Oracle表空间 Tablespace 管理表空间和数据文件数据文件或临时文件逻辑上属于表空间 数据文件中存储了表空间上的各个对象 oracle数据库中至少有一个属于system表空间的数据文件 SQL alterdatabasedefaulttemporarytablespacekong4 设置表空间kong4为默认临时表空间 建立数据文件数据文件或临时文件可以和表空间一起创建 SQL createtablespacesmallfiledatafile d oralce oradata xq smallfile01 dbf size10M创建一个表空间可以用reuse子句重用已存在的数据文件 重用时可以省略size子句 如果指定size必须和已有数据文件大小一样SQL createtemporarytablespacetempfile创建一个临时数据文件tempfile d oracle oradata xq tempfile01 dbf size10Mextentmangementlocal本地管理注意 临时文件总是nologging模式 并且不可恢复 临时文件不能readonly 不能rename 不能用alterdatabase命令建立 不能变成永久表空间 Oracle表空间 Tablespace SQL ALTERTABLESPACEsmallfile添加一个数据文件adddatafile d oracle oradata xq smallfile02 dbf size10M 调整数据文件的大小自动 SQL altertablespacesmallfileadddatafile d oracle oradata xq smallfile03 dbf autoextendon自动扩展next512k文件扩展的最小增量maxsize100M 文件扩展后能达到的最大大小SQL alterdatabasedatafile d oracle oradata xq smallfile03 dbf autoextendoff 停止数据文件的自动扩展 Oracle表空间 Tablespace 手动 SQL alterdatabasedatafile d oracle oradata xq smallfile01 dbf resize100M 手动扩展到100M空间 重命名和移动数据文件重命名数据文件 1 将需要修改的数据文件所在的表空间脱机SQL altertablespacetestonffline 2 使用操作系统的重命名命令将数据文件重命名 3 使用altertablespace命令的renamedatafile子句重命名数据文件SQL alterdatabaserenamefile d oracle oradata xq test dbf TO d oracle oradata xq test xq dbf ThankYou Owner 庞家进
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!