db2经验整理

问题15db2表空间概述

DB2 的表空间按管理方式分为两种:系统管理空间(System Management 

Space
SMS)和数据库管理空间(Database Management SpaceDMS)。

   
   
按类型分为:规则表空间、长整数表空间、系统临时表空间、用户临时表空间


。其中长整数表空间只能是DMS的。


   
规则表空间中包含用户数据的表。默认用户表空间名为USERSPACE1,索引也存


储在规则表空间中,另外系统目录表也放在规则表空间中。


   
默认的系统目录表空间名为SYSCATSPACE


   
临时表空间分为系统临时表空间和用户临时表空间。系统临时表空间用来存储


各种数据操作(排序、重组表、创建索引、连接表)中所需的内部临时数据,虽


然可以创建任意多个系统临时表空间,但建议用户只使用大多数表所使用的页大


小创建一个,默认系统临时表空间名为TEMPSPACE1。用户临时表空间用来存储已


说明全局临时表(已说明全局临时表存储的是应用程序临时数据)。用户临时表


空间不是在数据库创建时默认创建的。


   SMS
每个容器是操作系统的文件空间中的一个目录;DMS每个容器是一个固定的


、预分配的文件,或是物理设备。


   SMS
的管理比较简单,由操作系统自动管理,空间的大小随数据量的变化系统


自动调整。


   DMS
是由数据库管理的,空间大小在创建时确定,空间不够时要手工添加或删


除部分数据以释放空间。


   
大多数情况下,DMS的性能比SMS好。


   
用命令行方式创建SMS表空间的简单语法:

CREATE TABLESPACE <NAME> MANAGED BY SYSTEM USING ('<path>;')

   
用命令行方式创建DMS表空间的简单语法:

CREATE TABLESPACE <NAME>  MANAGED BY DATABASE USING (FILE '<path>;' 

<size>;)

例一:在OS/2Windows NT上创建一个SMS表空间:

CREATE TABLESPACE RESOURCE MANAGED BY SYSTEM
  USING ('d:/acc_tbsp','e:/acc_tbsp','f:/acc_tbsp')

例二:在OS/2上创建一个DMS表空间,使用各自有5000页的两个文件容器:

CREATE TABLESPACE RESOURCE MANAGED BY DATABASE
  USING (FILE 'd:/db2data/acc_tbsp' 5000,
         FILE 'e:/db2data/acc_tbsp' 5000)

例三:在UNIX上创建一个DMS表空间,使用各有10000页的3个逻辑卷:

CREATE TABLESPACE RESOURCE MANAGED BY DATABASE
  USING (DEVICE '/dev/rdblv6' 10000,
         DEVICE '/dev/rdblv7' 10000,
         DEVICE '/dev/rdblv8' 10000)
  OVERHEAD 24.1
  TRANSFERRATE 0.9
上面语句中提到的UNIX设备必须已经存在,且实例拥有者和SYSADM组必须能够写


入它们。


例四:在UNIX分区数据库中称为ODDNODEGROUP的节点组上创建一个DMS表空间:

CREATE TABLESPACE PLANS MANAGED BY DATABASE
  USING (DEVICE '/dev/HDISK0' 10000, DEVICE '/dev/n1hd01' 40000) ON 

NODE 1
        (DEVICE '/dev/HDISK0' 10000, DEVICE '/dev/n3hd03' 40000) ON 

NODE 3
        (DEVICE '/dev/HDISK0' 10000, DEVICE '/dev/n5hd05' 40000) ON 

NODE 5
在此例中,ODDNODEGROUP节点组由编号为135的数据库分区组成,在所有数据


库分区上,都使用具有100004KB页的 /dev/hdisk0 设备,另外,还为每个数据


库分区说明了一个包含400004KB大小的页的设备。


例五:在UNIX系统上,创建一个具有8KB页大小的SMS表空间:

CREATE TABLESPACE SMS8K PAGESIZE 8192
  MANAGED BY SYSTEM
  USING ('FSMS_8K_1')
  BUFFERPOOL BUFFPOOL8K
相关的缓冲池也必须具有相同的8KB页大小。另外,创建的表空间只有在所引用的


缓冲池被激活后才能使用。


例六:创建系统临时表空间:

  
系统临时表只能存储在系统临时表空间中,所以数据库必须始终至少有一个系


统临时表空间。

CREATE SYSTEM TEMPORARY TABLESPACE tmp_tbsp
  MANAGED BY SYSTEM
  USING ('d:/tmp_tbsp','e:/tmp_tbsp')
创建系统临时表空间时,只能指定IBMTEMPGROUP节点组。


例七:创建用户临时表空间:

  
用户临时表空间用来存储已说明的临时表。

CREATE USER TEMPORARY TABLESPACE usr_tbsp
  MANAGED BY DATABASE
  USING (FILE 'd:/db2data/user_tbsp' 5000,
         FILE 'e:/db2data/user_tbsp' 5000)
与常规表空间一样,用户临时表空间可以在除IBMTEMPGROUP之外的任何节点组中


创建。创建用户临时表空间使用的默认节点组是IBMDEFAULTGROUP
DECLARE 

GLOBAL TEMPORARY TABLE 
语句定义提供在用户临时表空间中使用的已说明临时表




例八:将两个新设备容器添加到UNIX上的一个表空间中:

ALTER TABLESPACE RESOURCE
  ADD (DEVICE '/dev/rhd9' 10000,
       DEVICE '/dev/rhd10' 10000)

例九:把UNIX上的表空间中的两个设备容器改变大小(由1000页改为2000页)

