文章列表
通常在SQL语句中给PL/SQL变量赋值叫做绑定(Binding),一次绑定一个完整的集合称为批量绑定(Bulk Binding)。
批量绑定(Bulk binds)可以通过减少在PL/SQL和SQL引擎之间的上下文切换(context switches )提高了性能.
批量绑定(Bulk binds)包括:
(i) Input collections, use the FORALL statement,一般用来改善DML(INSERT、UPDATE和DELETE) 操作的性能
(ii) Output collections, use BULK COLLECT clause,一般用来提高查询 ...
http://www.itpub.net/thread-180363-1-1.html
tom的oracle 9i&10g编程艺术中这样一句话:在一个非唯一索引中,oracle会把rowid作为一个额外列加到键上,使索引键为唯一; 先按索引键排序,再按rowid升序排序;在一个唯一索引中,不会再加rowid到索引键上。
这个怎么理解呢?唯一索引的索引键不保存rowid,那怎么通过rowid查找数据表中某行的值呢。下面的内容是通过google搜索得来,来源:http://www.itpub.net/thread-1287023-1-1.html
下面是一个完整的用例,使用了数据DUMP技术。
SQL> conn / as sysdba
...
tnsnames.ora设置怪问题
刚搞定困扰3天的oracle数据库连接问题,决定记录下,真是令人不爽啊。
这几天要连接现网终端设备数据库,连接方式还比较复杂。需要设置vpn环境,幸好之前设置过。配置好tnsnames.ora文件,打开plsql,开始连接。提示无法连接远程Oracle。尝试连接另外一台现网数据库,可以连通。尝试连接局域网内的研发数据库,可以连通。
NND,这么怪。我试着telnet Oracle服务器1521 端口,提示连接失败。
D:\Documents and Settings\Administrator>telnet 172.16.73.6 1521
...
生产线数据库只有查询权限,需要从生产线下50W数据导入研发线,以下技巧可能使导入速度加快.
1.用PL/SQL连接上数据库,执行查询语句,导出数据格式为csv.
2.新建控制文件:input.ctl
LOAD DATA
INFILE 'F:\Users\xxxxx\Desktop\aa\tt.csv'
truncate --操作类型,用truncate table来清除表中原来记录
INTO TABLE OS_BATCH_USER_his
FIELDS TERMINATED BY "," --数据中每行记录用","分隔 ...
1、格式化SQL语句
在使用 PL/SQL Developer的SQL Window时,有时候输入的SQL语句太长或太乱,希望能用比较通用的写法格式话一下,这样看起来会好看些,也好分析;
使用方法:选中需要格式化的SQL语句,然后点击工具栏的PL/SQL beautifie ...
下面的sql执行了两次,发现两次的执行计划有不一致的地方。recursive calls(递归调用)第一次是284,第二次是0。consistent gets(一致性读),第一次是88,第二次是2。为什么?问了下c哥,第一次执行sql的时候,需要硬解析sql代码。第二次执行的时候share pool area已经存在执行计划,直接拿来用即可。这些知识在书里都看过,但还是需要实际操作才印象深刻啊。以后审核sql脚本的执行计划,需要执行2次。第一次是硬解析,第二次才真正是在share pool area共享池的消耗。
SQL> set autotrace traceonly
SQL> ...
一、ORACLE10g自动收集统计信息--自动analyze
从Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务,用于自动收集CBO的统计信息。
这个自动任务默认情况下在工作日晚上10:00-6:00和周末全天开启。调用DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC收集统计信息。该过程首先检测统计信息缺失和陈旧的对象。然后确定优先级,再开始进行统计信息。
可以通过以下查询这个JOB的运行情况:
select * from Dba_Scheduler_Jobs wher ...
在查看SQL的执行计划的时候,有时候会看到INDEX SKIP SCAN,其实这个索引扫描路径会发生在多个列建立的复合索引上,如果SQL中谓词条件只包含索引中的部分列,并且这些列不是建立索引时的第一列时,就可 能发生INDEX SKIP SCAN。这里SKIP的意思是因为查询条件没有第一列或前面几列,被忽略了。
引用Oracle文档的例子,比如如下的表:
employees (sex, employee_id, address)
建立如下索引:
(sex, employee_id)
如果索引包含如下的数据:
('F',98)
('F',100)
...
逻辑读是指从内存中读,物理读是指从磁盘上读取数据;如果内存中存在相应的读取数据,那么直接从内存中读取,逻辑读的次数加1,如果不存在,则从磁盘上读到内存中,再从内存中读取,逻辑度次数加1,物理读次数也加1。需要注意的是,物理读非常消耗系统资源,一个物理读需要消耗8ms,而一秒可以处理20万个逻辑读。
1.物理读(physical read)
当数据块第一次读取到,就会缓存到buffer cache 中,而第二次读取和修改该数据块时就在内存buffer cache 了 以下是例子:
1.1 第一次读取
C:\Documents and Settings\Paul Yi&g ...
1983年3月,oracle第3版,引入事务的概念,即SQL要么成功、要么失败,取决于事务是否提交;同事还引入了另一关键特性--写不阻塞读(通过回滚段中的数据实现查询和回滚事务,避免了读锁定),对于大访问量、高并发的应用,这点很重要。
1984年10月,oracle第4版,增加了读一致性(Read Consistency)的特性(即一个会话修改数据时,只要不提交,其他的会话就看不到这项修改,要记住这个概念,这是Oracle极重要的特性之一)。
1985年4月,oracle第5版,是首批支持Client/Server模式运行的RDBMS产品。5.1版,新增了分布式 ...
作者:Steven Feuerstein
提高编写PL/SQL代码数量及质量的四个简单易行指导方针
我从1990年就开始编写PL/SQL代码。这意味着我已经编写了几万行的软件代码,但我确信,其中的绝大多数代码都非常拙劣,而且难以维护。
幸运地 ...