一,表空间 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时,要全表扫描,
即便找到一个还是要继
续扫描全表
有索引的状况下