【oracle11g,13】表空间管理1:表空间,空闲区的管理方式,

一.表空间:
1.至少需要两个表空间:
system :存放数据字典,在建库时建立
sysaux :辅助表空间,存放从system分离一部分信息如:对数据库的监控,运行状态等信息。

2.表空间同一时间只能存在于一个数据库中
表空间有一个或多个数据文件。
system 表空间 手工建库不能太小
sysaux 以数据库监控为主,statspack、awr等,太小oem装不上
如果没有undo表空间,就会在system表空间建立undo段。
如果没有建立临时表空间或默认表空间,都占system。


二.表空间空闲区的管理方式:
有两中管理方式:数据字典管理,本地管理。


1.查看空闲区的管理方式:

SQL> select tablespace_name ,contents,status,extent_management from dba_tablespaces;

TABLESPACE_NAME                CONTENTS  STATUS    EXTENT_MAN
------------------------------ --------- --------- ----------
SYSTEM                         PERMANENT ONLINE    LOCAL
SYSAUX                         PERMANENT ONLINE    LOCAL
UNDOTBS                        UNDO      ONLINE    LOCAL
USERS                          PERMANENT ONLINE    LOCAL
TEMPTS2                        TEMPORARY ONLINE    LOCAL

2.数据字典管理和本地管理比较

①.数据字典管理方式: 使用数据字典来管理存储空间的分配,当表空间分配新的区或者回收已分配的区时,oracle会对数据字典对应的的表(uet$和fet$)进行查询和更新并且是串行化操作,速度慢,还会生成额外undo和redo
注意:在数据字典管理方式下,如果对某个表进行更新,这时会产生存储操作,而该操作又会产生回滚和重做操作,导致对回滚段和重做日志文件进行读写,从而又产生存储管理操作,因此形成递归现象。

②.本地管理方式:oracle 9i默认方式,表空间中区分配和区收回的管理信息都被存放在表空间的数据文件中,而与数据字典无关。表空间为每个数据文件维护一个位图结构,用于记录表空间的区分配情况。当表空间分配新的区或者收回已经分配的区时,oracle会对文件中的位图(在数据文件的头部)更新(并发性强),所以不会产生回滚和重做信息


3. 如果system表空间是local管理方式,其他表空间只能是local
   如果system表空间是dictionary, 其他表空间是两种皆可。

4.修改表空间的管理方式为local:
SQL> exec dbms_space_admin.tablespace_migrate_to_local('SYSTEM');

5.查看数据字典管理的表空间的信息:
SQL> select a.ts#,a.name,b.file#,b.name "File_name" ,c.block#,d.extent_management from v$tablespace a,v$datafile b,fet$ c,dba_tablespaces d where a.ts#=b.ts# and a.ts#=c.ts# and a.name=d.tablespace_name;



三.local管理的两种管理方式:

local的两种管理方式:uniform 和自动增长

1.uniform管理方式 :(建议使用,因为产生碎片少)
  分配区的大小始终相同,不能减少分配次数, 产生很少的碎片,因为区的数据块是连续的。
2.自动增长:(默认)
  分配区的大小不断增大,会减少分配次数, 会产生碎片。



3.案例:
SQL> select file#,name from v$datafile;

     FILE# NAME
---------- --------------------------------------------------
         1 /u01/app/oracle/oradata/prod/disk3/system01.dbf
         2 /u01/app/oracle/oradata/prod/disk3/sysaux01.dbf
         3 /u01/app/oracle/oradata/prod/disk3/undotbs01.dbf
         4 /u01/app/oracle/oradata/prod/disk3/users01.dbf

②.创建3个表空间
local的自动增长管理方式, (表空间管理默认local 自动增长方式)
SQL> create tablespace lxtbs1 datafile '/u01/app/oracle/oradata/prod/disk3/lxtbs1.dbf' size 50m extent management local;
local 方式的uniform管理方式
SQL> create tablespace lxtbs2 datafile '/u01/app/oracle/oradata/prod/disk3/lxtbs2.dbf' size 50m uniform size 1m;

设置区的分配的大小(注意在区管理里设置无效);
SQL> create tablespace lxtbs3 datafile '/u01/app/oracle/oradata/prod/disk3/lxtbs3.dbf' size 50m default storage(initial 32k next 64k pctincrease 50);

③.在表空间上创建分别创建表,并插入相同的数据
SQL> create table lxtb1 tablespace lxtbs1 as select * from scott.emp;

SQL> create table lxtb2 tablespace lxtbs2 as select * from scott.emp;

SQL> create table lxtb3 tablespace lxtbs3 as select * from scott.emp;

④.查看段的信息:

SQL>  select segment_name,bytes/1024 k,extents,blocks,initial_extent/1024 init,next_extent/1024 next, pct_increase from dba_segments where segment_name like 'LXTB%';

SEGMENT_NAME             K    EXTENTS     BLOCKS       INIT       NEXT PCT_INCREASE
--------------- ---------- ---------- ---------- ---------- ---------- ------------
LXTB1                  256          4         32         64       1024
LXTB2                 1024          1        128       1024       1024            0
LXTB3                  256          4         32         64       1024


initial_extent:初始化区大小
next_extent: 下一个区大小
pct_increase: 区的增长率

自动增长的区管理:系统决定下一次区分配的大小。
uniform管理方式: 下一次区的分配根据参数分配。
针对第3个表空间,设计区的分配不起作用,可以在段管理时设计,结果与自动增长的管理方式相同。






















展开阅读全文

没有更多推荐了,返回首页