ALTER TABLESPACE HISTORY
  RESIZE (DEVICE '/dev/rhd7' 2000,
          DEVICE '/dev/rhd8' 2000)

例十:在UNIX表空间中,扩充两个设备容器(原本各含1000页)

ALTER TABLESPACE HISTORY
  EXTEND (DEVICE '/dev/rhd11' 1000,
          DEVICE '/dev/rhd12' 1000)
操作后两个设备的大小都从1000页扩充至2000页。不能缩小容器的大小。


可以给现存表空间重命名,而无须关心该表空间中的个别对象。重命名表空间时


,将更改所有引用该表空间的目录记录。不能重命名SYSCATSPACE表空间;不能重


命名处于前滚暂挂或正在前滚状态的表空间。


删除表空间时,也会删除该表空间中的所有数据,释放容器,去除目录项,并导


致该表空间中定义的所有对象都被删除或标记为无效。可以通过删除表空间来重


新使用该表空间中的容器,但是在试图重新使用这些容器之前,必须COMMIT


DROP TABLESPACE
命令。

问题20SMSDMS的对比

        特性                                SMS        DMS
能够在表空间中动态增加容器的数目吗                N        Y
能够把索引数据存放到不同表空间的表中吗                N        Y
能够把大对象数据存放到不同表空间的表中吗        N        Y
表可以分散存放到多个表空间中吗                        N        Y
仅在需要时才分配空间吗                        Y        N
表空间可以被放在不同的磁盘中吗                        Y        N
创建之后,区段大小能够改变吗                        N        N

问题1、表空间、临时表空间页面大小的问题

解决方案:新建一个缓冲区、删除表空间、新建空间、新建临时表空间

CREATE BUFFERPOOL pf16_2
  IMMEDIATE
  ALL
DBPARTITIONNUMS
  SIZE
100000
 
NUMBLOCKPAGES 0
  PAGESIZE
16 K;

 

Drop tablesapce EDWADM

 

CREATE LARGE TABLESPACE EDWADM
  IN DATABASE PARTITION GROUP
IBMDEFAULTGROUP
  PAGESIZE
16K
  MANAGED BY DATABASE
  USING
  
(Device '/dev/redwadm' 900000
  
)
  EXTENTSIZE
32
  PREFETCHSIZE
32
  BUFFERPOOL
BP16
  OVERHEAD
24.10
  TRANSFERRATE
0.90
  DROPPED TABLE RECOVERY OFF
;

 

CREATE TEMPORARY TABLESPACE MYSYSTEMP1
  IN DATABASE PARTITION GROUP
IBMTEMPGROUP
  PAGESIZE
16K
  MANAGED BY SYSTEM
  USING
  
('/dw/edwdata/mysystemp'
  
)
  EXTENTSIZE
32
  PREFETCHSIZE
32
  BUFFERPOOL
BP16
  OVERHEAD
24.10
  TRANSFERRATE
0.90
  DROPPED TABLE RECOVERY OFF
;

 

问题3、重建用户默认表空间的问题

Drop TABLESPACE USERSPACE1;

 

CREATE TABLESPACE USERSPACE1
  IN DATABASE PARTITION GROUP
IBMDEFAULTGROUP
  PAGESIZE
16K
  MANAGED BY SYSTEM
  USING
  
('/dw/edwdata/userspace1'
  
)
  EXTENTSIZE
32
  PREFETCHSIZE
32
  BUFFERPOOL
BP16
  OVERHEAD
24.10
  TRANSFERRATE
0.90
  DROPPED TABLE RECOVERY OFF
;

问题4、表空间维护常用操作

--更改表空间大小

ALTER TABLESPACE edwadm RESIZE (device '/dev/redwadm' 900000);

ALTER TABLESPACE TS1 RESIZE (FILE '/conts/cont0' 2000, DEVICE '/dev/rcont1' 2000, FILE 'cont2' 2000);

ALTER TABLESPACE TS1 RESIZE (ALL 2000)

db2 " ALTER TABLESPACE PAYROLL ADD (DEVICE '/dev/rhdisk9' 10000) "

---重命名表空间

RENAME TABLESPACE RESOURCE TO RES1

 

 

问题5db2常用命令

问题6db2oracle函数的差别

