本发明专利技术涉及数据库领域,具体是一种数据绑定批量入库方法和装置。实现本发明专利技术的方法包括如下步骤:通过配置文件选择入库方式;提供绑定接口绑定入库数据;调用数据插入接口将入库数据传递到底层,底层调用绑定接口绑定数据并入库。本灵活入库方法可保证入库数据不丢失,提升入库速度,提供各个绑定接口模板。
【技术实现步骤摘要】
本专利技术涉及数据库领域,具体是一种数据绑定入库方法和装置。
技术介绍
oracle数据入库流程如下DBA在oracle服务端创建表,在客户端通过一定的方法将数据入库到服务端表中。对于Iinux下客户端常用的方法有两种。方法一 occi, occi是一个提供了 c++应用程序使用oracle数据库中的数据的API接口,能够使c++编程最大限度利用oracle数据库操作,包括sql语句处理和对象处理。·方法二 sqlloader, sqlloader是oracle的数据加载工具,通常用来将大量外部数据文件迁移到oracle数据库中。对我们来说,如果待入库的数据就几十条,可直接到数据库里去一条条添加;但对几千上万甚至更多的数据来说,就不可能一条条添加了,所以sqlloader是必要的。occi入库流程如下程序开始一> 创建环境变量一> 创建数据库连接对象一> 创建Statement类对象一> 执行某张表的SQL语句处理数据一> 释放Statement对象一> 断开数据库连接一> 释放环境变量。每张表都需要上述流程才能正确将数据入库。当多个表都需要入库时,如果每个表都按照流程设计,那么代码重用率就很低,而且也不便于后期添加删除维护,因此可以设计一套统一的occi调用接口,上层调用者无心关心底层实现细节,只需简单调用接口就可以将数据正确的入库。sqlloader入库流程如下构建某张表ctl文件一> 准备待入库数据文件一> 执行sqlldr命令将数据源导入数据库。同样的该流程只反应了一张表的入库流程,当多个表都需要入库时,能否统一 ctl文件生成规则,统一 sqlloader命令调度规则。都对我们提出更高的要求。从上面分析不难看出,目前提供入库的方式都已成熟,但高效合理运用这些技术,充分发挥其技术特点的方法却不太多,或者差强人意。
技术实现思路
本专利技术的目的是同时提供两种数据入库方法(occi入库和sqlloader入库),提供一种通用的数据绑定接口方法,实现occi入库全过程和sqlloader ctl文件生成、数据文件生成、数据入库全过程。同时当occi入库失败时,启用sqlloader入库。为了实现上述目的本专利技术采用的技术方案是,一种数据绑定入库方法,包括如下步骤A、底层提供对外全局初始化函数,occi初始化函数、sqlloader初始化函数和宏定义接口模板;其中宏定义接口模板,包括对于OCCi入库的消息结构与表之间绑定操作函数模板和消息结构字段与SQL语句绑定函数模板,对于sqlloader入库的消息结构与表ctl文件之间的绑定函数模板和消息结构字段与写文件的绑定函数模板。B、上层在配置文件中配置入库方式,即occi或者sqlloader,只能选其一种入库方法。C、上层调用步骤A全局初始化函数,底层读取步骤B配置文件,若是OCCi入库,则建立入库主机到数据库主机的连接池。 D、上层调用occi初始化函数或者sqlloader初始化函数;并在头文件中调用步骤A中的宏定义接口模板,建立消息结构与表的绑定函数,消息结构字段与SQL语句的绑定函数,消息结构与表ctl文件之间的绑定函数,消息结构字段与写文件的绑定函数。E、当底层收到步骤D的occi初始化函数或sqlloader初始化函数,读取步骤B配置文件,对于occi根据c++类模板,调用步骤D对应消息结构与表的绑定函数,使用绑定函数获取的表字段初始化入库SQL语句,然后初始化该表occi数据队列,开启取队列线程,提供对外该表的插入数据函数模板,生成该表occi入库实例,并将该对象插入occi全局管理实例中;对于sqlloader根据c++类模板,调用步骤D对应消息结构字段与写文件的绑定函数初始化写文件,调用步骤D消息结构与表ctl文件的绑定函数生成该表的ctl控制文件,提供该表写文件方式入队列函数模板,开启取队列线程,生成该表写文件实例,并将该对象插入写文件全局管理实例中。F、当有某张表数据需要入库时,上层调用步骤E中occi初始化时底层提供的对外该表的插入数据函数模板。G、底层根据C++类模板功能,调用步骤E中对应表的插入数据函数模板,首先根据OCCi全局管理实例判断该表是否使用OCCi入库,如果是则将数据入步骤E该表OCCi数据队列;如果不是则判断步骤B中配置文件是否支持sqlloader入库,如果支持则调用步骤E该表写文件方式入队列函数模板,将数据入写文件队列。H、底层各表的occi取队列线程各自取自己队列,若能从队列取得数据,则调用步骤D消息结构字段与SQL语句的绑定函数,将待入库数据同数据库表字段一一对应绑定,判断是否待入库条数达到阀值,若达到则使用occi批量入库,当入库失败时,为了避免数据丢失,调用步骤E该表写文件方式入队列函数,将入库失败数据入写文件队列。I、底层各表的写文件取队列线程各自读自己队列,若能从队列取得数据,则调用步骤D消息结构字段与写文件的绑定函数,将待入库数据同数据库表字段一一对应绑定,判断是否待入库条数大小达到写文件缓存区大小,若达到则将缓存区中数据一并写入文件,若文件大小达到阀值,则文件生成完毕,将文件移动到待入库目录;切换文件,后续数据写入切换后的文件。J、外部shell脚本判断是否有待入库文件生成,若有则调用Iinux命令sqlldr,并使用步骤E对应表ctl控制文件将该文件入库。一种数据绑定批量入库装置包括A、用于底层提供对外全局初始化函数的装置,包括occi初始化函数模块、sqlloader初始化函数模块和宏定义接口模板;其中宏定义接口模板,包括对于occi入库的消息结构与表之间绑定操作函数模板和消息结构字段与SQL语句绑定函数模板,对于sqlloader入库的消息结构与表ctl文件之间的绑定函数模板和消息结构字段与写文件的绑定函数模板。B、用于上层在配置文件中配置入库方式的装置,所述配置文件包括occi配置文件或者sqlloader配置文件;上层调用A装置中的全局初始化函数,底层读取所述occi配置文件或者sqlloader配置文件。C、绑定函数模块通过上层调用occi初始化函数模块或者sqlloader初始化函数模块,并在头文件中调用A装置中的宏定义接口模板建立;其中所述绑定函数模块包括消息结构与表的绑定函数模块,消息结构字段与SQL语句的绑定函数模块,消息结构与表ctl文件之间的绑定函数模块,消息结构字段与写文件的绑定函数模块。D、插入数据函数模板装置用于调用所述绑定函数模块生成occi入库实例或生成sqlloader的写文件实例,并将occi入库实例插入occi全局管理实例中,将sqlloader的写文件实例插入写文件全局管理实例中。E、数据入库装置用于底层调用插入数据函数模板装置,判断入库方式,若是OCCi入库则调用绑定函数模块中的消息结构字段与SQL语句的绑定函数模块,将待入库数据同数据库表字段一一对应绑定,入库;若是sqlloader入库则调用绑定函数模块中的消息结构字段与写文件的绑定函数模块,将待入库数据同数据库表字段一一对应绑定,入库。本专利技术技术方案所获得有益效果有I、灵活入库方法选择和保证入库数据不丢失,当入库量小时,可选择occi入本文档来自技高网...
【技术保护点】
一种数据绑定批量入库方法,包括如下步骤:A、底层提供对外全局初始化函数,occi初始化函数、sqlloader初始化函数和宏定义接口模板;其中宏定义接口模板,包括对于occi入库的消息结构与表之间绑定操作函数模板和消息结构字段与SQL语句绑定函数模板,对于sqlloader入库的消息结构与表ctl文件之间的绑定函数模板和消息结构字段与写文件的绑定函数模板;B、上层在配置文件中配置入库方式,即occi或者sqlloader,只能选其一种入库方法;C、上层调用步骤A全局初始化函数,底层读取步骤B配置文件,若是occi入库,则建立入库主机到数据库主机的连接池;D、上层调用occi初始化函数或者sqlloader初始化函数;并在头文件中调用步骤A中的宏定义接口模板,建立消息结构与表的绑定函数,消息结构字段与SQL语句的绑定函数,消息结构与表ctl文件之间的绑定函数,消息结构字段与写文件的绑定函数;E、当底层收到步骤D的occi初始化函数或sqlloader初始化函数,读取步骤B配置文件,对于occi根据c++类模板,调用步骤D对应消息结构与表的绑定函数,使用绑定函数获取的表字段初始化入库SQL语句,然后初始化该表occi数据队列,开启取队列线程,提供对外该表的插入数据函数模板,生成该表occi入库实例,并将该对象插入occi全局管理实例中;对于sqlloader根据c++类模板,调用步骤D对应消息结构字段与写文件的绑定函数初始化写文件,调用步骤D消息结构与表ctl文件的绑定函数生成该表的ctl控制文件,提供该表写文件方式入队列函数模板,开启取队列线程,生成该表写文件实例,并将该对象插入写文件全局管理实例中;F、当有某张表数据需要入库时,上层调用步骤E中occi初始化时底层提供的对外该表的插入数据函数模板;G、底层根据c++类模板功能,调用步骤E中对应表的插入数据函数模板,首先根据occi全局管理实例判断该表是否使用occi入库,如果是则将数据入步骤E该表occi数据队列;如果不是则判断步骤B中配置文件是否支持sqlloader入库,如果支持则调用步骤E该表写文件方式入队列函数模板,将数据入写文件队列;H、底层各表的occi取队列线程各自取自己队列,若能从队列取得数据,则调用步骤D消息结构字段与SQL语句的绑定函数,将待入库数据同数据库表 字段一一对应绑定,判断是否待入库条数达到阀值,若达到则使用occi批量入库,当入库失败时,为了避免数据丢失,调用步骤E该表写文件方式入队列函数,将入库失败数据入写文件队列;I、底层各表的写文件取队列线程各自读自己队列,若能从队列取得数据,则调用步骤D消息结构字段与写文件的绑定函数,将待入库数据同数据库表字段一一对应绑定,判断是否待入库条数大小达到写文件缓存区大小,若达到则将缓存区中数据一并写入文件,若文件大小达到阀值,则文件生成完毕,将文件移动到待入库目录;切换文件,后续数据写入切换后的文件;J、外部shell脚本判断是否有待入库文件生成,若有则调用linux命令sqlldr,并使用步骤E对应表ctl控制文件将该文件入库。...
【技术特征摘要】
1.一种数据绑定批量入库方法,包括如下步骤 A、底层提供对外全局初始化函数,occi初始化函数、sqlloader初始化函数和宏定义接口模板;其中宏定义接口模板,包括对于occi入库的消息结构与表之间绑定操作函数模板和消息结构字段与SQL语句绑定函数模板,对于sqlloader入库的消息结构与表ctl文件之间的绑定函数模板和消息结构字段与写文件的绑定函数模板; B、上层在配置文件中配置入库方式,即occi或者sqlloader,只能选其一种入库方法; C、上层调用步骤A全局初始化函数,底层读取步骤B配置文件,若是occi入库,则建立入库主机到数据库主机的连接池; D、上层调用occi初始化函数或者sqlloader初始化函数;并在头文件中调用步骤A中的宏定义接口模板,建立消息结构与表的绑定函数,消息结构字段与SQL语句的绑定函数,消息结构与表ctl文件之间的绑定函数,消息结构字段与写文件的绑定函数; E、当底层收到步骤D的occi初始化函数或sqlloader初始化函数,读取步骤B配置文件,对于occi根据c++类模板,调用步骤D对应消息结构与表的绑定函数,使用绑定函数获取的表字段初始化入库SQL语句,然后初始化该表occi数据队列,开启取队列线程,提供对外该表的插入数据函数模板,生成该表occi入库实例,并将该对象插入occi全局管理实例中;对于sqlloader根据c++类模板,调用步骤D对应消息结构字段与写文件的绑定函数初始化写文件,调用步骤D消息结构与表ctl文件的绑定函数生成该表的ctl控制文件,提供该表写文件方式入队列函数模板,开启取队列线程,生成该表写文件实例,并将该对象插入写文件全局管理实例中; F、当有某张表数据需要入库时,上层调用步骤E中occi初始化时底层提供的对外该表的插入数据函数模板; G、底层根据c++类模板功能,调用步骤E中对应表的插入数据函数模板,首先根据occi全局管理实例判断该表是否使用occi入库,如果是则将数据入步骤E该表occi数据队列;如果不是则判断步骤B中配置文件是否支持sqlloader入库,如果支持则调用步骤E该表写文件方式入队列函数模板,将数据入写文件队列; H、底层各表的occi取队列线程各自取自己队列,若能从队列取得数据,则调用步骤D消息结构字段与SQL语句的绑定函数,将待入库数据同数据库表字段一一对应绑定,判断是否待入库条数达到阀...
【专利技术属性】
技术研发人员:叶春生,车新奕,雷果,程涛木,冉梦旭,尹开中,
申请(专利权)人:深圳市博瑞得科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。