备份:
一、连接数据库服务器(在服务器端建立备份文件夹)
windows下(win+r mstsc)输入db2cmd,linux下(我使用的是xshell)
若当前用户为root则需要切换用户至数据库管理员 db2inst1
su - db2inst1
在服务器端,建立备份文件夹backup并赋予写入权限(我一般简单粗暴的赋予全部权限)
chmod -R 777 backup
将DB2命令行窗口的当前路径切换到刚建好的备份目录下
二、导出数据库的表的数据。在切换好的目录下,输入如下命令
db2move sample export -sn db2inst1 -u db2inst1 -p 123
sample 为数据库实例名
-sn 指定要导出的模式名
-u 指定导出所使用的用户
-p 指定导出所使用用户的密码
回车执行后,会在指定的备份目录下,创建很多.ixf和.msg,每张表都会产生2个文件,带lob文件的表会多一个.lob的文件。此外还有EXPORT.out文件,记录了导出的日志,db2move.lst文件记录了,导出的表与导出文件的对应关系。
注意:导出表时可能会报如下错误
解决方法:
- 查看数据库级配置文件db2codepage(db2 get db cfg命令)查看Database code page的值
- 查看实例级注册变量的值(db2set -all)查看Database code page的值与之前查出的是否一样,不一样的话就设置成一样的 ,如:db2set DB2CODEPAGE=1386
- 重启实例(db2stop force db2start)
三、导出数据库表空间、表结构、索引、视图。
db2look -d sample -z db2inst1 -l -e -o create.sql -i db2inst1 -w 123
(-e 表结构 ,-l 表空间 ,-o 文件格式)
-d 指定导出的数据库实例名
-z 指定导出数据库的模式名
-l –e 固定参数1l-
-o 指定导出的文件名和文件格式
-i 指定导出的用户名
-w 指定导出的用户密码
回车执行后,备份目录下会创建一个sql文件,里面记录了所有的表空间、表结构、视图、索引的创建语句。
四、完成数据结构以及数据的导出后进行打包压缩
1、使用tar命令进行打包
tar -cvf backup.tar backup
(backup为打包后的新文件,backup为要打包的文件夹)
tar -cvf(或xvf)+文件名+设备
c:是本地到其他设备
x:是其他设备到本地
r:是追加,比如打包时将其他文件追加进来使用该参数
t:显示tar包里边的内容,但还原文件
2、使用gzip命令对其进行压缩
gzip backup.tar
到此备份过程over!
还原
一、创建数据库表空间
切换用户
su - db2inst1
--创建管理系统数据库 test
create database "test" alias "test" using codeset gbk territory cn
--连接数据库
db2 connect to test user db2inst1 using 123
--建缓冲池
create bufferpool aispool immediate size 1000 automatic pagesize 32 k
--建表空间 AISCOMMON (常规)
CREATE LARGE TABLESPACE AISCOMMON PAGESIZE 32 K MANAGED BY DATABASE USING ( file '/data/test/aiscommon' 1G ) AUTORESIZE YES EXTENTSIZE 32 OVERHEAD 7.5 PREFETCHSIZE 32 TRANSFERRATE 0.06 BUFFERPOOL aispool NO FILE SYSTEM CACHING DROPPED TABLE RECOVERY ON
/data/test 为表空间存放目录
--建表空间 AISSYSSPACE(系统临时)
create system temporary tablespace aissysspace pagesize 32k managed by database using (file '/data/test/aissysspace' 12800 ) extentsize 32 overhead 10.67 prefetchsize 32 transferrate 0.04 bufferpool aispool
--建表空间 AISUSERSPACE(用户临时)
create user temporary tablespace aisuserspace pagesize 32 k managed by database using (file '/data/test/aisuserspace' 12800 ) extentsize 32 overhead 10.67 prefetchsize 32 transferrate 0.04 bufferpool aispool
至此,建库工作已准备完成,接下来进入还原步骤
二、数据还原
1、将服务器上传至指定目录并解压(解压之后会生成一堆 .msg和.ixf文件)
tar -xvf backup.tar.gz
注意:
在执行create.sql脚本前,需在create.sql脚本里修改为connect to 新建数据库名;
修改create.sql中CONNECT TO 连接需还原的数据库
对解压的文件进行授权操作
chmod -R 777 /backup
2、执行create.sql建立表结构
进入到备份数据目录下
cd /backup
执行如下语句建立表结构(进行表结构建立,完成后检查 create.log,确认是否有报错出现。(update语句报错可以无视)
db2 -vtf create.sql -z create.log
-z 指定建表过程中生成的日志文件
3、装载数据
上一步无报错之后在执行 以下语句进行数据装载
db2move sample load -lo replace -u db2inst1 -p 123>dataload.log
住:sample为数据库名 -u后为数据库用户 -p后为数据库用户密码 dataload为新生成的日志文件名
数据装载日志中无报错之后打开数据库查询工具(我用的是ADS),连接到新建的数据库,输入语句,查询出解锁表语句
select 'SET INTEGRITY FOR DB2INST1.'||tabname|| ' CHECK, FOREIGN KEY, GENERATED COLUMN, MATERIALIZED QUERY, STAGING IMMEDIATE UNCHECKED;' from syscat.tables where status='C'
解表语句查询出的结果复制在执行
注意:解表操作需反复执行多次直至如上查询结果为0时。
查看表是否都已解锁成功的语句如下,若结果为空则表示数据还原成功
select tabname,status,const_checked from syscat.tables where status='C'
至此,数据还原工作over!!
备份单张数据表
db2 connect to 数据库名 user 登陆名 using 登陆密码
备份:
db2 export to t1.ixf of ixf select * from 表名
恢复:
db2 import from t1.ixf of ixf insert into目标表名或者新表名.
因为在工作过程中经常性的会进行数据还原操作,索性发布到网络上,共勉之