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 OffREM 这段是通过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%/logif "%DBNAME%"=="" goto INPUTERROR
if "%DBUSER%"=="" goto INPUTERROR
if "%DBPWD%" =="" goto INPUTERROR
if "%SCHEMA%"=="" goto INPUTERRORgoto 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.sqldb2 -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.sqldb2 -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.sqldb2 terminate
echo ==================================================================
echo * *
echo * 请将db2move、ddl、sequence、log文件夹拷贝给我们,谢谢! *
echo * *
echo ==================================================================:END
@echo on
create_newdb.cmd
@echo OffREM 这段是通过windows客户端建导出数据库的脚本。
REM ================ 参数设置区 ================
set DBNAME=WZGL_ZTB
set DBPATH=G:REM ================ 参数设置区 ================
if "%DBNAME%"=="" goto INPUTERROR
if "%DBPATH%"=="" goto INPUTERRORgoto 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 30db2 connect to %DBNAME%
db2 terminate
:END
@echo on
-- The End --