精华内容
下载资源
问答
  • DB2 LOAD导入数据表空间出现备份暂挂问题处理方法
    2021-01-15 17:36:47

    往DB2数据库导入DEL文件出现了表空间备份暂挂的情况,表现为表空间状态变为了 0X0020 ,出现此问题的解决方法:
    1.解决暂挂问题,需备份表空间(以userspace1为例)

    db2 "backup database 数据库名字 tablespace userspace1"

    2.load命令调整(在结尾增加nonrecoverable),nonrecoverable的作用就是使这条sql在执行过程中不记录日志,这样就不会出现暂挂了

    db2 "load client from /data/test.del of del modified by delprioritychar insert into table_name nonrecoverable "
    
    
    更多相关内容
  • db2数据库与表空间备份

    千次阅读 2019-01-09 22:38:01
    db2数据库与表空间备份 数据库与空间的备份语法概述 备份语法 ​ database-alias:指定要备份的数据库的别名 ​ username/using password:指定备份数据库所使用的用户和用户密码 ​ DBPARTITIONNUM db-...

    db2数据库与表空间备份

    数据库与表空间的备份语法概述

    备份语法
    在这里插入图片描述

    ​ database-alias:指定要备份的数据库的别名
    ​ username/using password:指定备份数据库所使用的用户和用户密码
    在这里插入图片描述

    ​ DBPARTITIONNUM db-partition-number1:指定要备份的数据库分区的列表
    DBPARTITIONNUMS db-partition-number1 TO db-partition-number2:指定备份数据库分区的范围
    在这里插入图片描述
    ​ ALL DBPATITIONNUMS:备份所有的数据库分区
    EXCEPT:要排除备份的数据库分区
    在这里插入图片描述

    ​ TABLESPACE tablespace-name:指定要备份的表空间
    ​ ONLINE:指定对数据库进行在线的备份,默认是离线备份
    ​ INCREMENTAL:对数据库进行增量备份
    ​ DELTA:对数据库进行Delta备份
    在这里插入图片描述

    ​ TSM:使用Tivoli Storage Manager 作为备份设备
    OPEN SESSIONS:DB2与TSM或其他设备软件产品之间的IO会话数量(注意:与INCLUDE LOGS 参数的协同使用)
    ​ TO dir | dev:指定备份完成的数据文件所放置的路径或者设备
    在这里插入图片描述

    ​ DEDUP_DEVICE:如果使用数据复制的功能,此参数会优化备份文件在存储设备中的存储格式
    ​ BUFFER buffer-size:DB2在备份过程中所占用的内存缓存大小,以4k为单位
    ​ PARALLELISM n:备份过程中,可以并发备份的表空间数量
    在这里插入图片描述

    ​ COMPRESS | ENCRYPT:指定备份文件是使用压缩特征还是进行加密,两者不能同时使用
    在这里插入图片描述

    UTIL_IMPACT_PAIORITY priority:指定备份操作的优先级(可设置为1-100,1优先级最低,100优先级最高,默认是50)
    ​ EXCLUDE LOGS:指定备份过程中不备份日志文件(只针对在线备份有效)
    在这里插入图片描述

    ​ WITHOUT PROMPTING:指定在备份过程中需不需要用户提供交互输入
    在这里插入图片描述

    备份文件的命名

    在这里插入图片描述

    ​ 备份类型
    — 0:表示完整的数据库级别备份
    — 3:表示表空间级别的备份
    — 4:表示由LOAD COPY TO 命令生成的备份影像
    ​ 数据库分区
    ​ 在单一分区数据库环境中,分区号始终是DBPART000
    ​ 在分区数据库环境中,是DBPARTxxx,其中 xxx 是db2nodes.cfg 文件中对数据库分区指定的编号

    离线备份

    切换到 db2instl(实例用户)用户:

    su - db2instl
    

    查看实例下有多少个数据库:

    db2 list db directory
    

    在这里插入图片描述

    启动实例:

    db2start
    

    在这里插入图片描述

    备份mydb 数据库:

    db2 backup database mydb
    

    在这里插入图片描述

    ​ 默认是当前路径,离线备份
    ​ 如果当前存在连接,则备份失败
    在这里插入图片描述

    查看问题详情

    db2 ? SQL1035N
    

    在这里插入图片描述
    解决方法:
    ​ 方法一:连接端退出数据库链接

    db2 terminate
    

    在这里插入图片描述

    ​ 方法二:备份用户连接数据库,强制退出连接数据的应用,然后推出,进行备份操作
    在这里插入图片描述

    db2 list applications          --查看连接数
    db2 connect to mydb            --连接数据库 
    db2 force applications all     --强制退出所有连接
    db2 terminate				   --退出数据库连接
    

    在线备份

    如果归档日志没有打开,则报如下错
    在这里插入图片描述

    查看归档日志状态

    db2 get db cfg for mydb | grep "LOGARCHMETH1"
    

    在这里插入图片描述

    修改归档日志,将归档日志归档到指定目录:

    db2 update db cfg using LOGARCHMETH1 DISK:/home/db2instl/tmp
    

    在这里插入图片描述

    ​ 注:设置完归档后,建议重新激活数据库使参数生效,同时必须对数据库进行一次备份(设置归档后,数据库处于backup pending状态)

    db2 deactivate db <dbname>
    db2 terminate
    db2 backup db <dbname>
    db2 activate db <dbname>
    

    在这里插入图片描述

    ​ 或者,如果可以重启实例,建议重启实例执行

    db2stop force
    db2start
    db2 backup db <dbname>
    

    包含日志备份

    db2 backup db mydb online include logs
    

    在这里插入图片描述

    备份到不同的目录

    db2 backup db mydb online to /home/db2instl/db1,/home/db2instl/db2
    

    在这里插入图片描述

    备份表空间

    db2 "backup database mydb tablespace (syscatspace, userspace1) online to  /home/db2instl/db_tablespace"
    

    ​ 注:online要写在表空间后面,不然报如下错:(SQL0104N An unexpected token “tablespace” was found following “ONLINE”.)
    在这里插入图片描述

    增量备份

    增量备份前必须启动增量备份功能,不然报:(SQL2426N The database has not been configured to allow the incremental backup)
    在这里插入图片描述

    ​ 启动增量备份功能

    db2 update db cfg for mydb using trackmod on
    

    在这里插入图片描述

    ​ 启动增量备份后进行一次数据库备份,不然报:(SQL2426N The database has not been configured to allow the incremental backup
    operation. Reason code = “2”.)
    在这里插入图片描述

    db2 backup db mydb online incremental to /home/db2instl/db_tablespace
    

    在这里插入图片描述

    delta备份:

    db2 backup db mydb online incremental delta to /home/db2instl/db_tablespace
    

    在这里插入图片描述

    总结:
    离线备份

    db2 list applications          --查看连接数
    db2 connect to mydb            --连接数据库 
    db2 force applications all     --强制退出所有连接
    db2 terminate				   --退出数据库连接
    db2 backup database mydb       --备份数据库
    

    在线备份

    db2 get db cfg for mydb | grep -i "LOGARCHMETH1"		--查看归档日志状态
    
    --修改归档日志,将归档日志归档到指定目录
    db2 update db cfg using LOGARCHMETH1 DISK:/home/db2instl/tmp
    --建议重新激活数据库同时进行一次备份(设置归档后,数据库处于backup pending状态)
    db2 deactivate db mydb		
    db2 terminate
    db2 backup db mydb
    db2 activate db mydb
    

    增量备份

    db2 get db cfg for mydb | grep -i "trackmod"		--查看增量备份功能状态
    db2 update db cfg for mydb using trackmod on		--启动增量备份功能
    
    db2 backup db mydb		--建议启动增量备份后进行一次数据库备份
    
    db2 backup db mydb online incremental to /home/db2instl/db_tablespace	--增量备份
    

    delta备份

    db2 get db cfg for mydb | grep -i "trackmod"		--查看增量备份功能状态
    db2 update db cfg for mydb using trackmod on		--启动增量备份功能
    
    db2 backup db mydb		--建议启动增量备份后进行一次数据库备份
    db2 backup db mydb online incremental delta to /home/db2instl/db_tablespace
    

    注释:

    增量备份:DB2备份自上一次数据库完整备份以来发生变化的所有数据。

    delta备份:DB2备份自上一次成功执行的完整备份、增量备份或delta备份以来发生变化的数据

    检查备份的完整性

    ​ db2ckbkp
    ​ 检查备份文件的一致性以及备份文件的可用性
    ​ 显示备份文件的元数据
    在这里插入图片描述
    ​ —h:检查备份文件的完整性

    展开全文
  • 在线备份数据库和在线备份表空间,应该是大多数生产环境下使用的备份方式。其最大的优点是,能够在不断开用户连接的情况下,对数据进行备份。在还原的时候,若是针对数据库级的还原,则需要断开所有用户的连接;而表...

    在线备份数据库和在线备份表空间,应该是大多数生产环境下使用的备份方式。其最大的优点是,能够在不断开用户连接的情况下,对数据进行备份。

    在还原的时候,若是针对数据库级的还原,则需要断开所有用户的连接;而表空间级别的还原,则可以在online状态下进行,且还原可直接使用数据库的备份文件进行。

    一、在线备份与数据库“脱机”还原

    1、备份数据库,并且备份日志(备份的是备份期间其他用户的事务操作,产生的日志):

    在另一个会话中,当备份开始时,就插入一条记录,并进行提交,本例中将该数据提交完之后,发现备份还在进行之中:

    Session

    A进行备份:

    db2 => commit

    DB20000IThe SQL command completed successfully.

    db2 => backup database sample online to

    /home/db2inst1/bak_sample include logs

    Backup successful. The timestamp for this

    backup image is : 20100804225927

    Session

    B在Session A备份开始后,立刻插入数据:

    db2 => insert into newtable values(777)

    DB20000IThe SQL command completed successfully.

    db2 => commit

    DB20000IThe SQL command completed successfully.

    Session A在备份完成之后,再次连上数据库,就发现已经多了一条数据:

    db2 => connect to sample

    Database Connection Information

    Database server= DB2/LINUX 9.7.1

    SQL

    authorization ID= DB2INST1

    Local database alias= SAMPLE

    db2 => select * from newtable

    AA

    -----------

    123

    222

    333

    444

    555

    777

    6

    record(s) selected.

    2、现在模拟故障,表newtable所在的表空间容器,意外丢失:

    [db2inst1@localhost

    ~]$ rm -f /home/db2inst1/db2inst1/NODE0000/SAMPLE/T0000002/C0000000.LRG

    db2 =>

    select * from newtable

    AA

    -----------

    SQL0290NTable space access is not allowed.SQLSTATE=55039

    3断开所有连接,对数据库进行restore和rollforward:

    db2 =>

    force applications all

    DB20000IThe FORCE APPLICATION command completed

    successfully.

    DB21024IThis command is asynchronous and may not be

    effective immediately.

    db2 =>

    restore database sample from /home/db2inst1/bak_sample taken at 20100804225927

    SQL2539WWarning!Restoring to an existing database that is the same as the

    backup

    image database.The database files will

    be deleted.

    Do you

    want to continue ? (y/n) y

    DB20000IThe RESTORE DATABASE command completed

    successfully.

    db2 =>

    rollforward database sample to end of logs and stop

    Rollforward

    Status

    Input database alias= sample

    Number of nodes have returned status= 1

    Node number= 0

    Rollforward status= not pending

    Next log file to be read=

    Log files processed= S0000004.LOG -

    S0000005.LOG

    Last committed transaction= 2010-08-04-23.18.19.000000 Local

    DB20000IThe ROLLFORWARD command completed

    successfully.

    4登陆上数据库,发现在步骤1中插入的记录,也恢复成功了:

    db2 =>

    connect to sample

    Database Connection Information

    Database server= DB2/LINUX 9.7.1

    SQL authorization ID= DB2INST1

    Local database alias= SAMPLE

    db2 =>

    select * from newtable

    AA

    -----------

    123

    222

    333

    444

    555

    777

    6 record(s) selected.

    通过上述实验发现,直接restore和rollforward数据库,需要断开所有用户的连接,“代价”过大。

    二、使用数据库备份文件,进行表空间在线还原

    下面,还是使用上面实验中的数据库的备份,我们仅对表空间进行online状态下的操作,可以在不断开用户连接的情况下进行。

    1、先将表空间容器删除

    [db2inst1@localhost

    ~]$ rm -f /home/db2inst1/db2inst1/NODE0000/SAMPLE/T0000002/C0000000.LRG

    2、进行restore,用数据库的备份文件来还原,仅还原表空间,状态处于online:

    db2 =>

    restore database sampleTABLESPACE (

    USERSPACE1 )ONLINE from/home/db2inst1/bak_sample

    taken at 20100804225927

    DB20000IThe RESTORE DATABASE command completed

    successfully.

    3、进行rollforward,状态同样是online:

    db2 =>

    rollforward database sampleto end of

    logs and stop tablespace (USERSPACE1) online

    Rollforward

    Status

    Input database alias= sample

    Number of nodes have returned status= 1

    Node number= 0

    Rollforward status= not pending

    Next log file to be read=

    Log files processed=-

    Last committed transaction= 2010-08-04-23.18.19.000000 Local

    DB20000IThe ROLLFORWARD command completed

    successfully.

    4、其他已经连接上的用户,此时就能查询到结果了。并且在DBA进行恢复的时候,不会强制断开用户的连接:

    db2 =>

    select * from newtable

    AA

    -----------

    SQL0290NTable space

    access is not allowed.SQLSTATE=55039

    db2 =>

    select * from newtable

    AA

    -----------

    123

    333

    444

    555

    777

    5 record(s) selected.

    问:第一次查询时,怎么显示了“SQL0290NTable space access is not allowed.SQLSTATE=55039”的结果?

    答:表空间未完成恢复,状态不是normal时,是不允许其他用户访问表空间的数据的。一旦恢复成功,用户就能够进行相应的操作。

    问:对表空间进行restore和rollforward操作的用户,其本身与数据的连接,是否会被断开?

    答:会被断开。详情如下:

    db2 =>

    rollforward database sampleto end of

    logs and stop tablespace (USERSPACE1) online

    Rollforward

    Status

    Input database alias= sample

    Number of nodes have returned status= 1

    Node number= 0

    Rollforward status= not pending

    Next log file to be read=

    Log files processed=-

    Last committed transaction= 2010-08-04-23.18.19.000000 Local

    DB20000IThe ROLLFORWARD command completed

    successfully.

    db2 =>

    select * from newtable

    SQL1024NA database

    connection does not exist.SQLSTATE=08003

    db2 =>

    connect to sample

    Database Connection Information

    Database server= DB2/LINUX 9.7.1

    SQL authorization ID= DB2INST1

    Local database alias= SAMPLE

    db2 =>

    select * from newtable

    AA

    -----------

    123

    333

    444

    555

    777

    5 record(s) selected.

    db2

    =>

    小结:表空间的在线还原,可以在不断开已有数据库用户连接的情况下进行。且当我们没有表空间的备份文件的时候,可以选择一个合适的数据库的备份文件来进行还原。

    展开全文
  • 表空间是数据库系统中数据库逻辑结构与操作系统物理结构之间建立映射的重要存储结构,它作为数据库与实际存放数据的容器之间的中间层,用于指明...同时由于备份和恢复可以在表空间级别执行,用户能够进行更多粒...

    表空间是数据库系统中数据库逻辑结构与操作系统物理结构之间建立映射的重要存储结构,它作为数据库与实际存放数据的容器之间的中间层,用于指明数据库中数据的物理位置。任何数据库的创建都必须显式或隐式的为其指定表空间,且数据库中的所有数据都位于表空间中。

    用户可以根据硬件环境以及成本等需求,通过指定建立在不同容器上的表空间来自由选择数据的物理存储位置。同时由于备份和恢复可以在表空间级别执行,用户能够进行更多粒度的备份恢复控制。

    理解表空间前先理解容器。

    容器(Container)

    容器是物理存储设备,可以通过目录名,设备名或文件名进行标识。事实上,这也正是三种容器类型。设备容器(如磁带等)和文件容器被同等看待,通常直接将其理解为数据文件(磁盘存储内部结构中有介绍,数据文件中包含若干Extent。)。系统管理表空间只能使用目录容器,数据库管理表空间只能使用设备容器和文件容器。

    容器被分配给某个表空间,单个表空间可以使用多个容器,但容器只能属于一个表空间。容器通常位于本地磁盘上,某些远程网络设备或文件也能作为表空间的容器,但由于网络延迟与可靠性方面的原因,远程容器对数据库安全与性能会造成影响,因此不建议使用远程容器。

    DB2数据库系统的表空间有三种管理类型:

    系统管理表空间(SMS,System-Managed Space)

    SMS表空间由操作系统的文件系统管理器分配并管理。在这种表空间中,数据存储空间完全由操作系统管理,SMS表空间能够使用的唯一容器是目录容器,SMS表空间可以定义多个容器,目录容器可以根据需要增加大小,因此SMS表空间的大小是可以动态增加的。但是一旦SMS表空间创建,就不能再为表空间增加或删除容器了。SMS表空间中通常包含多个文件,这些文件代表了存储在文件系统空间中的表对象,比如表数据,表索引,表大对象都是单独占用一个或若干个文件的。一旦为表指定了SMS表空间,那么表中的数据就不允许分开存储,即表的常规数据,索引,大对象数据不能位于不同的表空间中。在DB2 V9之前的数据库版本中,创建数据库(创建数据库时如果不指定表空间则会默认创建3个表空间)或表空间的默认类型就是SMS表空间。另外,只有DB2数据库允许有系统管理表空间,Oracle数据库的表空间都是数据库管理的,不存在系统管理表空间。

    举个SMS表空间的简单例子:创建一个以containers1目录为容器的SMS表空间MYSPACE。再创建一张表TEST,其常规数据,索引,大对象均位于MYSPACE表空间中(如果三者指定不同的表空间则表创建会失败,事实上,指定了常规数据的表空间为SMS表空间后,索引和大对象的表空间也就默认了)。表创建完成后,物理磁盘上的数据是这样的:

    7a96a94a7458102307347aecd557371f.png

    其中SQL00002.DAT数据文件存放表中的常规数据;SQL00002.DTR数据文件存放由于重组,表连接等产生的临时数据。SQL00002.INX数据文件存放表中的索引。还有LF后缀的存放LONG VARCHAR或LONG VARGRAPHIC数据,LB后缀的存放BLOB,CLOB和DBLOB数据,LBA后缀的存放LB后缀文件的分配和可用空间信息等。另外顺便说下图中的SQLTAG.NAM文件。事实上每一个容器都有一个TAG数据结构用于标识容器属于哪一个实例的哪一个数据库的哪一个表空间。对于DMS表空间的容器,TAG位于第一个Extent内,对于SMS表空间的容器,则是以SQLTAG.NAM文件的形式存在。

    使用SMS表空间的每一个表都会在表空间的容器(也就是目录)下对应产生一系列的SQL*.DAT ,SQL*.INX等文件。表和其对应的文件的信息存放在SYSIBM.SYSTABLES这个系统编目表中,每个表对应一个FID(表所在的文件组编号)和TID(表所在的表空间编号),可以使用查询语句进行查询:

    Select fid,tid, name from sysibm.systables where name='TEST';

    12818833f7597eba1361a087e6ee4f2a.png

    数据库管理表空间(DMS,Database-Managed Space)

    DMS表空间由数据库管理系统(DBMS)自己管理控制,本质上讲,这种类型的表空间是为了最大程度满足数据库管理器的需要而设计并实现的一种特定目的的文件系统。DMS表空间是由有限数量的容器所组成的,DMS表空间可以使用的容器有设备容器和文件容器,这些容器的空间都是预先分配的且不允许修改大小的,但是与SMS表空间不同的是,DMS表空间允许添加容器。也就是说,SMS表空间和DMS表空间分别通过扩大容器大小和增加容器数量的方式实现表空间大小的增加。DMS表空间创建时需要手动指定一个或多个容器。以文件为容器的表空间创建完以后就是一个单独的文件。使用DMS表空间的表的数据可以分开存储,即为常规数据,索引和大对象数据指定不同的DMS表空间。

    DMS自动存储表空间(Automatic Storage DMS)

    自动存储表空间不是真正意义上的独立类型的表空间。它是DMS存储的另外一种处理方法。DMS需要很多的维护操作,而自动存储器则是作为一种简化的空间管理手段,能够自动进行表空间的管理维护,它是DB2 V8.8.2中引入的概念,目前取代SMS成为默认的表空间类型。

    三种表空间的对比

    三种表空间在各方面的区别是非常多的,下表显示了一些主要的区别:

    e324b37fbbc3b8c4112cea457216e55d.png

    除了使用 SMS 表空间可以简化管理之外,SMS和DMS存储模型之间最显著的差异是表空间的最大大小。在使用 SMS 时,DBA 最多只能在表空间中放 64GB 的数据。将页面大小改为 32K,可以将这个限制扩大到 512GB,但代价是每个页面上的可用空间可能会更少。改为 DMS 模型会将表空间限制扩大到 2TB(4K 页面大小的情况下)。如果将页面大小改为 32K,可用空间可以增长到 16TB。尽管还有让表大小突破 64GB 限制的其他方法,但是最简单的方法可能是一开始就使用 DMS 表空间。(为什么会有这些限制后面介绍)

    DMS与自动存储DMS

    那么DMS和自动存储哪种方式更佳呢?自动存储允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。在 DB2 9 中,数据库在创建时将启用自动存储,除非 DBA 显式地覆盖这个设置。启用自动存储的数据库有一个或多个相关联的存储路径。表空间可以定义为 “由自动存储进行管理”,它的容器由 DB2 根据这些存储路径进行分配。数据库只能在创建时启用自动存储。对于在最初没有启用自动存储的数据库,不能在以后启用这个特性。同样,对于在最初启用了自动存储的数据库,也不能在以后禁用这个特性。下面的表总结了管理非自动存储和自动存储之间的一些差异。

    6b9fec20ea7f7213a9ab020e13f81550.png

    引入自动存储模型的主要目的是简化 DMS 表空间的管理,同时保持其性能特征。有的时候 DBA 必须定义使用的表空间的所有特征,但是许多应用程序都会从自动存储提供的简化管理获益。

    上述是按照管理方式的不同对数据库表空间类型进行了划分,事实上,根据用途的不同,表空间也可以划分为五种类型:

    系统表空间(SYSCATSPACE)

    系统表空间又称为系统编目表空间,DB2系统编目表是DB2数据库保存所有DB2对象元数据的地方,在Oracle数据库中,被称为数据字典。而系统编目表就存放在系统表空间中。系统表空间是数据库创建时自动创建的,且每个数据库必须有且仅有一个系统表空间,系统表空间被强制命名为SYSCATSPACE。系统表空间默认是SMS表空间,也可以显式指定为DMS表空间。

    系统工具表空间(SYSTOOLSPACE)

    系统工具表空间是供DB2管理工具和SQL管理例程使用的特定表空间,系统工具表空间不能被显式创建,只有第一次使用下面任一工具或过程时才会自动创建:ADMIN_COPY_SCHEMA 过程 ,ADMIN_DROP_SCHEMA 过程, 管理任务调度程序, 改变表笔记本, ALTOBJ 过程, 自动重组(包括 db.tb_reorg_req 运行状况指示器), 自动收集统计信息(包括 db.tb_runstats_req 运行状况指示器), 配置自动维护向导, db2look 命令, 设计顾问程序, GET_DBSIZE_INFO 过程, 存储管理工具,SYSINSTALLOBJECTS 过程。其中管理任务调度程序、ADMIN_COPY_SCHEMA 和 ADMIN_DROP_SCHEMA 过程的首次使用不会创建系统工具表空间,但是他们使用的是系统工具表空间。

    用户表空间(USERSPACE)

    用户表空间也是数据库创建时自动创建的,表空间名称为USERSPACE1,数据库中的用户表默认存放于这个表空间中,用户表空间是可选的,一个数据库可以有多个用户表空间。必须至少有一个用户表空间(没有用户表空间的话数据库无法存放用户数据)。用户表空间也可以是SMS表空间或DMS表空间,通常使用DMS表空间。

    临时表空间(TEMPSPACE)

    临时表空间也是数据库创建时自动创建的,数据库管理器使用临时表空间在执行SQL操作时存储临时数据,例如排序,表重组,索引创建以及表链接等操作所产生的中间表都由临时表空间存储,数据库必须至少有一个临时表空间,也可以有多个。创建数据库时默认创建的临时表空间名称为TEMPSPACE1,且为SMS表空间。但是这个表空间的名称可以是任意的,当另外的临时表空间被创建后,该默认临时表空间也可以被删除。(但必须保证数据库有一个临时表空间)。临时表空间也可以是DMS表空间。另外,DB2支持系统临时表空间和用户临时表空间两种类型,系统临时表空间必须存在,用户临时表空间可以有0个或多个,用来声明临时表。

    除了根据管理和用途划分表空间类型,还可以根据容量将表空间划分为常规表空间和大型表空间。但是这里的常规表空间和大型表空间都是针对DMS表空间而言,SMS表空间大小上限还不及常规表空间。

    行指针

    首先考虑一个问题:逻辑上,数据以数据行(元组)的形式保存在数据库的表中,但物理上,根据数据库磁盘存储的知识(数据库深入学习笔记----磁盘存储内部结构),数据肯定是存储在数据文件上的,确切的说是存储在数据块(页)上。那么,数据库是如何根据表中的行寻址到物理磁盘上数据页中的数据呢?

    Oracle和DB2的解决方案是使用一种新的数据结构:行指针(或行指示器),Oracle数据库中称为ROWID,DB2中称为RID。在实际的数据库表中,每张表都会附加一个特定的隐藏列,即行指针列,也就是说,每一行数据都有一个行指针属性,它指向该行数据在物理磁盘中的具体位置。实际上不管是Oracle还是DB2,行指针都是可以参与SQL查询的(毕竟是有效的行属性。Oracle中的ROWID可以直接当作属性进行查询,DB2中则需要使用rid函数查询RID)如下图是DB2数据库的RID格式:

    846c891a63d524733624dd6907d5bbcc.gif

    常规表空间

    在DB2 V9之前,RID具有4个字节(32位)长度,其中3个字节用于数据页寻址,最后1个字节用于数据页内槽号寻址(《介绍过,每一行数据都是一条记录,存储在数据页的数据存储空间里,每一条记录都对应槽目录中的一个槽号)。

    由RID的结构我们就可以计算出数据页能够容纳的记录数(行数)和表空间的容量了:

    因为一个RID只有1个字节(8位)槽号,所以,一个数据页存储的记录数的最大值为255条(2的8次方-1,为什么要减1?这是因为磁盘存储那篇文章已经讲过,有的数据页是会有一个可用空间控制记录(FSCR)的,所以需要预留)。(说明:8位能寻址的范围就是0-255,槽号编号就只能是0-255,如果记录再多,就无法被槽目录编号了,无法被寻址,数据存了也是白存。)

    同理,可以根据3个字节的页号,得出一个表空间最多能容纳16777216(16M,2的24次)个数据页。那么,如果是一个数据页4KB的话,表空间大小就是16M*4KB=64GB了。如果一个数据页32KB的话,就是16M*32KB=512GB。(DB2表空间支持的页面大小有4KB,8KB,16KB和32KB四种,一个表空间只能使用一种大小的数据页)

    可以想象,如果数据库表中的行长度(一行所占用的存储空间)太小,由于一个数据页理论上最多只能存储255行(实际上,每一页允许存储的记录数通常少于255条),那必然造成数据页空间的浪费,比如4KB页,长度为12B的行存满页面也只占用12B*255=3060B的空间,剩下的1036KB多的空间只能浪费。下表显示了页面空间被浪费前的最小行长度:

    17d0f2dce1ddabec5cdb05549ff61952.png

    一旦表空间中满足了最大页限制,有以下三种方案可供选择:

    1.在视图中把这些表连接起来(多个表空间中的表在视图中合在一起);

    2.使用DB2的数据库分区功能(DPF,Database Partitioning Feature),横跨多个分区将数据进行组合;

    3.使用范围分区表。

    无论哪种方案都需要将一些数据进行迁移并可能对应用程序进行修改,这无疑是很繁琐的。

    大型表空间

    为了能够让数据页中容纳更多的行(记录)以及表空间中容纳更多的数据页,DB2 V9引入了一种新的行指针(RID,行指示器)格式。数据页标记由3个字节增加到4个字节,槽位由1个字节增加到2个字节,这种6字节的RID格式最终将表空间大小上限扩充到原来的32倍。即4KB页的表空间最大容量为2TB,32KB页的表空间最大容量为16TB。同时,每个数据页所能容纳的行数理论上也扩大为65000多行,但由于规定每一行的最小长度为12B左右,所以,实际上4KB页能容纳的最大行数为4KB/12KB=341行左右,32KB页则是2300行左右。

    下表是4种页实际用于存储数据的空间大小和实际允许存放的行数:

    5587fa9c2d31d95e8a4f904b05247474.png

    这种RID格式很好的解决了表空间大小受限以及数据页空间浪费(不再受制于槽号,而是行长度)的问题。但同时也带来了管理上的挑战,比如备份和恢复。事实上,当表开始增长到TB级的时候,就应该考虑使用一些诸如表分区,数据库分区等技术来进行大型数据量的管理了。

    使用旧的4字节RID格式的表空间就是常规表空间,使用新的6字节RID格式的表空间就是大型表空间了。DB2 V9中大型表空间是DMS表空间的默认类型,当然也可以显式的创建常规表空间(指明表空间为REGULAR)。很显然,SMS表空间是不可能支持大型表空间的。

    支持6字节RID格式的表空间包括:系统临时表空间,用户临时表空间,用户常规表���间。也就是说,只有系统表空间是不能创建为大型表空间的。因为目前的编目表不足以达到能够及时保证较大的表空间大小的状态。

    大型表空间在DB2 V9之前叫长型表空间,用于存储长型或 LOB 表列,以弥补常规表空间在处理长型或LOB数据上的不足。

    常规表空间向大型表空间的迁移

    DB2 V9不会自动将常规表空间升级为大型表空间,但是可以手动升级:ALTER TABLESPACE tablespacename CONVERT TO LARGE。

    ALTER命令不会物理地改变表空间的结构,只是改变了编目方式以指示表空间可以支持6字节的RID格式。要注意的是:

    1.执行LARGE升级后需要立即COMMIT WORK,进行事务提交,否则表空间上会持有排它锁,同时在该表空间中对表所做的其他工作不会继续执行,直到该锁解除为止。

    2.一旦表空间被修改为LARGE,为了更好的利用6字节RID的优势,还需要继续数据重组和索引重组。如果不进行索引重组,那么先前存在的表将延续每页255行以及3字节数量的限制,因为索引使用的仍是旧的RID,无法索引到超出原范围的页。而数据重组(表重组)与索引重组的影响不同,索引重组影响表空间中页的数量,表重组影响的是页中存放的行数。

    0b1331709591d260c1c78e86d0c51c18.png

    展开全文
  • db2 表空间0x0800 如何解决 +备份失败情况如下:db2版本v7.2操作系统windows2000 server表空间syscat ,temp,userspace1(数据库管理=60G),userspace2(数据库管理=60G),userspace3(数据库管理=60G),userspace4...
  • 裸设备及表空间调整文档
  • DB2 表空间状态异常

    2022-01-26 14:27:06
    1.问题现象:由于存储、操作或者权限等原因,会导致DB2表空间状态异常,需要采取相应的动作; https://www.cndba.cn/hbhe0316/article/4878 https://www.cndba.cn/hbhe0316/article/4878 2.问题判断:2.1 ...
  • db2 备份和恢复命令

    2021-05-10 08:07:39
    $db2 list applications for db sample2)、停掉数据库并重新启动,以便断掉所有连接:db2stop forcedb2start3)、执行备份命令:(使用TSM作为备份的介质)db2 backup db sample use tsm备份成功,将会返回一个时间戳。...
  • 深入理解DB2表空间(Tablespace)

    万次阅读 2018-07-30 16:34:31
    表空间是数据库系统中数据库逻辑结构与操作系统物理结构之间建立映射的重要存储结构,它作为数据库与实际存放数据的容器之间的中间层,用于指明数据库中...同时由于备份和恢复可以在表空间级别执行,用户能够进行更...
  • 快速清空DB2表记录

    2021-05-15 03:49:56
    truncate 命令在DB2里面没有,V9.7据说有.===================================================db2 import from /dev/null of del replace into tabname======================================================在...
  • 0x0 Norma 正常 0x1 Quiesced: SHARE 静止态共享 0x2 Quiesced: UPDATE 静止态...0x20 Backup pending 备份挂起 0x40 Roll forward in progress 正在回滚 0x80 Roll forward pending 回滚挂起 0x100 Restore pending
  • DB2数据备份常用命令

    2021-06-04 14:23:21
    创建数据库 db2 create db testdb ...备份数据库 db2 backup db testdb to D://temp 删除数据库 db2 drop db testdb 恢复数据库 db2 restore db testdb from D://temp db2 connect to testdb db2 s.
  • 主题:db2数据库自动备份脚本所属分类:DB2 数据库管理----------------------------------------------------------------------db2数据库自动备份脚本,比如做一个bat文件。点击自动执行备份到指定的目录。我知道...
  • DB2表空间状态异常解决方法

    千次阅读 2018-11-09 17:06:06
    在用DB2导数据的时候,为了恢复自增主键,进行备份和恢复时,因为错误使用了nonrecoverable这个关键字,导致数据库表空间异常,说是备份时出现了问题。查了好多资料发现有个帖子不错,特整理做笔记。 一、问题...
  • DB2表空间状态列表

    千次阅读 2018-03-20 01:25:41
    0x0 Norma 正常0x1 Quiesced: SHARE 静止态共享0x2 Quiesced: UPDATE 静止态更新0x4 Quiesced: EXCLUSIVE 静止态排它0x8 Load pending 载入挂起0x10 Delete pending 删除挂起0x20 Backup pending 备份挂起0x40 Roll ...
  • DB2数据库的备份还原详解

    千次阅读 2021-12-03 15:53:56
    备份: 一、连接数据库服务器(在服务器端建立备份文件夹) windows下(win+r mstsc)输入db2cmd...将DB2命令行窗口的当前路径切换到刚建好的备份目录下 二、导出数据库的的数据。在切换好的目录下,输入如下命令
  • DB2数据库更改表空间

    千次阅读 2019-11-26 15:24:11
    --重命名 rename table T_HELLO to T_HELLO_bak; --创建建表并指定表空间 CREATE TABLE T_HELLO ( ID BIGINT NOT NULL, NAME VARCHAR(64), BIRTHDAY TIMESTAMP, AGE INTEGER, P...
  • DB2离线全备份与在线备份DB2 离线全备份与在线备份1、离线全备份1)、首先确保没有用户使用DB2:$db2 list applications for db sample2)、停掉数据库并重新启动,以便断掉所有连接:db2stop forcedb2start3)、执行...
  • DB2表清空数据的四种方法及技巧

    千次阅读 2021-05-14 13:49:12
    DB2数据库系统建表后,难免会有将中数据清空的需求,本文将为您介绍DB2数据库中四种数据删除的方法,供您参考,您可以根据实际情况来进行选择,希望能对有所帮助。1. 使用 DELETE 语句,即:DELETE FROM该语句将...
  • DB2数据库与表空间的恢复

    千次阅读 2019-01-22 22:04:03
    DB2数据库与表空间的恢复 恢复历史记录文件 ​ 包含当数据库的所有或部分必须恢复到给定时间点时,可用来确定恢复选项的备份信息的摘要 ​ 用来跟踪其他操作中与恢复相关的事件,如备份和复原操作 ​ 文件位于数据库...
  • DB2本地备份恢复

    2021-09-03 10:29:27
    DB2本地备份恢复 DB2备份(backup)和恢复(RESTORE)数据库方法 一、备份(backup)数据库 1、离线全备份 1)、首先确保没有用户使用DB2: db2 list applications for db sample 2)、停掉数据库并重新启动,以便...
  • DB2如何调整表空间大小刚刚接到客户那边打的电话,程序一直报错,所有的业务都做不了,拷贝了一份应用服务器(weblogic)的日志,日志里显示:WARN : 2009-06-18 16:24:32,421: JDBCExceptionReporter[line:77}: SQL ...
  • 一、离线备份su–db2inst1#断开所有连接,关闭数据库#db2forceapplicationsalldb2db2stopforce#启动数据库db2db2start#显示所有数据库及其路径列表db2listdatabasedirectory#显示所有活动的数据库db2...
  • 一、db2备份数据一般用到backup 和 restore引用1、backup db databasename to [driver]restore db databasenamefrom[driver]2、restore db databasenamefrom [driver] intodbrename二、db2move export/import引用1、...
  • db2 表空间backup pending

    千次阅读 2017-11-02 15:15:36
    原因:做了load 操作没有加nonrecoverable 这种错误犯过很多遍,很多遍!...2)只备份表空间,要求断开数据库连接 db2 force applications all db2 backup database ecdsdb tablespace TAB_ECDSM_01
  • DB2支持以下两种类型的表空间:1、 系统管理存储器表空间(SMS-SYSTEM MANAGED STORAGE)2、 数据库管理存储器表空间(DMS-DATABASE MANAGED STORAGE)SMS、DMS用户表空间的特性对照特性 S...
  • 在增量模式下联机备份示例数据库DB2TEST1(联机备份、增量备份、差异备份) DB2 V9引入了自动备份功能。由于大量发生硬件或软件故障,数据库可能会变得不可用。自动数据库备份功能减轻了 DBA 的数据库备份管理任务,...
  • 假设 数据库 testdb 只包含表空间tbs1,tbs2,tbs3 1)t1 时刻 db2 backup db testdb tablespace(tbs1) to /data ...
  • 表空间是数据库系统中数据库逻辑结构与操作系统物理...同时由于备份和恢复可以在表空间级别执行,用户能够进行更多粒度的备份恢复控制。 理解表空间前先理解容器。 容器(Container) 容器是物理存储设备,可以通过

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,202
精华内容 5,280
关键字:

db2表空间备份

友情链接: 案例1 富林达.zip