原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任。
深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/42869063
黑龙江的建库之旅,让北漂的我有了一段喘息和舒缓的平坦期。更高兴的是在紧张的工作之余,就在未留意间,亚洲杯开赛了。
今天带着一种期待中国队下一个亚洲杯对手的心态,看了A组的这场韩国对澳大利亚的焦点战。让我没有想到的是,先占据主动权的竟然是韩国队,虽然澳大利亚失球后将老将卡希尔派上了场,并且之后也开始了一股又一股潮水般的反扑,但最终也没能改变结果。随着巴林的主裁判吹响比赛结束的哨声,韩国队以1:0的比分战胜了夺冠大热门澳大利亚队。“演杂”了的澳大利亚人败给了我们的“亚洲”本土球队,虽然有一丝欣慰,但另一方面,也就意味着在八强淘汰赛中,澳大利亚将成为我们的下一个对手。面对这只被视为最俱实力与主场优势的球队,我们将有一场硬仗要打了。
繁杂的工作中,脑海中略过一丝丝的闪光点,想想这中国队的比赛与oracle技术或多或少有着那么一点点的联系与对应。
点滴一:
建库基础操作:表空间、用户、建表
足球比赛要素:战术、球员、配合
1-1 表空间
CREATE TABLESPACE TBS_HYL_PERSON
LOGGING
DATAFILE '+OCR_DATA/HYL/TBS_HYL_PERSON ' SIZE 1000M AUTOEXTEND
ON NEXT 100M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
--常用的创建表空间的sql
映射出中国队的打法体系,使用双后腰对后防的保护,在先前的两场比赛里,充分得到了体现,有没有点规划表空间布局的意思,如下面:
映射到数据库中的表空间规划,有没有点相近的地方,如下面:
1-2 用户
CREATE USER hyl IDENTIFIED BY hyl
DEFAULT TABLESPACE TBS_HYL_PERSON
TEMPORARY TABLESPACE TBS_HYL_TEMP;
--常见的创建用户的sql,默认表空间设置为TBS_HYL_PERSON,临时表空间设置为TBS_HYL_TEMP
映射到中国队,教练佩兰和我们的小伙子们,像下面这样中国队的阵容:
围绕在佩兰主教练身边的中国小伙子们,团结协作正是胜利的保障,回想起某一个大型应用系统下,那多用户互相访问、管理的场景,有没有点相近,就像下面:
1-3 建表
create table TB_HYL_USER
(id varchar2(32),
name varchar2(32),
id_no number,
loadtime date default sysdate
)
tablespace TBS_HYL_PERSON
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 8K
minextents 1
maxextents unlimited
);
对于建表,我们在业务系统里,会针对不同的业务设计不同的表空间,同样在中国队的比赛中,小伙子们也会有不同的进球方式,如任意球、角球、点球、直塞球、二过一、单刀球、世界波球等等。
点滴二:
建库数据处理:常用的类型转换、垃圾数据处理、重复数据处理
实战的关注点:稳固战术体系以慢制动、减少失误、找准时机掌握比赛节奏以动制动
2-1 ORA-01861文字与格式字符串不匹配
现象:Oracle插入时间时,报错:ORA-01861:文字与格式字符串不匹配
这个报错往往出现在插入时间数据时,由于源端数据是诸如“2008/07/28”这种格式之类,在向DATE类型插入数据时,往往会报此类错误。
解决方法很简单,使用to_date对其进行转换即可,语法如:to_date('字段名','yyyy-mm-dd hh24:mi:ss')。
映射:足球比赛上,想想这种格式转换关系,当对手的节奏变快时,我们中国队采用的是掌握主动权的方式,通过控球将节奏压下来。皮球就这样在经过中国小伙子一次一次转换之后,把比赛节奏成功的拉回到我们适应的节奏下。这就是稳固的战术体系,以慢制动。
2-2时间类字段出现垃圾值
这个其实很简单,如果你在查看数据时足够细心,就会发现诸如2098年这类垃圾数据。所以我们要对其进行处理,如果是单纯的时间超过,这个倒是比较好解决,如用以下指令,将其查找出来:
SQL> select dengjishijian from table1 where dengjishijian>to_date('20150101','yyyy-mm-dd');
--假设今天的时间是2015年1月1日,这样很容易查看出时间超出当前的时间点的垃圾时间值
除了这个比较简单的情况外,有时我们也会遇到诸如“20130241”这类格式的数据,明显2月份不会有41日,这也是垃圾数据,或有时出现了“2103年11月1日”之类存在中文的,在做数据抽取时有时也需要处理才可以成功的插入到DATE类型的字段下。我们可以编写一个简单的存储过程,用来查找出这些垃圾字段,举个例子如下:
编写存储过程:
create or replace function isdate(p_in varchar2,f_in varchar2)
return varchar is
scrub_dt date;
begin
scrub_dt := to_date(p_in,f_in);
return 'Y';
exception when others then
return 'N';
end;
/
SQL> select start_date from FLUSH_TEST_DATE where isdate(start_date,'yyyymmddhh24miss') = 'N';
--执行这条语句,便可以查看出不符合数字日期格式的数据这里的N正是调用了存储过程中,把不符合日期格式的字段抛出来。
映射:在足球比赛中,失误是在所难免的,但我们要尽量减少失误,并且在某个失误之后通过团队的其它成员来弥补一个球员失误带来的致命后果。同样,就像数据库中的垃圾数据一样,垃圾数据的产生有时产生是不可避免的,但这就需要我们灵活、正确处理才可以了。
2-3 完全重复数据
如果发现库里有重复数据,一定要同业务研发相关人员确认好后再做处理。
有时如果抛离开了业务,很可能错误理解重复数据的意义,因为也许产生的重复数据是有意义的。
在确认要删除重复数据时,我们可以采取诸如下面这种方法用来查询,举例如:
SQL> select * from table_test where count_id in(select count_id from table_test group by count_id having count(count_id)>1);
--这个sql中的子查询使用having作为条件查询出某个字段重复大于1的count_id,然后再通过这个count_id,把满足count_id字段相同的数据查询出来
映射:有时候数据库中会出现完全重复的数据,这个有可能是数据来源于另外的数据库,重复抽取造成的,这就需要我们做出判断,并将重复数据尽快清除才可以,要以动制动。在中国队的比赛中,我们也是这样的,不能永远都以慢制动,有时候需要以动制动,对抗乌兹别克的那场比赛,当乌兹别克以一球领先,并且想要控制住比赛节奏的时候,中国队的小伙子利用速度冲出一次次有威胁的进攻,并且最后成功扭转乾坤,这便是我们不只是会以慢制动,我们也可以以动制动。O(∩_∩)O哈哈~
点滴三:
上线业务的优化:关联字段索引创建
中国长远的目标:为2018年俄罗斯世界杯预选赛练兵
创建索引
create index idx_TB_HYL_USER_id on TB_HYL_USER (id);
create index idx_TB_HYL_USER_DM4 on TB_HYL_USER (SUBSTR(HYL_USER_DM,0,4));
--对于长数字代码,例如地区编码之类的,我们可以通过截取字段来创建索引
在业务应用中,往往存在着大量关联查询的sql语句,这时我们就要结合业务系统,尽快作出判断,如果有条件先做一次测试,然后及时的在生产库上创建相关索引,来缓解业务中的压力。这是一项必要做的准备。
映射:数据库的优化向来都是大事,可以帮助业务系统起死回生,而我们这支年轻的国字号球队同样需要作出优化,建立起成型的打法体系,让球员们形成默契,这需要教练员的战术规划,需要小伙子们努力,我们期待着。。。
中国队这次亚洲杯的表现,真可以说是让人眼前一亮,这些年轻的小伙子们,在这届杯赛上,让球迷们又重拾了对于国家队的期待。原本这种期待一直都存在着,只是苦于中国队过往的表现总是让球迷们失望,而这一次,希望我们的中国小伙子们放下包袱,不要被过往舆论的压力所影响,勇往直前,真希望可以看到他们在澳大利亚会师决赛。
祝福中国队,在亚洲杯上可以走的更远,希望2018年,中国队,我们期待,在俄罗斯,可以一同预见~~~~
深蓝记于2015年1月17日
声明:
这不是单纯的技术文档,既然学来几招 oracle简单招式,就忍不了在人前卖弄几下。纯为茶余饭后与数朋库友的插科打诨,只为轻松中带有一丝的诙谐,IT技术也能用来调侃一番,还蛮耐人寻味。
同时近来数月oracle知识点忘记了不少,为了把知识点重现,点滴间偶出灵感乍现,以一种自由的形式将其发布,由于本人学艺不精,文中列举的例子或故事,其中必然会有与技术联系牵强之处,望大家海涵。只当是一部小菜鸟的杂记,不要把这当做单纯的技术文章喔,亲!看过、笑过,就好。
欢迎拍砖,这将是我成长的最大动力。
原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任。
深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/42869063
篇章链接:
足球与oracle系列(1):32路诸侯点兵,oracle32进程联盟 之A组巴西SMON进程的大局观
足球与oracle系列(2):巴西揭幕战预演,oracle体系结构杂谈
足球与oracle系列(3):oracle进程排名,世界杯次回合即将战罢!