天地不仁,以万物为刍狗!

db2relocatedb常用使用举例

上一篇 / 下一篇  2008-02-28 15:26:05 / 个人分类:db2

db2relocatedb常用使用举例

除了保存的用户数据以外,DB2 数据库还有大量的内部元数据,这些数据描述了用户数据存放位置、用户数据属于谁,以及如何引用它们。元数据总是被 DB2 隐藏在"幕后",用户和 DBA 都不会直接接触它。就最基本的层面而言, db2relocatedb 是这样一种工具,即如果没有其他的办法,或者在数据库内完成这些操作造成的代价不可接受或者太繁琐(和使用 db2relocatedb 相比),那么可以使用它来改变这些元数据。

下面列出了该db2relocatedb能够于其中发挥重要作用的所有任务:
`d/XC:iM]v0" 修改数据库名。ITPUB个人空间5] Y2`q:k+i E
" 修改数据库创建的路径/驱动器。
Kqm#vp-kei P,\7Q.P0" 更改一个或多个表空间容器。ITPUB个人空间 N4T }c u"s\w
" 改变和数据库有关的日志路径
:NI/A:zykz0" 改变和数据库有关的实例
y Z8I%aF?6c0" 将数据库复制/移动到同一台(也可以不同)机器上,并进行上述一项或多项修改。
b d GGKO0P g0db2relocatedb 工具最初在 DB2 UDB V7 Fixpak 4 中引入的。一开始只在 Release Notes 予以说明,后来又被添加到产品文档中。V8 的所有版本中也提供了 db2relocatedb。ITPUB个人空间i`!B+o6@cTg5@
db2relocatedb 是一种服务器端工具(也就是说只在数据库所在的系统上运行),因此,所有的服务器安装中都有该工具。您也可以在下面的目录中找到,该目录随平台不同而不同:ITPUB个人空间-ev?*P d1X*zo ?
UNIX:实例目录/sqllib/bin/db2relocatedbITPUB个人空间8Ou j!{qu
Windows:安装 DB2 的驱动器\sqllib\bin\db2relocatedb.exe

可以在文档中找到 db2relocatedb 工具的语法,但也可以通过命令行查看它。在 V7 中,只需输入 db2relocatedb,不用指定任何选项,就可以查看该语法,但在 V8 中,这样做将返回 DBT1017N 错误,指明语法不正确。不过,运行 db2 ? dbt1017n 可以显示这一错误消息的扩展版本,其中显示了该工具的完整语法:

db2relocatedb 的语法
C![ a Rb0ou4k0DBT1017N The syntax of the DB2RELOCATEDB tool is incorrect.ITPUB个人空间,}7uLt-oE
Explanation:ITPUB个人空间&|"Z+\nik%['?-I]O
 The DB2RELOCATEDB tool has the following syntax:
pHo }#x+ZsSw?0     db2relocatedb -f <config_file>
"BlQ9t@Dfc0 <configFile>: Name of file containing  configuration information.ITPUB个人空间 G%V W K(No2B;J:PM
 File format is:
L]l*R4W8}~f+g%I0       DB_NAME=oldName,newNameITPUB个人空间L[|)bvh/j3M
       DB_PATH=oldPath,newPath
'V5E0G6[doo q2]0       INSTANCE=oldInst,newInstITPUB个人空间6W%txp G+isv7]`
       NODENUM=nodeNumber
6SgG2s m(w0       LOG_DIR=oldDirPath,newDirPathITPUB个人空间}2p"f ?v!Z`
       CONT_PATH=oldContPath1,newContPath1ITPUB个人空间ow,ips8eO#d%u,P
       CONT_PATH=oldContPath2,newContPath2ITPUB个人空间~q(T5}l5tf0i
       ...ITPUB个人空间h'Z4L2CZ/mP|(x&t
 Notes:ITPUB个人空间8yx_ m(EKJ
o   Database name, database path, and instance name are all
O'GfJ:A2]6J&y0    required fields.  If one of these fields is not changing thenITPUB个人空间,zNo CHd&D ^"? x
    it is not necessary to list the old and new value for it,ITPUB个人空间@-f,g)|2S-t
    just give the old/current one.
