随笔分类 - Oracle
摘要:关于在SQL语句中是用Bind Variables的重要性就不用多说了,最近在看代码的时候发现有一条比较耗时的SQL语句居然是在Java代码中动态拼接而成的。这条SQL语句之前也进行过一些简单的重写优化工作,在with语句中特别用到hint 了/*+materialize*/。之前认为这个hint在WITH语句中没有必要使用,Oracle应该会自动创建一个临时表用于with语句结果的存储,结果居然发现加不加这个hint差别还是蛮大的,最后就加上了这个hint.OK,回到正题上来。这个SQL需要接收的参数是一个动态的逗号分隔的字符串,放在in list中用的。很显然,如果用PL/SQL来写这个语
阅读全文
摘要:在通过运行脚本来安装产品数据库的时候,发现用新创建的用户在连接数据库的时候hang住了,卡了半天没有任何变化。于是手动用sqlplus来尝试下连接下,结果一样是登陆不了,session被block住了。换成sys用户登录,结果很顺利连接上数据库。那么问题出在什么地方呢?首先去查看了下alert文件,没有发现什么异常的信息。 好吧,查询下视图v$session看看有啥等待事件没有,结果发现了有几个session出于等待状态,等待事件显示为"resmgr:become active", 从文档上了解到这个等待时间的含义,如下.... resmgr: become activeT
阅读全文
摘要:在open数据库的时候居然遇到了600的错....SQL> startup mountORACLE instance started.Total System Global Area 430075904 bytesFixed Size 2176448 bytesVariable Size 343935552 bytesDatabase Buffers 75497472 bytesRedo Buffers 8466432 bytesDatabase mounted.SQL> alter database open;alter database open*ERROR at line 1
阅读全文
摘要:碰到如下这么一个需求,有如下一段XML<employees> <emp id="1" name="fang" age="26"/> <emp id="2" name="frank" age="25"/></employees>现在想把这个XML文件中的内容显示成两行三列的数据...id name age-----------------1 fang 262 frank 25那么通过SQL怎么搞呢? 查了下文档,发现可以用XMLS
阅读全文
摘要:遇到一个很奇怪的问题,数据库的service, listener都启动了,但是从lsnrctl services中老是显示不了数据库的service name, 因此客户端通过service name来访问数据库老是报listener 识别不了指定的服务名的错误信息。无奈之下只能修改listener.ora文件来进行静态注册下service name...SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = orcl) (ORACLE_HOME = C:\oracle\product\10.2.0\db_1) (GLOBAL_NAME=
阅读全文
摘要:问题由来客户发过来一个request, 说调用某个接口的时候出现了一堆的错误日志,但是从给出的信息很难知道什么地方出错了。从发过来的错误日志中可以看出一堆的‘ ORA-20002’ 的错误信息,但是没有具体的error message! 很显然, 这个是程序中自定义的错误,所以这个日志信息几乎是没有任何价值可言。不过幸运的是,从日志中可以判断出来出错的位置在于通过FORALL方式把一个集合(associate array)中的数据批量插入一张表,代码如下...begin forall i in g_insert_auth_table.first .. g_insert_auth_table.l
阅读全文
摘要:pub上有个帖子,讲connect by, 参见这里觉得有点意思,以前也是没有深入考虑研究过这个东西,现在测试下看看....createtable test_connect(flag varchar2(2));insertinto test_connect values('A');insertint...
阅读全文
摘要:在ITpub上看到这么一个问题....写一个求和的程序,谢谢we have a list of integer {1, 2, 3, 4, 5, 6, 7, 8, 9 }. Set each item as R, where i = 1..9.write code to return each pos...
阅读全文
摘要:假设我有如下两张一模一样的表...create table tab1 (id number);create table tab2 (id number);我现在想做的事情是这样的,如果在tab1里面增加记录的同时把这些记录也增加到tab2中,反之tab2中增加的记录也要同步到tab1中去。很自然地想到可以通过在两张表上都创建一个trigger, 让Trigger来进行数据的同步工作。如下所示... create or replace trigger tri_tab1 before insert on tab1 for each row begin insert into tab2(id) va
阅读全文
摘要:在测试通过extensible optimizer方法来解决table function的cardinality不准确的问题的时候 (关于什么是extensible optimizer以及如何设置可以参见这里) 居然遇到了ORA-03113的错误!事情是这样的....首先创建了一个table function...CREATE OR REPLACE FUNCTION get_tab (p_cardinality IN INTEGER DEFAULT 1) RETURN t_tf_tab PIPELINED ASBEGIN FOR i IN 1 .. 100 LOOP PIPE ROW (t_t
阅读全文
摘要:I found someone used the following procedure call to disable the automatic statistics gathering job to gather the user (not sys/system)tables by accident.exec DBMS_STATS.SET_PARAM('AUTOSTATS_TARGET','ORACLE');For the reason that we may need to disable this job, please refer to this a
阅读全文
摘要:问题陈述在调用一个存储过程的时候,发现有个UPDATE语句执行的很慢,这个UPDATE语句是很常见的用一个表中的数据去更新另外一个表中的数据,通常的做法是通过一个关联子查询从"sourcetable" 读取相应的数据来更新"target table"中对应的数据行。同时,为了保证"targettable" 中不相关的数据行不会被更新,因此在where语句部分还是要和"source table"做个“join"。很显然,source table会被读取多次,而且由于关联查询的存在,表的连接方式会倾向于Nes
阅读全文
摘要:因为参数sessions / processes 关系到能连接到instance的并发session数,因此想尝试增大这些参数的值,但是杯具之旅就此开始了...尝试修改下参数sessionsSQL> alter system set sessions=150 scope=spfile;alter system set sessions=150 scope=spfile*ERROR at line 1:ORA-32001: write to SPFILE requested but no SPFILE specified at startup居然发现当前的instance不是通过spfil
阅读全文
摘要:偶然看到有人这么写SQL.... (其中f_test_tab_func是一个表函数,返回一个集合)-- Syntax Correctselect * from THE(select f_test_tab_func(20) from dual);好生奇怪,这里面的THE是个什么东东呢?看起来想table function但是又不是,因为如果是table function的话,括号里面是不能够用select from dual的方式来返回一个集合的。也就是说如下写法是有语法错误的...-- Syntax Errorselect * from TABLE(select f_test_tab_func
阅读全文
摘要:今天同事在给一个Singpore的虚拟机装产品的数据库的时候,发现安装运行到插入初始化数据的时候“卡”住了,居然几个小时过去了,还是没有什么进展。这个很是奇怪,因为我用这个安装脚本在我的一个虚拟机装过好几次,每次大概一个小时就结束了,没有出现过这种情况。我刚开始以为是我之前碰到的数据库因为没有空间存储归档日志导致online日志没有办法switch导致数据库hang的问题,但是结果发现alert文件没有任何出错信息,而且那个数据库也是非归档模式的。后来发现一个lgwr trace文件中好多的关于log write time的warning信息 (e.g. Warning: log write
阅读全文
摘要:本文尝试通过一个简单的测试来发现transaction和undo之间的关系。Setup (创建测试环境)---------------------------------------------创建一张表, 插入一条记录SQL> create tablespace tx_demo datafile 'F:\Ora_Data_File\tx_demo01.dbf' size 10m 2 autoextend on maxsize 20M 3 extent management local uniform size 64K;Tablespace created.SQL>
阅读全文
摘要:今天在导数据的时候,发现session突然hang住了,一直没反应。从hang住的地方的日志看了半天,也没发现可疑问题。因为按道理来说,导这点数据不至于这么慢啊,以前又不是没导过。突然想到是不是flash recovery area爆满了,查了下alert文件,果不其然,发现了如下信息...================================================================Thu Mar 10 15:03:42 2011Errors in file c:\oracle\product\10.2.0\admin\lo\bdump\lo_arc1_356
阅读全文
摘要:--------------------------------------------------------------------------------------------------------------------准备工作...1. 创建队列in source database: lo.oracle.comSQL> show userUSER is "STRMADMIN"SQL> begin 2 dbms_streams_adm.set_up_queue 3 ( queue_table => 'capture_queue_tabl
阅读全文
摘要:--------------------------------------------------------------------------------------------------------------------配置工作...1. 首先在源数据库和目标数据上都将相关的参数设置好,(参见http://www.cnblogs.com/fangwenyu/archive/2011/03/07/1970260.html) Source Database:lo.oracle.comSQL> select global_name from global_name;GLOBAL_N
阅读全文
摘要:Streams Repliation 简介Oracle Streams Replication提供了一种数据(广义上的,不仅仅是表中的数据)共享(同步)的机制,可以用来进行数据库级别(global), schema级别,table级别的数据复制。Streams主要借助于AQ, Scheduler(job), LogMiner 等技术来实现数据的传递和复制。Streams Replication主要通过所谓的captuer, propagation, apply三种background process来完成数据复制的工作。(1) Capture Process 运行在源数据库上,通过挖掘redo
阅读全文

浙公网安备 33010602011771号