将windows下的数据库备份文件直接复制到LINUX下,在LINUX下创建一个同名空库,然后执行restore db命令,应该成功的。
另外一种方法是可以用db2look取得windows数据库的DDL语句,到LINUX系统下执行一遍。数据依靠windows下执行EXPORT命令导出,LINUX下IMPORT。
恢复以及带有 OVERFLOW 选项的前滚 *** 作。对于 DB2 的分区数据库,某些直接发出的 DB2 命令只作用于当前一个分区,备份和恢复(BACKUP/RESTORE)就属于这一类命令。但是对于硬盘数据恢复分区数据库,由于同一数据库的数据分布在多个分区上。则对它的备份和恢复 *** 作就要考虑到各分区上数据的完整及同步问题,因此可以在 DB2 命令前加上 db2_all 命令,以便 DB2 命令在数据库的各个分区上被执行,而无需分别对每个分区重复发出相同的命令。另外在 DB2 中,启用了前滚数据恢复模式的数据库,使用的是归档日志方式,而非缺省的循环日志方式。这样,在进行恢复 *** 作时,可在利用 RESTORE 命令恢复了数据库或表空间的备份后,再通过前滚命令(ROLLFORWARD)命令前滚归档日志中的事务,恢复数据库备份时间点之后提交的事务,最大程度的保护数据库的数据。与备份和恢复命令不同的是,前滚命令仅能通过在分区数据库的编目分区上运行,来实现数据库各分区的前滚 *** 作。下面就以一个启用了前滚恢复模式的分区数据库 SAMPLE 为例介绍其备份、恢复以及前滚 *** 作的具体步骤。这里假设该数据库创建在一台服务器上,具有四硬盘数据恢复个分区,其编目分区为0号分区。一 对分区数据库的备份 *** 作:前面已经介绍了,备份 *** 作仅作用于分区数据库的当前分区,所以要使用“db2_all”的命令实现对所有分区进行备份(这里使用联机备份方式),即:db2_all "db2 backup db sample online" 但是上述命令对各分区的备份是以串行方式进行的,为提高备份 *** 作的性能,还有一种可使分区间以并行方式进行的方法。即在上述命令的 DB2 命令前加上以下选项来实现命令的并行:<<+分区号< :表示后续命令作用于该分区。<<-分区号< :表示后续命令作用于除该分区之外的其它分区。||<<-分区号< 或 <<-分区号; :表示后续命令作用数据恢复于除该分区之外的其它分区,并且是以并行方式进行的。但由于备份和恢复 *** 作要求独占编目分区,因此在对其它分区进行并行方式的备份 *** 作之前,首先必须完成该分区的备份 *** 作。其方法为:db2_all "<<+0< db2 backup db sample online" -- 对编目分区的备份db2_all "||<<-0< db2 backup db sample online" -- 对其它分区硬盘数据恢复的并行备份注:分区数据库的备份结束后会为每个分区都产生一个备份映象文件。
Linux, 环境, 数据库Linux, 数据库, 环境
通过如下备份脚本备份的数据库进行恢复
备份脚本:
/home/db2admin/sqllib/db2profile db2 backup db datedb online to /dbbackup/date include logs cd /dbbackup/datetoday=`date +”%Y%m%d”` file1=”$today” ftpfile=`ls $file1` echo $ftpfile lftp -c “open ftp地址;user 用户名密码@\$0;put $ftpfile” find /dbbackup/date -ctime +15 -exec rm {} \;恢复命令:
通过root命令登录到服务器上后切换到数据库用户名下用su – db2admin命令。
进入到备份文件存放目录即可。
在弄明白什么是重定向恢复之前,需要知道数据库的文件构成,如果您对这一块比较熟悉,可以直接跳到第一条分割线:
首先,一个DB2数据库的文件是由两分部构成的:表空间容器和数据库文件,容器就是真正存放用户数据的地方,是创建表空间时定义的;数据库文件则包括了缓冲池信息文件、数据库配置文件、历史文件、日志控制文件等。
问题是,如何定义表空间容器以及数据库文件所在的路径呢?答:是create database以及create tablespace的时候的参数决定的:
1 如果CREATE DATABASE的时候指定了 AUTOMATIC STORAGE NO:
没有指定ON path,那么数据库文件会被创建在数据库管理器配置文件dftdbpath指定的目录里;
若指定了ON path,那么数据库文件会被创建在ON指定的path里。
2 如果CREATE DATABASE的时候指定了 AUTOMATIC STORAGE YES或者根本没有指定AUTOMATIC STORAGE:
21 没有指定ON path, 那么数据库文件和IBMSTOGROUP都会被创建/指定在dftdbpath指定的目录里
22 若指定了ON path, 这个path可以指定多个路径。 IBMSTOGROUP就使用这些路径,表空间容器路径解决了,数据库文件在哪里呢?这取决于DBPATH ON 参数:
没有指定DBPATH ON,数据库文件会被放在ON path指定的第一个路径里。
若指定了DBPATH ON, 数据库文件会放在这个路径下。
下面正式进入重定向复原,首先是什么情况下需要重定向恢复?
在下列任何情况下,请使用重定向复原 *** 作:
--如果要将备份映像复原到不同于源机器的目标机器
--如果要将表空间容器复原到另一个物理位置
--如果复原 *** 作由于一个或多个容器不可访问而失败
--如果要重新定义已定义的存储器组的路径
这儿我举一个例子,尽可能地将上面几种情况都包括了,假设我们有如下创建数据库以及表空间的命令:
dbm cfg: Default database path (DFTDBPATH) = /home/db2users/e105q6a
$ db2 "create db test"
$ db2 "connect to test"
$ db2 "create STOGROUP MQSGROUP ON '/home/db2users/e105q6a/conpath1', '/home/db2users/e105q6a/conpath2'"
$ db2 "create user temporary tablespace usrtmp1 managed by automatic storage"
$ db2 "create regular tablespace rglrtbs1 managed by automatic storage USING STOGROUP MQSGROUP"
$ db2 "create tablespace tbs1 managed by system using ('/home/db2users/e105q6a/path1')"
$ db2 "create tablespace tbs2 managed by database using (file 'con2' 4000)"
那么数据库文件、storage group以及各个表空间的容器路径如下:
数据库文件/数据库目录:
/home/db2users/e105q6a
Storage Group:
$ db2 "SELECT VARCHAR(STORAGE_GROUP_NAME, 15) AS STOGROUP, STORAGE_GROUP_ID, VARCHAR(DB_STORAGE_PATH, 40) AS STORAGE_PATH FROM TABLE(ADMIN_GET_STORAGE_PATHS('',-1)) AS T"
STOGROUP STORAGE_GROUP_ID STORAGE_PATH
---------------- ---------------- ----------------------------------------
IBMSTOGROUP 0 /home/db2users/e105q6a
MQSGROUP 1 /home/db2users/e105q6a/conpath1
MQSGROUP 1 /home/db2users/e105q6a/conpath2
3 record(s) selected
表空间容器(我精简了输出):
$ db2pd -db test -tab
Database Member 0 -- Database TEST -- Active -- Up 0 days 00:16:02 -- Date 2017-02-25-102854331489
Tablespace Configuration:
Id AS AR Type Content SGID Name Type Container
0 Yes Yes DMS Regular 0 SYSCATSPACE File /home/db2users/e105q6a/e105q6a/NODE0000/TEST/T0000000/C0000000CAT
1 Yes No SMS SysTmp 0 TEMPSPACE1 Path /home/db2users/e105q6a/e105q6a/NODE0000/TEST/T0000001/C0000000TMP
2 Yes Yes DMS Large 0 USERSPACE1 File /home/db2users/e105q6a/e105q6a/NODE0000/TEST/T0000002/C0000000LRG
3 Yes Yes DMS Large 0 SYSTOOLSPACE File /home/db2users/e105q6a/e105q6a/NODE0000/TEST/T0000003/C0000000LRG
4 Yes No SMS UsrTmp 0 USRTMP1 Path /home/db2users/e105q6a/e105q6a/NODE0000/TEST/T0000004/C0000000UTM
5 Yes Yes DMS Regular 1 RGLRTBS1 File /home/db2users/e105q6a/conpath1/e105q6a/NODE0000/TEST/T0000005/C0000000USR
5 Yes Yes DMS Regular 1 RGLRTBS1 File /home/db2users/e105q6a/conpath2/e105q6a/NODE0000/TEST/T0000005/C0000001USR
6 No No SMS Regular - TBS1 Path /home/db2users/e105q6a/path1
7 No No DMS Large - TBS2 File /home/db2users/e105q6a/e105q6a/NODE0000/SQL00001/con2
----
以上面的数据库为例,假设想要通过重定向恢复达到以下目的:
1)把数据库文件路径换为/home/db2users/e105q6a/targetdbdir
2) 把IBMSTOGROUP的路径换为/home/db2users/e105q6a/targetstgrpsystem
3)把MQSGROUP的路径换为/home/db2users/e105q6a/targetstgrpuser1, /home/db2users/e105q6a/targetstgrpuser2 和/home/db2users/e105q6a/targetstgrpuser3
4)把表空间tbs1路径换为:/home/db2users/e105q6a/targetpath1
5)把表空间tbs2路径换为:/home/db2users/e105q6a/targetcon2, 并将大小改为5000
要先通过"db2 drop db test"删掉数据库(模拟恢复到另一个机器上),之后针对上面这几个需求,相应的 *** 作如下:
1)$ db2 "restore db test to '/home/db2users/e105q6a/targetdbdir' redirect without prompting"
2)$ db2 "SET STOGROUP PATHS FOR IBMSTOGROUP ON '/home/db2users/e105q6a/targetstgrpsystem'"
3)$ db2 "SET STOGROUP PATHS FOR MQSGROUP ON '/home/db2users/e105q6a/targetstgrpuser1', '/home/db2users/e105q6a/targetstgrpuser2', '/home/db2users/e105q6a/targetstgrpuser3' "
4)$ db2 "set tablespace containers for 6 using (path '/home/db2users/e105q6a/targetpath1')"
5)$ db2 "set tablespace containers for 7 using (file '/home/db2users/e105q6a/targetcon2' 5000)"
最后发出db2 restore db test continue的命令,完成重定向恢复。
1 首先数据库要可以前滚恢复(数据库配置参数logretain或userexit打开)。
db2 connect to
dbname
db2 update db cfg using logretain on
db2 backup db dbname
(当打开归档日志后,该数据库会处于rollforward pending状态,所以要做一次全备份)
2 对要实施Drop Table Recovery的表空间(限regular tablespace),执行:
db2 "alter
tablespace 表空间名称 dropped table recovery on "
3 用 list history dropped table all for 数据库名 得到删除表的tableid(例如
0000000000006d0000020003)和表结构的生成语句(DDL),记录tableid和该语句以便恢复。之后,用drop命令删除的表中的数据可以在前滚恢复时导出。
db2
list history dropped table all for dbname
4 恢复数据库后,如果想恢复已删除的表,在前滚时加recover dropped table tableid to
目标目录。在该目录下被删除的表中的数据导出。利用上面提到表结构生成语句生成被删除了的表,然后用import命令将数据导入表中。
db2
restore db dbname tablespace(tablespacename) without rolling forward without
prompting
db2 "rollforward db dbname to end of logs and stop
tablespace(tablespacename) recover dropped table table id to path "
cd
path
利用 db2 list history dropped table all for dbname
查出的表结构生成语句生成被删除了的表
db2 import from data of del insert into tablename
登录
db2 在线备份和离线备份 的注意事项 原创
2008-07-04 17:44:00
WorldWelcome
码龄16年
关注
db2在线备份和离线备份的区别
1)一般默认建立一个db2数据库是不支持在线备份的(在DB2控制中心里的)
如果要让一个DB2数据库支持在线备份的话,update db cfg for sampledb using logretain=on serexit=on,trackmode=on
2)如果一个db2数据库同时支持在线备份和离线备份的话,那么在备份的时候要小心,如果是要做在线备份,那么必须把日志要单独拷贝出来。否则无法回滚,也就无法使用。
3) 离线备份后恢复的时候,加上参数without rollforward
4) 在线备份后,必须rollforward to
5) force application stop 命令 其实跟离线备份/在线备份都没有什么关系。
只能用
db2look
+db2move
进行迁移。
1提取DDL
用如下命令
db2look
-d
yn
-e
-l
-o
db2look_ynddl
//提取出
yn(云南)
这个数据库
所有用户对象,包括表空间等。
2用db2move
导出数据
如下
如你在
db2inist1
用户目录下
建立一个
data
目录
然后执行
db2move
yn
export
在data
目录下
会有好多
后缀名为ixf
和msg
的文件,其中ixf为数据表文件,msg后缀的为消息文件,其中最重要的
是db2movelst
存放导出表和消息文件的对应关系。
3去windows
下建立一个数据库
db2
“
create
db
yn
pagesize
8
k”
//这里的pagesize需要和
ddl的统一
然后修改
ynddl
文件下
把
Linux下面
的路径
替换为Windows
的路径然后执行db2
-tvf
ynddl
4导入数据库
db2move
yn
load
其中会生成
一个loadout的文件
记录错误信息或者
导入失败的表
,如加载了多少行,拒绝多少行
等。
5查看loadout
找到那些导入不成功的进行
处理,然后倒入。然后进行完整性约束
这些检查。如有问题
Q
我吧。
以上就是关于Window下备份的DB2数据库,在Linux下怎么恢复全部的内容,包括:Window下备份的DB2数据库,在Linux下怎么恢复、DB2 分区数据库备份与恢复 *** 作如何进行 (1)、如何在Linux下实现DB2数据库备份和恢复等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)