(1)在Linux/UNIX上,数据库管理器创建的任何目录都是使用权限位700创建的。这意味着只有实例所有者才拥有读写访问权和执行访问权。因为只有实例所有者具有这种访问权,所以当正在创建多个实例时,可能会出现下列情况:
使用与上面描述的相同的目录结构,假定目录级别/prod/user_data不存在。
user1创建一个实例(默认情况下命名为user1),接着创建一个数据库,然后创建一个表空间,且/prod/user_data/container1作为该表空间的一个容器。
user2创建一个实例(默认情况下命名为user2),接着创建一个数据库,然后尝试创建一个表空间,且/prod/user_data/container2作为该表空间的一个容器。
因为数据库管理器根据第一个请求使权限位700创建了目录级别/prod/user_data,所以 user2没有对这些目录级别的访问权,因此不能在这些目录中创建container2。在这种情况下,CREATE TABLESPACE操作将失败。
解决此冲突有两种方法:
在创建表空间之前创建目录/prod/user_data,并将许可权设置为user1和user2创建表空间所需的任何访问权。如果所有级别的表空间目录都存在,那么数据库管理器不会修改访问权。
在user1创建/prod/user_data/container1之后,将/prod/user_data的许可权设置为user2创建表空间所需的任何访问权。
(2)下列SQL语句在AIX系统上创建了一个使用具有10 000页的3个裸设备作为表空间容器的DMS表空间,并指定它们的I/O特征。
- CREATE TABLESPACE TS1 MANAGED BY DATABASE
- USING (DEVICE '/dev/rdblv6' 10000, DEVICE '/dev/rdblv7' 10000,
DEVICE '/dev/rdblv8' 10000) OVERHEAD 7.5 TRANSFERRATE 0.06
在此SQL语句中提到的裸设备必须已经存在,且实例所有者和SYSADM组必须能够写入这些设备。
您还可以创建一个表空间,它使用的页大小比默认的4KB更大。下列SQL语句在Linux和UNIX系统上创建一个具有8KB页大小的SMS表空间。
- CREATE TABLESPACE SMS8K PAGESIZE 8192 MANAGED BY SYSTEM
- USING ('FSMS_8K_1') BUFFERPOOL BUFFPOOL8K
注意相关联的缓冲池也必须具有相同的8KB页大小。而且只有在激活了创建的表空间所引用的缓冲池之后才能使用该表空间。
(3)
- CREATE SYSTEM TEMPORARY TABLESPACE tmp_tbsp
- MANAGED BY SYSTEM USING ('d:\tmp_tbsp','e:\tmp_tbsp')
(4)
- CREATE USER TEMPORARY TABLESPACE usr_tbsp MANAGED BY DATABASE
- USING (FILE 'd:\db2data\user_tbsp' 5000, FILE 'e:\db2data\user_tbsp' 5000)
(5)
- LIST TABLESPACE CONTAINERS FOR 2
(6)一个表空间可以有多种不同的状态,如下所示:
- 0x0 Normal
- 0x1 Quiesced:SHARE
- 0x2 Quiesced:UPDATE
- 0x4 Quiesced:EXCLUSIVE
- 0x8 Load pending
- 0x10 Delete pending
- 0x20 Backup pending
- 0x40 Rollforward in progress
- 0x80 Rollforward pending
- 0x100 Restore pending
- 0x100 Recovery pending(not used)
- 0x200 Disable pending
- 0x400 Reorg in progress
- 0x800 Backup in progress
- 0x1000 Storage must be defined
- 0x2000 Restore in progress
- 0x4000 Offline and not accessible
- 0x8000 Drop pending
- 0x2000000 Storage may be defined
- 0x4000000 StorDef is in 'final' state
- 0x8000000 StorDef was changed prior to rollforward
- 0x10000000 DMS rebalancer is active
- 0x20000000 TBS deletion in progress
- 0x40000000 TBS creation in progress
- 0x8 For service use only
(7)对SMS表空间,我们只能增加容器
(8)当将新容器添加到表空间或扩展现有容器时,可能会发生表空间重新平衡(rebanlance),在重新平衡期间,不限制对该表空间的访问。
2个容器,1个大 1个小 当小的用满了 不会产生均衡
扩大容器,不会产生均衡
以下示例说明如何将两个新设备容器(各含10 000页)添加到Linux和UNIX系统上的表空间:
- ALTER TABLESPACE TS1 ADD (DEVICE '/dev/rhd9'
10000, DEVICE '/dev/rhd10' 10000)
将所有容器扩展10 000页
- ALTER TABLESPACE TS1 EXTEND (ALL,10000)
(9)只能将每个操作系统裸设备用作一个容器
(10)
以下示例说明如何在Windows 系统上的表空间中缩小文件容器(原来为1000页):
- ALTER TABLESPACE PAYROLL REDUCE (FILE 'd:\hldr\finance' 200)
在此操作之后,文件大小就从1000页减少至800页。
(11)以下示例说明如何在Linux和UNIX系统上的表空间中增大两个设备容器(原来大小为1000 页):
- ALTER TABLESPACE HISTORY RESIZE (DEVICE '/dev/rhd7'
2000, DEVICE '/dev/rhd8' 2000)
在此操作之后,两个设备的大小都从1000页增加至2000页.
注意:仅当正在删除或缩小其大小的扩展数据块数目小于或等于表空间中"高水位标记"之上的可用数据块数目时,才允许删除现有表空间容器以及缩小现有容器的大小。 高水位标记是表空间中分配的最高页的页数。此标记与表空间中已使用的页的数目不同,高水位标记下的某些扩展数据块可能可供复用。
(12)要删除容器,可在ALTER TABLESPACE语句上使用DROP选项。例如:
- ALTER TABLESPACE TS1 DROP (FILE 'file1', DEVICE '/dev/rdisk1')
(13)重命名表空间
- RENAME TABLESPACE TS1 TO TS2
(14)将表空间状态由脱机状态切换到联机状态
- ALTER TABLESPACE <name> switch online
什么情况下会处于FFLINE状态呢?我举一个实际生产中的例子。在一个双机热备HA的环境中,客户在主机上重新创建了使用裸设备的表空间后,未同步HA环境,结果导致主机故障切换到备机时,由于裸设备权限不正确而导致表空间处于OFFLINE状态。
(15)删除表空间
如果表数据再x空间,索引在y空间,那么想删除x空间,必需连带着把y空间也删除
- DROP TABLESPACE DATA_SPACE,INDEX_SPACE,LOB_SPACE
以下SQL语句创建一个称为TEMPSPACE2的新的系统临时表空间:
- CREATE SYSTEM TEMPORARY TABLESPACE TEMPSPACE2
- MANAGED BY SYSTEM USING ('d:\systemp2')
一旦创建了TEMPSPACE2,那么就可使用以下命令删除原来的系统临时表空间 TEMPSPACE1:
- DROP TABLESPACE TEMPSPACE1