免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2303 | 回复: 7
打印 上一主题 下一主题

有两个同结构表,每天切换一次,有什么好方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-07 16:51 |只看该作者 |倒序浏览
现在系统需要有两套同结构表,因为24小业务,并且用户数据,每天要从外面同步。
所以每天会用一个表来同步,另一个正常使用。同步完成后,两个表切换使用。
我想了3个方法
1.在程序里写2套访问表的proc程序,为避免影响效率,不考虑使用动态sql
2.程序1套,通过修改表名来切换。
3.程序1套,通过重建同义词来切换。

主要是考虑性能和稳定性。

同学们给点建议吧,谢谢!

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2011-04-07 19:30 |只看该作者
用job

论坛徽章:
3
CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43
3 [报告]
发表于 2011-04-08 08:46 |只看该作者
你所说的从外面同步  是如何同步法  具体流程是?

可以考虑使用分区表

论坛徽章:
0
4 [报告]
发表于 2011-04-08 09:42 |只看该作者
本帖最后由 shine010 于 2011-04-08 09:55 编辑

准确的说不是同步,是替换,外部系统生成的文件直接load到数据库中,原来的数据扔掉。

初步设计是A/B两套表,假设今天联机使用A表,到了晚上会重新生成B表数据,B表数据生成完成后,再停止使用A表,联机开始使用B表。下一次就是重新生成A表数据替换B表使用了。

调度可以用job,没问题

能指定表分区做sqlldr?对其他分区正常的操作有没有影响?

我觉得修改表名最简单,不知道每天修改一次表明是否会造成不好的影响

论坛徽章:
3
CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43
5 [报告]
发表于 2011-04-08 09:58 |只看该作者
针对你这种需要  可以考虑使用分区  

关键是有没有好的分区条件

如果导入进去  这个不是问题

如果使用分区的话   程序方面基本上不用修改 就像单表一样  表换来换去  也不是很好!

论坛徽章:
0
6 [报告]
发表于 2011-04-08 10:46 |只看该作者
针对你这种需要  可以考虑使用分区  

关键是有没有好的分区条件

如果导入进去  这个不是问题

如果 ...
duolanshizhe 发表于 2011-04-08 09:58


我现在靠修改同义词来切换。
现在没有好的分区条件,如果用分区,只能新加字段,10几个表吧,分区确实是好方法。

论坛徽章:
3
CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43
7 [报告]
发表于 2011-04-08 11:11 |只看该作者
我还可以告诉你一种方法:

把AB表做到一个视图中,通过union all方式

然后 通过一种算法来实现每次只取一张表的数据即可?

就是在 union all 前后加上where 条件  让一个 为真 一个为假? 然后结合业务需要来弄!

论坛徽章:
3
CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43
8 [报告]
发表于 2011-04-08 11:22 |只看该作者
本帖最后由 duolanshizhe 于 2011-04-08 11:26 编辑

突然想到一个比较好的例子,仅供参考:


  1. create view all_data as

  2. select * from taba
  3. where mod(to_char(sysdate,'d'),2)=1

  4. union all

  5. select * from tabb
  6. where mod(to_char(sysdate,'d'),2)=0
复制代码
不过这也有其局限性  楼主可以试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP