DB2数据库备份还原
恢复及备份NC DB2数据库步
一、 安装DB2数据库
解压db2v9.5ins.rar安装,在写此文档时客户一般用的是9.5;
注意不要将db2安装到系统盘;
二、 Windows版本
1、数据库备份
(1) 导出数据命令
通过执行脚本创建或调至备份数据目录下D:\tmp>,然后依次执行以下脚本,完成数据备份:
① 导出表结构
D:\tmp>db2look -d NCDB -u db2inst1 -e -o createtb.sql -i db2inst1 -w db2inst1
------------------------------------------------
说明:-- 导出表结构,注意:以上各参数意义对应如下,
db2look -d [数据库名] -u [用户] -e -o credb.sql -i [--] -w [--]
------------------------------------------------
问题列表:要是出现下面错误信息,就需要到D:\IBM\bnd\db2lkfun.bnd 通过命令绑定一下 db2 "bind db2lkfun.bnd blocking all grant public"
D:\usr\local\db\db2\setup\BIN>db2look -d bank_hr -e -o c:/db2.sql -i db2admin -w db2admin
-- USER 是: LENGYU
-- 正在创建表的 DDL
-- 输出被发送到文件: c:/db2.sql
-- 正在自动绑定程序包 ...
--绑定期间出错
Error Message =
SQL0001N 绑定或预编译未成功完成。
SQLCA
Size = 136
SQLCODE = -1
Tokens = D:\usr\local\ db2\db2\setup\BND\DB2LKFUN.BND
RDS fn = sqlajbnd
RC = 0x0000 = 0
Reason = 0x0000 = 0
Reason2 = 0x0000 = 0
Warning flags =
② 导出表数据
D:\tmp>db2move NCDB export -tc db2inst1 -u db2inst1 -p db2inst1
------------------------------------------------
说明:-- 导入表数据,注意:以上各参数意义对应如下,
db2move [数据库名] export -tc [--] -u [用户] -p [口令]
------------------------------------------------
------------------------------------------------
备份总体说明:-- 至此导出完成,检查报错;在当前目录下产生以下文件:
name.sql:建表语句
db2move.lst:数据文件
------------------------------------------------
***************************************************************************
(2) 数据文件说明命令
1、查看导出数据的数据集,主要包括以下几类文件
2、数据的导入
在导出的数据集里找到数据库定义语句,即.sql语句
上图中的db2move.lst文件是要导入的数据库对象的名称及对象所属的用户(模式),基本内容如下图:
注:模式既可理解为用户
注:如果从Linux系统导出后导入windows中,需将“.sql”和“.lst”文件中的逗号删除。
2、数据库导入
(1) 创建一个标准数据库
前提:创建数据库前,将原有的数据库删除,执行如下命令:
db2 drop db ncdb;
1、 首先执行此条语句:
db2set DB2_CREATE_DB_ON_PATH=YES;
说明:此条语句不执行,则系统默认将数据放于硬盘根目录,如下图:
执行完此条语句后,重新启动计算机。
2、 执行语句:
CREATE DATABASE NCDB ON 'D:\5Database\DB2Data\ncdb\' USING CODESET GBK TERRITORY CN COLLATE USING SYSTEM CATALOG TABLESPACE MANAGED BY DATABASE USING (FILE 'D:\5Database\DB2Data\ncdb\Catalogdata1' 128000) USER TABLESPACE MANAGED BY DATABASE USING (FILE 'D:\5Database\DB2Data\ncdb\Userdata1' 128000) TEMPORARY TABLESPACE MANAGED BY DATABASE USING (FILE 'D:\5Database\DB2Data\ncdb\Tempspace1' 128000);
(2) 创建表空间
执行如下SQL:
connect to NCDB user db2admin using db2admin;
CREATE Bufferpool NCUSED4 SIZE 25600 PAGESIZE 4K;
CREATE Bufferpool NCUSED16 SIZE 6400 PAGESIZE 16K;
CREATE BUFFERPOOL NCTMPUSED16 SIZE 6400 PAGESIZE 16K;
CREATE REGULAR TABLESPACE NNC_DATA01 PAGESIZE 16K MANAGED BY DATABASE USING (FILE 'D:\5Database\DB2Data\ncdb\NNC_DATA01' 65536) EXTENTSIZE 8 OVERHEAD 24.1 PREFETCHSIZE 8 TRANSFERRATE 0.9 BUFFERPOOL NCUSED16;
CREATE REGULAR TABLESPACE NNC_INDEX01 PAGESIZE 4K MANAGED BY DATABASE USING (FILE 'D:\5Database\DB2Data\ncdb\NNC_INDEX01' 131072) EXTENTSIZE 32 OVERHEAD 24.1 PREFETCHSIZE 32 TRANSFERRATE 0.9 BUFFERPOOL NCUSED4;
CREATE REGULAR TABLESPACE NNC_DATA02 PAGESIZE 16K MANAGED BY DATABASE USING (FILE 'D:\5Database\DB2Data\ncdb\NNC_DATA02' 65536) EXTENTSIZE 8 OVERHEAD 24.1 PREFETCHSIZE 8 TRANSFERRATE 0.9 BUFFERPOOL NCUSED16;
CREATE REGULAR TABLESPACE NNC_INDEX02 PAGESIZE 4K MANAGED BY DATABASE USING (FILE 'D:\5Database\DB2Data\ncdb\NNC_INDEX02' 131072) EXTENTSIZE 32 OVERHEAD 24.1 PREFETCHSIZE 32 TRANSFERRATE 0.9 BUFFERPOOL NCUSED4;
CREATE REGULAR TABLESPACE NNC_DATA03 PAGESIZE 16K MANAGED BY DATABASE USING (FILE 'D:\5Database\DB2Data\ncdb\NNC_DATA03' 65536) EXTENTSIZE 8 OVERHEAD 24.1 PREFETCHSIZE 8 TRANSFERRATE 0.9 BUFFERPOOL NCUSED16;
CREATE REGULAR TABLESPACE NNC_INDEX03 PAGESIZE 4K MANAGED BY DATABASE USING (FILE 'D:\5Database\DB2Data\ncdb\NNC_INDEX03' 131072) EXTENTSIZE 32 OVERHEAD 24.1 PREFETCHSIZE 32 TRANSFERRATE 0.9 BUFFERPOOL NCUSED4;
CREATE USER TEMPORARY TABLESPACE USERTEMP PAGESIZE 16 K MANAGED BY SYSTEM USING ( 'D:\5Database\DB2Data\ncdb\Usertemp1' ) EXTENTSIZE 32 OVERHEAD 10.67 PREFETCHSIZE 32 TRANSFERRATE 0.04 BUFFERPOOL NCTMPUSED16;
CREATE SYSTEM TEMPORARY TABLESPACE TEMPSPACE2 PAGESIZE 16 K MANAGED BY SYSTEM USING ( 'D:\5Database\DB2Data\ncdb\Tempspace2' ) EXTENTSIZE 32 OVERHEAD 10.67 PREFETCHSIZE 32 TRANSFERRATE 0.04 BUFFERPOOL NCTMPUSED16;
ALTER TABLESPACE NNC_DATA01 AUTORESIZE YES;
ALTER TABLESPACE NNC_DATA02 AUTORESIZE YES;
ALTER TABLESPACE NNC_DATA03 AUTORESIZE YES;
ALTER TABLESPACE NNC_INDEX01 AUTORESIZE YES;
ALTER TABLESPACE NNC_INDEX02 AUTORESIZE YES;
ALTER TABLESPACE NNC_INDEX03 AUTORESIZE YES ;
------------------------------------------------
-- 修改“自动扩展表空间”参数值为“是”;
------------------------------------------------
CONNECT RESET;
注意颜色字体部分,将其盘符改为你创建数据库时选择的盘符;
(3) 修改表空间大小(可以不执行)
1、注意db2与oracle不一样,如果需要再导入库时,需要重新创建一个数据库,所以当你修改表空间时,这个库够用就行,不是越大越好;
2、按上步创建完表空间后,可以直接去db2控制中心双击表空间直接修改大小;
如图:
(一) 创建恢复的表:
1、恢复db2数据库,需要先创建表,然后恢复数据,没有表恢复不了数据;
2、在备份文件夹中找到这个文件;如图:
3、打开nc.sql文件,并将“.sql”和“.lst”文件中的DB2INST1替换为当前用户(db2admin),如图:
说明:如果不替换为当前用户,需将导出的用户,在windows中创建,创建用户名和密码同导出的用户一致。
修改*.sql
- 需要去掉双引号“””
- 需要去掉Foreign Key的相关语句
- 需要去掉ORGANIZE BY ROW
注:需要将引号去掉
如图:
(4) 修改数据库备份文件夹中的db2move.lst文件:
1、将文件中的用户替换为当前安装服务器的用户db2admin;如图:
说明:如果不替换为当前用户,需将导出的用户,在windows中创建,创建用户名和密码同导出的用户一致。
注:需要将引号去掉
(5) 执行导入数据命令
说明:在NC实施过程当中,导入数据库一般用方法二导入数据库。
方法一:
1、通过cmd进入解压后的数据库备份文件夹;如图:
2、执行命令db2move {hbzy} load;
大括号中为对应的数据库名称;
方法二:
说明:
在将数据库的数据结构定义文件 createtb.sql 中语句中的创建表、索引、主键等的定义语句单独保存在一个文件中,如保存在createtb.sql文件中。把创建外键、触发器、试图的语句单独放在另一个文件中,如保存在createtb_foreign.sql
保存方法:从文件头查看foreign 查看到第一个外键(--DDL Statements for Foreign Keys on Table "db2admin"."BD_DEFDOC"),包括它和下面的所有语句放到createtb_foreign.sql,前面的放到createtb.sql。
注:备份的sql中还有一些建立表空间的语句如果实际环境没有这么大的空间或操作系统更换目录不同可以修改或删除掉手动来创建。
Step1:运行:db2cmd
step2:C:\Documents and Settings\Administrator>G: 【输入解压的待还原数据所在根目录】
step3:G:\>cd G:tmp 【cmd调至目标根目录下,键入cd D:\tmp(待还原数据文件路径)】
step4:G:\tmp>db2 connect to NCDB user db2inst1 using db2inst1【在目录“G:\tmp>”下输入连接实例脚本】【末尾不能加“;”号】
step5:在目录“D:\tmp>”下,依次键入以下脚本,完成数据导入:
① 导入表结构
D:\tmp>db2 -tvf createtb.sql > createtb.log【键入脚本,回车,输入密码:db2inst1,回车;在D:\tmp路径下可根据生成的日志credb.log查看表结构导入情况】
------------------------------------------------------------------------------------------------
说明:-- 导入表结构,这个是为了确保有些试图也被导入
-f 读取输入文件 -t 设置语句终止字符 -v 回送当前命令
------------------------------------------------------------------------------------------------
② 导入数据
D:\tmp>db2move NCDB import -u db2admin -p db2admin
------------------------------------------------
说明:-- 导入表数据
------------------------------------------------
③ 创建外键
D:\tmp>db2 -tvf createtb_foreign.sql >createtb_foreign.log【创建外键】
------------------------------------------------
说明:-- 至此导入完成,检查报错;一切无误后启动应用链接数据库
------------------------------------------------
*******************************************************************************
(6) 导完数据后 (可以不执行):
对当前数据库执行如下SQL:(原因:在导数据时会由于一些原因将一些表挂起,下面
这种操作就是取消挂起操作)
SELECT 'set INTEGRITY for '||SUBSTR(tabname,1,30)||' IMMEDIATE CHECKED;'
FROM syscat.tables WHERE status='C'
将执行后的记录集拷贝出来执行,然后在执行如上SQL,一直到运行上面SQL查询不出
记录为止;
三、 Linux版本
(1) 导出数据命令
通过执行脚本创建或调至备份数据目录下D:\tmp>,然后依次执行以下脚本,完成数据备份:
① Cd命令切换备份文件存放的目录:cd /home/db2inst1/ncdatabak/
② 导出表结构
[db2inst1@hnnctest 20141105_03]$ db2look -d NCDB -u db2inst1 -e -o createtb.sql -i db2inst1 -w db2inst1
------------------------------------------------
说明:-- 导出表结构,注意:以上各参数意义对应如下,
db2look -d [数据库名] -u [用户] -e -o createtb.sql -i [--] -w [--]
------------------------------------------------
③ 导出表数据
[db2inst1@hnnctest 20141105_03]$db2move ncdb export -tc ncuser -u db2inst1 -p ncuser
------------------------------------------------
说明:-- 导入表数据,注意:以上各参数意义对应如下,
db2move [数据库名] export -tc [--] -u [用户] -p [口令]
------------------------------------------------
------------------------------------------------
备份总体说明:-- 至此导出完成,检查报错;在当前目录下产生以下文件:
name.sql:建表语句
db2move.lst:数据文件
------------------------------------------------
***************************************************************************
(2) 数据文件说明命令
1、查看导出数据的数据集,主要包括以下几类文件
2、数据的导入
在导出的数据集里找到数据库定义语句,即.sql语句
上图中的db2move.lst文件是要导入的数据库对象的名称及对象所属的用户(模式),基本内容如下图:
注:模式既可理解为用户
注:如果从Linux系统导出后导入windows中,需将“.sql”和“.lst”文件中的逗号删除。
2、数据库导入
(1) 创建一个数据库存放的目录
① Db2inst1用户进入系统,密码为db2inst1;
② [db2inst1@hnnctest db2data]$cd /home/db2data
③ [db2inst1@hnnctest db2data]$ mkdir ZLZF
④ [db2inst1@hnnctest db2data]$ chmod -R 775 ZLZF
(2) 创建一个标准数据库
前提:创建数据库前,将原有的数据库删除,执行如下命令:
① Db2inst1用户进入系统,密码为db2inst1;
② db2 drop db ncdb;
注:第二步,如果为新建的数据库,可以不用执行。
3、 执行语句:
CREATE DATABASE ZLZF ON '/home/db2data/ZLZF/' USING CODESET GBK TERRITORY CN COLLATE USING SYSTEM CATALOG TABLESPACE MANAGED BY DATABASE USING (FILE '/home/db2data/ZLZF/Catalogdata1' 128000) USER TABLESPACE MANAGED BY DATABASE USING (FILE '/home/db2data/ZLZF/Userdata1' 256000) TEMPORARY TABLESPACE MANAGED BY DATABASE USING (FILE '/home/db2data/ZLZF/Tempspace1' 256000);
(7) 创建表空间
执行如下SQL:
connect to ZLZF user db2inst1 using db2inst1;
CREATE Bufferpool NCUSED4 SIZE 25600 PAGESIZE 4K;
CREATE Bufferpool NCUSED16 SIZE 6400 PAGESIZE 16K;
CREATE BUFFERPOOL NCTMPUSED16 SIZE 6400 PAGESIZE 16K;
CREATE REGULAR TABLESPACE NNC_DATA01 PAGESIZE 16K MANAGED BY DATABASE USING (FILE '/home/db2data/ZLZF/NNC_DATA01' 65536) EXTENTSIZE 8 OVERHEAD 24.1 PREFETCHSIZE 8 TRANSFERRATE 0.9 BUFFERPOOL NCUSED16;
CREATE REGULAR TABLESPACE NNC_INDEX01 PAGESIZE 4K MANAGED BY DATABASE USING (FILE '/home/db2data/ZLZF/NNC_INDEX01' 131072) EXTENTSIZE 32 OVERHEAD 24.1 PREFETCHSIZE 32 TRANSFERRATE 0.9 BUFFERPOOL NCUSED4;
CREATE REGULAR TABLESPACE NNC_DATA02 PAGESIZE 16K MANAGED BY DATABASE USING (FILE '/home/db2data/ZLZF/NNC_DATA02' 65536) EXTENTSIZE 8 OVERHEAD 24.1 PREFETCHSIZE 8 TRANSFERRATE 0.9 BUFFERPOOL NCUSED16;
CREATE REGULAR TABLESPACE NNC_INDEX02 PAGESIZE 4K MANAGED BY DATABASE USING (FILE '/home/db2data/ZLZF/NNC_INDEX02' 131072) EXTENTSIZE 32 OVERHEAD 24.1 PREFETCHSIZE 32 TRANSFERRATE 0.9 BUFFERPOOL NCUSED4;
CREATE REGULAR TABLESPACE NNC_DATA03 PAGESIZE 16K MANAGED BY DATABASE USING (FILE '/home/db2data/ZLZF/NNC_DATA03' 65536) EXTENTSIZE 8 OVERHEAD 24.1 PREFETCHSIZE 8 TRANSFERRATE 0.9 BUFFERPOOL NCUSED16;
CREATE REGULAR TABLESPACE NNC_INDEX03 PAGESIZE 4K MANAGED BY DATABASE USING (FILE '/home/db2data/ZLZF/NNC_INDEX03' 131072) EXTENTSIZE 32 OVERHEAD 24.1 PREFETCHSIZE 32 TRANSFERRATE 0.9 BUFFERPOOL NCUSED4;
CREATE USER TEMPORARY TABLESPACE USERTEMP PAGESIZE 16 K MANAGED BY SYSTEM USING ( '/home/db2data/ZLZF /Usertemp1' ) EXTENTSIZE 32 OVERHEAD 10.67 PREFETCHSIZE 32 TRANSFERRATE 0.04 BUFFERPOOL NCTMPUSED16;
CREATE SYSTEM TEMPORARY TABLESPACE TEMPSPACE2 PAGESIZE 16 K MANAGED BY SYSTEM USING ( '/home/db2data/ZLZF /Tempspace2' ) EXTENTSIZE 32 OVERHEAD 10.67 PREFETCHSIZE 32 TRANSFERRATE 0.04 BUFFERPOOL NCTMPUSED16;
ALTER TABLESPACE NNC_DATA01 AUTORESIZE YES;
ALTER TABLESPACE NNC_DATA02 AUTORESIZE YES;
ALTER TABLESPACE NNC_DATA03 AUTORESIZE YES;
ALTER TABLESPACE NNC_INDEX01 AUTORESIZE YES;
ALTER TABLESPACE NNC_INDEX02 AUTORESIZE YES;
ALTER TABLESPACE NNC_INDEX03 AUTORESIZE YES ;
------------------------------------------------
-- 修改“自动扩展表空间”参数值为“是”;
------------------------------------------------
CONNECT RESET;
注意颜色字体部分,将其盘符改为你创建数据库时选择的盘符;
(8) 修改表空间大小(可以不执行)
3、注意db2与oracle不一样,如果需要再导入库时,需要重新创建一个数据库,所以当你修改表空间时,这个库够用就行,不是越大越好;
4、按上步创建完表空间后,可以直接去db2控制中心双击表空间直接修改大小;
如图:
(二) 创建恢复的表:
4、恢复db2数据库,需要先创建表,然后恢复数据,没有表恢复不了数据;
5、在备份文件夹中找到这个文件;如图:
6、打开nc.sql文件,并将“.sql”和“.lst”文件中的DB2INST1替换为当前用户(db2admin),如图:
说明:如果不替换为当前用户,需将导出的用户,在windows中创建,创建用户名和密码同导出的用户一致。
修改*.sql
修改*.lst
注:需要将引号去掉
如图:
(9) 修改数据库备份文件夹中的db2move.lst文件:
2、将文件中的用户替换为当前安装服务器的用户db2admin;如图:
说明:如果不替换为当前用户,需将导出的用户,在windows中创建,创建用户名和密码同导出的用户一致。
注:需要将引号去掉
(10) 执行导入数据命令
说明:在NC实施过程当中,导入数据库一般用方法二导入数据库。
方法一:
3、通过cmd进入解压后的数据库备份文件夹;如图:
4、执行命令db2move {hbzy} load;
大括号中为对应的数据库名称;
方法二:
说明:
在将数据库的数据结构定义文件 ZLZF.sql 中语句中的创建表、索引、主键等的定义语句单独保存在一个文件中,如保存在create_tb.sql文件中。把创建外键、触发器、试图的语句单独放在另一个文件中,如保存在create_foreign.sql
保存方法:从文件头查看foreign 查看到第一个外键(-- DDL Statements for Foreign Keys on Table DB2INST1.BD_DEFDOC),包括它和下面的所有语句放到create_foreign.sql,前面的放到create_tb.sql。
注:备份的sql中还有一些建立表空间的语句如果实际环境没有这么大的空间或操作系统更换目录不同可以修改或删除掉手动来创建。
Step1:备份前准备工作
① root用户进入系统,密码为root123;
② 归属用户修改:
[root@hnnctest ~]# cd /home/db2inst1/ncdatabak/20141022
[root@hnnctest ~]# chown db2inst1:db2iadm *.sql
③ 切换用户:[root@hnnctest ~]# su - db2inst1
step2:[db2inst1@hnnctest ~]$ cd /home/db2inst1/ncdatabak/20141022
step3:导入表结构
[db2inst1@hnnctest 20141022]$ db2 -tvf createtb.sql > createtb.log【键入脚本,回车,输入密码:db2inst1,回车;在D:/tmp路径下可根据生成的日志credb.log查看表结构导入情况】
------------------------------------------------------------------------------------------------
说明:-- 导入表结构,这个是为了确保有些试图也被导入
-f 读取输入文件 -t 设置语句终止字符 -v 回送当前命令
------------------------------------------------------------------------------------------------
① 导入数据
[db2inst1@hnnctest 20141022]$ db2move ZLZF import -u db2inst1 -p db2inst1
------------------------------------------------
说明:-- 导入表数据
------------------------------------------------
② 创建外键
[db2inst1@hnnctest 20141022]$ db2 -tvf createtb_foreign.sql >createtb_foreign.log【创建外键】
------------------------------------------------
说明:-- 至此导入完成,检查报错;一切无误后启动应用链接数据库
------------------------------------------------
*******************************************************************************
(11) 导完数据后 (可以不执行):
对当前数据库执行如下SQL:(原因:在导数据时会由于一些原因将一些表挂起,下面
这种操作就是取消挂起操作)
SELECT 'set INTEGRITY for '||SUBSTR(tabname,1,30)||' IMMEDIATE CHECKED;'
FROM syscat.tables WHERE status='C'
将执行后的记录集拷贝出来执行,然后在执行如上SQL,一直到运行上面SQL查询不出
记录为止;
3、数据库调优
先将财务系统的数据库进行备份,数据名称ZLZF
先将现在的db2参数备份一下。
如:
su - db2inst1
db2 connect to 数据库名
db2 get dbm cfg > dbm.cfg
db2 get db cfg > db.cfg
调整日志大小及数目---------------------------------------------
db2 connect to ZLZF
db2 "update db cfg for ZLZF using LOGBUFSZ 2048" --日志大小
db2 "update db cfg for ZLZF using LOGFILSIZ 256000" --日志文件大小
db2 "update db cfg for ZLZF using LOGPRIMARY 20" --日志文件数目
db2 "update db cfg for ZLZF using LOGSECOND 100" --辅助日志数目
------------------------------
dbm参数:
db2 "update dbm cfg using ASLHEAPSZ 1024"
db2 "update dbm cfg using NUM_POOLAGENTS 100"
db参数:
db cfg:
db2 connect to ZLZF
db2 "update db cfg for ZLZF using LOCKLIST 20000"
db2 "update db cfg for ZLZF using MAXLOCKS 80"
db2 "update db cfg for ZLZF using DBHEAP 10240"
db2 "update db cfg for ZLZF using APPLHEAPSZ 5120"
db2 "update db cfg for ZLZF using PCKCACHESZ 25600"
db2 "update db cfg for ZLZF using SHEAPTHRES_SHR 50000"
db2 "update db cfg for ZLZF using SORTHEAP 10240"
db2 "update db cfg for ZLZF using LOCKTIMEOUT 600"
db2 "update database configuration for ZLZF using CATALOGCACHE_SZ 3072"
db2 "update database configuration for ZLZF using app_ctl_heap_sz 4096"
db2 "update database configuration for ZLZF using stmtheap 3072"
db2 "update database configuration for ZLZF using NUM_IOCLEANERS 1"
db2 "update database configuration for ZLZF using NUM_IOSERVERS 1"
db2 "update database configuration for ZLZF using MAXAPPLS 300"
db2 "update database configuration for ZLZF using AVG_APPLS 200"
db2 "update database configuration for ZLZF using MINCOMMIT 1"