1、类型转化函数:decimal, double, Integer, smallint,real,Hex(arg),
  date, time,timestamp,char, varchar
  常用举例:
  --转化为字符串类型
  Oracle: select to_char(15.5000) from dual;
  DB2:select char(15.5000) from sysibm.sysdummy1
  --转化为日期时间
  Oracle: select to_date('2008-01-01','yyyy-mm-dd') from dual;
  DB2: select date('2008-01-01') from sysibm.sysdummy1
  2、时间日期:year, quarter, month, week, day, hour, minute ,second
  dayofyear(arg):返回arg在年内的天值
  Dayofweek(arg):返回arg在周内的天值
  days(arg):返回日期的整数表示法,从0001-01-01来的天数。
  midnight_seconds(arg):午夜和arg之间的秒数。
  Monthname(arg):返回arg的月份名。
  Dayname(arg):返回arg的星期。
  常用举例:
  --返回当前系统时间
  Oracle: select sysdate from dual;
  DB2:select current date from sysibm.sysdummy1
  --返回当前时间的下一天(年月 同理)
  Oracle: select sysdate,sysdate + interval '1' day from dual;
  DB2:select current date + 1 day from sysibm.sysdummy1
  3、字符串函数:
  length,lcase, ucase, ltrim, rtrim
  Coalesce(arg1,arg2….):返回参数集中第一个非null参数。
  Concat (arg1,arg2):连接两个字符串arg1arg2
  insert(arg1,pos,size,arg2):返回一个,将arg1pos处删除size个字符,
  将arg2插入该位置。
  left(arg,length):返回arg最左边的length个字符串。
  locate(arg1,arg2,<pos> :arg2中查找arg1第一次出现的位置,指定pos
  则从arg2pos处开始找arg1第一次出现的位置。
  posstr(arg1,arg2):返回arg2第一次在arg1中出现的位置。
  repeat(arg1 ,num_times):返回arg1被重复num_times次的字符串。
  replace(arg1,arg2,arg3):将在arg1中的所有arg2替换成arg3
  right(arg,length):返回一个有arg左边length个字节组成的字符串。
  space(arg):返回一个包含arg个空格的字符串。
  substr(arg1,pos,<length> :返回arg1pos位置开始的length个字符,如果没指定length,则返回剩余的字符。
  常用举例:
  --空值处理函数
  Oracle: select nvl(null,'aaa') from dual;
  DB2:db2 select coalesce(comm,1000) from staff;
  --去空格:
  Oracle: select trim(' abc ') from dual;--默认去掉两端空格
  select trim(heading '' from ' abc ') from dual --只去掉左端空格,也可用于去掉其它字符
  select trim(trailing '' from ' abc ') from dual --只去掉右端空格,也可用于去掉其它字符
  DB2:
  select ltrim(rtrim(' abc ')) from sysibm.sysdummy1
  select ltrim(' abc ') from sysibm.sysdummy1
  select rtrim(' abc ') from sysibm.sysdummy1
  --oracle认证更多详细资料回字符串大写值,其实都用upper即可
  Oracle: select upper('abc') from dual;
  DB2:select upper('abc') from sysibm.sysdummy1
  或者
  select ucase('abc') from sysibm.sysdummy1
  --合并字符串,OracleDB2相同都可以如下:
  Oracle: select concat('abcd','efg') from dual;
  select 'abcd' || 'efg' from dual;
  DB2: select concat('abcd','efg') from sysibm.sysdummy1
  select 'abcd' || 'efg' from sysibm.sysdummy1
  4、数学函数:
  Abs, count, max, min, sum
  Ceil(arg):返回大于或等于arg的最小整数。
  Floor(arg):返回小于或等于参数的最小整数。
  Mod(arg1,arg2):返回arg1除以arg2的余数,符号与arg1相同。
  Rand():返回110之间的随机数。
  Power(arg1,arg2):返回arg1arg2次方。
  Round(arg1,arg2):四舍五入截断处理,arg2是位数,如果arg2为负,则对小数点前的数做四舍五入处理。
  Sigh(arg):返回arg的符号指示符。-1,0,1表示。
  truncate(arg1,arg2):截断arg1arg2是位数,如果arg2是负数,则保留arg1小数点前的

问题7db2oracle体系架构的区别

问题8db2内存的设置

问题10、表空间的属性详解

问题11、多个临时表空间,默认使用哪个

问题12db2的数据字典整理

问题13db2日志管理(完成)

---归档日志

db2 update db cfg for dbtest using logretain recovery userexit on

db2 update db cfg for dbtest using logarchmeth1 DISK:D:/DB2/Arch_log

db2 update db cfg for dbtest using logarchmeth2 DISK:D:/DB2/Arch_log2

 

db2 update db cfg for dbtest using LOGPRIMARY 10  LOGSECOND 50 LOGFILSZ 65535 ;

---循环日志

/*Logretaim=Recovery  --Logretaim/userexit两个值任选一个)

userexit=Yes*/

db2 update db cfg for edw using logarchmeth1 off logarchmeth2 off

db2 update db cfg for edw using logretain NO userexit NO

db2 update db cfg for edw using logfilsiz 2000 logprimary 100  logsecond 150 

 

db2 update db cfg for edw using LOGPRIMARY 100  LOGSECOND 200 LOGFILSZ 65535 ;

--重启数据库才生效 (或者断开所有链接)

set instance=db2inst4

db2stop force

db2start

db2 activate db edw

--更改联机日志的路径(更改后logpath的值发生改变)

db2 update db cfg for edw using  newlogpath /dw/edwdata/db2log

 .日志概述

任何数据库管理系统都必须拥有确保数据一致性和可恢复性的机制。关系数据库系统为确保那些非常重要的特性所使用的众多机制之一是事务性日志记录。在本文中,我们将定义和讨论事务性日志记录的类型,及如何分配日志文件、如何存储它们。

数据库存储了供应用程序访问和处理的数据。那些应用程序会插入、读取、更新或删除数据。每一个这样的活动都是在一个事务中执行的,该事务被 定义应用程序过程中一个可恢复的操作序列。除非已经提交了事务(也称作工作单元),否则它不会影响数据库。

将数据库操作组合到事务中只是确保数据一致性解决方案的一半。另一半是称作预写式日志记录(write-ahead logging)的数据库管理器实现。不管事务是否被提交,只要它们发生,就会记录这些事务。在将任何数据从缓冲池写到数据库结构之前,事务会从日志缓冲区(log buffer)写到 日志文件(事务性日志记录)。用于记录事务的文件叫做 事务日志

.日志分类

DB2 UDB 有两种可用的日志记录类型循环circular)日志记录和 归档archive)日志记录。其中归档日志又分为联机归档日志脱机归档日志

2.1循环日志记录

循环日志记录是数据库使用的缺省日志记录策略。在此策略中,一旦日志目录中最后一个主日志文件被写满了,就会将新的事务写到第一个日志文件中,从而覆盖现有的日志数据。这些新事务会继续依次覆盖每个旧日志文件。这种日志记录方法确保了所有已提交事务的数据一致性,这样就可以执行应急恢复。