XT{~@p0o   Blank lines or lines beginning with a comment character (#)
D8fl"QRA a0will be ignored.

上述消息表明,运行该工具需要指定一个配置文件。该文件由用户创建,告诉该工具需要在内部改变数据库的哪些内容(同样,要记住,实际移动需要移动的文件是由用户来移动的)。下面是所有配置文件参数的详细说明:ITPUB个人空间8Hi#x#f/P.Y Y%j A
DB_NAME:必需参数,表示数据库名。如果没有改变数据库名,那么只需指定当前的名称即可(也就是说不需要列出新的数据库名)。但是,如果要改变数据库名,那么就必须指定当前名称和新名称,中间用逗号分开。
z b#X&y,i } ``0DB_PATH: 必需参数,表示数据库最初创建的路径或驱动器(Windows)。如果不改变数据库路径,那么只需指定当前路径即可。但是如果改变数据库路径,那么就必须指定当前路径和新路径,中间用逗号分开。ITPUB个人空间c*_P5EuK"PUYu*~
INSTANCE: 必需参数,表示 DB2 实例名。如果不改变实例名,则只需指定当前实例名即可,否则需要指定当前实例名和新实例名,中间用逗号分开。ITPUB个人空间U|e kKC)ep5m
NODENUM: 可选参数,表示要操作的数据库分区号。如果没有指定该参数,则默认为 0。关于该参数用法的详细说明,请参阅"Multi-Partitioned Databases"一节。
\JF/Iq^?9wJ'P|0LOG_DIR: 可选参数,表示数据库日志文件的位置。人们通常用 UPDATE DB CFG USING NEWLOGPATH 命令更改日志文件目录,也可以选择使用该工具改变其他某些路径。
/S0aL(lBI0CONT_PATH: 可选参数,用来更改一个或多个表空间容器的位置。可以多次指定该参数来表示需要完成的修改。其中每一项都要包含原来的容器名和新的容器名,中间用逗号分开。
+HTL$a"{8|&LAb0如果要进行多次修改,但修改的类型相同(比如都是从一个公共目录移动到其他目录),那么您可以使用星号通配字符。比如:ITPUB个人空间5oX\C3H)p r
  CONT_PATH=/oldLocation/*,/newLocation/*
O)@ IkOSLE M V0注意,运行 db2relocatedb 工具之前必须关闭数据库。

例 #1: 修改单分区数据库的名称
T6W[:H\#t\b'E0数据库名:TESTDB
/S/c4x-xK}R0数据库路径:/home/db2inst
:a+M5SE}p(X]1N0oY#Lu0实例名:db2inst

场景:希望将数据库名从 TESTDB 改为 NEWNAME。

配置文件"example1.cfg"
#W;\4m&~C8[ f } f\0DB_NAME=TESTDB,NEWNAME
R1x @ Z_0DB_PATH=/home/db2instITPUB个人空间_+EBeS'm@c]'@
INSTANCE=db2instITPUB个人空间N(Zf }A%U%};fjO
命令:

  db2relocatedb -f example1.cfg
\3A/@ c]"Me k0例 #2: 修改多分区数据库的名称ITPUB个人空间k~ U'^Mp
数据库名:PRODUCTSITPUB个人空间a \qWH f
数据库路径:/dbdirITPUB个人空间$FRJ6E"G,[*m
实例名:db2mpp1ITPUB个人空间x2t7{NB}`'D+\
分区:1, 2, 3

场景:希望将这个三分区数据库的名称从 PRODUCTS 改为 OLDPROD。

配置文件"example2-1.cfg"ITPUB个人空间*C[G9\JM*x
DB_NAME=PRODUCTS,OLDPRODITPUB个人空间4y2_(L(QK
DB_PATH=/db2dir
;W)?D `? n3ax0INSTANCE=db2mpp1
;r8D`Q0}YPv.n^0NODENUM=1

配置文件"example2-2.cfg"
VU uX$d#m BFP0DB_NAME=PRODUCTS,OLDPRODITPUB个人空间)P7c{B#t({:v&H&R;t$~
DB_PATH=/db2dir
3|-_^8u't+so6RB0INSTANCE=db2mpp1
Y/a;qUX+c0NODENUM=2ITPUB个人空间\5UJ2~Ll.H%C
配置文件"example2-3.cfg"ITPUB个人空间8pqM?a
DB_NAME=PRODUCTS,OLDPRODITPUB个人空间 g ixZ8`q
DB_PATH=/db2dir
"UAk0UkE\aF3O)E0INSTANCE=db2mpp1ITPUB个人空间)iUzZ `6K
NODENUM=3
$dQP`7q9@L4Q0命令:

  { If on different physical machines, go to node 1 (else "export DB2NODE=1") }
*@"I*rJ3cE(vc/TX0  db2relocatedb -f example2-1.cfg

  { If on different physical machines, go to node 2 (else "export DB2NODE=2") }
7e4BtR1IaF0  db2relocatedb -f example2-2.cfg

  { If on different physical machines, go to node 3 (else "export DB2NODE=3") }ITPUB个人空间+dT%?7oq9w7}J-p^
  db2relocatedb -f example2-3.cfg

如果您是一位有经验的多分区数据库 DBA,那么您可能已经想到了更好的办法,避免必须切换到每个节点并分别执行这些命令。比如可以将上述文件放在所有分区都能访问的地方,然后执行下面的命令:

  db2_all "db2relocatedb -f {common_location}/example2-\$DB2NODE.cfg"ITPUB个人空间Q1]1yL7QmjVL+d
例 #3: 改变和数据库有关的路径
So/u(pM#u0数据库名:SALESITPUB个人空间9e5J(VO dprxL7vg
数据库路径:/home/kschlambITPUB个人空间GD:[ZGf3jI
实例名:kschlamb

场景:您发现您已经在实例主目录中创建了数据库,而不是像期望的那样,在一个更大的、专门的文件系统中创建该数据库。新的数据库路径被称为 /salesdb。

如前所述,最初创建数据库时已经建立了下面这两个目录:

  /home/kschlamb/kschlamb/NODE0000/SQL00001ITPUB个人空间#S8\g&Lf3N
  /home/kschlamb/kschlamb/NODE0000/sqldbdir

首先,要将这两个目录手工移动到下面位置。请记住,数据库路径只是 DB2 使用的目录结构的一部分,因此,在确定目标位置时,必须遵循同样的规则。您可以使用选择的任何 OS 命令移动这些文件(如 cp/rm、 mv 和 tar)。

  /salesdb/kschlamb/NODE0000/SQL00001
3m"W#w0XM0  /salesdb/kschlamb/NODE0000/sqldbdir

然后创建配置文件并运行 db2relocatedb。

配置文件"example3.cfg"ITPUB个人空间W7m0o0\}
DB_NAME=SALES
W]2FTs,A0DB_PATH=/home/kschlamb,/salesdbITPUB个人空间"o {;A1t m[3z
INSTANCE=kschlamb
"a,ExF\ Yy,tu0命令:

  db2relocatedb -f example3.cfg
5wnA?/_0Oo0例 #4: 修改和表空间关联的容器
?3u*XT:Z;E0数据库名:FINANCEITPUB个人空间lU&Y+F'Z
数据库路径:/finance/database
n-f_Xt.p0实例名:fin

场景:您有三个大文件系统,分别是 /finance/fs1、/finance/fs2 和 /finance/fs3,并希望通过执行下面的 SQL 语句创建跨越这三个文件系统的表空间:

  CREATE TABLESPACE BIGTS MANAGED BY SYSTEM USINGITPUB个人空间2s _,C0R#jf6TY
    ('/financ/fs1/BIGTS', '/financ/fs2/BIGTS', '/financ/fs3/BIGTS')

但是您没有发现所有的容器名都拼写错了,容器没有使用已经创建的大文件系统,而是出现在根文件系统(通常比较小,如果空间不足可能造成问题)中。当然,一个月后,当发现空间不足时,您认识到了这一点,必须尽快改正过来。

一种办法是采用重定向恢复,但是您可能担心这样做时间太长。另外一种办法就是使用 db2relocatedb。

无论使用什么方法,首先都要将下属目录从原来的位置移动到新的地方(要记住,我们将表空间创建为 SMS,创建为 DMS 操作与此相同,只不过移动的不是目录,而是 DMS 文件)。

  /financ/fs1/BIGTS   =>   /financ e/fs1/BIGTS
*T+V!Y nLl!\0  /financ/fs2/BIGTS   =>   /financ e/fs2/BIGTS
(IL-O?/{0  /financ/fs3/BIGTS   =>   /financ e/fs3/BIGTS

下一步是创建配置文件并运行 db2relocatedb。

配置文件"example4.cfg"ITPUB个人空间6[ d ZL G$_7g{o
DB_NAME=FINANCE
NLSf_C h|0DB_PATH=/finance/databaseITPUB个人空间g+Yw$_0H+TCU
INSTANCE=finITPUB个人空间|)my.g3nQ7e
CONT_PATH=/financ/fs1/BIGTS,/finance/fs1/BIGTSITPUB个人空间xB$q)D3rr C C
CONT_PATH=/financ/fs2/BIGTS,/finance/fs2/BIGTSITPUB个人空间)BQ1UrW
CONT_PATH=/financ/fs3/BIGTS,/finance/fs3/BIGTS
*hT!t']X%r0#ITPUB个人空间+Y H.TNw oP]
# 我们也可以在单个命令中使用通配符表示所有修改,下面三个语句中的任何一个都可以代替上面三个语句:ITPUB个人空间4F_#W/})k-i
#
/j&R\?TX0#  CONT_PATH=/financ/fs*,/finance/fs*
?2Wp:f(k0#  CONT_PATH=/financ/*,/finance/*
'mq9Q8f&W i0#  CONT_PATH=/financ*,/finance*
9Gb$s]z X7n3ID0命令:

  db2relocatedb -f example4.cfgITPUB个人空间0Ga#tt#n
例 #5: 将数据库移动到新的机器(更改实例名、数据库路径和数据库名)ITPUB个人空间vWHY^
数据库名:TESTDBITPUB个人空间^'Y!Rqp u eck
数据库路径:/testinst_filesystem
S9{$S*kg0实例名:testinst

场景:您已经创建了一个测试数据库系统,现在希望将其移动到位于不同机器上的产品系统中。目标实例名为 prodinst,数据库名为 PRODDB,数据库路径为 /proddb。

如前所述,最初创建数据库时创建的目录包括:

  /testinst_filesystem/testinst/NODE0000/SQL00001
f eD:y U0  /testinst_filesystem/testinst/NODE0000/sqldbdir

首先要将这两个目录手工移动到产品服务器上的下列目录中。请记住,数据库路径只是 DB2 使用的目录结构的一部分,因此,在确定目标位置时,必须遵循同样的规则。只要能够复制所有的目录和文件,使用任何方法都可以。

  /proddb/prodinst/NODE0000/SQL00001
{JC ^ @'A\.r!L0  /proddb/prodinst/NODE0000/sqldbdir

提示:该例中假设在数据库目录之外没有表空间。如果存在这样的表空间,那么必须将这些容器也复制到新的系统中(如果改变其路径,也需要在配置文件中列出)。

根据文件复制方式的不同,这些文件有可能仍然属于原来的实例。使用"chown"将这些文件的所有者更改为新实例的所有者。

然后,创建配置文件并运行 db2relocatedb(必须在产品服务上的新建实例中执行)。

配置文件"example5.cfg"
p`)g8L9w R/S0DB_NAME=TESTDB,PRODDB
m"S4IXV&{)b0DB_PATH=/testinst_filesystem,/proddbITPUB个人空间n7`9t_X,OHa
INSTANCE=testinst,prodinstITPUB个人空间V:].Xo8Ll
命令:

  db2relocatedb -f example5.cfg
*?l6\sP,EO0例 #6: 复杂的示例ITPUB个人空间Z(NL5Q P
数据库名:TESTDB
2T4l#]? @%g c`-{4G0数据库路径:/db2/DatabasesITPUB个人空间-Pn xE6V
实例名:db2inst

要创建表空间,需要创建下列目录/文件:

  /db2/Databases/db2inst/NODE0000/SQL00001/*ITPUB个人空间4Z-X1E1MP!a~"U7Y
  /db2/Databases/db2inst/NODE0000/sqldbdir/*
H"Dn%sLuF%sV'`0  /db2/Databases/DMS1ITPUB个人空间%DA$t9AT D
  /db2/Databases/SMS1/*
"}S7a'T:eJ }0  /largedir/DMS2ITPUB个人空间'Q(lmThWU'Zl{
  /largedir/SMS2/*
5?N2S9W u9\ C?0  /dev/rDMS3

场景: 移动数据库,将数据库名和路径分别改为 NEWDB 和 /dbdirectory。此外,还要将 DMS2 和 SMS2 容器从 /largedir 移动到 /dbdirectory。 DMS1 和 SMS1 的相对位置在数据库路径中保持不变。

关闭数据库后,DBA 必须手工将上述文件从原来的位置移动到以下位置:

  /dbdirectory/db2inst/NODE0000/SQL00001/*
(USp9F!V%t0  /dbdirectory/db2inst/NODE0000/sqldbdir/*ITPUB个人空间s2\+T4B2D:Y%xz
  /dbdirectory/DMS1
VKS.u[6C0  /dbdirectory/SMS1/*ITPUB个人空间;Z*S[9|Sm7h3sD
  /dbdirectory/DMS2ITPUB个人空间/E;KJ2k&L B
  /dbdirectory/SMS2/*ITPUB个人空间d1@S1zWg
  /dev/rDMS3 {no change}

下一步是创建配置文件并运行 db2relocatedb。请注意,因为 db2relocatedb 假定将原来路径下的所有容器都移动到新的路径,所以 DMS1 和 SMS1 不需要任何 CONT_PATH 条目。因此,文件中只涉及 SMS2 和 DMS2。

配置文件"example6.cfg"ITPUB个人空间 I._y]L t:t
DB_NAME=TESTDB,NEWDB
1uu l4@.qf(CS$`V0DB_PATH=/db2/Databases,/dbdirectoryITPUB个人空间/WJqOc;\h4K
INSTANCE=db2inst
S9Yt%XE6xw0OR0CONT_PATH=/largedir/DMS2,/dbdirectory/DMS2
+lU1y}e0q6R/\Sm0CONT_PATH=/largedir/SMS2,/dbdirectory/SMS2
\%Q%B!B gIV0#ITPUB个人空间`+{%DdZu y#N4q5}e1c
#或者使用下面的命令代替以上两行:
\-o}q9~#|0#ITPUB个人空间1c~J5G%n
#  CONT_PATH=/largedir/*,/dbdirectory/*
*Ex#@9o igad)m0命令:

  db2relocatedb -f example6.cfg

 


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-11-24  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 12228
  • 日志数: 273
  • 图片数: 1
  • 文件数: 2
  • 建立时间: 2007-12-01
  • 更新时间: 2008-11-19

RSS订阅

Open Toolbar