logo logo
关于我们

技术分享

技术分享 关于备份、还原、迁移整理

关于备份、还原、迁移整理

2021-07-06

1     备份说明
1.1  离线全备份(冷备份)1.1.1  介绍

也叫冷备份。又叫脱机备份。就是停掉数据库服务。

首先确保没有用户使用DB2;停掉数据库并重新启动,以便断掉所有连接,执行备份命令:(使用TSM作为备份的介质),检查备份成功,如果是多节点需要首先对主节点(catalog表空间在的节点)执行备份命令,再对另外的节点也做这个操作。

1.1.2  操作步骤1.1.2.1 首先确保没有用户使用DB2

$db2 list applications for db sample

1.1.2.2 停掉数据库并重新启动,以便断掉所有连接

db2stop force

db2start

1.1.2.3 执行备份命令(可以使用TSM作为备份的介质)

  db2 backup db sample (use tsm)

  备份成功,将会返回一个时间戳。

1.1.2.4 检查备份成功

  Db2 list history backup all for sample ,可以看到多了这个备份的纪录。

  Db2adutl query命令也可以看到返回值。

1.2  在线备份(热备份)1.2.1  介绍

在线备份。什么在线备份,就是数据库在运行的时候一种物理备份。(如果是逻辑的不能叫在线备份。)数据库要能热备份。都需要开启数据库归档模式。并设置归档路径。

首先打开一下支持在线备份的数据库配置参数,执行在线备份,察看备份纪录,同样,对每个节点都做这个操作。

1.2.2  操作步骤1.2.2.1 打开支持在线备份的数据库配置参数

db2 update db cfg for sample using userexit on

--启用用户出口

db2 update db cfg for sample using logretain on

--启用归档日志

db2 update db cfg for sample using trackmod on

--启用增量备份功能

 

(需要各个Node都分别做设置)

1.2.2.2 离线全备份

  开启这些参数后,数据库处于backup pending状态,要求做数据库的离线全备份。做一下离线全备份,命令如下:

db2 backup db sample (use tsm)

1.2.2.3 在线备份命令

  db2 backup db sample online (use tsm)

  备份成功,返回一个时间戳。

1.2.2.4 查看备份纪录

Db2 list history backup all for sample

1.3  在线增量备份(热备份)1.3.1  介绍

在线意味者备份的时候,允许其他的连接,而不用停掉数据库,增量意味着,不需要每次备份一个超大的数据库;同时意味着你可以将数据库恢复到崩溃前的状态,而不是你最后一次备份时的状态,最大可能的减少数据损失。

说明:

backup incremental是自上次完整备份以来的增量备份

incremental delta是自上次成功备份(可以是完整或者增量)以来的增量备份

1.3.2  操作步骤1.3.2.1 打开支持在线备份的数据库配置参数

db2 update db cfg for sample using userexit on

--启用用户出口

db2 update db cfg for sample using logretain on

--启用归档日志

db2 update db cfg for sample using trackmod on

--启用增量备份功能

(需要各个Node都分别做设置)

通常应该再设置mirrorlogpath以备份db2日志

db2 update db cfg using mirrologpath  路径

db2 update db cfg using NEWLOGPATH 路径

db2 update db cfg using OVERFLOWLOGPATH 路径

 

1.3.2.2 离线全备份

  开启这些参数后,数据库处于backup pending状态,要求做数据库的离线全备份。做一下离线全备份,命令如下:

db2 backup db sample (use tsm)

1.3.2.3 在线增量备份命令

  backup db sample online incremental to 备份路径(增量备份)

   backup db sample online incremental delta to 备份路径(delta备份)

  备份成功,返回一个时间戳。

1.3.2.4 察看备份纪录

Db2 list history backup all for sample

1.4  迁移(逻辑备份)
1.4.1  介绍

逻辑备份是使用软件技术从数据库中提取数据并将结果写入一个输出文件,逻辑备份因为灵活性受到开发人员的青睐。一般一个完整的备份是一个点另一个点(终止点)的连续发生。逻辑备份是不可能记录连续发生的事情的过程的。

逻辑备份优点与缺点:

优点:方便,灵活,不受操作系统,数据库版本等限制。适合处理小数据量,特别适合开发人员迁移数据库。

缺点:有数据库丢失。不能实时。速度慢。

注意:由于某些表数据违反了唯一约束。外键约束可能会有错误出现。不过出错没有关系。可以把出错的表单独处理。

如果要使用该方式还原数据库,则需要定时执行下面的步骤做为实时数据的增量(全数据)备份。否则存在数据丢失情况。