循环日志记录通常在数据仓库环境中使用,在该环境中,恢复数据库需要的只是恢复数据库映象的问题。该策略不应该用在线事务处理(on-line transaction processingOLTP)环境,因为它不可能进行前滚恢复。

2.2归档日志记录

与循环日志记录相比,当最后一个日志文件写满时,归档日志记录过程会创建一个新的日志文件,这样将来的事务就不会覆盖现有的日志文件。当初始化数据库时,系统会在活动日志目录中分配一定数量、指定大小的主日志文件。这个数量由数据库配置参数控制。当主日志文件都写满时,就会“根据需要”创建辅助日志文件,直到创建了最大数量的辅助日志文件为止。一旦达到了这个数量,如果需要附加的日志空间,就会发出一个错误,指出没有更多的可用日志文件,所有数据库活动停止。

利用归档日志记录,就可能采取联机(在线)数据库备份,在执行这一操作期间,会继续记录数据库活动。如果数据库崩溃或发生故障,就会使用全备份映象,然后执行使用归档日志的前滚操作,通过前滚到日志结尾,将数据库恢复到时间点状态或最近的一致状态,从而恢复数据库。

有两种归档日志:

联机归档日志: 活动日志中所有改动对正常处理已不需要,即该日志中所记录的事务都已提交并写入数据库文件时,该活动日志转换为联机归档日志。称之为联机,是由于它们与活动日志存放在同一个目录下。

脱机归档日志: 将联机归档日志从活动日志目录下Copy到另外的地方存档,就称为脱机归档日志。这些日志可能在数据库前滚恢复的时候仍然需要。

    

三.日志相关参数

我们只有弄清楚了日志相关的参数之后,才能正确修改配置参数,得到我们想要的日志管理模式,现对各参数介绍如下:

3.1 LOGRETAIN

缺省情况下,logretaim的值为OFF,此时采用循环日志记录方式,将期修改为ON/ RECOVERY时,采用归档日志记录方式,从而允许数据库管理器使用前滚恢复方法,可以进行在线备份。该参数使归档日志保留在数据库日志路径目录中。当启用了 logretain配置参数时,就不需要启用 userexit 。这两个参数中的任何一个都足以允许前滚恢复方法。

以下是 logretain的有效值:

No(缺省值) 表示不保留日志。

Recovery 表示保留日志,且可以用于前滚恢复。此外,如果您使用数据复制,CAPTURE 程序可以将日志中所记录的更新写到更改表。

Capture 表示只保留日志,这样 Capture 程序可以将更新写到更改表。如果没有裁剪这些日志,那么它们可以用于正向恢复。注:通常仅当为了数据复制而设置数据库时,才使用 Capture 设置。

如果 logretain设置成“Recovery”或者 userexit设置成“Yes”,将保留活动日志文件,而且这些文件将变成联机归档日志文件,以便在前滚恢复中使用。这称为日志保留记录。

在将 logretain设置成“Recovery”和/或将 userexit设置成“Yes”之后,必须对数据库进行完全备份。这一状态由 backup_pending标志参数表示。

如果 logretain设置成“No”并且 userexit也设置成“No”,就不能对数据库执行前滚恢复,而且可恢复性仅限于最新的数据库备份。在这种情况下,数据库管理器会删除 logpath目录中的所有日志文件(包括联机归档日志文件),分配新的活动日志文件,并且回复到循环日志记录。 

logretain设置成“Capture”时,在 Capture 程序完成时,它会调用 PRUNE LOGFILE 命令来删除日志文件。虽然如果不裁剪日志,这些日志就可以用于正向恢复,但如果您想要确保可以对数据库执行前滚恢复,就不应该将 logretain设置成“Capture”。

logretain配置参数设置成“RECOVERY”时,日志文件将保留在活动日志路径中。活动日志路径由数据库配置文件中的“日志文件路径(Path to Log Files)( logpath)”或“更改的日志文件路径(Changed Path to Log Files)( newlogpath)”值确定。

3.2 USEREXIT

该参数使数据库管理器调用用户出口程序来归档和检索日志。启用了用户出口之后,就允许前滚恢复。当启用了 userexit配置参数时,就不需要启用 logretain。这两个参数中的任何一个都足以允许前滚恢复方法。

使用该参数表示覆盖了循环日志记录(缺省值)。 userexit包含有 logretain的功能,反之却不成立。

当使用 userexit 配置参数或 logretain配置参数以允许前滚恢复时,活动日志路径非常重要。当启用了 userexit配置参数时,会调用用户出口来归档日志文件,并将它们移到活动日志路径以外的位置。

以下是该参数的有效值:

No(缺省值)

Yes

如果启用了该参数,无论 logretain参数如何设置,都会执行日志保留记录。该参数还表示用户出口程序应该用于归档和检索日志文件。当数据库管理器关闭日志文件时,会归档日志文件。当 ROLLFORWARD 实用程序需要使用日志文件来恢复数据库时,就会检索它们。

在启用了参数 logretain和/或 userexit时,必须对数据库进行完全备份。这一状态由 backup_pending标志参数表示。

如果取消选择这两个参数,就不能对数据库进行前滚恢复,因为将不再保留日志。在这种情况下,数据库管理器会删除 logpath目录中的所有日志文件(包括联机归档日志文件),分配新的活动日志文件,并且回复到循环日志记录。

3.3 LOGPRIMARY

该参数指定要创建的主日志的数量

