DB2不记日志插入,python迭代器操作xlrd


第一步:关闭事务自动提交



C:\DB2>db2set DB2OPTIONS=+c



+c永久关闭自动提交,-c永久开启自动提交



第二步:表修改为不记录日志



db2 alter table T1 activate not logged initially



第三步:增删改



第四步:commit



 




db2手工删除归档_数据库

 



import xlrd

# 使用formatting_info=False可以节省内存
workbook=xlrd.open_workbook("时间日期.xls",formatting_info=False)
sheet1 = workbook.sheet_by_index(0)
# 迭代器
iter_rows = sheet1.get_rows()
count=0
for row in iter_rows:
    # row为列表类型.里面的row[0]、row[1]...为Cell类型
    # Cell有两个属性:ctype 和 value,表示单元格类型和值
    # ctype有几种类型
    for cell in row:
        val = cell.value
        # 0表示1900为基准,除了Mac平台,其他平台都是0
        dt = xlrd.xldate.xldate_as_datetime(val, 0)
        print(dt) # datetime.datetime对象



ctype的几种类型:

Type symbol

Type number

Python value

XL_CELL_EMPTY

0

empty string ''

XL_CELL_TEXT

1

a Unicode string

XL_CELL_NUMBER

2

float

XL_CELL_DATE

3

float

XL_CELL_BOOLEAN

4

int; 1 means TRUE, 0 means FALSE

XL_CELL_ERROR

5

int representing internal Excel codes; for a text representation, refer to the supplied dictionary error_text_from_code

XL_CELL_BLANK

6

empty string ''. Note: this type will appear only when open_workbook(..., formatting_info=True) is used.

 

 

 

 

 

 

 


 

db2的日志模式和备份归档、恢复解析



DB2的日志分为两种模式,日志循环与归档日志,也就是非归档和归档模式。下面就具体介绍一下这两种方式以及和备份归档设置的关系。

  一、日志循环

  这是默认方式,也就是非归档模式,这种模式只支持(backup offline)脱机备份,在备份过程中需要DB2停止服务。

  在DB2中查看数据库设置,如发现如下信息  

$db2 get db cfg for db_name |grep -i log

  结果如下:

   Log retain for recovery enabled             (LOGRETAIN) = OFF
   User exit for logging enabled                (USEREXIT) = OFF
   HADR log write synchronization mode     (HADR_SYNCMODE) = NEARSYNC
   First log archive method                        (LOGARCHMETH1) = OFF

   则说明为非归档模式, 默认情况下为循环日志

 

  在这种模式下进行脱机备份需要注意:

  1、停止应用对DB2的访问。可以通过db2 list applications命令查看现有的连接,然后通过db2 force application命令来结束连接。另外通过db2 deactivate database命令来确保数据库未处于活动状态。

  2、通过db2 backup db 数据库名 命令来对数据库进行备份。

二、归档日志

   归档日志不是默认的,需要配置后才会生效,这种模式下的数据库是可恢复的数据库,支持在线备份、前滚恢复和崩溃恢复。

  配置DB2归档日志模式主要是要修改Log retain for recovery enabled和First log archive method这两个参数。

   修改参数(update更新参数)后,查看数据库是如下设置

$db2 get db cfg for db_name |grep -i log
      Log retain for recovery enabled             (LOGRETAIN) = RECOVERY
      User exit for logging enabled                (USEREXIT) = OFF
      HADR log write synchronization mode     (HADR_SYNCMODE) = NEARSYNC
      First log archive method                 (LOGARCHMETH1) = LOGRETAIN

  注意这里First log archive method的参数LOGRETAIN只表明你开启了归档,还需进一步设置才能正常备份

 

下面需要进一步指定归档目录的路径

更改归档目录:

$db2 update db cfg for db_name using LOGARCHMETH1 "disk:/archive/db_name_db_log"

  使用归档日志,当日志文件满时,会自动对它进行归档,归档的目的地就是Logarchmeth1设置的位置。归档日志文件之后,必须人工将无用的归档日志删除,以便新的日志文件可以复用磁盘空间。每当日志文件已满,DB2 就开始将记录写至另一个日志文件,并且不断创建新日志文件。

 

  如果在归档日志文件时发生错误,归档将暂挂一段时间,此时间由“Log archive retry Delay (secs)”  ARCHRETRYDELAY数据库配置参数指定,还可以使用“ Number of log archive retries on error ”NUMARCHRETRY 数据库配置参数来指定 DB2 尝试将日志文件归档到主要或辅助归档目录的次数,然后它再尝试将日志文件归档到故障转移目录(由“ Failover log archive path” FAILARCHPATH 数据库配置参数指定)。

 

  还有就是容易遇见数据库事务日志已满导致备份出错的问题,这是可以查看这三个参数

Log file size (4KB)                         (LOGFILSIZ) = 8192
  Number of primary log files                (LOGPRIMARY) = 10
  Number of secondary log files               (LOGSECOND) = 4

  并适当调整日志文件大小和主辅日志的文件个数。

 

最后就是要注意这两个参数的设置

Options for logarchmeth1                  (LOGARCHOPT1) =
Second log archive method                 (LOGARCHMETH2) =

有以下几种情况:

1、Logarchmeth1设置为LOGRETAIN,Logarchmeth2设置为OFF

  这时归档日志位置就是DB2数据库日志的位置,需要人工干预归档日志的转移和空间维护工作