1.4.2  常用方法

Db2 的数据迁移,最常用的就是导入导出功能

DEL:界定的ASCII文件,行分隔符和列分隔符将数据分开。

ASC:定长的ASCII文件,行按照行分割符分开,列定长。

PC/IXF:只能用来在db2之间导数据,根据类型数字值被打包成十进制或者二进制,字符被保存为ASCII,只保存变量已经使用了的长度,文件中包括表的定义和表的数据。

WSF:工作表方式导入导出,这种格式的文件类型用的比较少。

Db2中对不同的数据导入导出方式,支持不同的文件类型,这里个人觉得很有必要注意的。

文件类型                Import             export              load

-------------------------------------------------------

定界                      支持                      支持                      支持

非定界             支持                      不支持             支持

Ixf                   支持                      支持                      支持

Wsf工作表        支持                      支持                      不支持

 

关于3种导入导出操作进行简单的介绍:

export:导出数据,支持IXFDELWSF

import:导入数据,可以向表中导入数据,支持上面提到的4种文件类型。   

load:导入数据,功能和import基本相同。支持以上说的几种文件类型。

1.4.2.1关于Export

一般命令:export to filename of filetype select x from xx where ;

需要注意的是:

关于不同字符集的导出

MODIFIED BY CODEPAGE=

Exprot to filename.del for del MODIFIED BY   CODEPAGE=1386 select … from …where …;

数据从数据库倒出来的时候就会做一个数据库代码页的转换

2.时间字段格式化的

MODIFIED BY  TIMESTAMPFORMAT="yyyy-mm-dd hh:mm:ss tt"

:Exprot to filename.del for del MODIFIED BY  TIMESTAMPFORMAT="yyyy-mm-dd hh:mm:ss tt" select … from …where …;

 

1.4.2.2关于Import

1.Import模式的介绍

CREATE/INSERT/INSERT_UPDATE/REPLACE/REPLACE_CREATE

CREATE :首先创建目标表和它的索引,然后将数据导入到新表中。该选项惟一支持的文件格式是 PC/IXF。还可以指定新表所在表空间的名称

INSERT :将导入的数据插入表中。目标表必须已经存在。

INSERT_UPDATE :将数据插入表中,或者更新表中具有匹配主键的行。目标表必须已经存在,并且定义了一个主键。

REPLACE :删除所有已有的数据,并将导入的数据插入到一个已有的目标表中。

REPLACE_CREATE :如果目标表已经存在,则导入实用程序删除已有的数据,并插入新的数据,就像 REPLACE 选项那样。如果目标表还没有定义,那么首先创建这个表以及它的相关索引,然后再导入数据。正如您可能想像的那样,输入文件必须是 PC/IXF 格式的文件,因为那种格式包含对导出表的结构化描述。如果目标表是被一个外键引用的一个父表,那么就不能使用 REPLACE_CREATE

1.    批量提交

COMMITCOUNT,保证insert的数据在COMMITCOUNT以后进行一次commit,这对于大数据量的导入文件来说是一个不错的方法,

例:Import from filename of del COMMITCOUNT 50000 insert into tabname;

2.    批量插入

MODIFIED BY COMPOUND把文件中的 COMPOUND 行记录作为一组一起导入,这个操作可以和上边的批量提交一起使用,比较理想。

例:Import from filename of del MODIFIED BY COMPOUND =50 insert into tabname;

3.    导入记录限制

ROWCOUNT:只导入rowcount 条数据,有时候,业务逻辑需要只导入部分数据,那么ROWCOUNT是一个不错的选择,只是在我的测试中ROWCOUNT一直没有起过作用,呵呵,谁熟悉这里,帮我完善下。

例:Import from filename of del ROWCOUNT 10000 insert into tabname;

4.    导入起点

RESTARTCOUNT:从导入文件的第RESTARTCOUNT条记录开始导入

例:Import from filename of del RESTARTCOUNT 55 ROWCOUNT 10000 insert into tabname;--55条开始,导入10000条数据

5.    有警告数据的条数限制

WARNINGCOUNT:当导入的数据中,有警告或错误(例如类型不匹配,列不对应等造成的)并且条数超过WARNINGCOUNT是就会停止import

例:Import from filename of del WARNINGCOUNT 10 insert into tabname;

6.    禁止发出行警告

MODIFIED BY NOROWWARNINGS

例:Import from filename of del MODIFIED BY NOROWWARNINGS WARNINGCOUNT 10 insert into tabname;

7.    LOB 文件

