欢迎投稿

今日深度:

DB2 9.5 数据库分区管理及应用实践(1)(3)

数据库分区管理相关命令

确定编目分区

在 DB2 数据库分区环境中, ROLLFORWARD DATABASE 等命令需要在编目分区上执行。我们可以通过 LIST DATABASE DIRECTORY 命令来确定编目分区。

db2 LIST DATABASE DIRECTORY

分区切换

在 DB2 数据库分区环境中,我们可以通过设置 DB2NODE 环境变量 或使用 set client 命令进行分区间的切换。

export DB2NODE=2
db2 terminate
OR
db2 set client connect_dbpartitionnum 2

增加数据库分区

该命令会自动在 db2nodes.cfg 中增加新定义的分区信息,并在新的数据库分区上创建

TEMPSPACE1 表空间。

我们也可以用如下命令增加数据库分区:

export DB2NODE=4
db2 terminate
db2 connect to testdb
db2 ADD DBPARTITIONNUM

使用该命令时,必须事先修改 db2nodes.cfg 文件包含新定义的分区信息,并在新增加的数据库分区上执行该命令。

删除数据库分区

在删除数据库分区时,只有那些不包含数据的分区才可以被删除。因此,在删除分区时,必须要先执行 DROP PARTITIONNUM VERIFY 命令检查一下该分区是否可以被删除。如果某一个分区正在被使用,要先执行 REDISTRIBUTE DATABASE PARTITION GROUP 命令将该分区上的数据分布到其他分区上。

export DB2NODE=4
db2 TERMINATE
db2 DROP DBPARTITIONNUM VERIFY
SQL6034W Node "4" is not being used by any databases.
db2stop DROP DBPARTITIONNUM 4

如果数据库分区 4 上有数据,则执行下述命令:

redistribute database partition group pg123 uniform drop dbpartitionnum (4)
db2 for application all
export DB2NODE=4
db2 drop dbpartitionnum verify
db2stop drop dbpartitionnum 4

查看数据库分区组

db2 LIST DATABASE PARTITION GROUPS SHOW DETAIL

重新分布数据库分区组数据

db2 "REDISTRIBUTE DATABASE PARTITION GROUP pg123 UNIFORM"
or
db2 "REDISTRIBUTE DATABASE PARTITION GROUP pg123 using TARGETMAP pg123.map"

增加数据库分区到数据库分区组中

db2 "ALTER DATABASE PARTITION GROUP pg123 ADD DBPARTITIONNUMS (4) WITHOUT TABLESPACES"
db2 "REDISTRIBUTE DATABASE PARTITION GROUP pg123 UNIFORM"

从数据库分区组中删除数据库分区

db2 drop dbpartitionnum verify
SQL6034W Node "4" is not being used by any databases.
db2stop DROP DBPARTITIONNUM 4

删除数据库分区组

db2 "DROP DATABASE PARTITION GROUP pg123"

查看表中的数据在各分区的分布情况

SELECT DBPARTITIONNUM(distribution key), COUNT( * )
FROM schema.table
GROUP BY DBPARTITIONNUM(distribution key)
ORDER BY DBPARTITIONNUM(distribution key)

查看表中的数据在分区图(partition map)中的分布情况

SELECT HASHEDVALUE(distribution key), COUNT( * )
FROM schema.table
GROUP BY HASHEDVALUE(distribution key)
ORDER BY HASHEDVALUE(distribution key)

DB2 分区数据库相关实用程序

db2_all 命令

在 DB2 分区环境下,很多操作都需要在各个分区上分别执行,如果每次都要到各个分区上单独执行,对用户来说非常繁琐。在 DB2 中,可以使用 db2_all 命令,它可以在指定的所有数据库分区服务器上运行该命令。 

db2_all "db2 UPDATE DB CFG FOR TESTDB USING LOGRETAIN ON"
db2_all ";db2 UPDATE DB CFG FOR TESTDB USING LOGRETAIN ON"
db2_all "db2 CONNECT TO testdb ;db2 LIST TABLESPACES SHOW DETAIL"

rah 命令

它指定在所有计算机上运行该命令。

如果想为多台物理机器创建一个目录,那么可以发出下面的命令

rah ")mkdir /tmp/$USER“

数据库备份

要备份分区数据库,您必须要首先在编目分区上调用备份实用程序,然后在其他数据库分区上调用备份实用程序。