无论主日志是空的还是满的,所需的磁盘空间量都是相同的。因此,如果您配置的日志数量比需要的多,那么您就不必要地多使用了磁盘空间。如果您配置的日志太少了,就会遇到“日志满”情况。当选择要配置的日志数量时,必须考虑您生成的每个日志的大小,以及您的应用程序是否能处理“日志满”情况。

对于 V8.1,这个限制是 256 GB。即,日志文件的数量(LOGPRIMARY LOGSECOND)乘以以字节为单位的每个日志文件的大小(LOGFILSIZ * 4096)必须小于256 GB

 

3.4 LOGSECOND

该参数指定为恢复日志文件(仅当需要时)而创建和使用的辅助日志文件的数量。请注意,日志文件的总数由以下等式限制:

logprimary logsecond< 256DB2 UDB V8.1

当主日志文件满了时,就会按需要每次分配一个辅助日志文件(大小为 logfilsiz),最多达到由该参数控制的最大数量。如果所需的辅助日志文件的数量比该参数允许的数量大,就会将一个错误代码返回到应用程序,并且会停止对数据库的操作。

3.5 LOGFILSZ

该参数确定了每个已配置日志的页数量。一页的大小是 4 KB。每个主日志的大小(页数量)对数据库性能有直接影响。当将数据库配置成保留日志,每当写满一个日志时,就会发出一个分配和初始化一个新日志的请求。增加日志大小会减少为分配和初始化新日志所需的请求数量。但是,请注意,日志大小越大,格式化每个新日志所花费的时间就越多。格式化新日志对于连接到数据库的应用程序是透明的,而且也不会影响数据库性能。

3.6 LOGBUFSZ

该参数允许您指定数据库共享内存的数量,在将日志记录写到磁盘之前,用该共享内存作为这些记录的缓冲区。当发生以下情况之一时,会将日志记录写到磁盘:事务提交/日志缓冲区满了/引起写操作的其它一些内部数据库管理器事件。

缓冲日志记录将导致使日志文件 I/O 更有效,因为将日志记录写到磁盘的频率将更低,而每次写入磁盘的日志记录则更多。

3.7 MINCOMMIT

该参数允许您延迟将日志记录写到磁盘,直到已经执行了所规定的最小数量的提交。当您有多个针对数据库的应用程序正在运行,并且应用程序在非常短的时间段里请求了许多提交,那么该延迟可以帮助减少与写日志记录相关的数据库管理器开销,从而提高性能。

这种提交分组只有在该参数的值大于 1 且连接到数据库的应用程序数量大于该参数的值时才会发生。当执行提交分组时,应用程序提交请求将被挂起,直到以下两种情况有一种先发生:时间过去一秒或者提交请求的数量等于该参数的值。

3.8 NEWLOGPATH

数据库日志最初创建在名为 SQLOGDIR 的目录中,该目录是数据库目录的子目录。可以通过将该配置参数的值更改成指向另一个目录或设备来更改放置活动日志和将来归档日志的位置。如果将数据库配置成进行前滚恢复,那么就不会将当前存储在数据库日志路径目录中的归档日志移到新的位置。

因为您可以更改日志路径位置,所以前滚恢复所需的日志可能会在不同的目录中或在不同的设备上存在。在前滚过程中可以更改此配置参数以允许您访问多个位置中的日志。

在数据库处于一致状态之前,将不会更改对 newlogpath的值。信息性数据库配置参数 database_consistent表示数据库的状态。

注:数据库管理器每次写一个事务日志。可以是活动状态的事务的总大小受数据库配置参数限制:

