-- 初始化配置表
if object_id('t_sz_backup_tables') is not null
drop table t_sz_backup_tables
go
create table t_sz_backup_tables(
tableName varchar(60),
datetype int,
begintime datetime null,
endtime datetime null,
status int null,
redes varchar(200) null,
indestatus int null,
order_no int null,
isused int default 1)
go
create unique index inx_uni on t_sz_backup_tables(tableName)
go
insert into t_sz_backup_tables(tableName,datetype,order_no) values('t_zbk_o2didf_ck',2,1)
-- 程序
if object_id('fn_backup_tables') is not null drop procedure fn_backup_tables go create procedure fn_backup_tables( @datadate char(8), @datetype integer, @reccount integer output, @usedtime integer output, @retcode integer output, @retdesc char(200) output) /*--******************************************************************************************************************/ -- 功能说明: -- 读取配置表获取需要备份的表名,备份数据到 表名+yyyymm[dd] 表中 -- 参数说明: -- 1、输入 -- @datadate 会计日期 --*******************************************************************************************************/ as declare @tableName varchar(60) -- 源表表名 declare @cursorcount int -- 循环总数 declare @i_count int -- 循环变量 declare @c_backupName varchar(70) -- 备份表名 declare @c_exesql varchar(1000) -- 动态语句 declare @i_zq int -- 执行周期 : 1 每天 2每月 3每季 4每年 declare @i_datetype int -- 游标变量 declare @i_errorNum int -- 错误数量统计 declare @dt_begintime datetime -- 处理开始时间 declare @dt_endtime datetime -- 处理结束时间 begin --**************变量定义及初始化************************************************************************************* -- 定义局部变量 select @dt_begintime = getdate() -- 如果年最后一天 @i_zq = 4 if year(dateadd(day,1,@datadate))=year(@datadate)+1 select @i_zq = 4 -- 如果季度最后一天 @i_zq = 3 else if Quarter(dateadd(day,1,@datadate))<>Quarter(@datadate) select @i_zq = 3 -- 如果月最后一天 @i_zq = 2 else if month(dateadd(day,1,@datadate))<>month(@datadate) select @i_zq = 2 -- 否则@i_zq = 1 即每天执行 else select @i_zq = 1 select @retcode = 0 select @i_errorNum = 0 -- 根据执行日期是否为年末、季末、月末确定需备份的表 select tableName,datetype ,rank()over(order by order_no) as rankno into #temp from t_sz_backup_tables where isused = 1 and (status <> 0 or status is null) and datetype <= @i_zq -- 初始化循环变量 select @i_count = 1 select @cursorcount = count(1) from #temp while (@i_count<=@cursorcount) begin -- 获取表名 select @tableName = tableName,@i_datetype = datetype from #temp where rankno = @i_count select @reccount = 0 update t_sz_backup_tables set begintime = getdate(),status=null,endtime=null,redes=null where tableName = @tableName if object_id(@tableName) is not null begin -- 生成备份表名 if @i_datetype = 1 select @c_backupName = @tableName+'_'+@datadate else select @c_backupName = @tableName+'_'+substring(@datadate,1,6) -- 备份表存在则删除——获取最新表结构 if object_id(@c_backupName) is not null begin select @c_exesql = 'drop table '+@c_backupName execute (@c_exesql) -- 异常检测 select @retcode = @@error,@reccount = @reccount+@@rowcount if @retcode<>0 begin update t_sz_backup_tables set status=1,endtime=getdate(),redes='drop table '+@c_backupName+' failed!' where tableName = @tableName select @i_errorNum = @i_errorNum +1 select @i_count = @i_count + 1 continue end end -- 创建备份表 select @c_exesql = 'select * into '+@c_backupName +' from '+@tableName +' where 1=2' execute (@c_exesql) -- 异常检测 select @retcode = @@error,@reccount = @reccount+@@rowcount if @retcode <>0 begin update t_sz_backup_tables set status=1,endtime=getdate(),redes='create table '+@c_backupName+' failed!' where tableName = @tableName select @i_errorNum = @i_errorNum +1 select @i_count = @i_count + 1 continue end -- 备份数据到历史表 select @c_exesql = 'insert into '+@c_backupName+' select * from '+@tableName execute (@c_exesql) -- 异常检测 select @retcode = @@error,@reccount = @reccount+@@rowcount if @retcode<>0 begin update t_sz_backup_tables set status=1,endtime=getdate(),redes='insert into '+@c_backupName+' failed!' where tableName = @tableName select @i_errorNum = @i_errorNum +1 select @i_count = @i_count + 1 continue end -- 执行成功记录日志 update t_sz_backup_tables set status=0,endtime=getdate(),redes='backup into '+@c_backupName+' success!' where tableName = @tableName end else begin update t_sz_backup_tables set status = 1,endtime=getdate(),redes = convert(char(20),getdate(),120)+':backup failed!source table '+@tableName+' not found!' where tableName = @tableName select @i_errorNum = @i_errorNum + 1 select @i_count = @i_count + 1 continue end select @i_count=@i_count+1 end --*******3.<操作结束,退出>******************************************************************************* select @dt_endtime = getdate() select @usedtime = datediff(ss,@dt_begintime,@dt_endtime) if @i_errorNum <>0 begin select @retcode = 1 select @retdesc = convert(char,@i_errorNum)+' tables backup failed,'+convert(char,@cursorcount-@i_errorNum)+' backup success,please check up the table t_sz_backup_tables!' return @retcode end else begin select @retcode = 0 select @retdesc = convert(varchar,@dt_endtime,120)+':procedure fn_backup_tables '+convert(char,@cursorcount)+' tables was backuped success!' return @retcode end end go
相关推荐
1. **系统管理指南:第一卷** - 这份文档详细介绍了如何管理和维护Sybase IQ系统,包括安装、配置、备份和恢复、安全管理以及性能监控等方面。管理员可以通过这些信息来确保系统的稳定运行和最佳性能。 2. **性能和...
**参考:构件块、表和过程**文档详细阐述了Sybase IQ中的数据结构,如表、索引、视图等,并解释了如何创建和管理这些对象。此外,它可能还包括关于存储过程、触发器和其他数据库对象的信息,这些都是数据库开发和...
了解如何使用Sybase IQ的备份和恢复工具,以确保数据的安全性。 总之,安装Sybase IQ是一个涉及多个步骤的过程,需要对数据库系统有一定的了解。在整个过程中,始终关注文档,确保每个步骤都正确无误,这样可以避免...
### Sybase IQ 16.0实用程序指南关键知识点 #### 概述 SAP Sybase IQ是一款高性能的列式数据库管理系统,专为数据分析而设计。Sybase IQ 16.0版本提供了丰富的实用程序来帮助用户管理和维护数据库。这些实用程序...
- **可编程数据库**:通过存储过程,用户可以编写自定义的数据库子例程,提高查询效率,因为它们预编译并避免了每次调用时的编译过程。 - **事件驱动的触发器**:触发器作为特殊类型的存储过程,用于确保数据完整...
- **Sybase**:支持 Sybase ASE 和 IQ 数据库,提供方便的数据迁移和同步工具。 - **PostgreSQL**:作为开源数据库,PostgreSQL与dbeaver的结合使得开发和维护更加便捷。 2. **功能丰富**: - **SQL编辑器**:...
对于Sybase,它同样能有效地管理ASE和IQ服务器。 DBeaver还支持开源数据库,如Mimer和HSQLDB,以及Apache Derby。这些小型数据库通常用于嵌入式系统或轻量级应用程序,DBeaver为它们提供了完整的生命周期管理工具。...
该工具支持将 Oracle 数据行卸载为文本文件,并能进一步将这些文件加载到其他数据库(如 Sybase IQ)中进行分析。ociuldr 的特点在于其高度的灵活性和强大的性能调优选项,使其成为跨字符集或跨 Oracle 数据库版本...