ORACLE Tablespace
数据库可以在不影响使用的情况下必须online的表空间:system / temporary / undo
数据库不可以设置read only的表空间:undo / system / sysaux / temp
表空间日志:
1. temporary / undo 表空间不记日志;
2. 表空间级日志属性会被表级,Index级,实体化视图等覆盖;
3. 即使表空间为nologing模式,仍旧会产生redo log;
4. 表空间默认为loging模式
表空间日志:
1. temporary / undo 表空间不记日志;
2. 表空间级日志属性会被表级,Index级,实体化视图等覆盖;
3. 即使表空间为nologing模式,仍旧会产生redo log;
4. 表空间默认为loging模式
表空间分类:
Big table space:只包含一个数据文件。主要用于缺少维护的系统;segment管理方式是自动
small table space:可包含多个数据文件
undo表空间
一个instance对应一个undo表空间
clob/blob:修改信息不存储在undo表空间中,存在字段中。
undo就是前影像,delete要把一行所有的列都记录下来,UPDATE只记录一个列。补充一下insert基本上不产生回滚段的。
其实数据库里面消耗物理内存或者磁盘空间最小的单位是block,所以插入一行跟更新一行的某一列所占用undo space有可能是一致的,他们同样用了一个数据块。
DELETE FROM EMP WHERE EMPNO=7934;
删除了一整行的记录,这一行包括多个列,所以在undo中要记录这一行记录的原值,所以存储的信息是最多的
UPDATE EMP SET COMM=400 WHERE EMPNO=7844;
只是更新了一个列的值,undo中产生的记录也很少
INSERT INTO EMP VALUES(7999,'JHON','CLERK',7782,'10-MAY-83',1500,NULL,10);
在插入表记录的时候,undo中产生的记录只是个指针,说明新插入的是哪条记录,所以在undo中存储的信息很少
其实数据库里面消耗物理内存或者磁盘空间最小的单位是block,所以插入一行跟更新一行的某一列所占用undo space有可能是一致的,他们同样用了一个数据块。
DELETE FROM EMP WHERE EMPNO=7934;
删除了一整行的记录,这一行包括多个列,所以在undo中要记录这一行记录的原值,所以存储的信息是最多的
UPDATE EMP SET COMM=400 WHERE EMPNO=7844;
只是更新了一个列的值,undo中产生的记录也很少
INSERT INTO EMP VALUES(7999,'JHON','CLERK',7782,'10-MAY-83',1500,NULL,10);
在插入表记录的时候,undo中产生的记录只是个指针,说明新插入的是哪条记录,所以在undo中存储的信息很少
将手工新建的undo表空间交给系统自动管理:
1. 设置参数undo_tablespace:alter system set undo_tablespace='表空间名';
2. 设置参数undo_management:alter system set undo_management='AUTO';
查看:
show parameter undo
undo_manangement:自动管理,9i前是手工管理
undo_retention:900(默认)
含义是在用户commit提交之后undo中保留900秒
前提undo有空间或者设置guarantee
(guarantee设置后,即使空间不足,undo也会在retention时间内保留空间)
alter tablespace <undo tablespace> retention guarantee;
alter tablespace <undo tablespace> retention noguarantee;
undo_tablespace:对应的数据文件
查看正在使用的extents:select * from dba_undo_extents where status=UNEXPIRED;
出错1. DML表空间会报错,表空间不足;
处理方法:调大undo表空间
出错2. snapshot too old:
出现当一个用户对表A进行查询操作,时间很长,但是另一个用户对A做了修改,并且提交了。
如果查询的时间超过了undo_retention 时间就会出错。
处理方法:
1. 优化查询语句,缩短查询时间
2. 调大undo表空间
3. 调长undo retention时间,使它大于查询时间
4.设置undo guarantee属性
temp表空间
用于创建临时表,索引
建立的临时表使用用户的temp表空间
针对临时表的DML不会有锁
参数:
on commit preserve rows --> 保留所有行;
on commit delete rows --> 删除所有行;
给temp表空间增加数据文件:alter tablespace temp add tempfile '数据文件路径及文件名' size 20M autoextend on next 10M;
重建temp表空间:
1. 创建新的temp表空间:
create temporary tablespace 新建表空间名 tempfile '数据文件路径及文件名' size 100M autoextend on next 10M;
2. 切换默认temp表空间:
alter database default temporary tablespace 新建表空间名;
3. 查看切换结果:
select username,temporary_tablespace from dba_users;
4. 删除原有的temp表空间:
drop tablespace 原有表空间名;
已有数据库表空间
SYSTEM:用于管理数据库和数据字典
SYSAUX:SYSTEM表空间的辅助表空间
TEMP:为SQL语句提供临时表空间
UNDOTBS1:还原信息
USER:永久用户对象和数据
EXAMPLE:示例方案
SYSTEM:用于管理数据库和数据字典
SYSAUX:SYSTEM表空间的辅助表空间
TEMP:为SQL语句提供临时表空间
UNDOTBS1:还原信息
USER:永久用户对象和数据
EXAMPLE:示例方案
指定新建文件的具体路径:
db_create_file_dest:指定新建数据文件存放位置,在你设置的路径下/$ORACLE_SID/datafile
设置之后创建数据文件不用指定路径和文件名,系统会自动设置这些;
删除表空间的时候,系统会自动删除数据文件;
例如:
alter system set db_create_file_dest='/u01/app/oracle/';
create tablespace abc;
系统自动创建文件:/u01/app/oracle/ORCL/datafile/o1_mf_abc_700mr15h_.dbf
initial size: 100MB
max size: 32B
db_recovery_file_dest:指定新建备份存放位置;
audit_file_dest:指定监控文件存放位置;
表空间具体设置:
分配单位:extents
管理方式:
local management --> 在表空间头8block上建立bitmap进行管理
data dictionary management --> 使用数据库表来管理
分配方式:
固定分配:uniform size 1m -->方便管理
自动分配:autoallocate --> 空间使用率高
表空间状态:
1. ReadWrite(默认)
2. Readonly
3. Offline
将表空间设置成Offline方式:
a. normal --> 这样offline后,可以直接online
b. temporary
c. immediate --> 相当于shutdown的abort方式,恢复online 的时候需要使用rman来恢复
恢复过程:删除原来的文件;RMAN>restore tablespace 名;RMAN>recover tablespace 名;将tablespace设置为online
SEGMENT管理
管理方式:
1. ORACLE 自动管理:Automatic Segment Space Management(ASSM)
2. 手工管理 freelist
自动管理参数:bitmap
手工管理参数:
1. PCTFREE=10:在block中预留10%空间用于update;
2. PCTUSED=70:只有块中的剩余空间大于30%才能用于Insert;
3. Freelist:根据上述两个参数,做成列表;
4. Freelist group
新建表空间:
create tablespace sysaux datafile '/oradata/primary0/datafile/sysaux01.dbf' size 1024M autoextend on next 100M;
新增数据文件:
alter tablespace sysaux add datafile '/oradata/primary0/datafile/sysaux01.dbf' size 1024M autoextend on next 100M;
关闭自动增长功能:
ALTER DATABASE DATAFILE '/database/oracle/oradata/PRIMARY0/datafile/o1_mf_users_7b1mykwz_.dbf' AUTOEXTEND OFF
增大数据文件
alter database datafile '/database/oracle/oradata/PRIMARY0/datafile/o1_mf_users_7b1mykwz_.dbf' resize 1024M;
Comments
Post a Comment