LOBS FROM :指出LOB的路径

例:Import from filename of del LOBS FROM ‘/home’ MODIFIED BY NOROWWARNINGS WARNINGCOUNT 10 insert into tabname;

8.    对于自增序列(GENERATED ALWAYS

建议不要对自增序列的表进行import操作,因为import对于自增序列,只有MODIFIED BY  IDENTITYIGNOREMODIFIED BY IDENTITYMISSING2中操作,这2中操作都会改变自增序列的原值,这样如果导出表和表之间有基于自增序列的关联关系的话,就失去了数据本身的意义,所以建议尽量少用基于import的自增表的操作,那该怎么做?可以用load老代替import,我们下来在load的操作中会讲到!

1.4.2.3 关于Load

1. 字符串间隔,列间隔,小数点表示

CHARDEL/COLDEL/DECPT

例:LOAD CLIENT FROM 'F:s1.del' OF DEL MODIFIED BY CHARDEL(COLDEL=   DECPT? INSERT INTO "DB2ADMIN"."ZXTABLES"

2.数据库记录中存在换行符,导致数据无法装入的情况

MODIFIED BY DELPRIORITYCHAR

Db2默认load优先级策略为,record delimiter, character delimiter, column delimiter,这样record delimiter得优先级最高,所以原始文件如果有换行的话load就认为是新的record,如果用户在某些情况下行里面包含了换行符(比如论坛里面的一条帖子,不可能把换行符删掉的),就必须用delprioritychar改变默认的优先级别,确保""之间的数据不管有没有换行符都被认为是同一条记录

例:LOAD CLIENT  FROM 'F:s1.del' OF DEL MODIFIED BY DELPRIORITYCHAR  INSERT INTO DB2ADMIN.ZXTABLES

3.load后表空间暂挂的处理

Copy YES/ NONRECOVERABLE

对于DMS表空间,load默认为copy NO 模式,此模式下,load完成后,表空间会处于暂挂状态,这时候只能查表中的数据,需要对表空间进行一次备份,才可以对表进行updateinsert等操作,那么我们可以使用如上2个命令,对于Copy YESload完成以后会自动进行一次备份操作;NONRECOVERABLE 指出load不可恢复,此命令符不会产生表空间暂挂,也不会自动进行表空间备份,但是他有一个缺点就是,不能恢复,当数据库进行回滚的时候,不能还原,危险等级还是比较高一点,不过个人觉得也NONRECOVERABLE比较实用。

 

例:LOAD CLIENT FROM 'F:s1.del' OF DEL INSERT INTO DB2ADMIN.ZXTABLES NONRECOVERABLE

LOAD CLIENT FROM 'F:s1.del' OF DEL INSERT INTO DB2ADMIN.ZXTABLES COPY YES

4. load IXF类型文件到多分区数据库

partitioned db configmode load_only_verify_part part_file_location

当数据在2个不同数量节点的数据库之间移动,如果还想使用load来进行IXF的数据装载就比较棘手了,当时查遍IBM的官方文档均无所获,正郁郁不安时,狼出现了,给支了一招,现分享给大家。

首先,把ixf文件复制和分区数量相同的文件,并后缀.000(分区号)

比如,2个分区,那么我需要把原来的a.ixf,拷贝2个,并命名为a.ixf.000以及a.ixf.001

然后,load from staff.ixf of ixf replace into t1 partitioned db configmode load_only_verify_part part_file_location xxxxpart_file_locationa.ixf.000所在的目录),当然如果在unix下的话,可以通过ln –s 来做一个连接也行。

5. 对于自增序列(GENERATED ALWAYS

MODIFIED BY IDENTITYOVERRIDE:此参数可以理解为,采用文件load文件中的自增值做为表自增序列的值,这样就能保证对于自增序列有业务意义,或者关联逻辑(主外键关联)的情况下保证数据的一致,个人对此命令屡试不爽

例:  LOAD CLIENT FROM 'F:s1.del' OF DEL MODIFIED BY IDENTITYOVERRIDE INSERT INTO DB2ADMIN.ztables;

6. 对于自增序列(GENERATED by default

GENERATED by default可以直接通过一般的导入方式加载数据,不过有时候会有一点点小问题,自增序列没有进行分配,也就是说,原来表有50条记录,自增序列的下一次分配值为50,当你已经导入了1000条记录进去了,然后发现自增序列的下一次分配值还是为50,这种事不经常发生,但是偶尔会发生一次,比较郁闷的是,当表继续插入数据的时候,下一次分配就会发生冲突,尤其是如果自增建为主键的时候,会违反唯一约束。

解决办法:首先找到这个序列分配的最大值,select max(id) from tablea;

然后用下边这个命令,alter table tablea alter column restart with max(id)+1

7.ROWCOUNT/WARNINGCOUNT
 
这个同IMPORT

8.terminaterestart

如果load的过程中出了点故障,比如连接被force掉了等,这时连接查询表数据会报错SQL0668N,原因码3,这时可以通过带有terminateload命令来进行处理!

LOAD CLIENT FROM 'F:s1.del' OF DEL terminate INTO DB2ADMIN.ztables;

9. set integrity 命令

如果表上有约束,那么给表load数据以后,一般连接表的时候都会报错,SQL0668N,原因码1,这说明该表处于“设置完整性暂挂无访问”状态,那么需要如下命令来操作。

Set integrity for schema.tablename immediate checked;

10.提高导入导出速度的数据库参数

CONFIGURATION:应用程序堆大小,该参数指示可由Backuprestoreload及装入恢复应用程序同事使用的最大内存量,看帖子上有介绍,这个值可以设置为10000*cpu数量。

DB2 UPDATE DATABASE CONFIGURATION USING UTIL_HEAP_SZ 113486

1.4.3  操作步骤1.4.3.1 备份文件1.4.3.1.1     创建备份文件存放路径

Mkdir –p /db2home/idsinst1/db2backup

1.4.3.1.2     执行备份命令

备份数据库配置信息

db2look -d LDAPDB -f -fd  -o LDAPDB config.out

备份数据库存储信息

db2look -d LDAPDB -l  -o LDAPDB storage.out                       

备份DDL信息

db2look -d LDAPDB -e -a -x -i idsinst1 -w lsidsinst1 -o LDAPDB Tables.sql

导出表数据

db2move LDAPDB export -u idsinst1 -p lsidsinst1

1.4.3.1.3     压缩备份文件

tar -cvf 2011021 LDAPDB.tar /db2home/idsinst1/db2backup

 

2      恢复说明

按照表空间的备份和恢复类似,加子句TABLESPACE tablespace-name 即可。表空间级别的备份/恢复操作要求数据库处于归档日志和启用增量备份模式下。

2.1   备份恢复2.1.1  常规恢复

要求恢复环境目录大小大于等于备份份环境目录大小。

2.1.1.1 查看备份文件的时间点,并验证是否可用

db2ckbkp -h  备份文件

2.1.1.2 db2告诉你进行恢复的命令序列

 db2ckrst -d SAMPLE -r database -t 20050529210521

2.1.1.3 执行上个命令给出的命令序列

将会将数据库还原到备份的时刻,之后应该执行日志前滚(此时数据库处于前滚暂挂状态,将无法使用)

 rollforward db SAMPLE to end of logs and complete

当然如果你认为不需要前滚(这样将丢失最后一次备份之后的更改),也可以rollforward db testdb stop

2.1.2   按照表空间的备份和恢复2.1.2.1 创建实例

DB2数据库实例用户仍在主机上,不需要重新创建,直接利用即可。需要重新创建数据库实例。需要将.profile文件备份

2.1.2.1.1    创建实例

分别在主机上创建如下实例:

/opt/IBM/db2/V9.5/instance/db2icrt -a SERVER -u appfenc appinst

2.1.2.1.2    /etc/services

确认DB2 实例services中端口号。

2.1.2.1.3    dbm中的SVCENAME名更新

#su – appinst

$db2 get dbm cfg | grep SVCENAME

看一下,然后运行下列命令

$db2 update dbm cfg using SVCENAME DB2_appinst

2.1.2.1.4    设置DB2通信方式为TCPIP

$db2set DB2COMM=tcpip

2.1.2.1.5    刷新数据库

$db2stop

$db2start

2.1.2.2 还原数据库2.1.2.2.1    收集数据库全备文件

确认在备份路径下存在类似如下备份文件,大小正常(查看文件大小命令du –h –s 文件名),

EFINANCE.0.appinst.NODE0000.CATN0000.2011XXXXXXXXXX.001

2.1.2.2.2    建立相应路径 并赋予相应权限

XX系统 表空间路径/data/db2/XXXXXX

数据库路径/ef/实例名

2.1.2.2.3    执行restore命令

db2 restore db XXXXXXX  incremental from /db2bakHa/backup201101/eFinance taken at 2011XXXXXXXXXX on /ef/实例名 into EFINANCE logtarget /ef/实例名 redirect generate script  restore2011XXXXXXXXXX.clp

 

2.1.2.2.4    修改restore文件.clp文件中表空间路径

 核实还原脚本restore2011XXXXXXXXXX.clp中表空间路径是否与操作前一致

2.1.2.2.5    执行命令 db2 -tvf 

db2 -tvf  restore2011XXXXXXXXXX.clp

2.1.2.2.6    移动日志文件

logtarget  /ef/实例名下会出现日志文件S0001034.LOGS0001035.LOG等,将前滚时间点需要的日志文件拷贝到该路径下
  
将需要的日志文件S0001034.LOG。。。S0001042.LOG拷贝到路径/ef/实例名/log..

2.1.2.2.7    执行rollforward命令db2 rollforward database 数据库名 to end of logs  and complete overflow log path '(/ef/实例名)'2.1.2.2.8    连接数据库测试

db2 list db directory

db2 connect to 数据库名

2.2   迁移恢复2.2.1.1 安装DB2

具体见安装步骤

2.2.1.2 安装DB2补丁

如果需要则按如下步骤执行:

解压文件,执行installFixPack即可
执行完毕,查看DB2版本db2level

2.2.1.3 创建实例2.2.1.3.1    设置实例根路径

mkdir -p /home/idsinst1

2.2.1.3.2    添加实例用户

useradd -u 505 -g db2iadm1  -s /bin/bash -m -d /home/idsinst1 idsinst1

2.2.1.3.3    修改密码

passwd idsinst1

2.2.1.3.4    创建实例

/opt/ibm/db2/V9.5/instance/db2icrt -a SERVER -u db2fenc1 idsinst1

创建完成后如果不能执行db2命令,按照提示执行

Add the following line to the .profile file or the .login file:

 . /home/idsinst1/sqllib/db2profile   to the .profile file, or

 source /home/idsinst1/sqllib/db2cshrc to the .login file

拷贝已有实例登录配置文件进行修改

chown  -R idsinst1:db2iadm1 .bash_history

chown  -R idsinst1:db2iadm1 .bash_logout

chown  -R idsinst1:db2iadm1 .bash_profile

chown  -R idsinst1:db2iadm1 .bashrc

chown  -R idsinst1:db2iadm1 .emacs

chown  -R idsinst1:db2iadm1 .zshrc

2.2.1.3.5    更新数据库配置

db2 update dbm cfg using SVCENAME DB2_idsinst1

db2set DB2COMM=tcpip

2.2.1.3.6    重启数据库

Db2 terminate

Db2start

2.2.1.4 获取生产数据备份文件2.2.1.4.1    通过FTPBIN)方式下载到目标Linux

注意尽量采用机器之间FTP方式,否则可能出现无操作权限的问题

               ftp 原机器(AIXXXX.XXX.XXX.XXX

               输入用户名、密码

               LCD到本地路径

               CDtar文件路径

               Bin进入binary传输模式

               Get  *******.tar即可

2.2.1.5 执行还原操作

实例用户登陆LIUNIX

2.2.1.5.1    解压数据库备份文件

tar -xvf 20110217 LDAPDB.tar

2.2.1.5.2    创建数据库

db2 CREATE DB LDAPDB using codeset UTF-8 territory us PAGESIZE 8192;

2.2.1.5.3    还原数据库配置信息

db2 -tf  LDAPDBconfig.out

2.2.1.5.4    还原数据存储信息

db2 -tf LDAPDBstorage.out

2.2.1.5.5    还原数据库DDL(表、索引等)

db2 -tf LDAPDBTables.sql

2.2.1.5.6    还原数据

db2move LDAPDB import -io replace -u db2inst1 -p db2admin

 

2.2.1.6 验证

执行db2 connect to LDAPDB

Select * from table(实际表)

 

 

3      注意事项

备份还原执行一些注意事项。

3.1  多节点数据库问题

一定要对每个节点进行上述操作

3.2  DB2迁移问题

由于某些表数据违反了唯一约束。外键约束可能会有错误出现。不过出错没有关系。可以把出错的表单独处理。

3.3  关于将DB2备份文件备份到磁带问题

需要借助备份工具,例如Legato NetWorker软件

 


云祺备份软件,云祺容灾备份系统,虚拟机备份,数据库备份,文件备份,实时备份,勒索软件,美国,图书馆
  • 标签:
  • 云计算

您可能感兴趣的新闻 换一批

现在下载,可享30天免费试用

立即下载

jia7jia_7
请添加好友
为您提供支持

请拨打电话
为您提供支持

400-9955-698