Oracle表空间设计

表空间设计原则:

1.        为表和索引分配不同的tablespace。

2.        为正式表和历史表分配不同的tablespace,提高数据的安全性。

3.        为大数据量表单独分配tablespace。

4.        将只读表或以读取为主的表单独分配tablespace。

5.        以高频率更新的表分成一组,单独分配tablespace。

6.        存于同一个 tablespace中的表(或索引)的extent 大小最好成倍数关系,有利于空间的重利用和减少碎片。

7.     为不同类型的数据分配不同的表空间,这样既可以提高数据库输入输出性能,也有利于数据的备份和恢复等管理工作。因为我们数据库管理员在备份或者恢复数据的时候,可以按表空间来备份数据。如在设计一个大型的分销系统后台数据库的时候,我们可以按省份建立表空间。与浙江省相关的数据文件放置在浙江省的表空间中,北京发生业务记录,则记录在北京这个表空间中。如此,当浙江省的业务数据出现错误的时候,则直接还原浙江省的表空间即可。很明显,这样设计,当某个表空间中的数据出现错误需要恢复的时候,可以避免对其他表空间的影响。

 

 

表空间设计注意:

1.        合理利用表空间大小。根据不同的表空间设计意图,结合实际情况,分配不同的表空间大小。

2.        合理利用服务器空间。根据实际情况,可以为不同的表空间配置不同存储位置。

 

 

设计:

1.        因为系统配置表以读取为主,故单独分配表空间:TS_SYS_DATA。

2.        为系统配置表索引分配单独表空间:TS_SYS_INDEX.

3.        为用户操作表分配单独表空:TS_MAIN_DATA,用户默认表空间。

4.        为用户操作表索引分配单独表空间:TS_MAIN_INDEX。

5.        为用户操作的大数量表分配单独表空间:TS_MAIN_BIG_DATA。

6.        为用户操作历史表分配单独表空间:TS_HIS_DATA。

7.        为用户操作大数据量历史表分配单独表空间:TS_HIS_BIG_DATA。

8.        为用户操作的历史表索引分配单独的表空间:TS_HIS_INDEX。

9.        创建临时表空间:TS_TEMP。

 

 

创建表空间sql语句介绍:

方式一、

CREATE TABLESPACE TS_MAIN_DATA
   DATAFILE'D:\oracle\oradata\TS_MAIN_DATA' size 500M
   EXTENT MANAGEMENT LOCALAUTOALLOCATE
/

方式二、

CREATETABLESPACE TS_HIS_DATA
   DATAFILE 'D:\oracle\oradata\TS_HIS_DATA'size 1000M
   EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2M
/

方式三、

CREATETABLESPACE PROJECT_MAIN_DATA
DATAFILE
  'E:\Oracle_DBData\PROJECT\PROJECT_DAT01' SIZE1990M REUSE AUTOEXTEND OFF,
  'E:\Oracle_DBData\PROJECT\PROJECT_DAT02' SIZE1990M REUSE AUTOEXTEND OFF,
  'E:\Oracle_DBData\PROJECT\PROJECT_DAT03' SIZE1990M REUSE AUTOEXTEND OFF,
  'E:\Oracle_DBData\PROJECT\PROJECT_DAT04' SIZE1990M REUSE AUTOEXTEND OFF
  LOGGING
  ONLINE
  PERMANENT
  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2M
/

 

extent是“区间”的意思。在oracle数据库中,extentmanagement 有两种方式 extent management local(本地管理); extentmanagement dictionary(数据字典管理);默认的是local。每种也有两种大小增长方式:

uniform:默认为1M大小,在temp表空间里为默认的,但是不能被应用在undo表空间。

本地管理表空间与字典管理表空间相比大大提高了管理效率和数据库性能,其优点如下:

1.      减少了递归空间管理

本地管理表空间是自己管理分配,而不是象字典管理表空间需要系统来管理空间分配,本地表空间是通过在表空间的每个数据文件中维持一个位图来跟踪在此文件中块的剩余空间及使用情况。并及时做更新。这种更新只对表空间的额度情况做修改而不对其他数据字典表做任何update操作,所以不会产生任何回退信息,从而大大减少了空间管理,提高了管理效率。同时由于本地管理表空间可以采用统一大小分配方式(UNIFORM),因此也大大减小了空间管理,提高了数据库性能。

2.      系统自动管理extents大小或采用统一extents大小

本地管理表空间有自动分配(AUTOALLOCATE)和统一大小分配(UNIFORM)两种空间分配方式,自动分配方式(AUTOALLOCATE)是由系统来自动决定extents大小,而统一大小分配(UNIFORM)则是由用户指定extents大小。这两种分配方式都提高了空间管理效率。

3.      减少了数据字典之间的竞争
因为本地管理表空间通过维持每个数据文件的一个位图来跟踪在此文件中块的空间情况并做更新,这种更新只修改表空间的额度情况,而不涉及到其他数据字典表,从而大大减少了数据字典表之间的竞争,提高了数据库性能。

4.      不产生回退信息

因为本地管理表空间的空间管理除对表空间的额度情况做更新之外不修改其它任何数据字典表,因此不产生回退信息,从而大大提高了数据库的运行速度。

5.      不需合并相邻的剩余空间

因为本地管理表空间的extents空间管理会自动跟踪相邻的剩余空间并由系统自动管理,因而不需要去合并相邻的剩余空间。同时,本地管理表空间的所有extents还可以具有相同的大小,从而也减少了空间碎片。

6.      减少了空间碎片

7.      对临时表空间提供了更好的管理

autoallocate:


You can convert a tablespace from dictionary extent management to local extentmanagement


and back with the Oracle-supplied PL/SQL package DBMS_SPACE_ADMIN. The SYSTEM


tablespace and any temporary tablespaces, however, cannot be converted fromlocal to the


older style dictionary managem


两种extent管理方式是可以相互转换的,利用PL/SQL DBMS_SPACE_ADMIN


但是系统表空间和临时表空间不能从local管理转化到dictionary管理。