db2有表空间的LRG跟FLG文件,能恢复出来吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了db2有表空间的LRG跟FLG文件,能恢复出来吗?相关的知识,希望对你有一定的参考价值。

表空间恢复失败,然后有原来的LRG文件,应该怎样恢复,另外该表空间是自动存储器表空间

在弄明白什么是重定向恢复之前,需要知道数据库的文件构成,如果您对这一块比较熟悉,可以直接跳到第一条分割线:

首先,一个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:
2.1 没有指定ON path, 那么数据库文件和IBMSTOGROUP都会被创建/指定在dftdbpath指定的目录里
2.2 若指定了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-10.28.54.331489

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/C0000000.CAT
1 Yes No SMS SysTmp 0 TEMPSPACE1 Path /home/db2users/e105q6a/e105q6a/NODE0000/TEST/T0000001/C0000000.TMP
2 Yes Yes DMS Large 0 USERSPACE1 File /home/db2users/e105q6a/e105q6a/NODE0000/TEST/T0000002/C0000000.LRG
3 Yes Yes DMS Large 0 SYSTOOLSPACE File /home/db2users/e105q6a/e105q6a/NODE0000/TEST/T0000003/C0000000.LRG
4 Yes No SMS UsrTmp 0 USRTMP1 Path /home/db2users/e105q6a/e105q6a/NODE0000/TEST/T0000004/C0000000.UTM
5 Yes Yes DMS Regular 1 RGLRTBS1 File /home/db2users/e105q6a/conpath1/e105q6a/NODE0000/TEST/T0000005/C0000000.USR
5 Yes Yes DMS Regular 1 RGLRTBS1 File /home/db2users/e105q6a/conpath2/e105q6a/NODE0000/TEST/T0000005/C0000001.USR
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的命令,完成重定向恢复。
参考技术A 可以恢复,sqllib只是实例目录,你删除了该目录就类似于删除了实例,只要数据库目录没有删除就可以通过新建实例来恢复。
恢复方法是通过在安装包中的instance目录下的db2icrt命令重新创建一个和原先同名的实例,然后catalog数据库到该实例下。重新安装后的数据库,按以前表空间、数据文件进行创建。 2、用非系统盘的数据文件来顶替新创建的数据文件。但系统的检查点变了数据库肯定不能启动。 3、要先脱机(Offline)非系统盘的文件,进行做一次价值恢复。数据库启动后再进行联机(Online)。 以上做法我没试过,关键在于介质恢复能否使检查点获得一致,或许会成功啊。
电脑中删除的数据如何恢复?数据删除恢复知识来了! 电脑中会有很多文件产生,工作文档,接受的图片文件等,这些文件如果在日常中使用的话,使用完以后就会想着去删除,但是有时候全选删除会导致数据丢失,或者误删除,删除的文件该怎么去找回呢?相信大家在日常生活中也都会经常遇到这种现象,并且这也是一种比较常见的现象。尤其是对于一些新手来说,都会误删一些数据的,但是又不知道如何去解决?很多误删除的文件都可以使用相关的数据恢复软件进行修复,下面为大家介绍下具体步骤。 方法一:回收站恢复 回收站是每个电脑系统所自动的一个功能,一般删除后的数据都会保存在这个里面,这些数据删除也是临时删除的,因为如果误删后,一般是用。
可以还原。 取下内存卡,通过读卡器接到电脑,就可以作为可移动磁盘来恢复数据。常用的数据恢复软件都可以。下面以diskgenius为例: 1、安装diskgenius,打开它。

以上是关于db2有表空间的LRG跟FLG文件,能恢复出来吗?的主要内容,如果未能解决你的问题,请参考以下文章

在windows中把linux的磁盘顶替了,还能恢复吗?

中了勒索病毒能恢复吗

db2   使用重定向方式恢复数据 and 修改表空间大小

Oracle表空间基础

手机音频视频数据被误删了还能恢复吗

db2 数据库与表空间备份与恢复