心得体会
luckman100
这个作者很懒,什么都没留下…
展开
-
enq: TM – contention等待事件
enq: TM – contention等待事原创 2014-10-21 23:36:03 · 1209 阅读 · 1 评论 -
写视图应该要注意的问题
视图是我们开发过程中经常打交道的对象,不知道你在写视图时有没有犯过这样的错误:create or replace view test_view as select b.emp_no, b.salary from emp a,emp_salary b WHERE a.emp_no = b.emp_no(+)emp表中有个emp_no为123的员工,在emp原创 2014-03-09 22:52:39 · 1075 阅读 · 0 评论 -
如何确定定时job正在运行
在判断oracle JOB是否在运行时,很多人第一时间会想到视图 dba_jobs_running ,不过这个视图有个缺陷,它只能显示当前实例上正在运行的JOB,单机环境当然没问题,如果是RAC环境,这个视图的查询结果就会不准确。。当然有个比较麻烦的办法,就是关联GV$SESSION 和 GV$SQL 去判断JOB是否在运行,不过这就要求你对执行的内容很熟悉,能够很快看的出SQL正是你JOB运行的原创 2014-03-08 13:27:49 · 2936 阅读 · 0 评论 -
追踪存储过程中报错行
开发的朋友经常遇到的问题是:程序在EXCEPTION的WHEN OTHERS 中报了错,这是很头疼的问题,尤其在程序包很大的时候。。这个时候就需要迫切的知道到底是哪里发生了异常,这里介绍一个很好用的方法,可以准确的定位到你存储过程哪行报了异常,这就是:dbms_utility.format_error_backtrace 举个例子1.新建程序包create or replace pack原创 2014-03-08 15:25:36 · 1907 阅读 · 0 评论 -
oralce热块
oracle的热块问题一直是性能瓶颈的重要因素,下面我们来通过一个例子来了解下:1. 创建表CREATE TABLE test2 (ID NUMBER);2.插入一条记录INSERT INTO test2 (ID) VALUES(1);commit;3.查看表test2,看看需要多少一致读4.在另一个会话,做表的更新操作,并不提交BEGIN原创 2014-03-08 13:12:07 · 1874 阅读 · 0 评论 -
正在运行的JOB被broken以后会怎么样
今天做了个测试,想看下如果正在运行的定时JOB被broken后会怎样,我原以为定时job会停止继续起job,而正在运行的job会继续跑完,但是测试结果我只猜对了一半。1.建立定时jobdeclare job number; begindbms_job.submit(job,'FOR i IN 1..500000 LOOP insert into a (id,m_na原创 2014-03-04 23:01:15 · 6260 阅读 · 1 评论 -
为什么plsql developer长时间执行sql会通信中断(3)
这个题目我已经写过两篇文章了,每次都会有新的发现,今天也不例外。今天我在做测试资料导入的测试时,需要插入4亿的数据量,我在PLSQL用insert/*+append*/ into XXX select/*+parallel(t 16)*/ * from XXX 然后一次提交,因为我担心会失败,所以sql一边运行,我一边观察表空间,UNDO空间,temp空间是否足够,结果这些空间都是足够的,但是原创 2014-03-10 21:12:56 · 2485 阅读 · 0 评论 -
调用包中存储过程注意的问题
今天看了一个程序包,大致结构如下create or replace package body test_p is PROCEDURE test_sub IS BEGIN dbms_output.put_line('in'); END;begin dbms_output.put_line('out');END ;然后我在外部调用包里面的过程tes原创 2014-02-28 21:57:46 · 2220 阅读 · 0 评论 -
常用SQL及命令整理
1. 查表空间的使用情况:SELECT a.TABLESPACE_NAME, sum(a.bytes)/1024/1024 TOTAL_SIZE, sum(b.bytes)/1024/1024 remain_size, sum(a.bytes)/1024/1024-sum(b.bytes)/1024/1024 used_size,原创 2013-07-11 23:35:44 · 770 阅读 · 0 评论 -
expdp impdp的使用
今天到网上看到这么一句话:EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。。。。我起初以为expdp,impdp不能在客户端使用,发现并不是这样的,我做了下面的测试:1.sysdba账号建立目录和授权SQL> create directory dump_dir as '/tmp';Directory created.SQL> gra原创 2014-01-11 19:36:07 · 757 阅读 · 0 评论 -
RAC环境kill session
在RAC环境下,如果想kill掉一个session,可能会遇到这个session并不在你登陆的机器上,导致报错:session不存在,这个时候有2个办法解决:1.如果是11g之前的版本,可以修改TNS文件,指定连接到该session所在的节点,这时就能连接到该节点用 alter system kill session 'sid,serial#' 杀掉session如:RACDB =原创 2014-01-05 13:53:44 · 3492 阅读 · 0 评论 -
定时JOB一些容易被忽略的要点
定时job是我们在数据库开发过程中经常要用到的工具,下面是我自己认为比较重要,但又容易忽略的地方1. 定时JOB同一时间点只会启动一个JOB比如,你的job间隔时间是1分钟,但是你what的内容要运行2分钟,也许你会误认为,what内容执行一分钟后,会另起一个JOB跑what内容,但是不会这样,同一个时间点只会启动一个JOB2.定时JOB失败16次后,会自动挂起来。不再自动执行,相原创 2014-03-04 23:07:39 · 826 阅读 · 0 评论 -
写复杂视图时需要注意的问题
不知道大家xie原创 2014-05-14 22:14:41 · 1275 阅读 · 0 评论 -
DML执行期间执行计划的动态切换
很久没写文章了,我的恒章都变灰了,其实原创 2014-10-21 22:59:13 · 903 阅读 · 0 评论 -
为什么v$sql中的执行次数会被重置
这几天一直在观察生产环境中一个长时间执行的sql原创 2014-06-22 22:06:46 · 2382 阅读 · 0 评论 -
为什么v$sql中的执行次数会被重置(续)
刚刚通过实验,原创 2014-06-22 22:47:39 · 1117 阅读 · 0 评论 -
关于性能问题的思考
说到性能问题,我想很多朋友第一想到的是SQL优化原创 2014-06-17 22:17:42 · 689 阅读 · 0 评论 -
从V$SQL中搜索sql时要注意的点
因为经常要观察原创 2014-06-15 22:11:37 · 932 阅读 · 0 评论 -
一次被JOB整的很惨的经历
昨天生产环境有个产品数据需要原创 2014-06-15 20:27:04 · 705 阅读 · 0 评论 -
关于包授权的问题
我有一个包,想授权给另一个schema执行,我xu原创 2014-05-30 23:06:41 · 6667 阅读 · 0 评论 -
让我们抛弃char吧
最近在阅读代码是,发现以前很多代码中,很多地方都用到了 char 类型的原创 2014-06-08 13:50:01 · 677 阅读 · 0 评论 -
DML的重启
DML重启,这是我今天学到的原创 2014-06-08 20:52:23 · 700 阅读 · 0 评论 -
varchar2最大长度的陷阱
以前在参考书籍上有看到原创 2014-06-08 12:49:21 · 1005 阅读 · 0 评论 -
编译包时遇到&怎么办
今天在用命令行执行一个包时,老是弹出来对话框,要我输入变量值,结果发现是因为包中有字符串包含了& 符号,当oracle遇到&符号时,会认为这是个变量,需要手工输入变量值,其实这只是字符串中的一部分,我根本不想用变量。。。遇到这种情况,有个好办法,就是将&符号换一种写法:chr(38),这样执行包时就不会让你输入变量值了。。。SQL> select 'YOU'||CHR(38)||'I'原创 2014-01-05 09:27:30 · 643 阅读 · 0 评论 -
执行计划的动态切换
之前我一直以为同样一个sql在运行过程中,其执行计划是不会改变的,今天通过一个实验证明了执行中sql的执行计划也是会动态变化的。。。。。用一个循环让一个sql反复被执行DECLAREa VARCHAR2(2000);BEGIN FOR i IN 1..500000 LOOP SELECT b.object_name INTO a FROM b WHERE b.object原创 2014-01-02 23:47:25 · 637 阅读 · 0 评论 -
使用oracle函数的小技巧
oracle提供给了我们很多很好用的函数,如substr,instr等等,这些你可能经常用,但是你有没发现这么一个特点:就是很多函数在使用时,不一定只能用在sql中(如 select substr('aassdd',1,2) from dual),也能直接用在plsql中(如 if substr('dffdfd',1,2)='dd'),我以前用很多函数时,都习惯是用在sql中,其实有时候直接用在p原创 2013-10-13 22:04:01 · 608 阅读 · 0 评论 -
不会说谎的序列
今天在测试环境发现自己写的程序在插入表A是有重复的数据,这就苦恼了我,如果程序正常运行是不会出现重复的数据的,到底是自己程序写的有问题还是其他测试人员手工插入的数据了??我来回看了几次代码,又做了测试,都没有重现重复数据的bug。我这下子就郁闷了,是程序有哪些细节的逻辑没有考虑清楚了还是别的什么问题??反正弄得我很不安心。。。。。没办法,抽了支烟,仔细想了想,对了,每行记录都是有id(序列)这原创 2013-10-13 21:49:46 · 644 阅读 · 0 评论 -
PLS-00231
create or replace function Two return Number is begin return 2; end Two;create or replace procedure PrintTwo is myNum Number; begin转载 2013-09-23 22:54:25 · 1219 阅读 · 0 评论 -
SP2-0042:未知命令
今天在准备insert脚本(就是在PLSQL里面select出记录,然后右键,保存为insert脚本)后,拿这个insert脚本去其他环境用sqlplus跑,结果一跑就报错:SP2-0042:未知命令 ‘***?’ - 其余行忽略结果又试了几次还是一样的错,后来灵感一来,将这个insert脚本用记事本打开,然后选择另存为时发现脚本的格式是UTF-8,之前就听说过脚本不要保存为这种格式,否则很容原创 2013-08-28 23:21:51 · 11416 阅读 · 1 评论 -
赋权时需要注意的一个现象
A的schema下新写了一个存储过程test_for_ddl,包里面select了新表TABLE1,如果B用户想使用这个存储过程,你需要赋哪些权呢??很多朋友可能会认为需要下面2个赋权:GRANT EXECUTE ON test_for_ddl TO B;GRANT SELECT ON TABLE1 TO B;其实不是这样的,只需要GRANT EXECUTE ON test_f原创 2013-07-27 18:00:15 · 651 阅读 · 0 评论 -
关于变量的定义
今天在开发时犯了个低级错误,变量的长度定义不够,导致赋值时出了问题。总结了下,主要是自己不小心,没有看清楚表列的定义长度,凭着自己的经验去随便定义了一个自以为安全的长度,结果这个安全的长度并不安全!!!所以告诫大家在定义变量时,最好用:表名.列名%TYPE去定义变量,这样既安全又灵活,即使表的列长度有变化,变量的长度也会随着变化,千万不要偷这点懒,切记切记。。。。。。。。。。原创 2013-07-24 22:23:58 · 702 阅读 · 0 评论 -
回滚段与撤销段的区别
今天突然被问到回滚段与撤销段有什么区别,我一下子就懵了,我的理解两个应该是差不多的东西,但就是说不出来。后来查查资料原来是oracle不同版本的东西,都是负责回滚DML操作的。下面就是我整理的一些资料,供大家参考下:在9i版本以前 Oracle使用数据库中的回滚段来实现未提交数据或因系统故障导致实例崩溃时进行回滚操作 每一个表空间需要创建回滚段,各个表空原创 2013-07-13 13:08:00 · 3659 阅读 · 0 评论 -
创建视图时备注要写对地方
今天写了视图,开始没觉得有什么问题,编译好了以后,view这个视图,发现我写的备注都不见了,真实奇怪!视图如下:/*aaaaaaaaaaaaaaaaaaa*/CREATE OR replace VIEW aaaa_v ASSELECT object_id FROM a;编译完成后view这个视图,就变成下面的样子:CREATE OR REPLACE VIEW AAAA_V原创 2013-07-07 21:47:30 · 1753 阅读 · 0 评论 -
如何使用dba_source快速定位sql语句
在开发过程中,由于代码量很大,很难记得sql语句的具体位置,这时dba_source就派上用场了。举几个例子:1.查test表在哪些地方用到select * from dba_source where upper(text) like '%TEST%';2. 查update test表的地方,有时候test表前面会加schemaselect * from dba_source原创 2013-06-04 23:03:32 · 4330 阅读 · 0 评论 -
如何把工作做好
今天工作不是很忙,难得闲下来发发呆,想想自己也出来工作了三四年,也没怎么混出个名堂,是不是自己让自己走了不少弯路了??认真想想我总结了一下,作为程序员,如何才能把工作做好,让领导器重你。。1. 做事要靠谱。领导吩咐给你事,没有大小,一定要认真对待,态度很重要,还要及时反馈你的进度,让领导心里有数,这样才能放心把事交给你做;2. 不要成为做事的机器,要多思考。有时候领导吩咐你做写一个程序,并原创 2013-06-04 22:08:08 · 750 阅读 · 0 评论 -
CLOB类型使用时注意的一些小问题
1. 操作clob列时,需要加上Updata锁锁上指定数据列,修改完后提交事务declare v_clob CLOB; v_clob1 CLOB; i NUMBER;begindbms_lob.createtemporary(v_clob,true);dbms_lob.createtemporary(v_clob1,true);SELECT b.test原创 2013-10-20 20:18:31 · 4155 阅读 · 0 评论 -
修改大表的列属性
有个大表test,大约2亿笔资料,有个字段A,为number类型,现在需要修改其为varchar2(50):1. 添加临时列 data_tempalter table test add data_temp varchar2(50);2. 并行将字段A的资料写到data_temp上alter session enable parallel dmlupdate/*+parallel原创 2013-11-20 23:23:44 · 883 阅读 · 0 评论 -
导数据脚本时的小技巧
很多时候生产环境出了问题,我们需要把数据导出来插入测试环境进行测试,一般我们都是导出insert脚本,这时候就会出现一个问题如果导出来的数据包含序列值,这个时候导入测试环境的时候就很可能会报唯一索引错误,例如:我想导出生产环境中表A的100行数据,其中序列值是100~200,但是测试环境中表A的100~200已经有数据了,而且这个列是表A的唯一索引,这个时候数据导入测试环境的时候就会报原创 2014-01-01 23:01:05 · 800 阅读 · 0 评论 -
sql脚本中的空行问题
经常执行脚本的朋友可能遇到这样的问题,有个脚本如下:INSERT INTO bSELECT * FROM dba_objects WHERE ROWNUM注意2行之间有行空行,这样的sql放在sql窗口执行是没问题的,但是放在命令窗口执行就会有问题SQL> @C:\Users\Administrator\Desktop\1.sql OWNER原创 2014-01-01 18:13:05 · 4471 阅读 · 0 评论 -
一个变量存储多个值的查询sql
你可能遇到过这种情况:select * from 表A where name in (****),在in语句里面你想用个变量,但是这个变量有时候有多个值,如 in(‘李四’,‘张三’),这个时候你是绝对不能写成DECLAREv1 VARCHAR2(100):='a,b';num1 NUMBER;BEGINSELECT COUNT(1) INTO num1 FROM a WHERE原创 2014-01-01 17:45:33 · 4688 阅读 · 0 评论