DB2数据库学习之数据库备份还原
一、数据库离线(脱机)备份
1、cd /db2_backup 切换到存放备份文件的目录,如果没有要新建
2、db2 list applications for db dbName(数据库名) 确保没人使用数据库断开连接
3、db2stop force
4、db2stop db2start 重启数据库实例保证断开全部连接
5、db2 backup db dbName 执行备份命令
6、ll 查看备份目录会有一个后缀为.001的一个备份文件生成其中包含当前时间戳。
二、数据库在线备份
1、在线备份
$ db2 backup db dbname online to 路径 include logs
$ db2 restore db dbname from 路径 taken at 时间戳
$ db2 "rollforward db dbname to 2013-02-31-20.00.00.000000 using local time and complete overflow log path (/backup/logs)" 前滚日志恢复至指定时间点
2、查看备份记录
$ db2 list history backup all for dbname 可以看到备份的纪录
三、数据库直接还原
1、cd /db2_backup 进入到备份目录
2、db2 restore db dbName taken at 20101122205614 without rolling forward
执行上述命令则可以还原数据库,如果有同名数据库将会提示是否覆盖,如果选择Y将会覆盖本地数据库。20101122205614 是备份文件的时间戳,如备份文件名是PBCMONEY.0.lilax.NODE0000.CATN0000.20101122205614.001,则20101122205614即是时间戳Times。
还原完成后则要测试连接是否正确 db2 connect to dbName 如果成功则显示数据库信息,否则还原失败。
3、可能遇到的问题:
注意:如果还原后提示一个或者多个表空间无法还原则可能是磁盘空间不够,需要扩容后重新还原
注意:如果还原后提示SQL1117N 由于 ROLL-FORWARD PENDING,不能连接或激活数据库 "XXX"。
SQLSTATE=57019
执行命令:rollforward db XXX to end of logs and complete
报错:SQL4970N 由于数据库分区 "0" 上的日志文件丢失或损坏,所以对数据库 "XXX"
执行的前滚恢复操作无法到达指定的停止点(日志末尾或时间点)。前滚恢复操作在处理日
志文件 "S0036188.LOG" 时停止。
从客户环境数据库服务器获取S0036188.LOG
3.查询该还原目标数据库日志文件路径
执行命令:get db cfg for XXX
找到日志文件路径,把第3点获得的日志拷贝到该路径
4.前滚数据库
命令:rollforward db XXX to end of logs and complete
5.还原数据库完成。
四、数据库重定向还原
1、获得A库备份文件,考到B库服务器上;
2、执行命令通过备份文件自动生成重定向脚本;
$ db2 restore db [A库名称] <from ‘[备份文件存放地址]’> taken at [备份文件时间戳] redirect generate script [生成脚本名称]
Eg:
$ db2 restore db regiedb taken at 20160817162305 redirect generate script 20160818_regiedb2sznhm_redirect.sql
[db2hyzm@hyzmdb2sertemplate ~]$ cd hnzmbackup201608
[db2hyzm@hyzmdb2sertemplate hnzmbackup201608]$ ll
总用量 1442180
-rw-r--r--. 1 db2hyzm db2iadm1 1476788224 8月 18 18:47 REGIEDB.0.db2hyzm.DBPART000.20160817162305.001
[db2hyzm@hyzmdb2sertemplate hnzmbackup201608]$ db2 restore db regiedb taken at 20160817162305 redirect generate script 20160818_regiedb2sznhm_redirect.sql
SQL1433N 应用程序已与 "SZMHN"
相连,同时在发出命令时要求与 "REGIEDB"
连接,以便成功执行该命令。
[db2hyzm@hyzmdb2sertemplate hnzmbackup201608]$ db2 connect reset
DB20000I SQL 命令成功完成。
[db2hyzm@hyzmdb2sertemplate hnzmbackup201608]$ db2 restore db regiedb taken at 20160817162305 redirect generate script 20160818_regiedb2sznhm_redirect.sql
DB20000I RESTORE DATABASE 命令成功完成。
[db2hyzm@hyzmdb2sertemplate hnzmbackup201608]$ ll
总用量 1442196
-rw-r--r--. 1 db2hyzm db2iadm1 13495 8月 18 22:55 20160818_regiedb2sznhm_redirect.sql
-rw-r--r--. 1 db2hyzm db2iadm1 1476788224 8月 18 18:47 REGIEDB.0.db2hyzm.DBPART000.20160817162305.001
[db2hyzm@hyzmdb2sertemplate hnzmbackup201608]$
3、不用创建库直接回复就会创建数据库了,查看生成的脚本,参考脚本将一些目录修改成想要还原导的地址即可;
Eg:修改后的脚本
db2 RESTORE DATABASE REGIEDB[p1] TAKEN AT 20160817162305[p2] ON '/home/db2server/zmyhn'[p3] DBPATH ON'/home/db2server/zmyhn/zmhn'[p4] INTO SZMHN[p5] REDIRECT WITHOUT ROLLING FORWARD
-------------------------------------------
db2 SET TABLESPACE CONTAINERS FOR 4 USING "( FILE '/home/db2server/zmyhn/tablesps/zmhn/[p6] datafile01.dat' 32000, FILE '/home/db2server/zmyhn/tablesps/zmhn/datafile02.dat' 32000, FILE '/home/db2server/zmyhn/tablesps/zmhn/datafile03.dat' 32000, FILE '/home/db2server/zmyhn/tablesps/zmhn/datafile04.dat' 32000, FILE '/home/db2server/zmyhn/tablesps/zmhn/datafile05.dat' 32000)"[p7]
-----------------------------------------
db2 RESTORE DATABASE REGIEDB[p8] CONTINUE
-----------------------------------------
提示:整个过程需一气呵成,否则会很多意想不到错误。有问题就从头再来一次就好了。
4、恢复完成后,连接数据库检查是否正常。
$ db2 connect to SZMHN user db2admin using db2admin
如有此类错误:
SQL1762N 不能与数据库相连,因为没有足够的空间用来分配活动的日志文件。SQLSTATE=08004
【01】可先查看数据库配置:
$ db2 get db cfg for SZMHN|grep LOG
目录高速缓存大小 (4KB) (CATALOGCACHE_SZ) = 300
日志缓冲区大小 (4KB) (LOGBUFSZ) = 2150
日志文件大小 (4KB) (LOGFILSIZ) = 2048
主日志文件的数目 (LOGPRIMARY) = 5
辅助日志文件的数目 (LOGSECOND) = 20
已更改的至日志文件的路径 (NEWLOGPATH) =
日志文件路径 = /home/db2server/zmyhn/zmhn/db2hyzm/NODE0000/SQL00001/LOGSTREAM0000/
溢出日志路径 (OVERFLOWLOGPATH) =
镜像日志路径 (MIRRORLOGPATH) =
磁盘上已满的块日志 (BLK_LOG_DSK_FUL) = NO
非记录块操作 (BLOCKNONLOGGED) = NO
事务使用的最大主日志空间的百分比 (MAX_LOG)= 0
1 个活动 UOW 的活动日志文件的数目 (NUM_LOG_SPAN) = 0
第一个日志归档方法 (LOGARCHMETH1) = OFF
logarchmeth1 的归档压缩 (LOGARCHCOMPR1) = OFF
logarchmeth1 的选项 (LOGARCHOPT1) =
第二个日志归档方法 (LOGARCHMETH2) = OFF
logarchmeth2 的归档压缩 (LOGARCHCOMPR2) = OFF
logarchmeth2 的选项 (LOGARCHOPT2) =
在索引构建期间记录页 (LOGINDEXBUILD) = OFF
日志 DDL 语句 (LOG_DDL_STMTS) = NO
日志应用程序信息 (LOG_APPL_INFO) = NO
[db2hyzm@hyzmdb2sertemplate hnzmbackup201608]$
【02】查看磁盘设备空间使用情况:
$ df -h
Filesystem Size Used Avail[p9] Use% Mounted on
/dev/mapper/vg_hyzm-lv_root
50G 39G 7.7G 84% /
tmpfs 2.9G 248K 2.9G 1% /dev/shm
/dev/sda1 477M 42M 410M 10% /boot
/dev/mapper/vg_hyzm-lv_home
43G 36G 5.2G[p10] 88% /home
/dev/sr0 3.6G 3.6G 0 100% /media/RHEL-6.7 Server.x86_64
[db2hyzm@hyzmdb2sertemplate hnzmbackup201608]$
由于把归档日志主日志大小和个数设置过大,导致日志文件所在盘空间不足连接数据库时提示上述错误。此时需要修改主日志大小或个数。
Eg:
$ db2 update db cfg for szmhn[p11] using logfilsiz 2048[p12] logprimary 5[p13]
再次连接,检查表,nickname、视图的可用性。
员数据库名称
备份文件的时间戳。
数据的存储目录,系统管理表空间会在此目录以【原实例名】/【NODE0000】/【新库名】/* 的结构创建。
数据库的主目录,存放日志、管理文件等。
新库名称。
序号为4的表空间文件存放的目录,自行定义,但要先用Linux系统用户 root创建,并赋予至少775的权限。
括号首位加双引号,否则报语句错误。
原库的名称。
剩余的空间
此挂节点设备剩余空间
数据库名
日志文件大小
主日志文件个数