日志空间
>= LOGFILSIZ * LOGPRIMARY * 4096
字节
<= LOGFILSIZ * (LOGPRIMARY + LOGSECOND) * 4096
字节 <= 32 GB(对于 V7.2)或 <= 256 GB(对于 V8.1

3.9 日志存储位置

   缺省情况下,日志文件存储在以下目录中:

Windows 上:<instance name>/NODE0000/SQL000××/SQLOGDIR

UNIX 上:<instance home directory>/<instance name>/NODE0000/SQL000××/SQLOGDIR

在上述目录路径中,对于所创建的每个数据库,会有一个 SQLxxxxx(“xxxxx”是以 0 开头的数字)目录。如果在 DB2 实例中有多个物理数据库,就很难知道哪个 SQLxxxxx 目录属于哪个数据库。要解决这个问题,只要输入以下 DB2 命令:db2 list db directory on c/d……就可以看出数据库对应的编号,egdb2 list db directory on d可以看到dbtest数据库的一些信息如下:

数据库别名                      = DBTEST

数据库名称                      = DBTEST

数据库目录                      = SQL00002

数据库发行版级别                = a.00

注释                            =

目录条目类型                    = 本地

目录数据库分区号                = 0

数据库分区号                    = 0

或者用命令db2 get db cfg for dbtest

日志文件路径                    = D:/DB2/NODE0000/SQL00002/SQLOGDIR/

 

.归档日志的设置

DB2版本8.2以前,采用用户出口程序的方式进行日志归档操作,从DB2版本8.2开始,DB2集成了日志管理功能,目前支持采用如下三种方式归档日志:

  DISK:将归档日志存放到磁盘上

  TSM:将归档日志存放到TSM服务器

  BAR APIs:第三方厂商提供的产品

  DB2在版本8.2中增加了如下配置参数:

  第一个日志归档方法 (LOGARCHMETH1) = LOGRETAIN

  logarchmeth1 的选项 (LOGARCHOPT1) =

  第二个日志归档方法 (LOGARCHMETH2) = OFF

  logarchmeth2 的选项 (LOGARCHOPT2) =

  故障转移日志归档路径 (FAILARCHPATH) =

  错误时重试日志归档次数 (NUMARCHRETRY) = 5

  日志归档重试延迟() (ARCHRETRYDELAY) = 20

  供应商选项 (VENDOROPT) =

  下面是关于这些参数的说明:

  日志归档方法 1(logarchmeth1)和日志归档方法 2(logarchmeth2)这些参数使数据库管理器将日志文件归档至活动日志路径之外的位置。如果指定这两个参数,每个日志文件均归

档两次。这意味着您将拥有两个位于不同位置的归档日志文件副本。这些参数的有效值包括介质类型,且在某些情况下,包括目标字段。

  使用冒号(:)来分隔值。有效的值为:

  OFF 指定不使用日志归档方法。如果 logarchmeth1 logarchmeth2 都设置为 OFF,则认为数据库正在使用循环日志记录,且不可前滚恢复。这是缺省值。

  LOGRETAIN 此值仅可用于 logarchmeth1,且等价于将 logretain配置参数设置为 RECOVERY。如果指定此值,将自动更新logretain 配置参数。

  USEREXIT 此值仅对 logarchmeth1 有效,且等价于将userexit 配置参数设置为 ON。如果指定此值,将自动更新userexit 配置参数。

  DISK 此值后必须紧跟冒号(:),然后是全限定现有路径名,日志文件将在其中归档。例如,如果将 logarchmeth1 设置为 DISK: D:/DB2/Arch_log,则将归档日志文件放入名为 D:/DB2/Arch_log 的目录。

  注意: 如果正在归档至磁带,可以使用 db2tapemgr 实用程序来存储和检索日志文件。TSMTivoli storage management 如果指定不带任何附加配置参数,此值指示应该使用缺省管理类,将日志文件归档在本地 TSM 服务器上。如果此值后紧跟冒号(:) TSM 管理类,则使用指定的管理类来归档日志文件。

  VENDOR 指定将使用供应商库来归档日志文件。此值后必须紧跟冒号(:)和库的名称。库中提供的 API 必须使用备份并复原供应商产品的 API 注意:

  如果将 logarchmeth1 logarchmeth2 设置为 OFF 以外的值,则必须配置数据库以进行前滚恢复。 如果更新 userexit logretain 配置参数,将自动更新 logarchmeth1,反之亦然。然而,如果您正在使用 userexit logretain,必须将 logarchmeth2 设置为 OFF

  日志归档选项 1(logarchopt1)、日志归档选项 2(logarchopt2):

  指定传递至 TSM 服务器或供应商 API 的字符串。对于 TSM,此字段用于允许数据库检索在不同 TSM 节点或通过不同 TSM用户生成的日志。字符串必须以如下格式提供: "-fromnode=nodename -fromowner=ownername"其中 nodename 是最初归档日志文件的 TSM 节点的名称,ownername 是最初归档日志文件的 TSM 用户的名称。每个日志归档选项字段对应于一个日志归档方法:logarchopt1 logarchmeth1 配合使用,logarchopt2 logarchmeth2 配合使用。

  故障转移归档路径(failarchpath)

  如果指定的日志归档方法失败,则为归档日志文件指定备用目录。在失败的日志归档方法再次可用之前,此目录是日志文件的临时存储区,此时日志文件将从此目录中移至日志归档方法。通过将日志文件移动至该临时位置,可以避免日志目录发生已满情况。此参数必须是一个全限定现有目录。

  出错时的归档重试次数(numarchretry)

  指定在日志文件归档到 failarchpath 配置参数指定的路径之前,使用指定的归档方法归档日志文件的尝试次数。如果设置了 failarchpath 配置参数,则只能使用该参数。缺省值为 5

  归档重试延迟(archretrydelay)

  指定在上一次尝试失败之后,归档日志文件尝试之间等待的时间量(以秒计)。缺省值为 20

  供应商选项(VENDOROPT)

  指定使用第三方厂商进行备份、恢复、归档日志时需要的额外参数配置。参考第三方厂商存储软件的说明配置。

  下面我们以一个简单的例子配置来说明如何将日志归档到磁盘。

  1、修改数据库dbtest的配置参数(请在更新之前确保使用的目录已经建立,而且DB2实例用户有合适的权限):

  

db2 update db cfg for dbtest using logarchmeth1 DISK:D:/DB2/Arch_log

注意:如果先前你没有设置为归档日志模式,需要先修改默认参数,设置完参数后需要先做一个数据库的脱机备份。再修改logarchmeth1的路径,脚本如下:

db2 update db cfg for dbtest using logretain on userexit on

db2 backup db dbtest TO E:/DB2/backup/

此时,日志会被自动归档到D:/DB2/Arch_log下,如果我们想把日志归档到另外一个地方,或者当指定的日志归档方法失败(如归档路径的磁盘空间已满),想把归档日志文件指定到备用目录,可以为logarchmeth2failarchpath指定路径,脚本如下:(请在更新之前确保使用的目录已经建立,而且DB2实例用户有合适的权限)

db2 update db cfg for dbtest using logarchmeth2 DISK:D:/DB2/Arch_log2

db2 update db cfg for dbtest using failarchpath D:/DB2/templogarc

此时用命令db2 get db cfg for dbtest可以查看到修改后的参数情况如下:

第一个日志归档方法       (LOGARCHMETH1) = DISK:d:/db2/arch_log/

logarchmeth1 的选项      (LOGARCHOPT1) =

第二个日志归档方法       (LOGARCHMETH2) = DISK:D:/DB2/Arch_log2/

logarchmeth2 的选项      (LOGARCHOPT2) =

故障转移日志归档路径     (FAILARCHPATH) = D:/DB2/templogarc/

错误时重试日志归档次数   (NUMARCHRETRY) = 5

日志归档重试延迟(秒)   (ARCHRETRYDELAY) = 20

供应商选项               (VENDOROPT) =

 

     尽管采用了归档日志,但是当我们处理一个工作单元中包含多个类似IMPORTINSERTDELETE UPDATERUNSTATS REORG时,当(logprimary logsecond)个日志写满事物还没有处理完成(提交)时,就会出现日志满的错误,为此我们要考虑适当的修改日志的大小和数量,同时尽量多次提交(commit)处理事物,修改日志脚本如下:

db2 UPDATE DB CFG FOR DBName  USING LOGFILSIZ 6000 ; --日志文件大小

db2 UPDATE DB CFG FOR DBName  USING LOGPRIMARY 8 ;--日志文件数目

db2 UPDATE DB CFG FOR DBName  USING LOGSECOND 5 ; --辅助日志文件数目

另外,由于物理设备的大小限制,为了保证日志正常归档,需要不定期的删除归档日志存放路径下的无用日志,而如何判断哪些归档日志是否可以彻底删除?需要依据对数据库进行的备份情况而定。通常地,每周末进行一次完全备份,其余几天每天进行一次增量备份,只要备份文件保留完好,那么最近一次成功的增量备份日期(时间)之前的归档日志都可以删除。可以用命令db2 list history backup all for DBName查看对数据库的备份、恢复情况。

我们讨论了事务性日志记录的许多方面,如事务性日志记录是什么、如何控制它、它们存储在哪里以及如何存储、可能遇到的一些常见错误。如果您知道日志记录活动如何影响数据库和操作系统,就能够成功且有效地排除由于日志记录错误而产生的问题。

 

问题14db2   loadexportimport

问题16db2oracle的差别

1Db2没有回滚段,导致锁表时select都被阻塞。

2)取前10条记录:

Select  *  from  EDWDATA.f_agt_als_business_history  fetch  first  10  rows  only;

 

问题17db2性能优化

Reorg table  xxxx--重构表

Runstats on table  xxxx;--搜集表的统计信息

Reorgchk on table all;--确定是否需要对表执行runstats操作。

问题18db2常用操作

db2 load from /dev/null of del terminate into XXX.XXXXX  --清空表的操作

 

CREATE TABLE T_t
( id char(1) )
  DATA CAPTURE NONE
  IN SINGLENODETBS;

ALTER TABLE T_t
  LOCKSIZE ROW
  APPEND OFF
  NOT VOLATILE;

 

关于实例
  1
windows添加实例
      db2icrt instance_name
  2
LinuxUNIX添加实例
      db2icrt -u fenced_user_ID instance_name
  3
、删除实例及强制删除实例
      db2drop instance_name
      db2drop -f instance_name
  4
、启动实例
      db2start
      db2set db2inst
  5
、停止当前实例  
      db2stop
 6
、当前活动实例

   db2 get instance
 7
、列出可用实例
   db2ilist
 8
、迁移32位实例到64
   db2imigr
 9
、更新实例(安装了某些产品选项和修订包)
   db2iupdt instance_name
 10
、设置当前活动实例

   set db2instance=
实例名(=前后绝对不能有空格)
 
关于数据库管理服务
 
 10
、查看db2配置文件注册库

   db2set -lr;db2set -all(
本机)
 11
、设置db2配置文件注册库/为多个值/为默认值

   db2set DB2COMM=TCPIP/db2set DB2COMM=TCPIP,NPIPE,LOCAL/db2set registry_variable=
 12
、获得数据库级配置参数
   db2 get database configuration
 13
、配置数据库级配置参数
   db2 update database configration for database_name using parameter new_value
 14
、启动数据库管理服务器
   db2admin start
 15
、停止数据库管理服务器
   db2admin stop
 16
、强行断开用户和数据库的连接
   db2 force application all
   db2 "force application(Appl.handle1,Appl.handle2,.........)"
 17
、停止实例的同时断开用户连接
   db2stop force
 18
、查看应用程序的详细情况
   db2 list applications show detail
   db2 get snapshot for application applid+Application Id
 19
、列出节点目录
   db2 list node directory
 20
、列出数据库目录
   db2 list db directory
 21
、查看环境变量
  
三种:echo %DB2INSTANCE%
         set DB2INSTANCE
  db2 get in
  23
、查看数据库管理器配置文件

   db2 get dbm cfg
 24
、查看数据库配置文件 
   db2 get db cfg for dbname
 25
、更新数据库管理器配置参数

   db2 update dbm cfg using parameter value
 26
、更新数据库配置参数
   db2 update db cfg for dbname using parameter value
 27
、将信息输入系统DB目录
   db2 catalog db <db_name> as <alias> at node <nodename>(catalog
create database之后自动创建)
 28
、查看本地数据库目录

   db2 list db directory on <path>
 29
、查看DCS目录及输入信息到DCS目录
   db2 list dcs directory
   db2 catalog dcs db as <location name>
 30
、现实DB2的版本和修订包的版本
   db2level
 31
、在CLP上执行操作系统的命令
   db2 ! dir
 32
、在CLP上使用交互命令的缩写命令
   h history
现实命令的历史
   r runcmd
重新执行以前执行过的命令
   e edit
编辑第n个命令 
  33
、获得DB2选项内容

   db2 ? options
 34
、获得DB2信息的帮助
   db2 ? SQL0104N
   db2 ? DB21004E
   db2 ? list applications
 38