db2_all "<<+0< db2 BACKUP DB testdb to /home/db2inst1/BACKUPS"
db2_all "|<<-0< db2 BACKUP DB testdb ONLINE to /home/db2inst1/BACKUPS"

其中,“+0”表示只在 0 号分区上执行,“-0”表示在除了 0 号分区之外的所有分区上执行。

在版本 9.5 之前,您必须一次一个数据库分区地备份分区数据库。一次一个数据库分区地备份多个数据库分区可能会出错并且费时。如果一次一个数据库分区地备份分区数据库,那么您无法在备份映像中包括复原和恢复所需要的日志文件。在版本 9.5 中,您可以通过在 b 编目数据库分区上执行单一系统视图(SSV)备份同时备份多个数据库分区。您从编目数据库分区执行备份操作时,可以使用 ON DBPARTITIONNUMS 选项来指定要在备份中包含哪些分区。它将同时备份指定的分区,并且与指定的分区相关联的备份时间戳记将相同。此外,您还可以在 SSV 备份中包含数据库日志。

db2 BACKUP DATABASE testdb ON DBPARTITIONNUMS (1, 2) \
TABLESPACE (USERSPACE1) ONLINE USE TSM
Or
db2 backup db testdb on all dbpartitionnums tablespace(T1)

监控数据库备份命令执行情况

export DB2NODE=0
db2 terminate
db2 LIST UTILITIES SHOW DETAIL

数据库恢复

要恢复分区数据库,您必须要首先在编目分区上调用恢复实用程序,然后在其他数据库分区上调用恢复实用程序。

db2_all "<<+0< db2 RESTORE DATABASE testdb \
FROM /home/db2inst1/BACKUPS INTO testdb REPLACE EXISTING"
db2_all "<<-0< db2 RESTORE DATABASE testdb \
FROM /home/db2inst1/BACKUPS INTO testdb REPLACE EXISTING"

前滚恢复(ROLLFORWARD DATABASE)

在分区数据库中,ROLLFORWARD DATABASE 命令只能在编目分区上运行。如果需要前滚恢复数据库或表空间到某一时间点(point in time ),则该命令会涉及到db2nodes.cfg 文件中定义的所有数据库分区上的数据。如果需要根据整个事务日志(to the end of logs)来前滚恢复数据库或表空间, 则该命令会涉及到所有指定的数据库分区上的数据。如果没有指定数据库分区,该命令会涉及到db2nodes.cfg 文件中定义的所有数据库分区上的数据。如果某一分区不需要执行前滚恢复,则该分区会被忽略掉。

当数据库处于一致状态时(当数据库目录中列示的对象与磁盘中实际存在的对象匹配时),最小恢复时间是前滚期间的最早时间点。手动确定要将数据库前滚至的正确时间点比较困难,尤其是对于分区数据库更是如此。在版本 9.5 中,通过在 ROLLFORWARD DATABASE 命令中使用 TO END OF BACKUP 参数,可以将数据库前滚至由数据库管理器确定的最小恢复时间。

前滚恢复分区 0 及分区 2 上的表空间TBS1: 

db2 rollforward db testdb to end of logs on dbpartitionnums (0, 2) tablespace(TBS1)

前滚恢复分区 6 上的 6 个小表:

db2 rollforward database testdb to end of logs on dbpartitionnum (6) \
tablespace(tsstore, tssbuyer, tsstime, tsswhse, tsslscat, tssvendor)

前滚至由数据库管理器确定的最小恢复时间:

db2 rollforward db testdb to end of backup and complete

EXPORT 命令

export 用于将表中的数据卸载到文件中。

db2 "EXPORT TO lineitem.del OF DEL SELECT * FROM db2inst1.lineitem"

在分区数据库环境下,import 或 LOAD 命令不支持 IFX 文件格式。

IMPORT 命令

用于将外部文件中的数据插入到表中。

db2 "IMPORT FROM lineitem.tbl OF DEL MODIFIED BY COLDEL| \
COMMITCOUNT 100000 REPLACE INTO lineitem"

LOAD 命令

在多分区数据库环境中,大量的数据放在多个数据库分区中。分区键用来确定每部分数据所在的数据库分区。必须先分布数据,然后才能将该数据装入到正确的数据库分区中。

在多分区数据库中装入表时,load 实用程序可以:

并行地分布输入数据

同时在各个相应数据库分区中装入数据

