DB2常用命令汇总之四

来源:互联网 发布:meta数据 编辑:程序博客网 时间:2024/06/04 20:01
DB2命令总汇四

##db2move

db2move 是一个数据移动工具,可以用来在 DB2 数据库之间移动大量的表。该命令中支持的操作有 EXPORT、IMPORT 和 LOAD。
db2move 的语法可以象下面那样简单:
db2move database_name action options

该工具先从系统目录表中抽取用户表列表,接着以 PC/IXF 格式导出每个表。然后,可以将这些 PC/IXF 文件导入或装入到另一个
DB2 数据库。
以下是一些示例。下面这条命令用指定的用户标识和密码以 REPLACE 方式导入 sample 数据库中的所有表:

db2move sample import -io replace -u userid -p password
而下面这条命令则以 REPLACE 方式装入 db2admin 和 db2user 模式下的所有表:

db2move sample load -sn db2admin, db2user -lo REPLACE
   ##db2look 是一个方便的工具,可以从命令提示符或控制中心对其进行调用。该工具可以:

从数据库对象抽取数据库定义语言(DDL)语句
生成 UPDATE 语句来更新数据库管理器和数据库配置参数
生成 db2set 命令来设置 DB2 概要文件注册表
抽取和生成数据库统计报告
生成 UPDATE 语句来复制有关数据库对象的统计信息
类似 LOAD 的实用程序都要求存在目标表。您可以使用 db2look 来抽取表的 DDL,对目标数据库运行该 DLL,然后调用装入操作。如同下面
的示例所演示的那样,db2look 使用起来非常方便。下面这条命令为(来自数据库 department 的)peter 所创建的所有对象生成 DDL 语句,
同时将输出存储在 alltables.sql 中。


db2look -d department -u peter -e -o alltables.sql


接下来这条命令生成:

数据库 department 中所有对象的 DLL(由选项 -d、-a 和 -e 指定)。
复制数据库中所有表和索引的统计信息的 UPDATE 语句(由选项 -m 指定)。
GRANT 授权语句(由选项 -x 指定)。
用于数据库管理器和数据库配置参数的 UPDATE 语句,以及用于概要文件注册表的 db2set 命令(由选项 -f 指定)。

db2look -d department -a -e -m -x -f -o db2look.sql

##RUNSTATS 实用程序

DB2 利用一个完善的、基于成本的优化器来确定如何访问数据。其决策在很大程度上受到了一些统计信息的影响,这些统计信息是关于数据库
表和索引的大小的。因此,要时刻使数据库统计信息保持最新状态,以便能够选择有效的数据存取方案,这一点十分重要。RUNSTATS 实用程
序用于更新表的物理特征及其相关索引的统计信息。这些特征包括记录数(基数)、页数和平均记录长度等。
让我们用一些示例来演示此实用程序的用法。下面的命令收集表 db2user.employee 的统计信息。在计算统计信息期间允许阅读器和记录器访
问该表:

RUNSTATS ON TABLE db2user.employee ALLOW WRITE ACCESS

以下命令用分布式统计收集表 db2user.employee 以及列 empid 和 empname 的统计信息。在此命令运行期间,该表只能用于只读请求。

RUNSTATS ON TABLE db2user.employee WITH DISTRIBUTION ON COLUMNS ( empid, empname )
    ALLOW READ ACCESS
以下命令收集表 db2user.employee 的统计信息及其全部索引的详细统计信息:

RUNSTATS ON TABLE db2user.employee AND DETAILED INDEXES ALL

##REORG 和 REORGCHK 实用程序

从数据库增删的数据在物理上可能并不是按顺序放置的。在这种情况下,DB2 必须执行额外的读操作来访问数据。通常,这意味着需要更多的
磁盘 I/O 操作,而我们都知道进行这类操作的代价是昂贵的。在这种情况下,您应该考虑根据索引对表进行物理上的重组,以便相关数据相
互之间靠得更近一些,从而尽可能地减少 I/O 操作。
REORG 是一个为表和/或索引重组数据的实用程序。虽然在物理上对数据进行了重新安排,但 DB2 却提供了联机或脱机执行该操作的选项。
在缺省情况下,脱机 REORG 允许其他用户读取该表。您可以通过指定 ALLOW NO ACCESS 选项来限制表访问。联机 REORG(也称为现场 REORG)
不支持对表的读访问或写访问。由于重新安排了数据页,因此并发应用程序可能必须等待 REORG 完成当前页。您可以使用适当的选项来轻松
地停止、暂停或重新开始重组过程:
下面的示例都是非常容易看懂的:

REORG TABLE db2user.employee INDEX db2user.idxemp INPLACE ALLOW WRITE ACCESS
REORG TABLE db2user.employee INDEX db2user.idxemp INPLACE PAUSE

REORGCHK 是另一个数据维护实用程序,它有一个选项可以用来检索当前的数据库统计信息或更新数据库统计信息。它还会生成带有 REORG
指示符的统计信息报告。REORGCHK 根据统计规则在需要 REORG 的地方用星号(*)标记表或索引。
让我们考虑一些示例。下面这条命令生成当前(关于运行时授权标识拥有的全部表的)统计信息的报告:
REORGCHK CURRENT STATISTICS ON TABLE USER

下面的命令更新统计信息,然后生成在模式 smith 下创建的全部表的报告:

REORGCHK UPDATE STATISTICS ON SCHEMA smith

##REBIND 实用程序和 FLUSH PACKAGE CACHE 命令

在执行数据库应用程序或任何 SQL 语句之前,必须先由 DB2 对它们进行预编译,并生成一个包。包是一种数据库对象,其中含有应用程序
源文件中所使用的已编译 SQL 语句。DB2 使用该包来访问 SQL 语句中引用的数据。DB2 优化器如何为这些包选择数据存取方案呢?它依靠
包创建时的数据库统计信息。
对于静态 SQL 语句,包在编译时创建,并且被绑定到数据库上。如果对统计信息进行了更新,以反映物理数据库特征,那么也应该更新现有
的包。REBIND 实用程序允许您重新创建包,以便可以利用当前的数据库统计信息。命令十分简单:

REBIND PACKAGE package_name


不过,如果您要更改应用程序源代码,那么就得显式地删除现有的相关包,然后重新创建包。REBIND 实用程序不用于这一目的。这里,
我们之所以就此对您加以提醒,是因为 DBA 经常误解了 REBIND 的用法。
对于动态 SQL 语句,它们是在运行时预编译的,而且被存储在包高速缓存中。如果更新了统计信息,那么您可能会刷新高速缓存,以便
重新编译动态 SQL 语句,从而获取更新的统计信息。命令类似下面的样子:

FLUSH PACKAGE CACHE DYNAMIC

##数据库维护过程
RUNSTATS -- REORGCHK--YES--REORG
              |      |
              |      |
              NO   |----- RUNSTATS
              |----|---------|
              REBIND      FLUSH PACKAGE CACHE
                 |      |
                 APPLICATION EXECUTION
                
##DB2性能顾问程序
1,图形化工具CONFIGURATION ADVISOR
2,CLP AUTOCONFIGURE USING mem_percent 60 workload_type complex num_stmts 20 APPLY DB AND DBM

##DB2 设计顾问程序

设计顾问程序可以帮您找到 SQL 语句的最佳索引。它使用 DB2 优化器、数据库统计信息和解释(Explain)
机制来为特定查询或一组 SQL 语句(也称为工作负载)生成推荐索引。您可以从命令行用 db2advis 加上必要的输入启动该顾问程序。
下面的示例使用输入文件
input.sql 对 sample 数据库执行设计顾问程序,该输入文件含有一组 SQL 语句。然后将输出存储在 output.out 中。
db2advis -d sample -i input.sql -o output.out

图形化工具:desigen Advisor

### 备份与恢复

