Oracle ACE,一段不可思议的旅程
前些天,非常有幸通过了Oracle的ACE审核,正如负责人Jennifer女士在邮件中所说,congratulations and welcome to the Oracle ACE community!,正式进入Oracle ACE大家庭。上墙信息,https://apex.oracle.com/pls/apex/f?p=19297:3:回想起这一路,对我来说还是有些不可思议,从2013年决定系
探寻大表删除字段慢的原因
《大表删除字段为何慢?》的案例中,提到删除一张大表的字段,产生了很多等待,但是测试环境模拟的现象,看起来和生产,略有区别。由于生产环境,用的是DG架构,因此在数据库同事的协助下,利用DG备库snapshot的功能,在生产环境,真实操作了一次,虽然和主库操作,唯一不同的是,没有请求的压力,相当于停了应用,但还是能说明些问题。整个删除操作,执行时间,大约是30分钟,通过10046的trace,看见等待
小时制式问题
user_objects视图中,有两个字段,created和timestamp,按照官方手册,created就是对象的创建时间戳,DATE类型,timestamp是对象定义的时间戳,VARCHAR2类型,而且他的长度是19,正好存储"2018-12-27 09:31:14",显然和created含义相同,但我们创建表,发现user_objects视图检索出来的created和t
传说中的“谓词越界“场景
开发环境,碰见一个谓词越界的问题,模拟这条SQL,如下所示,其中A_ID是表test的外键,并且存在索引,SELECT 1 FROM test WHERE A_ID = 6052138 AND IS_VALID = 1这张表的数据量,大约10万,SQL> select&nb
Oracle CBO选错执行计划的一种场景
测试人员做应用性能测试,反馈有一条SQL语句,之前执行非常快,现在执行时间,明显慢了。SQL语句非常简单,根据日期字段,检索当日表中记录数,select count(*) from user.tbl where cki_date = to_date('2017-10-10','yyyy-mm-dd');我们执行一次10053,SQL> alter sessio
imp错误IMP-00098: INTERNAL ERROR: impgst2Segmentation fault
如果使用impdp要看dump的内容,可以使用sqlfile参数,他会将所有的DDL语句写入文件,SQLFILEWrite all the SQL DDL to a specified file.如果使用imp要看dump的内容,可以使用show参数,默认值为n,SHOW just list file contents (N)但是今儿执行了指令imp
Oracle导入导出的常见错误
做数据的导入导出操作,最常用的就是imp/exp和impdp/expdp,经常会碰见各种错误,之前总结过一些,《解决导入过程中出现的ORA-02289错误》、《生产数据导入测试环境碰见的一些问题》。补充一些最近碰见的错误。1. exp导出提示"PLS-00302:必须说明SET_NO_OUTLINES 组件"如果客户端是Oracle 11g,而服务器端是Oracle 9i,执行
Oracle违反约束数据的workaround
最近为测试做一些数据导入,其中存在一些主子表,由于种种原因,子表有些记录,外键值在主表无记录,导致数据导入过程中,无法创建外键,Failing sql is:ALTER TABLE "A" ADD CONSTRAINT "FK_A_REF_B" FOREIGN KEY ("A_ID") REFERENCES "B" (
自适应log file sync影响案例
Oracle最吸引人的地方,就是有些答案,隐藏在种种现象之中,扑朔迷离,朦朦胧胧,就像侦探办案,首先要有思路,其次要有证据,再者就是扎实的基础知识,另外就是些运气。例如最近碰见了一个案例,一套3节点11.2.0.4 RAC,某应用只用节点1(FAILOVER other nodes),如下是系统负载,某段时间,TPS是554.5,AWR经常出现log file sync等待事件处于top5/10首
CBO如何选择相同cost的索引
ACOUG年会杨长老的演讲中,曾提到一个问题,一条SQL语句,两种执行计划的cost值相同,CBO是如何选择执行计划?翻译一下问题,创建测试表数据,SQL> create table z (a number, b number);Table created.SQL> begin 2 for i in 1 .. 10000 lo
试用ODU软件恢复corrupt block
Oracle的数据恢复处理,有各种方法工具支持,在这方面,我算是一个新手,也是处于不断的学习中。业界有一些著名的恢复软件,简单罗列一下,1. Oracle DUL是 Oracle公司内部的数据库恢复工具,由在荷兰的Oracle Support,Bernard van Duijnen开发,需要注意的是,DUL不是Oracle的一个产品,不是一个受Oracle支持的产品。DUL被严格限制为Oracle
"0.1"在PL/SQL Developer和sqlplus中如何不显示为".1"?
微信群有朋友问,PL/SQL Developer显示0.1的时候自动将0删除,即".1",因此有什么方法,可以显示小数点之前的0?其实不止PL/SQL Developer,即使sqlplus命令行也有这问题,SQL> create table tbl(a float);Table created.SQL> insert into tbl values(1);1 ro
Java保留两位小数的方法
项目中有一个小需求,两个整数相除,结果需要保留两位小数,即1.00、0.50这种数据格式。以下做法不行,因为两整数相除,小数点以后的数字会被截断,让运算结果为整数类型,int x = 10;int y = 20;int a = x/y;System.out.println(a);// 输出0System.out.println(x/y);// 输出0System.out.println((floa
MyBatis中的JdbcType映射介绍
Java项目涉及到数据库交互,以往常用的是JDBC,现在则有Hibernate、Mybatis等这些持久化支持。项目中用到了MyBatis,和JDBC最显著的区别,就是SQL语句配置化,通过xml文件定义SQL语句,当然JDBC也可以将SQL配置化,需要定制开发,MyBatis则直接支持这种方法。官方对于MyBatis的介绍,MyBatis is a first class persistence
我经常用的一些vi快捷键
Linux下vi/vim的操作,当你不熟悉时,不会愿意用他,一旦你习惯了,他的高效就无人能敌,用久了就会有种,相逢恨晚的感觉,这也是一部分人,习惯使用Mac而不是Windows的原因。vi操作,可以说基本上,围绕着键盘的每一个键位,都有他的意义。首先说一些我常用的,(1) 打开vi如果未输入i,则复制-粘贴字符,会导致前面少几个字符。例如,> vi test.txtthis is a tes
学习的好地方 - 阿里数据库内核组月报站点
分享自己的一些工作、学习、生活心得,工作生活做到尽量平衡,座右铭“宝剑锋从磨砺出,梅花香自苦寒来”。
iptables-远程访问数据库端口策略
一个开发提出的业务需求,需要开通某台服务器,到某套数据库的访问权限,即1521端口访问权限,提交了网络工单,等网络实施后,进行测试,> telnet x.x.x.x 1521正在连接10.6.1.1...竟然连接不通?咨询网络,确认已经开通了。还有什么问题?朋友们可能已经猜出来,有可能是防火墙,屏蔽了对于1521端口的访问。如何验证?因为是测试环境,所以最简单的一种方法,就是关闭防火墙,&g
一次夜维SQL的性能优化
最近单位搬家,从国家会议中心,搬往空气清新的顺义后沙峪,搬迁之前的完结上线中,碰见了一些棘手的问题,有一些值得借鉴的地方。 这是一个夜维程序的优化。这个夜维的目的,是每日删除30+张表历史数据,其中的主要矛盾,是一张5000万的表,以下仅针对这张表的优化,做下介绍,大致经历了几个阶段, 阶段一:顺序删除每张表,例如表A和B,B为A表子表,由于表有主外键关系,因此需要先删B表,再
开发问题小结
这几天开发的过程中,碰见了一些问题,有些是属于常识问题,知道了记住了,下次就不会犯错,有些是属于知识模糊,需要理解,在此总结记录。 1. MyBatis报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)网上的经验介绍:一般的原因是Mapper interface和xml文件的
JDBC读取数据优化-fetch size
最近由于业务上的需求,一张旧表结构中的数据,需要提取出来,根据规则,导入一张新表结构中,开发同学写了一个工具,用于实现新旧结构的transformation,实现逻辑简单,就是使用jdbc从A表读出数据,做了一些处理,再存入新表B中,发现读取旧表的操作,非常缓慢,无法满足要求。读取数据的示例代码,conn = getConnection();long start = System.currentT