将数据装入到多分区数据库中分两阶段完成:第一阶段为设置阶段,在此阶段获取数据库分区资源(如表锁定);第二阶段为装入阶段,在此阶段将数据装入到数据库分区中。在将数据装入多分区数据库时,可以使用下列其中一种方式:

PARTITION_AND_LOAD

对数据进行分布(有可能以并行方式进行分布),并且同时在各个相应数据库分区上装入数据。

PARTITION_ONLY

对数据进行分布(有可能以并行方式进行分布),并将输出写入每个装入数据库分区上指定位置中的文件。每个文件都包含分区头,该分区头指定数据在数据库分区上的分布方式,并指定可以使用 LOAD_ONLY 方式将该文件装入到数据库中。

LOAD_ONLY

假定数据已分布在数据库分区上;将跳过分布过程,并且在相应的数据库分区上同时装入数据。

ANALYZE

生成最佳分布图(在所有数据库分区之间均匀地分布数据)。

下边是 LOAD 命令的一些示例:

要将 load.del 中的数据装入到所有定义了 TABLE1 的数据库分区中,请发出以下命令: 

LOAD FROM LOAD.DEL of DEL REPLACE INTO TABLE1

要在数据分布在数据库分区 3 和数据库分区 4 上的位置执行装入操作,请发出以下命令:

LOAD FROM LOAD.DEL of DEL REPLACE INTO TABLE1 PARTITIONED DB \
CONFIG PARTITIONING_DBPARTNUMS (3,4)

在使用数据库分区 3 和数据库分区 4 的情况下,要将 load.del 分布(而不装入)到所有定义 TABLE1 的数据库分区中,请发出以下命令:

LOAD FROM LOAD.DEL of DEL REPLACE INTO TABLE1 PARTITIONED DB
CONFIG MODE PARTITION_ONLY
PART_FILE_LOCATION /db2/data PARTITIONING_DBPARTNUMS (3,4)

如果已经以 PARTITION_ONLY 方式执行了装入操作,并且要将每个装入数据库分区的 /db2/data 目录中的分区文件装入到所有定义了 TABLE1 的数据库分区中,请发出以下命令:

LOAD FROM LOAD.DEL OF DEL REPLACE INTO TABLE1 PARTITIONED
DB CONFIG MODE LOAD_ONLY
PART_FILE_LOCATION /db2/data

要仅装入到数据库分区 4 中,请发出以下命令:

LOAD FROM LOAD.DEL OF DEL REPLACE INTO TABLE1 PARTITIONED
DB CONFIG MODE LOAD_ONLY
PART_FILE_LOCATION /db2/data OUTPUT_DBPARTNUMS (4)

REORG 命令

在分区数据库中,同样使用DB2 REORG 命令重组表及索引。

db2 "REORG INDEXES ALL FOR TABLE lineitem ALLOW WRITE ACCESS"
db2 "REORG TABLE lineitem INPLACE ALLOW WRITE ACCESS ON ALL DBPARTITIONNUMS"

RUNSTATS 命令

在分区数据库中,同样使用RUNSTATS命令收集统计信息。

db2 "RUNSTATS ON TABLE db2inst1.lineitem WITH DISTRIBUTION AND \
DETAILED INDEXES ALL ALLOW WRITE ACCESS"

在分区数据库中,RUNSTATS 命令运行时所在分区的统计信息才会被收集,再对这些统计信息加以推断(前提是行在各分区上是均匀分布的)以反映整个数据库。这意味着,SYSCAT.TABLES 中的 CARD 列可能不包含该表中确切的行数。我们要尽量让数据均匀地分布在各分区上。

结论

本文以 Balanced Warehouse E7100 为例,为大家介绍了数据库分区设计、实现及管理的基本方法。希望大家能够对 DB2 数据库分区技术及使用有一个比较全面的了解。另外,关于数据库分区监控及性能调优等方面内容,大家可以参考 DB2 信息中心相关内容。

db2start DBPARTITIONNUM 4 ADD DBPARTITIONNUM HOSTNAME Clyde PORT 4


www.htsjk.Com true http://www.htsjk.com/shujukugl/18091.html NewsArticle 数据库分区管理相关命令 确定编目分区 在 DB2 数据库分区环境中, ROLLFORWARD DATABASE 等命令需要在编目分区上执行。我们可以通过 LIST DATABASE DIRECTORY 命令来...
评论暂时关闭