##数据库恢复概念
  系统故障,事务故障,介质故障,灾难。
  #恢复策略
    问题:可以再次从另一个来源装入数据吗?能够承受丢失多少数据?
          能化多少时间来恢复数据库?哪些存储资源可用于存储备份和日志?
  #恢复类型
    崩溃恢复(系统崩溃,DB2重新启动执行回滚),版本恢复(使用从BACKUP命令
    获取的备份中恢复先前的数据库版本),前滚恢复(通过使用完全数据库备份,结合
    日志文件来扩展版本恢复,要求使用归档日志记录)
    db2采用先写日志后写磁盘数据库的方式。
  #主日志文件和辅助日志文件
    主日志文件是在首次数据库连接时或数据库激活时直接分配的。辅助日志文件需要时每次动态地分配一个。

有几个与日志记录相关的数据库配置参数。其中一些参数是:

LOGPRIMARY:该参数确定要分配的主日志文件数。
LOGSECOND:该参数确定可分配的辅助日志文件的最大数目。(最大254)
LOGFILSIZ:该参数用于指定日志文件的大小(用 4 KB 页为单位)。
让我们考虑一个示例。假设数据库配置文件中有下列值:

Log file size (4 KB)                        (LOGFILSIZ) = 250
Number of primary log files                (LOGPRIMARY) = 3
Number of secondary log files               (LOGSECOND) = 2
Path to log files                                       = C:/mylogs/

一旦首次建立与数据库的连接,就分配三个主日志文件,它们均由 250 个 4 KB 页组成。
DB2 将填满第一个日志,然后继续填满第二个和第三个日志。填满第三个日志文件后,没有更多的主
(预分配的)日志文件,因此 DB2 将动态地分配第一个辅助日志文件,因为 LOGSECOND 大于零。一旦
这个日志文件被填满,DB2 将继续分配另一个辅助日志文件,并将重复该过程,直到达到 LOGSECOND 日
志文件数目的最大值为止。对于该示例,当 DB2 尝试分配第三个辅助日志文件时,它将返回一个错误,
指出已经达到事务满条件。此时,将回滚该事务。

#无限日志记录
要允许无限的活动日志记录:

将 USEREXIT 数据库配置参数设置为 ON。
将 LOGSECOND 设置为值 -1。
#日志类型
活动日志。如果满足下面两个条件中的任何一个,则认为该日志是活动的:
它包含有关还未提交或回滚的事务的信息。
它包含有关已经提交但其更改还未被写入数据库磁盘(外部化)的事务的信息。
联机归档日志。这种类型的日志包含已提交的且已外部化的事务的信息。这种日志被保存在与活动日志相同的目录中。
脱机归档日志。是指已经从活动日志目录移动到另一个目录或介质的归档日志。可以手工或使用用户出口(userexit)
的自动过程来完成这个移动。

   ##日志记录类型
   循环日志类型:循环日志记录是 DB2 的缺省日志记录方式。从其名称可以知道,这种类型的日志记录以循环方式重用日志。例如,如果
有四个主日志文件
   ,那么 DB2 将以如下顺序使用它们:Log #1,Log #2,Log #3,Log #4,Log #1,Log #2 等。
只要日志仅包含有关已经提交的且被外部化到数据库磁盘的事务的信息,就可以用循环日志记录方式重用它。换言之,如果日志仍
是一个活动日志,则不能重用它。
采用上面的示例,如果一个长期运行的事务使用五个日志,那么将发生什么情况呢?
在这种情况下,DB2 将分配另一个日志文件 — 辅助日志文件,

  归档日志记录。同样,可以从其名称知道,当使用归档日志记录时,将归档(保留)日志。在循环日志记录中,要覆盖已提交且已外部化的
事务,而在归档日志记录中,将保存它们。
  例如,如果有四个主日志,DB2 可能以如下顺序使用它们:Log #1,Log #2,Log #3,Log #4,(如果 Log #1 的所有事务都已被提
