现在的位置: 首页 > 综合 > 正文

db2逻辑备份数据库案例export_data

2018年01月16日 ⁄ 综合 ⁄ 共 4347字 ⁄ 字号 评论关闭
 适应场景:
    1、 全库备份,可能有多个schema,可能用于跨平台恢复数据
    2、 表里含有标识列
    3、 大字段的大小不超过32K(超过的在db2move导出文件里会被截断,丢失数据?-- 待证实。)

文件结构:
export_data --|-- db2move            # 文件夹,存放导出的数据文件
              |-- ddl                # 文件夹, 存放抽取数据库里对象的ddl语句
              |-- log                # 文件夹, 保存日志
              |-- db2move_out.cmd    # 核心文件, 导出数据,抽取ddl脚本的批处理文件
              |-- create_newdb.cmd   # 建库文件
              |-- readme.txt         # 文档说明

db2move_out.cmd

@echo Off

REM 这段是通过windows客户端建导出数据库的脚本。

REM ================ 参数设置区  ================ 
   set DBNAME=wzgl_ztb
   set DBUSER=inst17
   set DBPWD=inst17
   set SCHEMA=WZGLADM,ZTBADM,MMIS
   set SCHEMAS=('WZGLADM','ZTBADM','MMIS')

REM ================ 参数设置区  ================ 

   set CURR_PATH=%CD%
   set DB2MOVE_PATH=%CURR_PATH%/db2move
   set DDL_PATH=%CURR_PATH%/ddl
   set SEQUENCE_PATH=%CURR_PATH%/sequence
   set LOG_PATH=%CURR_PATH%/log

if "%DBNAME%"=="" goto INPUTERROR
if "%DBUSER%"=="" goto INPUTERROR
if "%DBPWD%" =="" goto INPUTERROR
if "%SCHEMA%"=="" goto INPUTERROR

goto STARTCREATE

:INPUTERROR
   echo    ------------------------------------------------------------------------------
   echo                  这段是通过windows客户端建导出数据库的脚本。
   echo                  请检查该脚本的参数是否正确。
   echo    ------------------------------------------------------------------------------

   
goto end

:STARTCREATE
   cd %DB2MOVE_PATH%
   echo 清空以前的数据 ...
   del *.001 *.ixf *.lst *.msg *.out *.sql *.txt
   echo   ----  完成  ----
   echo         ̄ ̄ ̄

   
   echo 导出%SCHEMA%下的所有表的数据 ...
   db2move %DBNAME% export -sn %SCHEMA% -u %DBUSER% -p %DBPWD% >%LOG_PATH%/db2move.log
   echo   ----  完成  ----
   echo         ̄ ̄ ̄     
   cd ..

   echo 导出%SCHEMA%下的所有对象的ddl语句  ...
   db2look -d %DBNAME% -e -l -o %DDL_PATH%/ddl.sql -td @ -i %DBUSER% -w %DBPWD% 
   echo   ----  完成  ----
   echo         ̄ ̄ ̄
 

   echo 导出重置sequence的起始值脚本 reset_seq.sql  ...
   db2 connect to %DBNAME% user %DBUSER% using %DBPWD% 
 
   db2 -x select 'select ''alter sequence ',char(seqschema,8),'.',char(seqname,20),' restart with ''^
    ,','nextval for',char(seqschema,8),'.',char(seqname,20),','';''',' from sysibm.sysdummy1 ;' ^
     from syscat.sequences where seqtype='S'>tmp.sql

   db2 -xtf tmp.sql> %DDL_PATH%/reset_sequence.sql

db2 select 'select upper(''alter table ',char(tabschema,8),'.',char(tabname,30),' alter column ',char(colname,30),^
 ' restart with ''),','coalesce(max(',char(colname,30),'),0)+1 ,'';'' from ',char(tabschema,8),'.',char(tabname,30),';' ^
  from syscat.columns where identity='Y'|findstr ;>tmp.sql

db2 -tvf tmp.sql|findstr ALTER>%DDL_PATH%/reset_indentity.sql

   del tmp.sql
   echo   ----  完成  ----
   echo         ̄ ̄ ̄
   

   db2 -x select cast(TEXT as varchar(32000)),'@',chr(10) from syscat.routines where routineschema IN %SCHEMAS%  ^
ORDER BY ROUTINETYPE,CREATE_TIME>%DDL_PATH%/ROUTINE.sql

   db2 terminate

   echo ==================================================================
   echo *                                                             *
   echo *    请将db2move、ddl、sequence、log文件夹拷贝给我们,谢谢!  *
   echo *                                                             *
   echo ==================================================================

:END

@echo on
 

create_newdb.cmd 

@echo Off

REM 这段是通过windows客户端建导出数据库的脚本。

REM ================ 参数设置区  ================ 

   set DBNAME=WZGL_ZTB
   set DBPATH=G:

REM ================ 参数设置区  ================ 

if "%DBNAME%"=="" goto INPUTERROR
if "%DBPATH%"=="" goto INPUTERROR

goto STARTCREATE

:INPUTERROR
   echo    ------------------------------------------------------------------------------
   echo                  这段是在db2cmd执行的cmd脚本。
   echo                  请检查该脚本的参数是否正确。
   echo    ------------------------------------------------------------------------------

   
goto end

:STARTCREATE

   for /f "skip=4 tokens=3,5" %%a in ('db2 list applications for db %DBNAME%') ^
do @if %%b==%DBNAME% db2 force application(%%a)

   db2 drop db %DBNAME%

   db2 create db %DBNAME% on %DBPATH% using codeset gbk territory cn pagesize 8 k
   
   db2 update db cfg for %DBNAME% using ^
   DBHEAP 25000 ^
   LOGBUFSZ 2048 ^
   UTIL_HEAP_SZ 40960 ^
   LOCKLIST 8000 ^
   SORTHEAP 4096 ^
   STMTHEAP 30720 ^
   APPLHEAPSZ 12800 ^
   PCKCACHESZ 10000 ^
   STAT_HEAP_SZ 10000 ^
   MAXLOCKS 25 ^
   LOCKTIMEOUT 60 ^
   CHNGPGS_THRESH 30 ^
   NUM_IOCLEANERS 12 ^
   LOGFILSIZ  25600 ^
   LOGPRIMARY  5 ^
   LOGSECOND 30 

   db2 connect to %DBNAME%

   db2 terminate

:END

@echo on
 

-- The End --

抱歉!评论已关闭.