2、Logarchmeth1设置为USEREXIT,Logarchmeth2设置为OFF

  这时归档日志的管理交由USEREXIT来处理,通过设置编译USEREXIT可以实现相对复杂一些的归档管理方式

3、Logarchmeth1设置为指定目录<Directory>,Logarchmeth2设置为OFF

  归档日志的工作将会自动进行,需要归档日志将会被自动归档到<Directory>指定的位置,由于归档是自动进行,DB2的日志目录中只有正常logprimary+logsecond个数的数据库日志。

4、Logarchmeth1设置为<Directory1>,Logarchmeth2设置为<Directory2>

  归档日志的工作将会自动进行,需要归档日志将会被自动归档到<Directory1>和<Directory2>指定的位置,也就是会产生两份归档日志。由于归档是自动进行,DB2的日志目录中只有正常logprimary+logsecond个数的数据库日志。对性能有一定的影响。

  <Directory1>或者<Directory2>都可以设置为TSM。一般推荐<Directory1>为文件系统,<Directory2>设置为TSM,这样既可以归档到TSM离线保存,又可以在线使用文件系统中的归档日志,比较方便。

  注意:设置Logarchmeth1和Logarchmeth2后,数据库会进入backup pending状态,必须进行一次脱机备份,数据才会进入recovery模式并且正常工作。

 

三、备份与恢复

1、简单的冷备与恢复

$ db2 backup db [dbname] to 路径
$ db2 restore db [dbname] from 路径 taken at 时间戳

2、在线热备与恢复

 

$ db2 backup db dbname online to 路径 include logs
$ db2 restore db dbname from 路径 taken at 时间戳
$ db2 "rollforward db dbname to 2013-02-31-20.00.00.000000 using local time and complete overflow log path (/backup/logs)"    前滚日志恢复至指定时间点
3、查看备份记录
$ db2 list history backup all for dbname   可以看到备份的纪录

 

 

附:DB2数据库备份恢复的概念和知识点

备份类型:脱机备份(也称冷备份或离线备份)、联机备份(也称热备份或在线备份)、完全备份、增量备份(也称累积备份)、差异备份

 

数据库备份文件结构

 

恢复类型:崩溃恢复、版本恢复、前滚恢复(任意时间点恢复,恢复到最近时间点)

 

恢复情形:完全恢复、不完全恢复

 

手动恢复数据库的顺序

 

日志类型:循环日志(默认)、归档日志(活动日志、在线归档日志、离线归档日志)

 

日志类型与恢复类型:循环日志只支持崩溃恢复和版本恢复,归档日志支持所有类型的恢复

 

凡是联机备份产生的备份集在恢复时都需要使用归档日志,归档日志方式是是允许用户执行前滚(rollforward)恢复的唯一方法。

 

前滚的时间要在最小恢复时间点之后,最后的事务提交时间点之前。




Db2 日志清理命令相关

 1、归档日志

      当db2数据库使用归档日志(通过修改参数 LOGARCHMETH1  可以改成是归档还是循环日志)的时候,日志数量定期不清理,将会越积越多,最后必定会磁盘爆满,访问数据库出问题。归档日志分为三种 活动日志、联机存档日志 和 脱机存档日志。

 

         1) 活动日志:该日志包含尚未提交或回滚的事务单元的相关信息,以及已提交但尚未写入数据库文件的事务的信息。

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

     3)脱机存档日志:将联机存档日志从活动日志目录下Copy到另外的地方存档,就称为脱机存档日志。这些日志可能在数据库前滚恢复的时候仍然需要。(所谓联机归档日志,就是归档日志文件和活动日志文件同在一个目录下;而离线归档日志,则是归档日志与活动日志分开存放)

 

   通过设置系统参数:logprimary (主日志数)和 logsecond(辅日志数)可以设置开始归档的日志数。

 

2、归档日志删除

 

//DB2归档日志的相关信息保存在恢复历史文件中,可以通过 db2 list history 命令查看。



db2手工删除归档_数据库_02


1. db2 list history archive log all for testdb

//清除恢复条目信息,该命令会清除指定时间戳及之前的所有条目(不只是归档日志的)。默认情况下,系统不会清除最近一次数据库全备之后的归档日志信息。



db2手工删除归档_数据库_02

1. db2 prune history 20100103235553

//查看备份的时间戳



db2手工删除归档_数据库_02


1. db2 list backup all for testdb


 

//删除时间戳 20110823105033 之前的所有离线归档日志



db2手工删除归档_数据库_02



1. db2 prune history 20110823105033 with force option and delete


 

//找出最早的日志信息 S0000020.LOG  



db2手工删除归档_数据库_02



1. db2 "list history backup all for database testdb"


 

//删除S0000019.LOG 之前的联机日志



db2手工删除归档_数据库_02



  1. db2 "prune logfile prior to S0000019.LOG"  



 

//查看历史日志信息



db2手工删除归档_数据库_02


1. db2 list history archive log all for testdb | head -20

 

//查看活动日志使用如下命令



db2手工删除归档_数据库_02



1. db2pd -db testdb -logs



 

//禁止自动commit,db2默认是自动提交的



db2手工删除归档_数据库_02


1. db2 list command options  
2.   
3. db2 update command options using c off


 

       分别使用 prune logfile prior to XXXXXXX.LOG  和 db2 prune history [20110823105033] with force option and delete  命令可以清除活动日志目录下的在线归档日志文件和离线归档日志文件。

 

以上这些参考命令比较实用。