交且外部化,则将其归档),Log #5,
  (如果 Log #2 的所有事务都已被提交且外部化,则将其归档),Log #6 等。
正如您从上面的示例所看到的那样,DB2 将使四个主日志文件保持可用,并且将不重用那些已经用某些事务填满的日志文件,这些
事务已经被提交且外部化。换言之,
它不会覆盖已变成归档日志的日志。
注:在使用归档日志记录之前,需要启用它。要启用它,必须同时打开下列参数或打开其中的任意一个:

LOGRETAIN (db2 update db cfg for database_name using LOGRETAIN ON)
USEREXIT  (db2 update db cfg for database_name using USEREXIT ON)
循环日志记录仅支持崩溃和版本恢复,而归档日志记录支持所有类型的恢复:崩溃恢复、版本恢复和前滚恢复。

用户出口

我们在前几章中多次提到用户出口。用户出口是允许将联机归档日志移到另一个目录(非活动日志目录)或另一个介质的程序。当为完全数据库
恢复进行 ROLLFORWARD 操作期间需要脱机归档日志时,用户出口还会将它们检索到活动日志目录中。要启用用户出口,将 USEREXIT 数据库配置参
数设置为 ON。一旦启用,DB2 将根据需要自动调用用户出口程序。需要将该程序命名为 db2uext2,在 Windows 中,应该将它存储在 sqllib/bin
目录中,在 UNIX 中,应该将它存储在 sqllib/bin 目录中。

## 数据库和表空间备份

#数据库备份 第 2 页(共6 页)

 


数据库备份是数据库的完整副本。除了数据外,备份副本还会包含有关表空间、容器、数据库配置、日志控制文件以及恢复历史记录文件的信息。注:备份将不存储数据库管理器配置文件或注册表变量。只备份数据库配置文件。

要执行备份,需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

下面是用于这种备份的 BACKUP 命令实用程序的语法:


BACKUP DATABASE database-alias [USER username [USING password]]
      [TABLESPACE (tblspace-name [ {,tblspace-name} ... ])] [ONLINE]
      [INCREMENTAL [DELTA]] [USE {TSM | XBSA} [OPEN num-sess SESSIONS]] |
   TO dir/dev [ {,dir/dev} ... ] | LOAD lib-name [OPEN num-sess SESSIONS]]
      [WITH num-buff BUFFERS] [BUFFER buffer-size] [PARALLELISM n]
      [WITHOUT PROMPTING]


要使用其它备份选项来执行数据库“sample”的完全脱机备份,可以使用以下命令:


(1) BACKUP DATABASE sample                     
(2)   TO /db2backup/dir1, /db2backup/dir2    
(3)   WITH 4 BUFFERS                         
(4)   BUFFER 4096                            
(5)   PARALLELISM 2                          


让我们更仔细地研究该命令:

指明要备份的数据库的名称(或别名)。
指定用来存储备份的一个或多个位置。
确定在备份操作期间可以使用内存中的多少缓冲区。使用多个缓冲区可以改善性能。
确定每个缓冲区的大小。
确定使用多少个介质阅读器/记录器进程/线程来执行备份。
注:语法中没有关键字 OFFLINE,因为这是缺省方式。要执行 sample 数据库的完全联机备份,必须指定关键字 ONLINE,如下所示:


BACKUP DATABASE sample                  
  ONLINE                              
  TO /dev/rdir1, /dev/rdir2           


我们先前提到过:联机备份允许其他用户在备份数据库时对它进行访问。这些用户所做的一些更改很可能在备份时没有存储在备份副本中。
因此,恢复时需要联机备份和一组完整的归档日志。此外,联机备份一完成,DB2 就强制当前的活动日志关闭;结果,将归档该日志。

注:联机备份要求为数据库启用归档日志记录。 DB CFG: LOGHEAD指向活动的最低编号的日志,小于LOGHEAD的日志
是归档日志且可以移动。可以使用ARCHIVE LOG 命令来对日志进行归档。

 

#表空间备份
   在只有一些表空间有相当大更改的数据库中,可以选择不备份整个数据库,而只备份特定表空间。
要执行表空间备份,请使用以下语法:

(1) BACKUP DATABASE sample
(2) TABLESPACE ( syscatspace, userspace1, userspace2 )
(3) ONLINE
(4) TO /db2tbsp/backup1, /db2tbsp/backup2
通常,您想要将相关的表空间备份在一起,如数据,索引,LOB
  或定义了表间引用约束的表的表空间
 
  注意:此备份方式只能用于ARCHIVAL LOGGIN 环境中。

  #增量备份
  有两种类型的增量备份:

增量:DB2 备份自上次完全数据库备份以来所更改的所有数据。
delta:DB2 将只备份自上一次成功的完全、增量或差异备份以来所更改的数据。

注意:要执行增量备份,DB CFG中的TRACKMOD必须设置为 YES(跟踪表空间中发生变化的页面).
  在控制中心执行备份。
 
  #备份文件
  磁盘上的 DB2 备份文件的命名约定包含下列几项:

数据库别名
表示备份类型的数字(0 表示完全数据库备份,3 表示表空间备份,4 表示来自 LOAD 的副本)
实例名
数据库节点(对于单一分区数据库始终是 NODE0000)
目录节点号(对于单一分区数据库始终是 CATN0000)
备份的时间戳记
映像序列号

分区数据库的备份:
In the following example, the database WSDB is defined on all 4 partitions,
numbered 0 through 3. The path /dev3/backup is accessible from all
partitions. Partition 0 is the catalog partition, and needs to be backed-up
separately since this is an offline backup. To perform an offline backup of all
the WSDB database partitions to /dev3/backup, issue the following
commands from one of the database partitions:

db2_all ’<<+0< db2 BACKUP DATABASE wsdb TO /dev3/backup’
db2_all ’|<<-0< db2 BACKUP DATABASE wsdb TO /dev3/backup’


##数据库和表空间恢复
#数据库恢复

下面是 RESTORE 命令的语法:


RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }

restore-options:
  [USER username [USING password]] [{TABLESPACE [ONLINE] |
  TABLESPACE (tblspace-name [ {,tblspace-name} ... ]) [ONLINE] |
  HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
  [{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
  FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
  [OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
  [INTO target-database-alias] [NEWLOGPATH directory]
  [WITH num-buff BUFFERS] [BUFFER buffer-size]
  [DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
  [WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]


让我们研究一个示例。要执行 sample 数据库的恢复,请使用以下命令:


(1)RESTORE DATABASE sample
(2)  FROM  C:/DBBACKUP
(3)  TAKEN AT 20030314131259
(4)  WITHOUT ROLLING FORWARD
(5)  WITHOUT PROMPTING


让我们更仔细地研究该命令:

指明要恢复的数据库映像的名称。
指定要从什么位置读取输入备份文件。
如果目录中有多个备份映像,那么该选项将根据时间戳记(它是备份名称的一部分)确定特定的备份。
如果为数据库启用了归档日志记录,那么当恢复该数据库时,它将自动被置于前滚暂挂状态。这行告诉 DB2 不要使数据库处于前滚暂挂状态。
在执行 RESTORE 时,不会提示您。
请注意,语法中没有关键字 OFFLINE,因为这是缺省方式。事实上,对于 RESTORE 实用程序,这是数据库允许的唯一方式。

#表空间恢复

表空间恢复需要相当仔细的规划,因为比较容易犯错,这会使数据处于不一致状态。

下面是表空间 RESTORE 命令的示例:


(1)RESTORE DATABASE sample
(2)  TABLESPACE ( mytblspace1 )
(3)  ONLINE
(4)  FROM /db2tbsp/backup1, /db2tbsp/backup2


让我们更仔细地研究该命令:

指明要恢复的数据库映像的名称。
指出这是表空间 RESTORE,并指定要恢复的一个或多个表空间的名称。
指出这是联机恢复。注:对于用户表空间,既允许联机恢复也允许脱机恢复。正如前面所提到的那样,对于数据库,只允许脱机恢复。
指定输入备份文件所在的位置。
表空间恢复注意事项

恢复表空间之后,它将始终处于前滚暂挂状态。要使表空间可访问并复位该状态,必须至少将表空间前滚到最小的时间点
(point in time,PIT)。该最小的 PIT 确保表空间和日志与系统目录中的内容保持一致。

请考虑下面的示例:

假设在时间 t1 您执行了完全数据库备份,该备份包括了表空间 mytbls1
在时间 t2,您在表空间 mytbls1 中创建了表 myTable。这会将表空间 mytbs1 恢复的最小 PIT 设置为 t2。
在时间 t3,您决定仅从在 t1 进行的完全数据库备份恢复表空间 mytbls1。
恢复完成之后,表空间 mytbls1 将处于前滚暂挂状态。如果允许前滚到最小 PIT 之前的某一点,则表空间 mytbls1 将失去表 myTable;然而,系统目录将显示该表确实存在于 mytbls1 中。因此,为了避免类似的不一致,DB2 会在您恢复表空间时强制您至少前滚到最小 PIT。
当针对表空间或表空间中的表运行 DDL 语句时,会更新最小的 PIT。为了确定表空间恢复的最小 PIT,可以使用下列两种方法之一:

使用 LIST TABLESPACES SHOW DETAIL 命令
通过 GET SNAPSHOT FOR TABLESPACE ON db_name 命令获取表空间快照。
另外,系统目录表空间(SYSCATSPACE)必须前滚到日志的末尾并处于脱机方式。

#重定向恢复
我们前面提到过备份文件包括有关表空间和容器的信息。如果过去存在的容器在进行备份时不再存在时,会发生什么情况?如果 RESTORE 实用程序找不到该容器,那么您将得到一个错误。

如果您不想在这个位置恢复该备份,而想在别的位置进行恢复,但在那个地方又使用了其它配置,该怎么办?同样,在该情况下恢复备份将会产生问题。

重定向恢复解决了这些问题。重定向恢复的恢复备份过程只有四个步骤:

获取记录在输入备份中的、有关容器和表空间的信息。通过将 REDIRECT 关键字包含在 RESTORE 命令中就能完成这一任务。例如:

RESTORE DATABASE DB2CERT FROM C:/DBBACKUP
        INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD

不需要事先产生数据库NEWDB
下面是该命令的输出:


SQL1277N  Restore has detected that one or more table space containers are
inaccessible, or has set their state to 'storage must be defined'.
DB20000I  The RESTORE DATABASE command completed successfully.

注意:此时已经创建了数据库NEWDB。

复查来自(部分)恢复数据库 newdb 的表空间信息:

LIST TABLESPACES SHOW DETAIL
表空间还没有产生。

为每个表空间设置新容器。表空间有一个标识,可以从 LIST TABLESPACES 命令的输出获取这个标识。如下使用该标识:

SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:/newdb/cat0.dat" 5000)
SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:/newdb/cat1.dat" 5000)
...
SET TABLESPACE CONTAINERS FOR n USING (PATH "d:/newdb2")

上面命令将产生表空间。

在上面的示例中,n 表示备份中某一个表空间的标识。另外请注意,对于重定向恢复,不能更改表空间的类型;即,如果表空间是 SMS,那么就不能将它更改为 DMS。

通过将关键字 CONTINUE 包含在 RESTORE 命令中,开始将数据本身恢复到新容器中,如下所示:

RESTORE DATABASE DB2CERT CONTINUE
现在,您已经了解了重定向恢复是如何工作的。也可以将它用于为 SMS 表空间添加容器。如果您阅读过本系列的第二篇教程,那么您应该知道在大多数情况下不能对 SMS 表空间进行修改以添加容器。重定向恢复为这一限制提供了一种变通方法。

分区数据库的恢复::

In the following example, the database WSDB is defined on all 4 partitions,
numbered 0 through 3. The path /dev3/backup is accessible from all
partitions. The following offline backup images are available from
/dev3/backup:
wsdb.0.db2inst1.NODE0000.CATN0000.20020331234149.001
wsdb.0.db2inst1.NODE0001.CATN0000.20020331234427.001
wsdb.0.db2inst1.NODE0002.CATN0000.20020331234828.001
wsdb.0.db2inst1.NODE0003.CATN0000.20020331235235.001
To restore the catalog partition first, then all other database partitions of the
WSDB database from the /dev3/backup directory, issue the following
commands from one of the database partitions:

db2_all ’<<+0< db2 RESTORE DATABASE wsdb FROM /dev3/backup
TAKEN AT 20020331234149
INTO wsdb REPLACE EXISTING’
db2_all ’<<+1< db2 RESTORE DATABASE wsdb FROM /dev3/backup
TAKEN AT 20020331234427
INTO wsdb REPLACE EXISTING’
db2_all ’<<+2< db2 RESTORE DATABASE wsdb FROM /dev3/backup
TAKEN AT 20020331234828
INTO wsdb REPLACE EXISTING’
db2_all ’<<+3< db2 RESTORE DATABASE wsdb FROM /dev3/backup
TAKEN AT 20020331235235
INTO wsdb REPLACE EXISTING’


##数据库和表空间前滚
#数据库前滚
在上一章中,我们简要地讨论了 ROLLFORWARD 命令。在本章中,我们将更详细地讨论它。ROLLFORWARD 命令允许恢复到某一时间点;
这意味着该命令将让您遍历 DB2 日志,并重做或撤销记录在日志中的操作直到某个特定的时间点。虽然可以将数据库或表空间前滚到最小
PIT 之后的任何时间点,但不能保证您选择前滚到的结束时间将使所有数据保持一致。

我们将不在本教程中讨论 QUIESCE 命令。然而,值得提一下的是:可以在常规数据库操作期间使用该命令来设置一致性点。通过设置
这些一致性点,您可以始终执行至其中任何一点的时间点恢复,并保证数据同步。

一致性点和许多其它信息一起被记录在 DB2 历史记录文件中,可以使用 LIST HISTORY 命令来查看该文件。

在前滚处理期间,DB2 将:

在当前日志路径中查找必需的日志文件。
如果找到该日志,重新从日志文件应用事务。
如果在当前路径中找不到该日志文件,并且使用了 OVERFLOWLOGPATH 选项,那么 DB2 将在该选项指定的路径中搜索并且将使用该位置中的
日志。
如果在当前路径中找不到该日志文件并且没有使用 OVERFLOWLOGPATH 选项,则调用用户出口来检索归档路径中的日志文件。
仅当前滚完全数据库恢复并且启用了用户出口时,才会调用用户出口来检索日志文件。
一旦日志在当前日志路径或 OVERFLOWLOGPATH 中,就将重新应用事务。
执行 ROLLFORWARD 命令需要 SYSADM、SYSCTRL 或 SYSMAINT 权限。

下面是 ROLLFORWARD 命令的语法:


ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME] | END OF LOGS
[On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
  ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO  db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
  {DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
  [TO db-partition-number] , ...)]}


让我们研究一个示例。要执行样本数据库的前滚,可以使用下列任意一条语句:


(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE


让我们仔细地研究每一条语句:

在该示例中,我们将前滚到日志的结尾,这意味着将遍历所有归档和活动日志。最终它将完成前滚并通过回滚任何未提交的事务来除去
前滚暂挂状态。
对于该示例,DB2 将前滚到指定的时间点。使用的时间戳记形式必须是 CUT(全球标准时间,Coordinated Universal Time),这可以通
过从当前时区减去本地时间来计算。
该示例类似于上一个示例,但可以用本地时间表示时间戳记。
请注意,语法中没有关键字 OFFLINE,因为这是缺省方式。事实上,对于 ROLLFORWARD 命令,这是数据库允许的唯一方式。

#表空间前滚 第 2 页(共4 页)


表空间前滚通常可以联机或脱机。但系统目录表空间(SYSCATSPACE)是例外,它只能进行脱机前滚。

下面是一个表空间前滚示例:

ROLLFORWARD DATABASE sample
  TO END OF LOGS AND COMPLETE
  TABLESPACE ( userspace1 ) ONLINE


上面示例中的选项已经在数据库前滚一章中说明过了。这里唯一的新选项是 TABLESPACE,它指定要前滚的表空间。

表空间前滚考虑事项

如果启用注册表变量 DB2_COLLECT_TS_REC_INFO,则只处理恢复表空间所需的日志文件;ROLLFORWARD 命令将跳过不需要的日志文件,这可以加快恢复时间。
ROLLFORWARD 命令的 QUERY STATUS 选项可用于列出 DB2 已经前滚的日志文件、下一个需要的归档日志文件以及自前滚处理开始以来最后一次提交的事务的时间戳记。例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME
在表空间时间点前滚操作完成后,表空间处于备份暂挂状态。必须对表空间或数据库进行备份,因为在表空间恢复到的时间点和当前时间之间对它所做的所有更新都已经丢失。

##索引的重新创建
#重建索引

如果由于一些硬件或操作系统原因而使数据库崩溃,那么在数据库重新启动阶段一些索引可能被标记为无效。配置参数 INDEXREC 确定 DB2 何时将试图重建无效索引。

INDEXREC 在数据库管理器和数据库配置文件中都进行了定义。该参数有三个可能的设置:

SYSTEM:只能在数据库配置文件中指定该值。当将 INDEXREC 设置为该值时,DB2 将查找在数据库管理器配置文件中指定的 INDEXREC 设置,并使用该值。
ACCESS:这意味着在第一次访问索引时重建无效索引。
RESTART:这意味着在数据库重新启动期间重建无效索引。


###管理服务器
get admin cfg
update admin cfg using <p> <v>


备份表空间
BACKUP DATABASE SAMPLE TABLESPACE ( USERSPACE1 ) ONLINE TO "d:/db2/" WITH 1 BUFFERS BUFFER 1024 PARALLELISM 1 WITHOUT PROMPTING;

生成表的DDL
db2look -d SAMPLE -t  MY_EMPLOYEE  -a -e  -l  -x  -c ;
包括表的统计信息的DDL
db2look -d SAMPLE -t  MY_EMPLOYEE  -a -e  -l  -x  -m  -r  -c ;

svmon

5.1 maintrcie 4
db2 fixpak 2

## 数据库空间需求
# 系统目录表的空间需求  3.5MB

# 用户表数据的空间需求
每页面255行 
4KB页面 68字节用于管理开销,4028用于数据,行长度不能超过4005字节,最多500列。
8,16,32KB 页面                                     8101,16293,32677     1012列
       估计大小公式4KB:
          (4028/(AVERAGE ROW SIZE + 10)) = RECORDS_PER_PAGE
          (NUMBER_OF_RECORDS/RECORDS_PER_PAGE)*1.1 = NUMBER_OF_PAGES
  长型字段数据的空间需求
存储在单独的表对象中。数据存储在大小为32KB的区域中。
  大对象数据的空间需求
#索引的空间的需求
(平均索引键大小+9)×行数×2
  创建索引的临时空间需求
         (平均索引键大小+9)×行数×3.2
对每个叶子页的平均键数的粗略估计是
#日志文件的空间需求
(logprimary + logsecond)*(logfilesiz+2)*4096
如果以对数据库启用了无限记录(logsecond 设置为-1),则必须启用userexit配置参数。
#临时空间需求
 
##分区数据库验证
  select distinct dbpartitionnum(empno) from employee;
#分区键
未指定则使用主键的第一列,无主键则使用第一个非长类型列。
选择能否使数据分布均匀及经常使用的列,可以用列的组合但不能超过16列,列越少,性能越好。
分区键不能更改,任何唯一键或主键必须包含分区键列

#表并置
需要经常进行关联的表在指定分区键时,每个分区键中对应列的数据类型必须是分区兼容的,并称为表并置
具有相同值但有不同类型的两个变量会安相同的分区算法映射至同一个分区号。
        如:INTEGER,SMALLINT,BIGINT
    REAL,FLOAT
    CHAR,VARCHAR

#隔离级别
  隔离级确定了在数据被访问时,如何锁定数据或将数据与其它进程隔离。您可以在应用程序预编译或在
  静态 SQL 程序中绑定到数据库时指定隔离级,或者也可以将它指定为连接或语句选项。
  选择的隔离级可同时影响 DB2 选择的锁定策略和 S 行锁定可以由应用程序持有的时间。
  隔离级只应用于被读取的行。对于更改的行,应用程序需要获取一个 X 或 W 锁。无论应用程序的隔离级是什么,
  X 或 W 锁在回滚或提交之前不被释放。

    
原创粉丝点击