、设置DB2自动启动
   WINDOWS:net start
   LINUX/UNIX:db2iauto on db2instancename
 40
、重现设置数据库管理器参数为缺省值
   reset dbm cfg
  
关于DAS
 41
、启动/停止DAS数据库管理服务器

   db2admin start/db2admin stop
 42
、添加DAS
      WINDOWS: db2admin create
   UNIX/LINUX: dascrt
 43
、删除
DAS
      WINDOWS: db2admin drop
   UNIX/LINUX: dasdrop
 44
、显示DAS的配置参数

   get admin cfg
 45
、设置DAS配置参数
   update admin cfg
 46
、设置默认DAS的参数
   reset admin cfg
 47
、显示数据库配置参数
   get db cfg
 48
、更新数据库配置参数
   update db cfg
 49
、添加数据库分区
   db2ncrt/db2start add dbpartitionnum
 50
、删除数据库分区
   db2ndrop/db2start drop dbpartitionnum
 51
、建立数据库分区组
   create database partition grop
 52
、默认添加的分区组
   IBMCATGROUP
   IBMTEMPGROUP
   IBMDEFAULTGROUP
 53
、查看表空间详细信息
   list tablespaces
 54
、显示数据库中表空间状态
   list tablespaces show detail
 55
、创建缓冲池
   create bufferpool
 56
、监视器记录开关
   get monitor switches
  
定义语句:UPDATE MONITOR SWITCHES USING switch-name ON|OFF    (switch-name:BUFFERPOOLLOCKSORTSTATEMENTTABLETIMESTAMPUOW)
 57
、数据库管理器快照

  db2 get snapshot for dbm on db_name
 58
、查看当前表状态
   db2 load query table schemaName.tabName
 59
、在命令行执行SQL文本
   db2 -tvf sqlName.sql
 60
、在后台执行存储过程或sh
   nohup db2 "call
过程名()"& 然后敲两次回车

   nohup sh shell
名称 & 然后敲两次回车
 61
、查看数据库中表及应用加锁情况
   db2 get snapshot for locks on ahnx2
   db2 get snapshot for locks application agentid +
应用程序句柄
 62
、授予显式特权
  
将表的特权授予用户
   grant select,update,delete on table tableName to user userName with grant option
  
将包特权授予同组
   grant control on package packageName on group groupName with grant option
 63
db2move迁移数据
   db2move ahnxods export -sn erptpams -u einfo -p shyt2009
 64
、监控无效程序
   select pkgname,valid,last_bind_time from syscat.packages where  pkgschema='name' and valid!='Y'(N
状态需要重新绑定,X表明其依赖的对象被删除)
   rebind package pkgname resolve any(
重新绑定
)
   db2rbind dbname -l logfile all(
绑定所有无效程序
)
 65
、待续...

1、如何安装LICENSE文件
db2licm -a filename

2、更改DB2用户口令
db2 connect to DB_name user UserName using OldPassword new NewPassword confirm NewPassword

 

问题19db2的分区

 

问题21db2全局变量的定义

定义变量的方式

Create varviable myschema.v_date varchar(8) default ‘20101130’;

Create varviable myschema.v_date timestamp default current timestamp;

Create varviable myschema.v_date varchar(8) default

((select  to_char(current timestamp,’yyyymmdd’)from sysimb.sysdummy1)) ;

修改变量

Set  myschema.v_date=’20100811’;

Exec sql select count(*) into myschema.v_date from sysimb.sysdummy1 where 1=1;

使用变量

Select current date from sysimb.sysdummy1 where myschema.v_date=’20100811’

查看变量

Values myschema.v_date;

删除变量

Drop  varviable  myschema.v_date;

 

 

 

 

问题22、查处第前n条记录

SELECT * FROM "EDWDATA"."F_PR_ALS_CUSTOMER_RELATIVE"  fetch first 10 rows only;

 

 

如何清理db2diag.log

 
 

 db2diag.log,是用来记录DB2数据库运行中的信息的文件。可以通过此文件,查看记录的有关DB2数据库详细的错误信息。此文件也是不断增大的,需要定期进行清理。 可以通过查看实例的配置参数DIAGPATH,来确定db2diag.log文件是放在哪个目录下:db2 get dbm cfg 如果Diagnostic data directory path(DIAGPATH) = /home/db2inst1/sqllib/db2dump,则此文件是放在/home/db2inst1/sqllib/db2dump目录下。当文件系统/home的使用率达到80%90%左右时,应及时删除db2diag.log文件。 请按以下正确步骤操作:

确认应用、DB2已经停止。

方法一、

 将原db2diag.log文件备份到其它文件系统下。

 删除db2diag.log文件。删除后,DB2会自动创建一个新的文件。

注意:如果你觉得以上操作不保险的话,Db2提供了自动归档db2diag.log的命令db2diag -a 自动将该文件以日期时间命名

方法二、

Echo ‘’>db2diag.log

Db2sql语句调整

    SELECT stmt_text, total_exec_time, num_executions

FROM TABLE(SNAPSHOT_DYN_SQL('EDW', -1)) as dynSnapTab

ORDER BY total_exec_time desc

FETCH FIRST 1 ROW ONLY;

 

    SELECT stmt_text,

        CASE WHEN num_executions = 0

                THEN 0

                ELSE (total_exec_time / num_executions)

        END avgExecTime,

        num_executions

FROM TABLE( SNAPSHOT_DYN_SQL('EDW', -1)) as dynSnapTab

ORDER BY avgExecTime desc

FETCH FIRST 20 ROWS ONLY;

你可能感兴趣的:(oracle,数据库,db2,活动,database,sms)