define dbname,dbsname varchar(20)
define dirname varchar(100)
define tab_name varchar(20)
define str,str1 varchar(255)
define run_str char(1000)
define c_str,c_str1 char(18)
define arg_nums smallint
define f_pipo varchar(100)
define i,j smallint
define p_pre_time datetime hour to second
define laps_time interval hour to second
define flag smallint
main
if num_args() <>3 then
display "参数错误!!!"
display "使用方法:Zload [DIR] [DBNAME] [DBSPACE]"
display "例如 :Zload aa1 aa1_name workdbs"
exit program(1)
end if
clear screen
display "【 INFORMIX数据库压缩备份工具】" at 12,22
sleep 2
let dirname=arg_val(1)
let dbname=arg_val(2)
let dbsname=arg_val(3)
display "正在将",dirname,"目录中的压缩库文件上载到",dbsname,"空间的",dbname,"
let f_pipo="p_pipo"
###建立库机构
let p_pre_time=time
display "正在建立",dbname,"库结构..."
let str="dbaccess sysmaster<<!\n",
"create database ",dbname," in ",dbsname,";\n",
"!\n"
#display str
run str
let str="cd ",dirname,";",
"dbaccess ",dbname," ",dirname,".sql 1>/dev/null 2>&1"
run str
let c_str=dbname
database c_str
let i=0 let j=0
select count(*) into j from systables
where tabid>99
###循环上载压缩文件到库表中
call mk_pipe()
call disable_all()
display "开始将压缩文件中的表上载到",dbname,"库中..."
declare cur1 cursor for
select tabname from systables
where tabid >99
foreach cur1 into tab_name
let tab_name=tab_name clipped
let i=i+1
display "正在上载",tab_name,"表...(",i using "<<<<<<<","/",j using "<<<<<<<"
let run_str="cd ",dirname,";"
let run_str=run_str clipped,
"zcat ",tab_name,".unl.Z >",f_pipo,"&"
run run_str returning flag
let run_str="cd ",dirname,";"
let run_str=run_str clipped,
"dbaccess ",dbname,"<<!\n",
"load from ",f_pipo," insert into ",tab_name,";\n",
"!\n"
let run_str="echo '",run_str clipped,"' >$$;. $$ 1>/dev/null 2>&1 ;cd ..;rm"
##display run_str
run run_str
#exit foreach
end foreach
call rm_pipe()
call enable_all()
let laps_time=extend(current,hour to second) - p_pre_time
display "恭喜!上载成功!共用时",laps_time
end main
function enable_all()
define i smallint
let i=0
display "正在启用所有关联、触发器..."
whenever error continue
for i=0 to 1
declare cur41 cursor for
select tabname from systables
where tabid>99
foreach cur41 into tab_name
let tab_name=tab_name clipped
let str= "set constraints for ",tab_name," enabled;"
prepare s3 from str
execute s3
let str= "set triggers for ",tab_name," enabled;"
prepare s4 from str
execute s4
end foreach
whenever error stop
end for
end function
function disable_all()
define tab_name varchar(20)
define str varchar(255)
define i smallint
let i=0
display "正在禁止所有关联、触发器..."
whenever error continue
for i=0 to 2
declare cur3 cursor for
select tabname from systables
where tabid>99
foreach cur3 into tab_name
let tab_name=tab_name clipped
let str= "set constraints for ",tab_name," disabled;"
#display str
prepare s1 from str
execute s1
let str= "set triggers for ",tab_name," disabled;"
prepare s2 from str
#display str
execute s2
end foreach
whenever error stop
end for
end function
function rm_pipe()
define str varchar(255)
define tab_name varchar(20)
define flag smallint
let str="cd ",dirname,";ls ",f_pipo ," 1>/dev/null 2>&1"
run str returning flag
if flag=0 then
let str="cd ",dirname,";rm ",f_pipo," 1>/dev/null 2>&1"
run str
end if
##end foreach
end function
function mk_pipe()
define str varchar(255)
define flag smallint
let str="cd ",dirname,";ls ",f_pipo ," 1>/dev/null 2>&1"
run str returning flag
if flag=0 then
let str="cd ",dirname,";rm ",f_pipo," 1>/dev/null 2>&1"
run str
end if
let str="cd ",dirname,";mkfifo ",f_pipo
run str
end function
##############################################################
#程序功能:将指定库下载成压缩unload文件,以突破每个表文件2G限制
##############################################################
define dbname varchar(20)
define tab_name varchar(20)
define f_name varchar(40)
define str,str1 varchar(255)
define run_str char(1000)
define c_str,c_str1 char(18)
define i,j int
define p_pre_time datetime hour to second
define laps_time interval hour to second
main
if num_args()<>1 then
display "参数错误!!!"
display "使用方法:Zunload [DBNAME]"
display "例如 :Zunload picc2"
exit program(1)
end if
clear screen
display "【 INFORMIX数据库压缩备份工具】" at 12,22
sleep 2
let dbname=arg_val(1) #取指定备份数据库名称
display "您所备份的数据库名称:",dbname
let p_pre_time=time
###建立数据库目录
display "建立",dbname,"目录..."
let str="mkdir ",dbname
run str
let c_str=dbname
database c_str
###取库结构
let i=0 let j=0
select count(*) into j from systables
where tabid>99
display "正在取库结构..."
let str="cd ",dbname,";dbschema -d ",dbname," -ss ",dbname,".sql 1>/dev/null "
run str
###循环备份表
display "开始备份表数据..."
declare cur1 cursor for
select tabname from systables
where tabid >99
foreach cur1 into tab_name
let tab_name=tab_name clipped
let i=i+1
display "正在备份",tab_name ,"...(",i using "<<<<<<<","/",j using "<<<<<<","
let run_str="cd ",dbname,";\n"
let run_str=run_str clipped,
"dbaccess ",dbname," <<!\n",
"unload to /dev/stdout select * from ",tab_name,";\n",
"!\n"
let run_str="echo '",run_str clipped,"'>$$;. $$"
let run_str=run_str clipped," 2>/dev/null|compress >",dbname,"/",tab_name,""
#display run_str
run run_str
#exit foreach
end foreach
let laps_time=extend(current,hour to second) - p_pre_time
display "恭喜!备份成功!共用时",laps_time
end main