作,字典只在OPEN以后才能用
修改表空间位置命令执行会很快:因为只修改一个值 删除表空间:
系统表空间不能删
有激活段的表空间不能删
主表还被字表参照的时候,要删主表需要加一个命令属性
OracleDBA+性能优化8日游笔记——第四天(一) 2009-12-04 14:29
一. 段区块的管理
段:
段的分类(常用): 表(TABLE):
单表单段:段不能跨表空间,所以表也不能跨表空间 表分区(TABLE PARTITION): 单表多段:跨空间的表 容量大
数据访问性能好
WHERE中经常出现中的字段分区 分区方法:
Range:范围分区(可以按时间,地点等) Hash:散列分区
按散列算法把散列值写入对应位置,所以谓之不明 等值运算比较快
List:列表分区(特殊的范围分区) oracle允许分区上构建子分区 存放数据量比较大的信息 聚簇(Cluster): 多表单段
有公用值字段的放一起
把a,b表相关的数据交织的存在一起 存储空间少,I/O少
加快多表查询速度(聚簇连接) 单表访问使I/O增多(慢) 数据操作开销大 索引(INDEX):
通过树形结构能明显降低查找需要的I/O 通过关键字和rowid查找
索引组织表(Index-organized table): 与索引的区别是存的关键字和数据
基于主关键字查询速度快,对其他字段的查询速度慢 LOB段(LOB segment):
大字段,推荐使用LOB代替LONG LOB容量大(9i到4G,10G到128TB)
一个表只能有一个LONG,但一个表可以有多个LOB Long行内存储(造成单行数据很大) LOB单独拿出来形成LOB段,在行中留一个指针
回滚段(Undo segment):
暂存事务中的原始数据 读一致性
闪回(跨事务的读一致性,需要延长保留时间由某参数决定) 临时段(Tempporary segment)
区(Extent):
区是在表空间中被段使用的大块空间 段在创建,扩展,修改的时候区被分配 段在删除,修改,截断的时候区被释放
DELETE:只删数据不释放空间,不会重置高水平线 Truncate:删数据释放空间,重置高水平线 块:
块状态:可用(可插入),不可用(不能插入,但是可以修改删除) 最小的I/O单位
由一个或多个操作系统块构成 在数据库创建时设定
一个空由块头(上),空闲区(中),数据区(下),块头由上向下递增,数据区由下向上递增
INITRANS参数:初始事务槽设置太高浪费空间,太少不够用 PCTFREE参数:为update操作预留的空间 设小会发生行迁移,设大了浪费空间 PCTUSED参数:
Freelist放所有可用块的地方
当剩余空间小于PCTFREE,块不可用,之后当使用空间小于PCTUSED,块再次可用
自动段空间管理(ASSM):解决freelist中的块竞争 使用BITMAP管理
创建表空间之前确定,创建之后不能改
新的数据库创建表空间的时候一般会设成ASSM
OracleDBA+性能优化8日游笔记——第四天(二) 2009-12-04 14:34
二. 用户权限的管理
用户管理 创建用户
确定用户存放对象的表空间
确定每个表空间的配额(现在用的很少,用权限管理而不是用配额) 指定默认和临时表空间 创建用户
为用户分配权限和角色 修改口令:
特权用户可以修改,普通用户可以修改自己的口令 口令安全性在11G提高了:
过去不分大小写,11以后区分大小写(取决某参数) 11以后的口令支持更多的字符数(如中文) 11以后能设置登陆失败(N次)的锁定天数 口令复杂性校验脚本:utlpwdmg.sql
比如:口令与密码:正着不能一样,反着也不能一样(11g新加)
得到用户信息:DBA_USERS表
权限管理
系统权限: 有100多个 ANY对所有用户 GRANT授予权限 REVOKE移除权限
级联授予权限,非级联移除 对象权限:
用户对自己的对象具有完全的对象权限
有些(如UPDATE)权限可以详细到字段级(grant update(字段名))
级联授予权限,级联移除
创建表和索引需要空间使用权限 角色管理 创建角色
把权限授予角色 角色授予用户 预定义角色
CONNECT角色10以后只有CREATE SESSION权限 RESOURCE角色
UNLIMITED TABLESPACE(表空间使用权)权限不能被直接赋予,
表空间使用权限只要被grant resource就通过触发器自动赋予 DBA角色等
级联跟系统级联一样
设置默认用户的默认角色 启用/禁用角色
通过SET ROLE启用或禁用角色 默认角色是自动启用的 从用户身上移除角色 删除角色
OracleDBA+性能优化8日游笔记——第四天(三)对象管理 2009-12-04 14:53
三. 对象管理
1. 表管理(作为段的管理) 命名规则:
字母开头 30字符以内
a - z,A-Z,0-9,#,_,$,汉字等 不能使用保留关键字 不能重名对象
特殊字符或保留关键字可以用“”括起来(非标准命名) 为适应其他数据库的保留关键字的折中方法 用“”括起来的名字在数据字典中区分大小写
字段类型:
内建类型
字符串,数字,时间,
BFILE类型数据在数据库外面存(数据库有一个指向的指针) 用户定义类型
删除违反约束的行:
脚本在Utlexcpt.sql
在脚本最后加入alter table enable constraints xxx exceptions into exception; ROWID格式:
限制型ROWID:过去使用
48进制,16个字符,分成8,4,4 三部分(块编号,行编号,文件编号)
扩展型ROWID:现在使用(文件多了)
64进制,18个字符,6363 四部分(数据对象编号,相对文件号,块编号,编号)
Desc dbms_rowid 创建表:
CREATE TABLE tab( ?. TABLESPACE ts_name) 手动分配区:
ALTER TABLE t ALLOCATE EXTENT(SIZE 500K DATAFILE ‘路径/名’)
知道要一次装载一大批数据的时候使用 表的重组:
ALTER TABLE tab_name MOVE TABLESPACE data1; 把表放到需要的表空间上去 可以让松散的表重新变的结构紧凑
整理表空间
做move占2倍的表空间大小
做move会让所有访问这张表的程序都失效(重编译即可) 做move会让索引失效(需要重建) 截取表(清空表):
TRUNCATE TABLE 。。。;
如果使用DELETE会给表和索引带来大量的日志,维护等 删除表:
注意对应的视图,触发器等
2. 索引管理
索引对查询可能有帮助,但对DML操作一定有负面影响 希望在第一次查询的时候过滤掉尽量多的字段 在经常在where中出现和唯一值较多的字段建索引
逻辑上:
单列索引或组合索引:
看where中经常一起出现的用组合(全包括用组合的,否则用单列的)
唯一或非唯一索引:
唯一索引在DML时,会在索引维护的时候再做一次唯一校验
函数索引 物理上:
分区索引和非分区:
大表分区,小表非分区 B-TREE索引:
叶子块有序存储索引记录
三部分(索引头,关键字,rowid)
索引层次跟记录数,块大小以及索引记录大小有关 分裂:
根块满后放每一个叶子块的“中间值”,
叶子块满了先做同层分裂,直到根块满后(中间值放满)才做第
3层分裂
小块8K(每行数据对应的索引条设40k),第一层放200,第二层放40000,第三层放800W依次类推 取数据量少走索引,取数据量大走全表扫描 对于包含OR操作符是低效的
多用于OLTP
位图索引
关键字+rowid范围+位图
Bit值和关键字值是一一对应 适合唯一值少的字段
对于包含OR操作符是高效的(2个BITMAP做位操作) 最适合多个位图索引之间的‘与’操作
在update的代价很高 多用于数据仓库
绝对不会是唯一性索引
创建索引:提示
平衡查询和DML的需求
将索引放在单独的表空间
对于大索引考虑使用NOLOGGING
索引的INITRANS(事务槽)应该比表的INITRANS(事务槽)设高些 维护索引:
手动分配区:
ALTER INDEX i ALLOCATE EXTENT(SIZE 500K DATAFILE ‘路径/名’)
重建索引:
ALTER INDEX tab_name REBUILD TABLESPACE data1; 把索引放到需要的表空间上去
可以让松散的索引重新变的结构紧凑 整理索引
让失效的索引生效 删除索引:
准备装载一批数据之前
删除很少使用的索引,需要的时候再重建 删除并重建失效的索引
可以监视索引判断是否失效,只能普通用户做
百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库OracleDBA性能优化8日游笔记(5)在线全文阅读。
相关推荐: