db2relocatedb 工具.docx

上传人:b****6 文档编号:6555958 上传时间:2023-01-07 格式:DOCX 页数:13 大小:24.65KB
下载 相关 举报
db2relocatedb 工具.docx_第1页
第1页 / 共13页
db2relocatedb 工具.docx_第2页
第2页 / 共13页
db2relocatedb 工具.docx_第3页
第3页 / 共13页
db2relocatedb 工具.docx_第4页
第4页 / 共13页
db2relocatedb 工具.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

db2relocatedb 工具.docx

《db2relocatedb 工具.docx》由会员分享,可在线阅读,更多相关《db2relocatedb 工具.docx(13页珍藏版)》请在冰豆网上搜索。

db2relocatedb 工具.docx

db2relocatedb工具

db2relocatedb工具

使移动数据库和表空间容器更容易的一款工具

简介:

db2relocatedb工具允许DB2UDBforLinux、UNIX®和Windows®的DBA物理地移动整个数据库、一个或多个表空间容器的位置,而不必进行任何备份和恢复。

本文可以帮助您了解何时以及如何使用db2relocatedb,并通过一个实际的生活示例,让DBA自信能够像使用DB2工具栏中的其他工具那样熟练地使用该工具。

随DB2UDBV7和V8一起提供的db2relocatedb工具,可以成为了解其功能和用法的DBA手中的一件利器。

该工具可以帮助DBA物理地移动整个数据库、一个或多个表的空间容器的位置,而不必进行任何备份和恢复操作(这些操作可能需要花费很多时间和资源)。

它还允许重新命名数据库和转换数据库所属的实例。

虽然DB2手册中提供了db2relocatedb工具的说明,但人们通常是通过口头传播了解它的。

他们非常希望尝试一下这个工具,但因为该工具所做的是改变,比如修改内部数据库结构、文件等,人们使用它的时候感到非常不安。

本文将讨论该工具,说明什么时候使用它,以及如何使用它,并通过一些实际的生活示例,让DBA自信能够像使用DB2工具栏中的其他工具那样熟练使用它。

什么是db2relocatedb?

除了保存的用户数据以外,DB2数据库还有大量的内部元数据,这些数据描述了用户数据存放位置、用户数据属于谁,以及如何引用它们。

元数据总是被DB2隐藏在“幕后”,用户和DBA都不会直接接触它。

就最基本的层面而言,db2relocatedb是这样一种工具,即如果没有其他的办法,或者在数据库内完成这些操作造成的代价不可接受或者太繁琐(和使用db2relocatedb相比),那么可以使用它来改变这些元数据。

比方说,修改和数据库相关的名称和路径可以使用DB2的备份和恢复命令来完成。

先备份数据库,然后用新的名称和/或路径恢复。

备份操作可以在线完成,但恢复操作是离线的,而且其间数据库不能用,如果有可用性要求,那么这种情况是不可接受的。

另外一个示例是改变表空间容器的位置,也可以通过备份和恢复(更具体地说是重定向恢复)完成。

但是,如果表空间是DMS,那么可以首先使用ALTERTABLESPACESQL语句向新的位置添加容器,然后再从原来位置删除容器。

这种方法的副作用是操作必须按顺序进行,每一步操作之后都可能出现表空间重新调整。

可以用db2relocatedb工具执行相同的任务,而且,在多数情况下,与在DB2“内部”执行相比,db2relocatedb工具所需的时间(和工作量)更少。

但是这些只是其功能的一部分,下面列出了该工具能够于其中发挥重要作用的所有任务:

•修改数据库名。

•修改数据库创建的路径/驱动器。

•更改一个或多个表空间容器。

•改变和数据库有关的日志路径

•改变和数据库有关的实例

•将数据库复制/移动到同一台(也可以不同)机器上,并进行上述一项或多项修改。

现在必须明确一点,因为有时候人们常常会混淆(后面还将详细说明)。

当使用db2relocatedb改变数据库或者其容器的位置时,您必须负责移动或复制文件可以使用选择的任何方法)。

该工具本身不会物理地移动任何东西,只能改变DB2的内部元数据,以反映您所作的修改。

在哪里可以找到db2relocatedb工具?

db2relocatedb工具最初在DB2UDBV7Fixpak4中引入的。

一开始只在ReleaseNotes予以说明,后来又被添加到产品文档中。

V8的所有版本中也提供了db2relocatedb。

db2relocatedb是一种服务器端工具(也就是说只在数据库所在的系统上运行),因此,所有的服务器安装中都有该工具。

您也可以在下面的目录中找到,该目录随平台不同而不同:

UNIX:

实例目录/sqllib/bin/db2relocatedb

Windows:

安装DB2的驱动器\sqllib\bin\db2relocatedb.exe

基础知识

可以在文档中找到db2relocatedb工具的语法,但也可以通过命令行查看它。

在V7中,只需输入db2relocatedb,不用指定任何选项,就可以查看该语法,但在V8中,这样做将返回DBT1017N错误,指明语法不正确。

不过,运行db2?

dbt1017n可以显示这一错误消息的扩展版本,其中显示了该工具的完整语法:

db2relocatedb的语法

DBT1017NThesyntaxoftheDB2RELOCATEDBtoolisincorrect.

Explanation:

TheDB2RELOCATEDBtoolhasthefollowingsyntax:

db2relocatedb-f

:

Nameoffilecontainingconfigurationinformation.

Fileformatis:

DB_NAME=oldName,newName

DB_PATH=oldPath,newPath

INSTANCE=oldInst,newInst

NODENUM=nodeNumber

LOG_DIR=oldDirPath,newDirPath

CONT_PATH=oldContPath1,newContPath1

CONT_PATH=oldContPath2,newContPath2

...

Notes:

oDatabasename,databasepath,andinstancenameareall

requiredfields.Ifoneofthesefieldsisnotchangingthen

itisnotnecessarytolisttheoldandnewvalueforit,

justgivetheold/currentone.

oBlanklinesorlinesbeginningwithacommentcharacter(#)

willbeignored.

上述消息表明,运行该工具需要指定一个配置文件。

该文件由用户创建,告诉该工具需要在内部改变数据库的哪些内容(同样,要记住,实际移动需要移动的文件是由用户来移动的)。

下面是所有配置文件参数的详细说明:

DB_NAME:

必需参数,表示数据库名。

如果没有改变数据库名,那么只需指定当前的名称即可(也就是说不需要列出新的数据库名)。

但是,如果要改变数据库名,那么就必须指定当前名称和新名称,中间用逗号分开。

DB_PATH:

必需参数,表示数据库最初创建的路径或驱动器(Windows)。

如果不改变数据库路径,那么只需指定当前路径即可。

但是如果改变数据库路径,那么就必须指定当前路径和新路径,中间用逗号分开。

INSTANCE:

必需参数,表示DB2实例名。

如果不改变实例名,则只需指定当前实例名即可,否则需要指定当前实例名和新实例名,中间用逗号分开。

NODENUM:

可选参数,表示要操作的数据库分区号。

如果没有指定该参数,则默认为0。

关于该参数用法的详细说明,请参阅“Multi-PartitionedDatabases”一节。

LOG_DIR:

可选参数,表示数据库日志文件的位置。

人们通常用UPDATEDBCFGUSINGNEWLOGPATH命令更改日志文件目录,也可以选择使用该工具改变其他某些路径。

CONT_PATH:

可选参数,用来更改一个或多个表空间容器的位置。

可以多次指定该参数来表示需要完成的修改。

其中每一项都要包含原来的容器名和新的容器名,中间用逗号分开。

如果要进行多次修改,但修改的类型相同(比如都是从一个公共目录移动到其他目录),那么您可以使用星号通配字符。

比如:

  CONT_PATH=/oldLocation/*,/newLocation/*

提示:

如果用相对路径容器创建表空间(即没有给出绝对文件和目录名),那么会在数据库目录中自动创建DB2(详情请参见下一节)。

如果要改变数据库路径(使用DB_PATH),那么不需要在配置文件中列出所有这些容器。

db2relocatedb工具会假定所有容器都位于正在移动的数据库目录中。

事实上,该工具将假定位于原数据库目录下的所有容器都移动到了新的路径下,因此也不需要列出新路径。

下面的示例#6说明了这一点。

数据库目录

在创建数据库时,DB2将创建一个目录,保存默认表空间以及与数据库有关的各种控制文件(如SQLSPCS.1/2、SQLDBCON)。

该目录的位置取决于用户提供的信息(数据库路径)和环境信息(实例名和分区/节点号)。

注意,创建数据库时,如果没有提供数据库路径,那么可以使用数据库管理员配置参数DFTDBPATH的值。

默认情况下,在UNIX中,该参数值是实例所有者的主目录,而在Windows中,它是DB2的安装路径。

关于DB2如何确定数据库目录的位置,让我们看两个简单的示例:

例#1:

单分区数据库

在实例db2inst1中执行下面的语句:

 CREATEDATABASETESTDBON/db2/databasePath

DB2将在下面的目录中创建数据库:

/db2/databasePath/db2inst1/NODE0000/SQL00001

可以看出,DB2从创建数据库的语句提供的数据库路径(该例中为/db2/databasePath)开始。

然后,DB2扩展了实例(/db2inst1)的名称。

接下来,添加了一个指定数据库分区的目录(/NODE0000)。

在该例中,分区号是0,因为我们处理的是单分区数据库。

最后,DB2添加了一个以SQL#####形式出现的目录(/SQL00001),而且,相对于同一路径中创建的其他数据库,该目录是惟一的。

随着创建的数据库不断增加,分别将该目录命名为SQL00001、SQL00002、SQL00003,依此类推。

例#2:

多分区数据库

实例db2mpp有三个分区(0、10和20)。

执行下面的语句将创建一个三分区数据库:

  CREATEDATABASEMPPDBON/database

在该例中,DB2将为这三个数据库分区(路径仅有分区号不同)创建以下三个目录。

这些目录可以在同一机器上,也可以在不同的机器上,这取决于分区是逻辑分区还是物理分区。

/database/db2mpp/NODE0000/SQL00001

  /database/db2mpp/NODE0010/SQL00001

  /database/db2mpp/NODE0020/SQL00001

此外,DB2还会在与SQL#####目录相同的位置上创建一个sqldbdir目录。

对于上例而言,将会创建以下目录:

 

  /db2/databasePath/db2inst1/NODE0000/sqldbdir

  /database/db2mpp/NODE0000/sqldbdir

  /database/db2mpp/NODE0010/sqldbdir

  /database/db2mpp/NODE0020/sqldbdir

存储在sqldbdir中的信息通称为卷标数据库目录或者本地数据库目录。

指明“可以在目录SQL00001中找到数据库TESTDB”的正是这些信息,执行LISTDBDIRECTORYON命令返回的也是这些信息。

但重要的是要记住,为了能够找到数据库,该目录对于DB2(或者像db2relocatedb这样的任何工具)是绝对必需的。

在下面的例子中可以看到,无论何时使用db2relocatedb移动或复制数据库,都必须移动或复制该目录。

多分区数据库

如果需要修改多分区数据库(对V7使用DB2UDBEEE,或者对V8使用带数据分区特性的DB2UDBESE),有一些问题需要注意。

首先,每个分区都有自己的元数据子集。

因此运行该工具执行的多数操作都要应用于每个分区。

无论修改实例名、数据库名,还是修改数据库路径,都需要修改所有的分区。

如果不这么做,数据库就无法启动,或者在以后会出现意想不到的结果。

但是如果只想改变一个分区中特定表空间容器的位置,那么只需要对该分区运行db2relocatedb即可。

其次,准备运行该工具的每个分区都要有自己的配置文件,原因在于必须指定NODENUM参数,而该参数必须和所处理的数据库分区号相匹配。

第三,不能使用该工具改变和数据库分区有关的分区号,比方说,不能将数据库分区10改为数据库分区20。

最后,NODENUM参数“不能”说明该工具要处理的分区。

换句话说,如果将配置文件中NODENUM设为10,但该工具却在数据库分区0(在不同的物理机器上)上运行,那么它不会跑出去寻找分区10并在其上运行。

如前所述,即使不改变这些信息的值,也必须指定文件中的一些信息(比如多分区数据库中的NODENUM)。

必须提供这些信息,以便该工具能够找到需要的数据库和文件,它们的位置和实例名、数据库路径和数据库分区号等有关。

注意,运行db2relocatedb工具之前必须关闭数据库。

例#1:

修改单分区数据库的名称

数据库名:

TESTDB

数据库路径:

/home/db2inst

实例名:

db2inst

场景:

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

配置文件“example1.cfg”

DB_NAME=TESTDB,NEWNAME

DB_PATH=/home/db2inst

INSTANCE=db2inst

命令:

  db2relocatedb–fexample1.cfg

例#2:

修改多分区数据库的名称

数据库名:

PRODUCTS

数据库路径:

/dbdir

实例名:

db2mpp1

分区:

1,2,3

场景:

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

配置文件“example2-1.cfg”

DB_NAME=PRODUCTS,OLDPROD

DB_PATH=/db2dir

INSTANCE=db2mpp1

NODENUM=1

配置文件“example2-2.cfg”

DB_NAME=PRODUCTS,OLDPROD

DB_PATH=/db2dir

INSTANCE=db2mpp1

NODENUM=2

配置文件“example2-3.cfg”

DB_NAME=PRODUCTS,OLDPROD

DB_PATH=/db2dir

INSTANCE=db2mpp1

NODENUM=3

命令:

  {Ifondifferentphysicalmachines,gotonode1(else"exportDB2NODE=1")}

  db2relocatedb–fexample2-1.cfg

  {Ifondifferentphysicalmachines,gotonode2(else"exportDB2NODE=2")}

  db2relocatedb–fexample2-2.cfg

  {Ifondifferentphysicalmachines,gotonode3(else"exportDB2NODE=3")}

  db2relocatedb–fexample2-3.cfg

如果您是一位有经验的多分区数据库DBA,那么您可能已经想到了更好的办法,避免必须切换到每个节点并分别执行这些命令。

比如可以将上述文件放在所有分区都能访问的地方,然后执行下面的命令:

db2_all"db2relocatedb–f{common_location}/example2-\$DB2NODE.cfg"

例#3:

改变和数据库有关的路径

数据库名:

SALES

数据库路径:

/home/kschlamb

实例名:

kschlamb

场景:

您发现您已经在实例主目录中创建了数据库,而不是像期望的那样,在一个更大的、专门的文件系统中创建该数据库。

新的数据库路径被称为/salesdb。

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

  /home/kschlamb/kschlamb/NODE0000/SQL00001

  /home/kschlamb/kschlamb/NODE0000/sqldbdir

首先,要将这两个目录手工移动到下面位置。

请记住,数据库路径只是DB2使用的目录结构的一部分,因此,在确定目标位置时,必须遵循同样的规则。

您可以使用选择的任何OS命令移动这些文件(如cp/rm、mv和tar)。

  /salesdb/kschlamb/NODE0000/SQL00001

  /salesdb/kschlamb/NODE0000/sqldbdir

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

配置文件“example3.cfg”

DB_NAME=SALES

DB_PATH=/home/kschlamb,/salesdb

INSTANCE=kschlamb

命令:

  db2relocatedb–fexample3.cfg

例#4:

修改和表空间关联的容器

数据库名:

FINANCE

数据库路径:

/finance/database

实例名:

fin

场景:

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

CREATETABLESPACEBIGTSMANAGEDBYSYSTEMUSING('/financ/fs1/BIGTS','/financ/fs2/BIGTS','/financ/fs3/BIGTS')

但是您没有发现所有的容器名都拼写错了,容器没有使用已经创建的大文件系统,而是出现在根文件系统(通常比较小,如果空间不足可能造成问题)中。

当然,一个月后,当发现空间不足时,您认识到了这一点,必须尽快改正过来。

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

另外一种办法就是使用db2relocatedb。

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

  /financ/fs1/BIGTS   =>   /finance/fs1/BIGTS

  /financ/fs2/BIGTS   =>   /finance/fs2/BIGTS

  /financ/fs3/BIGTS   =>   /finance/fs3/BIGTS

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

配置文件“example4.cfg”

DB_NAME=FINANCE

DB_PATH=/finance/database

INSTANCE=fin

CONT_PATH=/financ/fs1/BIGTS,/finance/fs1/BIGTS

CONT_PATH=/financ/fs2/BIGTS,/finance/fs2/BIGTS

CONT_PATH=/financ/fs3/BIGTS,/finance/fs3/BIGTS

#

#我们也可以在单个命令中使用通配符表示所有修改,下面三个语句中的任何一个都可以代替上面三个语句:

#

#CONT_PATH=/financ/fs*,/finance/fs*

#CONT_PATH=/financ/*,/finance/*

#CONT_PATH=/financ*,/finance*

命令:

  db2relocatedb–fexample4.cfg

例#5:

将数据库移动到新的机器(更改实例名、数据库路径和数据库名)

数据库名:

TESTDB

数据库路径:

/testinst_filesystem

实例名:

testinst

场景:

您已经创建了一个测试数据库系统,现在希望将其移动到位于不同机器上的产品系统中。

目标实例名为prodinst,数据库名为PRODDB,数据库路径为/proddb。

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

  /testinst_filesystem/testinst/NODE0000/SQL00001

  /testinst_filesystem/testinst/NODE0000/sqldbdir

首先要将这两个目录手工移动到产品服务器上的下列目录中。

请记住,数据库路径只是DB2使用的目录结构的一部分,因此,在确定目标位置时,必须遵循同样的规则。

只要能够复制所有的目录和文件,使用任何方法都可以。

  /proddb/prodinst/NODE0000/SQL00001

  /proddb/prodinst/NODE0000/sqldbdir

提示:

该例中假设在数据库目录之外没有表空间。

如果存在这样的表空间,那么必须将这些容器也复制到新的系统中(如果改变其路径,也需要在配置文件中列出)。

根据文件复制方式的不同,这些文件有可能仍然属于原来的实例。

使用“chown”将这些文件的所有者更改为新实例的所有者。

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

配置文件“example5.cfg”

DB_NAME=TESTDB,PRODDB

DB_PATH=/testinst_filesystem,/proddb

INSTANCE=testinst,prodinst

命令:

  db2relocatedb–fexample5.cfg

例#6:

复杂的示例

数据库名:

TESTDB

数据库路径:

/db2/Databases

实例名:

db2inst

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

  /db2/Databases/db2inst/NODE0000/SQL00001/*

  /db2/Databases/db2inst/NODE0000/sqldbdir/*

  /db2/Databases/DMS1

  /db2/Databases/SMS1/*

  /largedir/DMS2

  /largedir/SMS2/*

  /dev/rDMS3

场景:

移动数据库,将数据库名和路径分别改为NEWDB和/dbdirectory。

此外,还要将DMS2和SMS2容器从/largedir移动到/dbdirectory。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1