从设计模式的设计原则感悟生活
设计模式中的很多思想还是很有意思的,刚毕业的时候接触设计模式感觉有点高深,坐而论道,感觉还是有些虚,平时做的小练习还能自己捣鼓一番,自己使用一下设计模式,然后大刀阔斧的改动代码,随心所欲,写完以后还能热乎劲上来高兴几天,时间长了就忘了很多的东西,只是感觉设计模式就是抽象,自己感觉也抽象。如果死磕着问...
使用闪回查询备份数据
今天在生产环境中,开发人员提交了一个脚本,是做update操作的,但是update操作的时候过滤条件有些大,本来预计修改的数据只有5000条,结果这个语句运行下来更改了500万条数据。对生产系统来说算是一个数据灾难,赶紧和开发确认了问题发生的时间,结果说是在半夜11点多,刚好在后半夜才开始做数据备份,这样这个变更也同时影...
生产系统中只读表的实现思路
在生产系统中有些时候需要保证一些表的只读特性,不允许表的数据被轻易修改。可能有一下的场景比较适用。1) 一些系统中有一些类似数据字典信息的表。这些表的信息基本都是稳定的,不会轻易的改变。2) 可能需要从一些外部系统中拷贝一些数据做比对和参考,不希望这些“临时”表的数据被认为修改。3) 系统的核心表...
oracle并行的小细节
今天在从生产环境中做一个数据抽取,为了提高效率,加了并行。发现了一些小的细节。首先,抽取数据时,对于并行度的指定我是设定200M为一个单位,如果表有1G,那么就需要启5个并行,结果有一个表有40G,按照这个单位,需要200个并行。但是在实际中,ddl的执行并行度,数据库不一定会买账,首先从数据库实例层面有一些参数...
数据迁移判断非空约束
在数据迁移中,经常会碰到null值的问题,比如在源库中,某些列可能是null值,但是在目标库中,却有非空约束。这样在数据的迁移过程中就会发生问题。为了更好的对数据的非空问题进行判断,我写了如下的脚本来生成检查的脚本,基本的思路就是生成动态sql,类似 select count(1) from xxx where xxx is null,如果输出结果不为...
一些“简单”的linux命令
有些linux命令看起来极其简单,只包含2个字符,确有很强的功能性。而且看起来还是有些陌生的命令,在工作中别忘记它们的存在。 ab 这条命令式做为性能测试所广泛用到的一下子就有了一种高大上的感觉,来一个例子,对百度的某一个网页执行并发100,时长5秒,发送10000次请求的测试 [ora11g@...
巧用rowid简化sql查询
生产系统中有一条sql语句,目前执行的时间有点长了,SELECT COUNT(1) FROM ( SELECT /*+ leading (payment_temp_table payment PAYMENT_DETAILS account memo) use_nl (payment_temp_table ar1_payment PAYMENT_DETAILS account memo) index (payment payment_pk) index (P...
关于操作失误的数据修复
在系统升级的过程中,准备了大量的脚本,分成几个窗口来分别执行。在碰到问题的时候,一定要很细心和冷静,不经意的错误可以需要几倍,几十倍的努力来挽回。准生产环境中有一个表。TREATMENT_ACTIVITY,现在需要从另外一个临时的schema中insert一部分数据。 Name ...
一些极度危险的linux命令
在linux中有些命令可能功能强大,方便快捷,但是同时这些命令在测试环境中有些可以用,但别在生产上挑战。有些命令一敲,可能你的职业生涯由此转折。关于rm -rf 对于这个命令真没什么好说的,最好的挽救措施就是备份,可能在有些环境中这类命令都是禁用的,但是不管怎么样,注意备份。&...
关于move tablespace的问题总结
现在得到一个需求,需要把生产环境的多个schema下的表结构复制到测试环境中的一个schema下。生产环境和测试i环境的表空间配置都不一样。目前可以考虑用如下的几种方式来实现。1)使用exp/imp来做表结构的导出导入。2)使用dbms_metadata.get_ddl来生成对应的ddl语句。3)使用expdp/impdp来做表结构的导入导出。因为...
怎样突破表名30个字符的限制
根据oracle的规范,对象的长度最大为30位,也就是说,在平时的使用中如果碰到表名长度大于30位,首先oracle是不答应的,它会提示idnetifier too long的错误。而30位的长度总是感觉受到限制,现在在做数据迁移的时候就碰到的类似的问题。当然了,我不是想强行创建一个大于30位的表名,本来可读性就差些,办法总比困难多。想...
海量数据迁移之外部表切分
在前几篇中讨论过海量数据的并行加载,基本思路就是针对每一个物理表都会有一个对应的外部表,在做数据迁移的时候,如果表有上百G的时候,一个物理表对应一个外部表性能上会没有任何提升。如果需要做数据插入的时候,对undo是极大的挑战,从某种程度上而言,性能应该要比datapump要差。这个时候可以考虑一个物理表对应多个...
海量数据迁移之分区并行抽取
在之前的章节中分享过一些数据迁移中并行抽取的细节,比如一个表T 很大,有500G的数据,如果开启并行抽取,默认数据库中并行的最大值为64,那么生成的dump文件最50多为64个,每个dump文件就是7.8G,还是不小,况且在做数据抽取的时候,资源被极大的消耗,如果资源消耗紧张,可能可用的并行资源还不到64个。那么dump文件可能...
关于验证表中有无数据的方法比较
在平时的工作中,有时候需要准备一些脚本,比如能够简单验证一下表是否可访问,或者验证表中有无数据等。今天在测试环境进行了简单的模拟,发现还是有很大的差别。简单来说,要实现如上的需求有两种方式,一种是通过count来判断,另外一种是通过rowid来判断。举个例子。先来看一个大表,但是某个分区没有数据的情况。...
通过sql语句分析足彩
老是做工作中的数据分析,最近也在看足球彩票,竞猜游戏有输有赢,但是里面还是有不少的数据分析的乐趣,关于足球彩票的分析,自己写了如下的程序,可以参考。当然了,最好能带有主观的分析,这样可能准确率要高一些。以下是仅根据赔率做的一个分析。比如我们目前计划投资100块买单场竞猜,胜平负的赔率就有很大的差别...
VXFS启用异步IO导致的严重问题
今天在做数据迁移的时候,碰到了一个严重的问题,数据加载完全hang住了,最后无奈回退了。 系统使用的vxfs文件系统,在生产升级前一个月的时候,做过一次小规模的数据迁移,当时查看awr,ash,最后根据addm的推荐得出加载速度比较慢主要是由于异步IO导致的,而且当时生产库确实没有启用异步io, filesystemio_option的...
使用shell脚本巧妙统计文件
在数据迁移的过程中,会产生大量的dump文件,需要对dump的文件情况进行一个简单清晰的管理,比如目录下的文件特别多,而且某些表比较大,对应的dump文件比较多,就想得到一个很简洁的报告,能够统计出来每个表有多少个dump文件。 比如有1000个dump文件,都是基于 表TEST1,TEST2,TEST3,TEST4的。那么就想得到一个简单的统计...
shell脚本心得
零零星星的接触到写一些shell也有一些日子了,发现自己已经犯了不少的错误,自我总结下。 选择合适的shell shell本身有很多种,大体有如下的几种。 /bin/sh (已经被 /bin/bash 所取代) /bin/bash (就是 Linux 预设的 shell) /bin/ksh (Kornshell 由 AT&T Bell lab. 发展出來的,相融于 bash) /bin/tcsh (整合 C ...
数据迁移工具简单分析
exp/imp 对于数据结构的复制和同步,还是比较理想的工具。 在数据量比较小的情况下,这个工具的性能要远远好于datapump,而且重点推荐,他对于各种常用数据类型的支持还是很不错的。 有一些特性,在某种程度上要好于datapump,在做数据迁移的时候,commit特性还是很重要的。因为通过datapump碰到了很多undo空间不足带来...
海量数据迁移之分区并行切分
在海量的数据迁移中,如果某个表特别大,可以考虑对表中的分区进行切分,比如某个表有100g,还有100个分区,那么可以考虑针对这100个分区,那么可以考虑把这100个分区看成100个表进行并行抽取,如果某个分区数据比较多,可能生成5个dump,那么着100个分区,就可能生成105个分区以上。那么如果有100多个表,那么可能分区都算...