增加表空间出错~~~
我使用图形方式增加表空间,
但是提示一下错误,请诸位帮我看看怎么解决,
谢谢!!!
ALTER TABLESPACE USERSPACE1 ADD ('/app/testdb/db2inst2/tablespace/userspace1' )
[IBM][CLI Driver][DB2/AIX64] SQL0281N 不可用附加的容器改变表空间
"USERSPACE1",因为它是系统管理的表空间。 SQLSTATE=42921
解释:
其它容器不可添加到系统管理的表空间。这条规则的例外是,当修改节点组
以添加无表空间的节点时,可使用 ALTER TABLESPACE
命令在新节点上添加一次容器。一般情况下,表空间必须由数据库管理以便
添加其它容器。
不能处理该语句。
用户响应:
要添加更多的容器至系统管理表空间,可删除并重新创建有更多容器的表空
间,同时应确保每个容器大小相同且小于容器大小限制,或更改为 DMS
表空间。
sqlcode : -281
sqlstate : 42921
增加表空间出错~~~
如果你增加的表空间容器是个目录的话,应该不会报错的,你检查一下
userspace1是个目录还是个文件
增加表空间出错~~~
你创建数据库时用户表空间(usrspace1)用的是SMS类型吧,没必要,也不允许在改动了。alter只对DMS类型的表空间启作用。
D:MyDbbak>;db2 "create db dbs on d: catalog tablespace managed by system using ('d:mydbdbscon0sys') user tablespace managed by database using (file 'd:mydbdbscon0usr' 20480) temporary tablespace managed by db using (file 'd:mydbdbscon0tmp' 10240)"
DB20000I CREATE DATABASE 命令成功完成。
D:MyDbbak>;db2 "alter tablespace con0usr add (file 'd:mydbdbscon1usr' 204
80)"
DB21034E 该命令被当作 SQL 语句来处理,因为它不是有效的“命令行处理器”命令。
在 SQL 处理期间,它返回:
SQL1024N 数据库连接不存在。 SQLSTATE=08003
D:MyDbbak>;db2 connect to dbs
数据库连接信息
数据库服务器 = DB2/NT 7.2.1
SQL 授权标识 = ADMINIST...
本地数据库别名 = DBS
D:MyDbbak>;db2 list tablespaces show detail
当前数据库的表空间
表空间标识 = 0
名称 = SYSCATSPACE
类型 = 系统管理的空间
内容 = 任何数据
状态 = 0x0000
详细说明:
正常
总页数 = 1400
可用页数 = 1400
已用页数 = 1400
空闲页数 = 不适用
高水位标记(页) = 不适用
页大小(字节) = 4096
盘区大小(页) = 32
预读取大小(页) = 16
容器数 = 1
表空间标识 = 1
名称 = TEMPSPACE1
类型 = 数据库管理的空间
内容 = 系统临时数据
状态 = 0x0000
详细说明:
正常
总页数 = 10240
可用页数 = 10208
已用页数 = 64
空闲页数 = 10144
高水位标记(页) = 64
页大小(字节) = 4096
盘区大小(页) = 32
预读取大小(页) = 16
容器数 = 1
表空间标识 = 2
名称 = USERSPACE1
类型 = 数据库管理的空间
内容 = 任何数据
状态 = 0x0000
详细说明:
正常
总页数 = 20480
可用页数 = 20448
已用页数 = 96
空闲页数 = 20352
高水位标记(页) = 96
页大小(字节) = 4096
盘区大小(页) = 32
预读取大小(页) = 16
容器数 = 1
D:MyDbbak>;db2 "alter tablespace userspace1 add (file 'd:mydbdbscon1usr'
20480)"
DB20000I SQL 命令成功完成。
D:MyDbbak>;db2 list tablespaces show detail
当前数据库的表空间
表空间标识 = 0
名称 = SYSCATSPACE
类型 = 系统管理的空间
内容 = 任何数据
状态 = 0x0000
详细说明:
正常
总页数 = 1400
可用页数 = 1400
已用页数 = 1400
空闲页数 = 不适用
高水位标记(页) = 不适用
页大小(字节) = 4096
盘区大小(页) = 32
预读取大小(页) = 16
容器数 = 1
表空间标识 = 1
名称 = TEMPSPACE1
类型 = 数据库管理的空间
内容 = 系统临时数据
状态 = 0x0000
详细说明:
正常
总页数 = 10240
可用页数 = 10208
已用页数 = 64
空闲页数 = 10144
高水位标记(页) = 64
页大小(字节) = 4096
盘区大小(页) = 32
预读取大小(页) = 16
容器数 = 1
表空间标识 = 2
名称 = USERSPACE1
类型 = 数据库管理的空间
内容 = 任何数据
状态 = 0x0000
详细说明:
正常
总页数 = 40960
可用页数 = 40896
已用页数 = 96
空闲页数 = 40800
高水位标记(页) = 96
页大小(字节) = 4096
盘区大小(页) = 32
预读取大小(页) = 16
容器数 = 2
D:MyDbbak>;db2 list tablespace containers for 2 show detail
表空间 2 的表空间容器
容器标识 = 0
名称 = d:mydbdbscon0usr
类型 = 文件
总页数 = 20480
可用页数 = 20448
可访问 = 是
容器标识 = 1
名称 = d:mydbdbscon1usr
类型 = 文件
总页数 = 20480
可用页数 = 20448
可访问 = 是
D:MyDbbak>;db2 connect reset
DB20000I SQL 命令成功完成。
D:MyDbbak>;db2 "create db dbs2 on d: catalog tablespace managed by system using ('d:mydbdbs2con0sys') user tablespace managed by system using ('d:mydbdbs2con0usr') temporary tablespace managed by system using ('d:mydbdbs2con0tmp')"
DB20000I CREATE DATABASE 命令成功完成。
D:MyDbbak>;db2 connect to dbs2
数据库连接信息
数据库服务器 = DB2/NT 7.2.1
SQL 授权标识 = ADMINIST...
本地数据库别名 = DBS2
D:MyDbbak>;db2 "alter tablespace userspace1 add ('d:mydbdbscon1usr')"
DB21034E 该命令被当作 SQL 语句来处理,因为它不是有效的“命令行处理器”命令。
在 SQL 处理期间,它返回:
SQL0281N 不可用附加的容器改变表空间 "USERSPACE1",因为它是系统管理的表空间。
SQLSTATE=42921
D:MyDbbak>;db2 list tablespaces show detail
当前数据库的表空间
表空间标识 = 0
名称 = SYSCATSPACE
类型 = 系统管理的空间
内容 = 任何数据
状态 = 0x0000
详细说明:
正常
总页数 = 1400
可用页数 = 1400
已用页数 = 1400
空闲页数 = 不适用
高水位标记(页) = 不适用
页大小(字节) = 4096
盘区大小(页) = 32
预读取大小(页) = 16
容器数 = 1
表空间标识 = 1
名称 = TEMPSPACE1
类型 = 系统管理的空间
内容 = 系统临时数据
状态 = 0x0000
详细说明:
正常
总页数 = 1
可用页数 = 1
已用页数 = 1
空闲页数 = 不适用
高水位标记(页) = 不适用
页大小(字节) = 4096
盘区大小(页) = 32
预读取大小(页) = 16
容器数 = 1
表空间标识 = 2
名称 = USERSPACE1
类型 = 系统管理的空间
内容 = 任何数据
状态 = 0x0000
详细说明:
正常
总页数 = 1
可用页数 = 1
已用页数 = 1
空闲页数 = 不适用
高水位标记(页) = 不适用
页大小(字节) = 4096
盘区大小(页) = 32
预读取大小(页) = 16
容器数 = 1
=====================================
表空间是数据库及存储在该数据库中的表之间的逻辑层。表空间在数据库中创建,表在表空间中创建。
使用表空间的一个明显的好处是能够把数据合理的分布存储在不同的磁盘上或者存储在磁盘的不同位置上,有助于提高数据存取的效率。
DB2 的表空间按管理方式分为两种:系统管理空间(System Management Space,SMS)和数据库管理空间(Database Management Space,DMS)。
按类型分为:规则表空间、大对象表空间、系统临时表空间、用户临时表空间。
规则表空间中包含用户数据的表。默认用户表空间名为USERSPACE1,索引也存储在规则表空间中,另外系统目录表也放在规则表空间中。默认的系统目录表空间名为SYSCATSPACE。
临时表空间分为系统临时表空间和用户临时表空间。
系统临时表空间用来存储各种数据操作(排序、重组表、创建索引、连接表)中所需的内部临时数据,虽然可以创建任意多个系统临时表空间,但建议用户只使用大多数表所使用的页大小创建一个,默认系统临时表空间名为TEMPSPACE1。
用户临时表空间用来存储已说明全局临时表(已说明全局临时表存储的是应用程序临时数据)。用户临时表空间不是在数据库创建时默认创建的。
SMS每个容器是操作系统的文件空间中的一个目录;DMS每个容器是一个固定的、预分配的文件,或是物理设备。
SMS的管理比较简单,由操作系统自动管理,空间的大小随数据量的变化系统自动调整。
DMS是由数据库管理的,空间大小在创建时确定,空间不够时要手工添加或删除部分数据以释放空间。
大多数情况下,DMS的性能比SMS好。
用命令行方式创建SMS表空间的简单语法:
CREATE TABLESPACE ; MANAGED BY SYSTEM USING (';')
例一:在Windows上创建一个SMS表空间:
CREATE TABLESPACE RESOURCE MANAGED BY SYSTEM USING ('d:acc_tbsp','e:acc_tbsp','f:acc_tbsp')
完成的结果为在D、E、F三个磁盘上创建了三个名称为acc_tbsp的文件夹,每个文件夹下面都有一个名为SQLTAG.NAM的文件。
例二:删除例一所创建的SMS表空间。
DROP TABLESPACE RESOURCE
运行完这条命令,相应的表空间会从DB2注册表中删除,但是磁盘上的三个文件夹仍然存在,需要手工删除。
用命令行方式创建DMS表空间的简单语法:
CREATE TABLESPACE ; MANAGED BY DATABASE USING (FILE ';'
或者
CREATE TABLESPACE ; MANAGED BY DATABASE USING (DEVICE ';'
例三:在Windows上创建一个DMS表空间,使用各自有5000页的两个文件容器:
CREATE TABLESPACE RESOURCE MANAGED BY DATABASE USING (FILE 'd:db2dataacc_tbsp' 5000, FILE 'e:db2dataacc_tbsp' 5000)
运行结果为:在D、E磁盘的db2data文件夹下面各创建了一个名为acc_tbsp的文件,大小都为20000K(默认情况下每页大小为4K)。
例四:在例三所创建的表空间中添加一个容器。
ALTER TABLESPACE RESOURCE ADD(FILE 'f:db2dataacc_tbsp' 5000)
运行的结果为在RESOURCE表空间中包含了三个容器(文件):d:db2dataacc_tbsp、 e:db2dataacc_tbsp、 f:db2dataacc_tbsp。
例五:用RESIZE子句更改例三所创建的表空间的容器的大小。
ALTER TABLESPACE RESOURCE RESIZE (file 'd:db2dataacc_tbsp' 8000, file 'e:db2dataacc_tbsp' 8000, file 'f:db2dataacc_tbsp' 8000)
每个容器(文件)的大小变为8000页。把容器的容量变大不会出错,但是如果容器中的数据已经充满,再把容器的容量缩小,则会引起错误。
例六:用EXTEND子句更改例三所创建的表空间的容器的大小。
ALTER TABLESPACE RESOURCE EXTEND (file 'd:db2dataacc_tbsp' 1000, file 'e:db2dataacc_tbsp' 1000, file 'f:db2dataacc_tbsp' 1000)
该命令的运行结果为在原有容量的基础之上,每个容器再增加1000页。
例七:删除例三中创建的DMS表空间。
DROP TABLESPACE RESOURCE
运行的结果为在DB2的注册表中把RESOURCE表空间删除,同时在磁盘上把相对应的文件夹和文件都一起自动删除。
例八:在UNIX上创建一个DMS表空间,使用各有10000页的3个逻辑卷:
CREATE TABLESPACE RESOURCE MANAGED BY DATABASE USING (DEVICE '/dev/rdblv6' 10000, DEVICE '/dev/rdblv7' 10000, DEVICE '/dev/rdblv8' 10000)
上面语句中提到的UNIX设备必须已经存在,且实例拥有者和SYSADM组必须能够写入它们。
SMS与DMS的对比
特性 SMS DMS
能够在表空间中动态增加容器的数目吗 N Y
能够把索引数据存放到不同表空间的表中吗 N Y
能够把大对象数据存放到不同表空间的表中吗 N Y
表可以分散存放到多个表空间中吗 N Y
仅在需要时才分配空间吗 Y N
表空间可以被放在不同的磁盘中吗 Y N
创建之后,区段大小能够改变吗 N N
例九:创建系统临时表空间。
CREATE SYSTEM TEMPORARY TABLESPACE tmp_tbsp MANAGED BY SYSTEM USING(‘d:tmp_tbsp’,’e:tmp_tbsp’)
系统临时表只能存储在系统临时表空间中,所以数据库必须始终至少有一个系统临时表空间。
例十:创建用户临时表空间。
CREATE USER TEMPORARY TABLESPACE usr_tbsp MANAGED BY DATABASE USING(FILE ‘d:db2datauser_tbsp’ 5000, FILE ‘e:db2datauser_tbsp’ 5000)
用户临时表空间用于存储已说明的临时表(用 DECLARE GLOBAL TEMPORARY TABLE 语句定义)
例十一:用RENAME语句给表空间重命名
RENAME TABLESPACE RESOURCE TO RES1
用该语句给表空间重命名之后,将自动更改所有引用该表空间的目录记录,所以无须关心该表空间中的个别对象。
例十二:在RESOURCE表空间中创建一张名为T1的表
CREATE TABLE T1(ABC INT) IN RESOURCE
===========================================
表空间
数据库中的所有数据都存储在许多表空间中。可以认为表空间是孩子而数据库是其父母,其中表空间(孩子)不能有多个数据库(父母)。由于表空间有不同用途,因此根据它们的用途和管理方式将它们分类。根据用途有五种不同的表空间:
目录表空间
每个数据库只有一个目录表空间,它是在发出 CREATE DATABASE 命令时创建的。目录表空间被 DB2 命名为 SYSCATSPACE,它保存了系统目录表。总是在创建数据库时创建该表空间。
常规表空间
常规表空间保存表数据和索引。它还可以保存诸如大对象(Large Object,LOB)之类的长数据,除非这些数据显式地存储在长表空间中。如果某些表空间是数据库管理的空间(Database Managed Space,DMS),则可以将表及其索引分别放到单独的常规表空间中。我们将在本文后面定义 DMS 和系统管理的空间(System Managed Space,SMS)之间的区别。每个数据库中必须至少有一个常规表空间。创建数据库时指定该表空间的缺省名为 USERSPACE1。
长表空间
长表空间用于存储长型或 LOB 表列,它们必须驻留在 DMS 表空间中。它们还可以存储结构化类型的列或索引数据。如果没有定义长表空间,那么将把 LOB 存储在常规表空间中。长表空间是可选的,缺省情况下一个都不创建。
系统临时表空间
系统临时表空间用于存储 SQL 操作(比如排序、重组表、创建索引和连接表)期间所需的内部临时数据。每个数据库必须至少有一个系统临时表空间。随数据库创建的系统临时表空间的缺省名为 TEMPSPACE1。
用户临时表空间
用户临时表空间存储已声明的全局临时表。创建数据库时不存在用户临时表空间。至少应当创建一个用户临时表空间以允许定义已声明的临时表。用户临时表空间是可选的,缺省情况下一个都不创建。
表空间管理
可以用两种不同的方式管理表空间:
系统管理的空间(SMS)
SMS 表空间由操作系统进行管理。容器被定义成常规操作系统文件,并且是通过操作系统调用访问的。这意味着所有的常规操作系统功能将处理以下内容:操作系统将缓冲 I/O;根据操作系统约定分配空间;如有必要就自动扩展表空间。但是,不能从 SMS 表空间删除容器,并且仅限于将新的容器添加到分区的数据库。前一节中所说明的那三个缺省表空间都是 SMS。
数据库管理的空间(DMS)
DMS 表空间是由 DB2 管理的。可以将容器定义成文件(在创建表空间时将把给定的大小全部分配给它们)或设备。分配方法和操作系统允许多少 I/O,DB2 就可以管理多少 I/O。可以通过使用 altER TABLESPACE 命令来扩展容器。还可以释放未使用的那部分 DMS 容器(从 V8 开始)。
下面是一个示例,向您说明该如何增大容器大小(V7 和 V8 都支持此功能):
ALTER TABLESPACE TS1
RESIZE (FILE '/conts/cont0' 2000,
DEVICE '/dev/rcont1' 2000,
FILE 'cont2' 2000)
请注意,只有 V8 才支持将原始容器的大小调整得更小。
如何创建和查看表空间
当您创建数据库时,将创建三个表空间(SYSCATSPACE、TEMPSPACE1 和 USERSPACE1)。通过使用 DB2 命令窗口(Command Window)或 UNIX 命令行,创建一个名为 testdb 的数据库,连接至该数据库,然后列出表空间:
CREATE DATABASE testdb
CONNECT TO testdb
LIST TABLESPACES
下面的 清单 1显示了 LIST TABLESPACES 命令的输出。
清单 1. LIST TABLESPACES 命令的输出
Tablespaces for Current Database
Tablespace ID = 0
Name = SYSCATSPACE
Type = System managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
Tablespace ID = 1
Name = TEMPSPACE1
Type = System managed space
Contents = System Temporary data
State = 0x0000
Detailed explanation:
Normal
Tablespace ID = 2
Name = USERSPACE1
Type = System managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
上面所示的这三个表空间是通过 CREATE DATABASE 命令自动创建的。用户可以通过在该命令中包含表空间说明来覆盖缺省的表空间创建,但是在创建数据库时必须创建一个目录表空间和至少一个常规表空间,以及至少一个系统临时表空间。通过使用 CREATE DATABASE 命令或以后使用 CREATE TABLESPACE 命令,可以创建更多的所有类型的表空间(目录表空间除外)。
容器
每个表空间都有一个或多个容器。重申一次,您可以认为容器是孩子,而表空间是其父母。每个容器只能属于一个表空间,但是一个表空间可以拥有许多容器。可以将容器添加到 DMS 表空间,或者从 DMS 表空间中删除容器,而且可以更改容器的大小。只能将容器添加到某个分区中分区数据库上的 SMS 表空间,在添加之前该分区还未给表空间分配容器。添加新的容器时,将启动一个自动的重新均衡操作以便将数据分布到所有容器上。重新均衡操作不会妨碍对数据库的并发访问。
表空间设置
可以在创建表空间时给它们指定许多设置,或者也可以稍后使用 altER TABLESPACE 语句时指定其设置。
页大小(Page size)
定义表空间所使用的页大小。所支持的大小为 4K、8K、16K 和 32K。页大小根据下表限定了可放到表空间中的表的行长度和列数:
表 1. 页大小的含义 页大小 行大小限制 列数限制 最大容量
4 KB 4 005 500 64 GB
8 KB 8 101 1 012 128 GB
16 KB 16 293 1 012 256 GB
32 KB 32 677 1 012 512 GB
表空间最多可包含 16384 个页,因此选择较大的页大小可以增加表空间的容量。
扩展块大小(Extent size)
指定在跳到下一个容器之前将写到当前容器中的页数。存储数据时数据库管理器反复循环使用所有容器。该参数只有在表空间中有多个容器时才起作用。
预取大小(Prefetch size)
指定当执行数据预取时将从表空间读取的页数。预取操作在查询引用所需的数据之前读入这些数据,这样一来查询就不必等待执行 I/O 了。当数据库管理器确定顺序 I/O 是适当的,并且确定预取操作可能有助于提高性能时,它就选择预取操作。
开销(Overhead)和传送速率(Transfer rate)
这些值用于确定查询优化期间的 I/O 成本。这两个值的测量单位都是毫秒,而且它们应当分别是所有容器开销和传送速率的平均值。开销是与 I/O 控制器活动、磁盘寻道时间和旋转延迟时间相关联的时间。传送速率是将一个页读入内存所必需的时间量。它们的缺省值分别是 24.1 和 0.9。可以根据硬件规格计算这些值。
CREATE TABLESPACE 语句的示例
下列语句将创建一个常规表空间。所讨论的所有设置都是为了进行说明。
CREATE TABLESPACE USERSPACE3
PAGESIZE 8K
MANAGED BY SYSTEM
USING ('d:usp3_cont1', 'e:usp3_cont2', 'f:usp3_cont3')
EXTENTSIZE 64
PREFETCHSIZE 32
BUFFERPOOL BP3
OVERHEAD 24.1
TRANSFERRATE 0.9
如何查看表空间的属性和容器
指定 LIST TABLESPACES 命令的 SHOW DETAIL 选项将显示其它信息:
LIST TABLESPACES SHOW DETAIL
清单 2显示了 USERSPACE1 表空间的输出。缺省情况下,将列出创建数据库时所创建的那三个表空间。
清单 2. LlST TABLESPACES SHOW DETAIL 命令的输出
Tablespaces for Current Database
Tablespace ID = 2
Name = USERSPACE1
Type = System managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
Total pages = 336
Useable pages = 336
Used pages = 336
Free pages = Not applicable
High water mark (pages) = Not applicable
Page size (bytes) = 4096
Extent size (pages) = 32
Prefetch size (pages) = 16
Number of containers = 1
要列出容器,我们需要使用以上输出中的 Tablespace ID:
LIST TABLESPACE CONTAINERS FOR 2
清单 3. LIST TABLESPACE CONTAINERS 命令的输出
Tablespace Containers for Tablespace 2
Container ID = 0
Name = C:DB2NODE0000SQL00004SQLT0002.0
Type = Path
该命令将列出指定表空间中的所有容器。如上所示的路径指向容器物理上所在的位置。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8806316/viewspace-1001428/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8806316/viewspace-1001428/