`
jetway
  • 浏览: 473429 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

db2自动调整表空间的大小

阅读更多

db2自动调整表空间的大小

在 DB2® 数据库系统中存在两种类型的基本表空间:系统管理的空间(SMS)和数据库管理的空间(DMS)。

与 SMS 表空间相关联的容器是文件系统目录,而这些目录中的文件会随着表空间中对象的增长而增长。文件会增加至达到其中一个容器上的文件系统限制或达到数据库的表空间大小限制(请参阅db2.udb.admin.doc/doc/r0001029.htm">SQL and XQuery limits)。

DMS 表空间由文件容器或原始设备容器组成,它们的大小是在将容器指定给表空间时设置的。当容器中的所有空间都已被使用时,则认为表空间已满。但是,与 SMS 不同,您可以使用 ALTER TABLESPACE 语句来添加或扩展容器,从而允许将更多的存储器空间提供给表空间。DMS 表空间还具有称为“自动调整大小”的功能。当可以自动调整大小的 DMS 表空间中的空间被消耗时,DB2 数据库系统可能回扩展一个或多个文件容器。SMS 表空间具有类似于自动增长的功能但术语“自动调整大小”专门用于 DMS。

启用和禁用自动调整大小(AUTORESIZE)
缺省情况下,不会对 DMS 表空间启用自动调整大小功能。下列语句创建不启用自动调整大小功能的 DMS 表空间:

      CREATE TABLESPACE DMS1 MANAGED BY DATABASE
     USING (FILE '/db2files/DMS1' 10 M)要启用自动调整大小功能,将 AUTORESIZE YES 子句指定为 CREATE TABLESPACE 语句的一部分:

      CREATE TABLESPACE DMS1 MANAGED BY DATABASE
     USING (FILE '/db2files/DMS1' 10 M) AUTORESIZE YES在已创建 DMS 表空间之后,还可以通过在 ALTER TABLESPACE 语句上使用 AUTORESIZE 子句来启用或禁用自动调整大小功能:

      ALTER TABLESPACE DMS1 AUTORESIZE YES
   ALTER TABLESPACE DMS1 AUTORESIZE NO有两个其他属性(MAXSIZE 和 INCREASESIZE)与自动调整大小的表空间相关联。

最大大小(MAXSIZE)
CREATE TABLESPACE 语句上的 MAXSIZE 子句定义表空间的最大大小。例如,以下语句创建可增长至 100 兆字节(如果数据库有多个数据库分区,则是每个数据库分区的大小)的表空间:

      CREATE TABLESPACE DMS1 MANAGED BY DATABASE
     USING (FILE '/db2files/DMS1' 10 M)
     AUTORESIZE YES MAXSIZE 100 MMAXSIZE NONE 子句指定表空间没有最大限制。表空间可以一直增长,直到达到文件系统限制或 DB2 表空间限制(请参阅 SQL Reference 中的 SQL Limits 部分)。如果在启用自动调整大小功能时不指定 MAXSIZE 子句,则使用缺省值无最大大小限制。

ALTER TABLESPACE 语句更改已经启用了自动调整大小的表空间的 MAXSIZE 的值。例如:

      ALTER TABLESPACE DMS1 MAXSIZE 1 G
   ALTER TABLESPACE DMS1 MAXSIZE NONE如果指定了最大大小,则 DB2 强制使用的实际值可能会比提供的值略小,原因是 DB2 会尝试使容器增长保持一致。不可能通过使两个数量并准确达到最大值来扩展容器。

增大大小(INCREASESIZE)
当表空间中已没有空闲扩展数据块但请求了一个或多个扩展数据块时,CREATE TABLESPACE 语句上的 INCREASESIZE 子句定义用来增大表空间的空间量。可以显式大小或百分比的形式指定该值。例如:

      CREATE TABLESPACE DMS1 MANAGED BY DATABASE
     USING (FILE '/db2files/DMS1' 10 M)
     AUTORESIZE YES INCREASESIZE 5 M

   CREATE TABLESPACE DMS1 MANAGED BY DATABASE
     USING (FILE '/db2files/DMS1' 10 M)
     AUTORESIZE YES INCREASESIZE 50 PERCENT百分比值意味着每次需要增大表空间时都要计算增大大小,并且增大量基于增大时表空间大小的百分比。例如,如果表空间大小是 20 兆字节而增大大小是百分之 50,则第一次表空间增大 10 兆字节(增大到大小为 30 兆字节),下一次增大 15 兆字节。

如果在启用了自动调整大小功能时未指定 INCREASESIZE 子句,则 DB2 确定要使用的适当值,该值在表空间的存在期间可能会有变化。与 AUTORESIZE 和 MAXSIZE 一样,可以使用 ALTER TABLESPACE 语句更改 INCREASESIZE 的值。

如果指定了增长大小,则 DB2 使用的实际值可能会与提供的值稍有不同。对所用值进行这种调整是为了使表空间中各容器的增大保持一致。

如何扩展表空间
对于可以自动调整大小的表空间,当所有现有空间都已被使用并请求了更多空间时,DB2 会尝试增大该表空间的大小。DB2 确定可以扩展表空间中的哪些容器以便不需要进行重新平衡。DB2 只扩展位于表空间图(该图描述表空间的存储器布局)的最后范围内的那些容器,并且对它们扩展相同的数量。

例如,考虑下列语句:

      CREATE TABLESPACE TS1 MANAGED BY DATABASE
     USING (FILE 'C:\TS1CONT' 1000, FILE 'D:\TS1CONT' 1000,
            FILE 'E:\TS1CONT' 2000, FILE 'F:\TS1CONT' 2000)
     EXTENTSIZE 4
     AUTORESIZE YES请记住,DB2 将每个容器的一小部分(一个扩展数据块)用于元数据,以下是根据 CREATE TABLESPACE 语句为表空间创建的表空间图。(表空间图是表空间快照的输出的一部分。)

      表空间图:

    范围    分割集      分割区  最大     最大        起始        结束   调节 容器
    编号                  偏移    扩展数据块  页      分割区       分割区
    [   0] [   0]      0     995      3983      0    248   0    4 (0,1,2,3)
    [   1] [   0]      0    1495      5983    249    498   0    2 (2,3)表空间图表明标识为 2 和 3 的容器(E:\TS1CONT 和 F:\TS1CONT)是仅有的在图最后面范围内的容器。因此,当 DB2 自动扩展此表空间中的容器时,它将只扩展这两个容器。

注:
如果创建表空间时所有容器的大小都一样,则图中只有一个范围。在这种情况下,DB2 扩展每一个容器。要防止限制为只扩展一小部分容器,创建表空间时使各容器大小相等。
如在 MAXSIZE 部分中所讨论的那样,可以指定对表空间大小的最大限制,也可以提供 NONE 值以便可无限增大表空间。(当使用 NONE 或无限制时,上限实际上是由文件系统或 DB2 表空间限制定义的。)DB2 不会尝试增大表空间至超过上限。但是,在达到上限之前,尝试增大容器可能会因为文件系统已满而失败。在这种情况下,DB2 不会在增大表空间并将会向应用程序返回“空间不足”条件。

解决此情况有两种方法:

增大已满文件系统上可用的空间量。
对表空间执行一些容器操作,使得这些容器不再位于表空间图的最后。使正被讨论的容器不再处于表空间图的最后的最简易方法是将新的分割集添加至具有一组新容器的表空间。最佳示例确保所有容器大小相等。可以使用 ALTER TABLESPACE 语句的 STRIPE SET 子句来添加新的分割集。通过添加新的分割集,就会将新的范围添加至表空间图。借助于新的范围, DB2 自动尝试扩展的容器就会处于此新的分割集中,而旧的容器保持不变。
注:
当暂挂用户启动的容器操作或者正在执行后续生新平衡时,会禁用自动调整大小功能,直到落实了操作或重新平衡完成为止。
例如,表空间具有三个大小一样的容器,每个容器都位于它自己的文件系统上。当对表空间执行一些操作时,DB2 会自动扩展这三个容器。最后,其中一个文件系统变满了,对应的容器就不能再增大了。如果该文件系统上不能再提供更多的可用空间,则必须对表空间执行容器操作,使得存在问题的容器不再处于表空间图的最后范围内。在这种情况下,您可以添加新的分割集并指定两个两个容器(仍然具有空间的每个文件系统上一个),也可以指定多一些或少一些容器(再次确保要添加的每个窗口大小一样并且要使用的每个文件系统上有足够的空间)。当 DB2 尝试增大表空间的大小时,现在它将尝试扩展这些新分割集中的容器而不是旧容器。

上面描述的情况仅适用于未启用自动调整大小的自动存储器表空间。如果自动存储器表空间启用了自动调整大小,则 DB2 会通过添加容器的新分割集来自动处理文件系统变满的情况。

监视
对 DMS 表空间自动调整大小是作为表空间监视器快照输出的一部分显示的。还会显示增大大小值和最大大小值:

   
   启用自动调整大小                    = Yes 或 No
   当前表空间大小(字节)              = ###
   最大表空间大小(字节)              = ### 或 NONE
   增加大小(字节)                    = ###
   增加大小(百分比)                  = ###
   上一次成功调整大小的时间            = YYYY/MM/DD HH:MM:SS.SSSSSS
   上一次调整大小尝试失败              = Yes 或 No使用说明
自动调整表空间大小具有下列含义:

启用了自动调整大小的表空间具有 DB2 通用数据库™ 版本 8.2.1 或更早版本不能识别的相关元数据。在这些版本上尝试使用启用了自动调整大小的表空间的数据库会产生故障(极有可能会返回 SQL0980C 或 SQL0902C 错误)。可能会对尝试连接至数据库或尝试复原数据库发送错误。如果表空间启用了自动调整大小,则对这些表空间禁用“自动调整大小”功能会除去元数据,从而允许在 DB2 版本 8.2.1 或更早版本上使用该数据库。
当禁用“自动调整大小”功能时,如果后来再启用此功能,则与 INCREASESIZE 和 MAXSIZE 相关联的值会丢失。
不能对使用原始设备容器的表空间启用此功能。同样,不能将原始设备容器添加至可以自动调整大小的表空间。这些操作会产生错误(SQL0109N)。如果需要添加原始设备容器,则必须首先禁用此功能。
重定向复原操作不能更改容器定义以包括原始设备容器(SQL0109N)。
由于最大大小限制了 DB2 自动增大表空间的方式,所以最大大小也限制了用户可增大表空间的方式。换言之,当执行向表空间添加空间的操作时,生成的大小必须小于或等于最大大小。可以使用 ALTER TABLESPACE 语句的 ADD、EXTEND、RESIZE 或 BEGIN NEW STRIPE SET 子句来添加空间。

 

日志

. /home/db2admin/sqllib/db2profile

db2 list tablespaces show  detail

1.SQLState '57011' and errorCode '-964'
  原因:数据库的日志文件已满
  解决方法:修改日志文件大小(加大),增加日志文件个数,增加辅助日志文件个数(三个修改参数可以任意选择)

  查看数据库的配置参数:get db cfg for hbhr  

         日志文件大小(4KB)  (LOGFILSIZ) = 1024 (每个日志文件大小为1024*4KB=4MB)
         主日志文件的数目     (LOGPRIMARY) = 3
         辅助日志文件的数目   (LOGSECOND) = 1

  修改数据库的配置参数:update db cfg for hbhr using <p> <v>
  修改日志文件大小:update db cfg for hbhr using LOGFILSIZ  4096
  修改主日志文件个数:update db cfg for hbhr using LOGPRIMARY  6
  修改辅助日志文件个数:update db cfg for hbhr using LOGSECOND 10

 

DB2 报 SQLSTATE=57011错误的解决办法

SQLSTATE=57011   为数据库中表空间已满的异常(错误)

可以用命令查看表空间

db2 => list tablespaces show detail

有两种类型表空间:
第一种类型表空间为:SYSCATSPACE,类型为系统管理表空间(SMS)
第二种类型表空间为:用户自己的表空间(比如xjhspaces11),类型为数据库管理表空间(DMS)
查看表空间中总的表空间(Total pages)和 剩余表空间(Free pages)
如果是系统管理表空间(SMS)不够,则是由于磁盘空间不够,需要增加磁盘空间
如果是数据库管理表空间(DMS)不够,则需要扩展表空间
扩展表空间的命令为:
db2 alter tablespace <tablespace_name> </tablespace_name> extend (all <num_pages> <num_pages></num_pages>)

例如:db2 => alter tabblespace xjhspces11 extend(all 2560M)
扩展了数据库表空间2.5G
注意:对数据库管理表空间的扩展前,必须检查磁盘裸设备的空间,如果空间不够,需要增加磁盘裸设备的空间,再扩展数据库管理表空间,并且在扩展表空间之前,最好备份数据库,以免带来不必要的损失
备份数据库命令:$ db2move databaseName export  (databaseName为数据库名)
备份表命令:$ db2move databaseName export –tn test_table1 (databaseName为数据库名,test_table1为表名)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics