在一个数据库内创建表空间,会将容器分配到表空间,并在数据库系统目录中记录它的定义和属性。
对于自动存储器表空间,数据库管理器将根据与数据库关联的存储器路径将容器指定给表空间。
对于非自动存储器表空间而言,在创建表空间时,您必须知道将要使用的容器的路径名、设备名或文件名。另外,对于您为 DMS 表空间创建的每个设备容器或文件容器,您还必须知道可以为每个容器分配的存储器空间量。
CREATE TABLESPACE RESOURCE
MANAGED BY SYSTEM
USING ('d:\acc_tbsp', 'e:\acc_tbsp', 'f:\acc_tbsp')
CREATE TABLESPACE RESOURCE
MANAGED BY DATABASE
USING (FILE'd:\db2data\acc_tbsp' 5000,
FILE'e:\db2data\acc_tbsp' 5000)
在前面两个示例中,为容器提供了显式的名称。但是,如果指定相对容器名,那么将在为该数据库创建的子目录中创建容器。
在创建表空间容器时,数据库管理器会创建任何不存在的目录级别。例如,如果将容器指定为 /project/user_data/container1,而目录 /project 不存在,那么数据库管理器会创建目录 /project 和 /project/user_data。
因为数据库管理器根据第一个请求使用 PERMISSION 700 创建了目录级别 /project/user_data,所以 user2 没有对这些目录级别的访问权,因此不能在这些目录中创建 container2。在此情况下,CREATE TABLESPACE 操作将失败。
如果数据库管理器创建了一个子目录,那么在删除该表空间时数据库管理器也可能将该子目录删除。
IN database_partition_group_name
CREATE TABLESPACE RESOURCE
MANAGED BY DATABASE
USING (DEVICE '/dev/rdblv6' 10000,
DEVICE '/dev/rdblv7' 10000,
DEVICE '/dev/rdblv8' 10000)
OVERHEAD 7.5
TRANSFERRATE 0.06
在此 SQL 语句中提到的 UNIX 设备必须已经存在,且实例所有者和 SYSADM 组必须能够写入这些设备。
CREATE TABLESPACE PLANS IN ODDGROUP
MANAGED BY DATABASE
USING (DEVICE '/dev/HDISK0' 10000, DEVICE '/dev/n1hd01' 40000)
ON DBPARTITIONNUM 1
(DEVICE '/dev/HDISK0' 10000, DEVICE '/dev/n3hd03' 40000)
ON DBPARTITIONNUM 3
(DEVICE '/dev/HDISK0' 10000, DEVICE '/dev/n5hd05' 40000)
ON DBPARTITIONNUM 5
通过使用顺序预取工具(它使用并行 I/O),数据库管理器可以极大地提高顺序 I/O 的性能。
CREATE TABLESPACE SMS8K
PAGESIZE 8192
MANAGED BY SYSTEM
USING ('FSMS_8K_1')
BUFFERPOOL BUFFPOOL8K
注意相关联的缓冲池也必须具有相同的 8 KB 页大小。只有在激活了创建的表空间所引用的缓冲池之后才能使用该表空间。
可以使用 ALTER TABLESPACE 语句对 DMS 表空间添加、删除容器或调整容器的大小,并修改表空间的 PREFETCHSIZE、OVERHEAD 和 TRANSFERRATE 设置。在执行 ALTER TABLESPACE SQL 语句之后应尽快落实发出表空间语句的事务,以防止发生系统目录争用。
直接 I/O(DIO)由于可以绕过在文件系统级别进行高速缓存,从而改进内存性能。此过程可减少 CPU 开销并使得更多的内存可用于数据库实例。
并行 I/O(CIO)具有 DIO 的优点,并且还可以消除串行化写访问权。
DIO 和 CIO 在 AIX 上受支持;DIO 在 HP-UX、Solaris、Linux 和 Windows 操作系统上受支持。
关键字 NO FILE SYSTEM CACHING 和 FILE SYSTEM CACHING 是 CREATE 和 ALTER TABLESPACE SQL 语句的一部分,允许您指定将对每个表空间使用 DIO 还是 CIO。当 NO FILE SYSTEM CACHING 有效时,只要可能,数据库管理器都会尝试使用“并行 I/O”(CIO)。在不支持 CIO 的情况下(例如,当使用了 JFS 时),将取而使用 DIO。
发出 CREATE TABLESPACE 语句时,缺省情况下将打开已删除的表的恢复功能。此功能使您可使用表空间级的复原和前滚操作来恢复已删除的表数据。这样可比数据库级的恢复要快,且您的数据库将对用户保持可用。
但是,如果有许多删除表操作要恢复或者如果历史记录文件很大,那么正向恢复时已删除的表的恢复功能可能会影响性能。
如果您打算运行许多删除表操作,并且使用循环日志记录或您不想恢复任何已删除的表,那么可能想要禁用此功能。要禁用此功能,可以在发出 CREATE TABLESPACE 语句时显式将 DROPPED TABLE RECOVERY 选项设置为 OFF。此外,可以通过使用 ALTER TABLESPACE 语句关闭现有表空间的已删除的表的恢复功能。