6.2 本地管理表空间的管理
本地管理表空间是Oracle 11g中的默认表空间类型。对这种表空间的管理主要涉及创建、删除、修改等操作。
6.2.1 本地管理表空间的创建
创建表空间的任务一般由SYS用户完成,普通用户如果希望执行这样的操作,需要具有CREATE TABLESPACE系统权限。
在创建表空间时,需要指定表空间的区管理方式、段管理方式以及表空间所包含的数据文件。在Oracle 11g中,表空间的默认区管理方式是本地管理(LOCAL)。例如,通过以下语句创建本地管理表空间ts1:
SQL>CREATE TABLESPACE ts1
DATAFILE'/home/oracle/ts11.dbf'SIZE 10M
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
SEGMENT SPACE MANAGEMENT AUTO;
在上面的语句中,EXTENT MANAGEMENT LOCAL用于指定表空间的区管理方式为本地管理,这是可以省略的,因为表空间默认的区管理方式就是本地管理。但是如果在CREATE语句中指定了AUTOALLOCATE或者UNIFORM SIZE,那么EXTENT MANAGEMENT LOCAL是不能省略的。
AUTOALLOCATE表示这个表空间中的区大小由数据库服务器根据实际情况自动指定,默认为64KB。如果在这个表空间中创建可变大小的数据库对象,而且这个对象需要大小不同的区,那么AUTOALLOCATE是一种很好的选择。如果希望控制表空间中区的使用,则通过UNIFORM SIZE指定统一的区大小。
SEGMENT SPACE MANAGEMENT用于指定表空间中段空间的管理方式,目前有两种可选方式,即AUTO和MANUAL。AUTO使用位图的方式跟踪段中每个数据块的状态,而MANUAL方式是通过空闲列表来记录每个段中的空闲块的。由于AUTO使段空间管理更加高效,所以Oracle建议为表空间指定这种段管理方式,而且这也是默认方式。
DATAFILE用于指定表空间所包含的数据文件及其大小,一个表空间包含一个或多个数据文件。在UNIX/Linux系统中,为了在某个目录下创建数据文件,需要保证操作系统中的oracle用户对该目录具有写权限。
下面的语句用于创建表空间TS2,表空间中区的统一大小为256KB。如果没有通过SIZE子句指定大小,则采用默认值1MB。
SQL>CREATE TABLESPACE ts2
DATAFILE'/home/oracle/ts21.dbf'SIZE 10M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K
SEGMENT SPACE MANAGEMENT AUTO;
数据库中的数据块大小通过初始化参数DB_BLOCK_SIZE指定,通过这个参数指定的数据块称为标准快。表空间中的数据块默认也采用标准块大小。如果希望在数据库中定义其他大小的非标准块,那么在创建表空间时需要指定它所采用的数据块大小。例如,通过下面的语句创建的表空间具有16KB的数据块:
SQL>CREATE TABLESPACE ts3
DATAFILE'/home/oracle/ts31.dbf'SIZE 10M,
'/home/oracle/ts32.dbf'SIZE 20M
BLOCKSIZE 16K;
非标准块中的数据是不能被读到一般的数据库高速缓存中的。为了能够访问这种表空间中的数据,在创建表空间之前,需要通过初始化参数DB_nK_CACHE_SIZE在内存中为非标准块定义相应的数据库高速缓存,缓存也是由许多缓冲区组成,缓冲区的大小与非标准块大小相同。例如:
SQL>ALTER SYSTEM SET db_16k_cache_size=16K;