首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

批处理实现最简化数据自动备份

最近一直在考虑oracle数据自动备份到本地的问题,也找机会当面向大牛请教过,得到了一堆关于DG、GG、RAC、DBLINK、ARCHLOG等方面的建议,还有个哥们直接建议我用redis实现。

但因为受服务器配置和网络带宽的限制,以上方法实现起来较繁琐,且有一定的学习成本(毕竟新技术发展太快,早就跟不上潮流了),而且nosql实现起来可能还需要进行二次开发来实现数据库的读写。

磨蹭了大半个月,终于决定还是选择自己最熟悉的批处理来实现异步备份到本地

思路如上图示:

数据库改造,将大表按天建立表分区

服务端定时exp前三天(天数自定)的表分区

将表分区压缩后放到ftp目录下(压缩比10%,相比其他同步方式可以节省90%的网络资源)

本地定时(自测服务端任务延时30分钟即可,需根据实际情况定)通过ftp方式下载指定压缩包到本地,解压后使用imp导入表分区

技术点:

表名及分区名为三天前日期,批处理不直接支持对date进行加减天数的操作,使用sqlplus运行固定脚本spool到文本1,然后typefind 输出唯一行到文本2,利用for/f 读取文本2获取日期参数到变量,exp时文件名直接调用日期变量即可;

批处理中for/f 读取多列文本时,只能定义首列变量名(单字符)如%i,默认第二列赋值到变量%j,依次递增;

exp导出时因为11G的延迟段特性,当同一大表某一表分区中无数据时会出现exp00003错误,无法对分区表直接使用ALTER TABLE XXX ALLOCATE EXTENT和ALTER TABLE XXX PARTITION XX ALLOCATE EXTENT的方式分配段信息,需要直接使用insert into为每个表分区插入一条数据,变相实现分配段的功能。

以上,在测试环境测试通过。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171220G0Y5OI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券