当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
Oracle体系架构--Oracle存储
发布时间:2011/4/25 14:57:56 来源:城市学习网 编辑:ziteng
  一,表空间 tablespace
  系统表空间       一定要online
  辅助表空间
  回滚表空间       一定要online
  临时表空间
  应用表空间
  SELECT * FROM Database_Properties      记录db级的一些参数的缺省值
  如缺省表空间,缺省临时表空间,缺省表空间类型
  1,创建表空间:
  create tablespace ts datafile '/u1/oradata/a/ts.dbf' size 10M
  extent management local autoallocate    也可为unifom size 1M
  segment space management auto;      也可为manual
  创建临时表空间:
  create temporary tablespace mytemp tempfile '/u1/oradata/a/mytemp.dbf' size 10M
  extent management local uniform size 1M
  segment space management manual;
  临时表空间只可以用uniform size 和 manual
  设定表空间为DB的默认表空间
  alter database default tablespace ts
  设定某临时表空间为DB的默认表空间
  alter database temporary tablespace mytemp
  查 Database_Properties发现默认表空间改变
  2,临时表空间组 (10g新特性)
  用于解决同一用户多个会话表空间争用问题
  创建临时表空间组(添加组员):
  alter tablespace mytemp tablespace group g1;
  alter tablespace mytemp2 tablespace group g1;
  产生一个组后产生一个数据字典:SELECT * FROM Dba_Tablespace_Groups 可查
  将用户的临时表空间设置成该临时表空间组
  alter user scott temporary tablespace g1
  将DB默认的临时表空间设为该临时表空间
  alter database default temporary tablespace g1;
  将临时表空间成员从临时表空间组中删除
  alter tablespace mytemp tablespace group '';
  v$tempfile 和 dba_temp_files区别?
  v$tempfile 在控制文件中,mount状态可读。dba_temp_files在数据文件中
  设计这两个功能相近的数据字典是为了恢复方便
  3,辅助表空间,
  SELECT * FROM v$sysaux_occupants;  可查看辅助表空间有哪些工具
  二,数据块
  标准块:大小和db_block_size一样的块
  非标准块:大小和db_block_size不一样的块
  块的大小
  块小:每一块中的记录少,并发概率小,但是块比较多,查询速度慢
  块大:并发概率大,但是查询速度快
  若建表是块大小已经比较大了,事后发现并发量太大如和做?
  调整pct_free
  复合型:
  在内存中每个块的缓冲区大小show parameter cache_size可查
  若内存中默认cache_size 为8k有一个表的块大小是16k,则需要在内存中开辟一段空间,器
  cache_size为16k。所以 cache中既有8k的空间又有16k的空间,所以称为复合型
  alter system set db_32k_cache_size=20M    把32k的cache设置为20M大小
  可用dump oracle最底层剖析来分析
  三,对象管理
  1,表:
  分类:
  a,normal 对表
  b,分区表(方便维护,可以提高性能)
  c,索引组织表(IOT)
  d,簇表  会减少链接的代价:当需要两个表连接时会生成一个簇表,查询时减少链接代价
  表的属性:    SELECT * FROM Dba_Tables;
  logging :默认写日志,参照表空间的属性
  initextent:不指定默认和表空间一致
  pct_free
  pct_used
  ini_trans   事务槽的初始长度
  max_trans   事务槽的最大长度
  事务槽位于块头下面,当块中记录被修改了事务槽就记录一条,如事务槽最大长度为200
  那么当修改第201次记录且之前事务都没结束时会报错
  创建表时指定事务槽大小:
  create table aaa(a int) max_trans=3;
  rowid 逻辑地址:rowid是不存在任何块中,存在索引中
  前6位:对象ID(表或索引)     Dba_Objects
  7-9位:对象所在文件ID        Dba_Data_Files      v$datafile
  10-15位:数据块ID,针对数据文件的
  16-18位:块内行号
  SELECT dbms_rowid.rowid_object(ROWID) AS obj#,
  dbms_rowid.rowid_relative_fno(ROWID) AS file#,
  dbms_rowid.rowid_block_number(ROWID) AS block#,
  dbms_rowid.rowid_row_number(ROWID) AS row#
  FROM scott.dept;
  查dept表中所有记录的rowid
  rowid 如何映射到块内的行的?
  通过查询索引,查到要查信息的rowid。通过rowid的信息查找到块以及块内的行号,若块中那
  行记录曾经alter并且新记录没有记录在原来的部位,则原来的部位会记录一个偏移量,从而找到该
  记录的新位置
  消除碎片的方法:
  (1)move   (8i,9i)
  alter table ts move TBSNAME;
  show parameter user_segment 可查
  注意:move时全表锁,做完后重建索引
  (2)shink  (10g新特性)
  原理:先排序后释放空间
  要先让表有行移动的功能:
  alter table test1 enable row movement
  排序:
  alter table test1 shink space compact
  释放空间:
  alter table test1 shink space
  shink过程不会引发行级触发器,但索引要重建
  (3)exp imp  备份恢复技术
  面试题:如何清空一个大表?
  若delete from  要写日志
  若truncate 只在数据字典中标记,并不删除数据释放区间;
  所以要删除一个大表应该先回落HWL在系统空闲的时候在释放空间:
  所以先truncate
  然后系统空闲时 alter table scott.tab1 deallocate unused keep 100m  释放到还剩100m
  alter table scott.tab1 deallocate unused keep 0m    完全释放
  建表时设定不记录日志:
  create table scott.tab as select * from dba.objects nologging;
  删除表并释放空间:
  truncate table scott.tab1 reuse storage
  2,索引:
  在无索引的情况下:要查找empno=7369的人的name时,要全表扫描,即使找到一个还是要继
  续扫描全表
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved