伴随建库的亚洲杯――祝福中国队(一)

2015-01-21 11:11:17 · 作者: · 浏览: 61

点滴一:

建库基础操作:表空间、用户、建表

足球比赛要素:战术、球员、配合

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字段相同的数据查询出来

?

映射:有时候数据库中会出现完全重复的数据,这个有可能是数据来源于另外的数据库,重复抽取造成的,这就需要我们做出判断,并将重复数据尽快清除才可以,要以动制动。在中国队的比赛中,我们也是这样的,不能永远都以慢制动,有时候需要以动制动,对抗乌兹别克的那场比赛,当乌兹别克以一球领先,并且想要控制住比赛节奏的时候,中国队的小伙子利用速度冲出一次次有威胁的进攻,并且最后成功扭转乾坤,这便是我们不只是会以慢制动,我们也可以以动制动。

点滴三:

上线业务的优化:关联字段索引创建

中国长远的目标:为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语句,这时我们就要结合业务系统,尽快作出判断,如果有条件先做一次测试,然后及时的在生产库上创建相关索引,来缓解业务中的压力。这是一项必要做的准备。

映射:数据库的优化向来都是大事,可以