飘香一剑的藏剑庐
===========================================================
oracle性能调优
===========================================================

转载自:http://www.oracleblog.cn/study-note/study-note-of-tuning/


1.内存调优
注:SGA中的shared pool中,系统自动优先缓存datadictionary cache,对系统性能影响较大的是library cache。
1.1 library cache 调优(v$librarycache/v$sql/v$sqlarea/v$sqltext/v$db_object_cache)
判断:要不要调整library cache?判断条件:v$librarycache.pinhitratio|gethitratio尽量接近100%
1.1.1 存储对象所消耗的内存预估:
select sum(SHARABLE_MEM) from v$db_object_cache;
1.1.2 经常执行的sql消耗的内存预估:
select sum(SHARABLE_MEM) from v$sqlarea where EXECUTIONS>100;
1.1.3 每个用户打开游标,需要250个字节:
select sum(250*USERS_OPENING) from v$sqlarea;
1.1.4 keep在shared pool中:
先创建dbms_shared_pool:
@?/rdbms/admin/dbmspool.sql
创建后:
execute dbms_shared_pool.keep(’package_name’);———————-将package keep
execute dbms_shared_pool.keep(’address,hash_value’);—————-将匿名的块 keep

1.2 data dictionary cache 调优(v$rowcache)
判断:要不要调整data dictionary cache?
判断标准:v$rowcache.(gets-getmisses)/gets尽量接近100%
1.2.1 由于没有单独调整数据字典高速缓冲的参数,但是系统又优先缓存data dictionary cache,只能调整shared pool的总体大小。

1.3 UGA
1.3.1 使用共享服务器模式的时候,如没有配置large pool,用户会话数据(排序等等)和游标状态(共享sql)会在SGA。
因此如果发现一个报表系统shared pool特别大,有没有配置large pool,请检查是否使用了共享服务器模式。
1.3.2 UGA预估:
SELECT ‘current session uga memory’,SUM(VALUE)/1024 size_kb FROM v$mystat a,v$statname b
WHERE a.STATISTIC#=b.STATISTIC#
AND b.NAME IN (’session uga memory’)
GROUP BY NAME
UNION ALL
SELECT decode(name,’session uga memory’,'all session uga memory’,name),SUM(VALUE)/1024 size_kb FROM v$sesstat a,v$statname b
WHERE a.STATISTIC#=b.STATISTIC#
AND b.NAME IN (’session uga memory’,’session uga memory max’)
GROUP BY NAME;

1.4 db buffer cache(V$sysstat/v$buffer_pool_statistics/v$buffer_pool/v$sysstat/v$sess_io/v$wait_stat)
1.4.1 db buffer caceh和datafile之间的交互:

——DBWn——–>
buffer cache datafile
<---服务器进程-----

1.4.2 db buffer cache和LRU列表:
传入的块从LRU的冷端复制到缓冲区中,然后该缓冲区的数据会放到LRU列表的中部,在根据情况上下浮动。

1.4.3 DB_CACHE_ADVICE off-ready-on

1.4.4 dbwr什么时候将dirty buffer写出:A.checkpoint 队列到达阈值;B.LRU中显示没有空余的buffer;C.logwr指示已经发出checkpoint信号;D.表空间变化;E.Drop object;F.clean shutdown

判断:要不要调整db cache size:命中率小于90%
判断标准:SQL> SELECT 1 - (phy.value – lob.value – dir.value)
/ ses.value “CACHE HIT RATIO”
2 FROM v$sysstat ses, v$sysstat lob,
3 v$sysstat dir, v$sysstat phy
3 WHERE ses.name = ’session logical reads’
4 AND dir.name = ‘physical reads direct’
5 AND lob.name = ‘physical reads direct (lob)’
6 AND phy.name = ‘physical reads’;
注:因为直接读和lob的读取不经过buffer pool缓存,因此整个physical read要减去这2项。
启动开始有较多的物理读,会影响buffer caceh命中率的统计

1.4.5 影响buffer cache的因素:全表扫描、程序、命中率分布不均、可随机访问的大表(其实也是全表扫描)
1.4.6 keep一般为default的10%,recycle一般是default的2倍
1.4.7 空闲列表 :A.单cpu增加空闲列表不会增加性能 B.

1.4.8 相关视图: v$sess_io:预估recycle

1.5 log buffer
1.5.1 诊断标准:A.v$sysstat中的redo buffer allocation retries/redo entries<10% B.$session_wait中不应出现log buffer space
1.5.2 对策:加大log buffer,或者将relog转移到性能好的磁盘上
1.5.3 深入分析,lgwr变慢的原因:lgwr之前和之后的工作是在logbuffer和redolog中,分析这2者的情况:
1.5.3.1 redolog太小,而logbuffer较大,因此需要频繁的切换redolog,当本次切换还未完成时,又轮到下次切换,出现等待(表现为system_event中的log file switch completion%过多)
1.5.3.2 redolog太大或者redolog组不够,当上次的logbuffer中的内容还没完全写入到redolog中,需要用到这块的logbuffer了,出现等待,即redolog为高active状态(非current和inactive,未完成checkpoint),需要加多redolog组或者调整调整FAST_START_MTTR_TARGET,加大checkpoint频率(表现为system_event中'log file switch (check%';检查点未完成过多)
1.5.3.3 redolog切换不了,可能是写archlog过慢,或者archlog空间爆满。(表现为system_event中log file switch (arch%';archlog未完成过多)

1.6 java pool 的优化
判断:要不要调整java pool:v$sgastat中java pool 的free memory 和memory in use的比例

2 IO优化
2.1 v$filestat
2.2 条带化:A.raid B.数据文件条带化 C.alter table allocate extent
2.3 增加db_file_multiblock_read_count,减少IO次数
2.4 减少v$sysstat中的long tables(大于4 blocks的表)
2.5 关于checkpoint:
2.5.1 增量chkpt:
checkpoint队列:1.dirty buffer:第一次数据块被修改时就写入chkpt队列中。2.RBA:redolog中第一次修改数据块的RBA也被记录在chkpt队列
每隔3秒做一次增量chkpt,不强制写数据文件,只是将chkpt队列中的第一个(即时间至今最长的一个)RBA写入到控制文件,实例crash的恢复,即redolog中该RBA之后的内容。
增量chkpt发生条件:1.每隔3秒做增量chkpt,更新控制文件;2.switch logfile,更新控制文件和数据文件头
2.5.2 全chkpt:
完整检查点:1.dirty buffer写入到datafile ;2.clean shutdown;3.alter system checkpoint
表空间检查点:表空间变化时(backup、offline)

3 排序优化
3.1 sort_area_size和sort_area_retained_size
3.2 CREATE_BITMAP_AREA_SIZE和BITMAP_MERGE_AREA_SIZE:创建索引速度有关
3.3 需要排序的操作:1.建检索 2.维护索引 3.order by/group by/distinct/union/minus/intersect 4.Sort Merge Join 5.analyze
3.4 避免排序的操作:1.create index nosort(要求事先已经asc排序) 2.union all 3.analyze for column 4.analyze estimate
3.5 判断:要不要调整排序区:(v$sysstat.name='sorts (disk)'/v$sysstat.name='sorts (memory)')<5% 注意:dss中该比例不适用。
3.6 对策:增加sort_area_size和PGA_AGGREGATE_TARGET

4 latch优化
4.1 重要的latch free
4.1.1 shared pool和library cache的:sql没有绑定变量(检查v$sqlarea.parse_call,v$sqlarea.EXECUTIONS)或者存在热块或者为共享服务器模式但是没有配large pool
4.1.2 db buffer cache的lru:基于db buffer cache大量的排序或者大量的index full scan和full table scan

5 undo优化
5.1 undo使用:(1)读一致性 (2)dml的事务回退 (3)事务故障恢复,打开数据库时rollback未commit的事务
5.2 何时需要加回退段(手工管理):
SELECT sum(waits)* 100 /sum(gets) "Ratio",
sum(waits) "Waits", sum(gets) "Gets"
FROM v$rollstat;

SELECT event, total_waits, total_timeouts
FROM v$system_event
WHERE event LIKE 'undo segment tx slot';

SELECT class, count FROM v$waitstat
WHERE class LIKE '%undo%';
5.3 大事务指定回滚段(提交后结束):
sys@ORA11G(192.168.0.11)> set transaction use rollback segment “_SYSSMU1_1193229161$”;

事务处理集。

5.4 shared server
题外话:判断是否shared server:
(1).show parameter shared_server 大于0为共享服务器模式
(2).select server from v$session 看到DEDICATED为专用;看到SHARED即为共享,且shared_server_process正在对其其他服务;看到NONE为也为共享,且shared_server_process尚未对其其他服务。

5.4.1 监控视图:V$SHARED_SERVER_MONITOR
V$DISPATCHER繁忙率=busy/(busy+idle) 等待时间=wait/totalq
V$DISPATCHER_RATE
5.4.2 调整参数:SHARED_SERVERS–共享服务器进程的数量
DISPATCHERS—–调度进程的数量

5.5 sql调优
5.5.1 optimizer_mode:choose(默认,如果涉及的任一表有统计信息,就用CBO的all_rows,否则使用RBO)
5.5.2 执行计划中的信息:行访问方法,连接顺序,连接方法,分布式事务访问(不包含远程节点),子查询
5.5.3 创建存储概要:参数文件 CREATE_STORED_OUTLINES——————————————指定创建存储概要的名称(可取名为OLTP、DSS,或者TRUE、FALSE)。
参数文件 USE_STORED_OUTLINES———————————————指定需要使用的存储概要名称(可取名为OLTP、DSS,或者TRUE、FALSE,在session级或system级指定后select。
参数文件 USE_PRIVATE_OUTLINES——————————————–专用概要,仅用于当前会话,如不存在,不使用共用的概要。
create or replace outline XXX for catalog OLTP on select ……————–创建存储概要的名称。
5.5.4 trace:
5.5.4.1 @?/rdbms/admin/utlxplan.sql
explain plan for
@?/rdbms/admin/utlxpls.sql or @?/rdbms/admin/utlxplp.sql or select * from table(dbms_xplan.display);
5.5.4.2 alter session set sql_trace=true;
tkprof
5.5.4.3 exec dbms_session.set_sql_trace=true;
5.5.4.4 exec dbms_system.set_sql_trace_in_session(sid,serial#,true);
5.5.4.5 set autotrace on

5.5.5 表的统计信息包含:NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,CHAIN_CNT,ROW_MOVEMENT,AVG_ROW_LEN,LAST_ANALYZED (dba_tables)
5.5.6 索引的统计信息包含:DEGREE,LEAF_BLOCKS,DISTINCT_KEYS,AVG_LEAF_BLOCKS_PER_KEY,AVG_DATA_BLOCKS_PER_KEY,NUM_ROWS,CLUSTERING_FACTOR (dba_indexes)
5.5.7 列统计信息包含:NUM_DISTINCT,LOW_VALUE,HIGH_VALUE(DBA_TAB_COL_STATISTICS)
5.5.8 直方图:EXECUTE DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>’HR’,TABNAME=>’EMPLOYEES’, METHOD_OPT => ‘FOR COLUMNS salary SIZE 10′);
5.5.9 dbms_stats.gather_system_stats:收集信息
dbms_stats.get_system_stats:验证统计信息
dbms_stats.set_system_stats:明确设置系统统计信息

5.6 块调优
5.6.1 将extent大小设置为5*DB_FILE_MULTIBLOCK_READ_COUNT的倍数。(原因:一个extent=5×DB_FILE_MULTIBLOCK_READ_COUNT),注:对非全表扫描,该优化无效。
5.6.2 HWM:以5 block递增,
5.6.3 减少行迁移:提高pctfree

5.7 索引调优
5.7.1 重建浪费大于20%的索引:
analyze index index_name validate structure;
SELECT name, (DEL_LF_ROWS_LEN/LF_ROWS_LEN) * 100 AS wastage FROM index_stats;
5.7.2 找出未使用的索引
alter index index_name monitoring usage;
alter index index_name nomonitoring usage;
select index_name,used from v$object_usage;
5.7.3 注函数索引必须在CBO下使用,对RBO无效

6 应用调优
6.1 数据访问类型:
6.1.1 聚簇:使用同一个物理地址存放两个或者多个表。先建簇,再建簇表,再向簇表insert数据。分两类:hash 和 index
6.1.2 b-tree索引:叶块填满后,将分成两半,50%在旧叶块,50%到新叶块;分支类推,一直到根
6.1.3 位图索引:lock位图段
6.1.4 反向索引:为了避免降低索引高度。
6.1.5 IOT表:注:IOT表上可使用位图索引,但是需要建立map。
6.1.6 分区表:若range 分区中可能含有null,需要设置maxvalue
若hash,为了数据分布均匀,分区个数需设置为2的n次方。提高单键查找的效率,不提高range scan的效率。
若list,需提前了解有多少种类
若复合,支持range-hash和range-list
6.1.7 分区索引:local index:与表分区一一对应关系;可以是list、hash、range、compsite任一种类;bitmap索引必须是local index
global index:与表分区可以是多对一的关系;只能是range且需设置maxvlaue;表分区变化后需重建。
另外的分法:
prefix index:分区的key为组合索引的最左端字段;可以是唯一索引也可以是非唯一索引
non-prefix index:分区的key不是组合索引的最左端字段;可以是唯一索引也可以是非唯一索引;唯一的non-prefix index条件:分区键是组合索引的子集。
注:non-prefix的global index不存在。
6.1.8 使用物化视图


asword 发表于:2008.11.24 23:36 ::分类: ( Oracle DBA ) ::阅读:(79次) :: 评论 (0)
===========================================================
索引组织表 IOT实例
===========================================================

根据asktom上的例子,自己就索引组织表做了一些试验。

下面分别就索引组织表和普通表的一些性能对比做一些试验,创建两张表,一个为普通的表,另外一个为索引组织表:
C:>sqlplus

SQL*Plus: Release 9.2.0.1.0 - Production on 星期四 5月 19 11:09:06 2005

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

请输入用户名: wwf/wwf

连接到:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

create table heap_stocks
( symbol varchar2(4),
ticker_dt date,
price number,
constraint heap_stocks_pk primary key (symbol,ticker_dt)
);

create table iot_stocks
( symbol varchar2(4),
ticker_dt date,
price number,
constraint iot_stocks_pk primary key (symbol,ticker_dt)
)
organization index compress 1;

上面模仿股票,分别存放股票代码,日期,收盘价格三个字段。下面,我们插入分别对这两个表插入1000种股票200天的数据,看看其插入数据时的性能:

1 插入数据
SQL> set timing on
SQL> begin
2 for i in 1..200 loop
3 insert into heap_stocks
4 select to_char(rownum, 'fm0009'), trunc(sysdate)+i, rownum
5 from all_objects where rownum <= 1000;
6 end loop;
7 commit;
8 end;
9 /

PL/SQL 过程已成功完成。

已用时间: 00: 00: 18.06
SQL> set timing on
SQL> begin
2 for i in 1..200 loop
3 insert into iot_stocks
4 select to_char(rownum, 'fm0009'), trunc(sysdate)+i, rownum
5 from all_objects where rownum <= 1000;
6 end loop;
7 commit;
8 end
9 ;
10 /

PL/SQL 过程已成功完成。

已用时间: 00: 00: 31.07

可以看到,插入20万条数据,普通表用了18秒,而IOT表用了31秒,相差明显。这说明插入数据时,IOT表的速度是相当慢的。

2. 查询

我们重新启动一下数据库:
SQL> conn
请输入用户名: sys / nolog as sysdba
已连接。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL> exit
从Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production中断开

然后重新登录:
SQL> conn
请输入用户名: wwf/wwf
已连接。
a. 使用autotrace测试
SQL> set autotrace traceonly
SQL> set timing on
SQL> set autotrace traceonly
SQL> select * from heap_stocks where symbol = '0001';

已选择200行。

已用时间: 00: 00: 00.08

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'HEAP_STOCKS'
2 1 INDEX (RANGE SCAN) OF 'HEAP_STOCKS_PK' (UNIQUE)

Statistics
----------------------------------------------------------
239 recursive calls
0 db block gets
259 consistent gets
207 physical reads
0 redo size
5706 bytes sent via SQL*Net to client
646 bytes received via SQL*Net from client
15 SQL*Net roundtrips to/from client
4 sorts (memory)
0 sorts (disk)
200 rows processed

SQL> select * from iot_stocks where symbol = '0001';

已选择200行。

已用时间: 00: 00: 00.02

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=82 Bytes=2132)
1 0 INDEX (RANGE SCAN) OF 'IOT_STOCK_PK' (UNIQUE) (Cost=2 Card=82 Bytes=2132)

Statistics
----------------------------------------------------------
299 recursive calls
0 db block gets
63 consistent gets
4 physical reads
0 redo size
5706 bytes sent via SQL*Net to client
646 bytes received via SQL*Net from client
15 SQL*Net roundtrips to/from client
6 sorts (memory)
0 sorts (disk)
200 rows processed

逻辑读分别为259和63,差别显著!说明,查询时,IOT表性能要远远优越于普通的表!


b 使用sql_trace测试:
SQL> conn
请输入用户名: wwf/wwf
已连接。
SQL> alter session set sql_trace = true;

会话已更改。

SQL> select avg(price) from heap_stocks where symbol = '0001';

AVG(PRICE)
----------
1

SQL> select avg(price) from iot_stocks where symbol = '0001';

AVG(PRICE)
----------
1

SQL> alter session set sql_trace = false;

会话已更改。

使用tkprof格式化输出文件,得到如下结果:

select avg(price) from heap_stocks where symbol = '0001'


call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.31 0.33 1 1 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 2 0.00 0.39 203 208 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 4 0.31 0.73 204 209 0 1

Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 61

Rows Row Source Operation
------- ---------------------------------------------------
1 SORT AGGREGATE
200 TABLE ACCESS BY INDEX ROWID HEAP_STOCKS
200 INDEX RANGE SCAN HEAP_STOCKS_PK (object id 30391)

select avg(price) from iot_stocks where symbol = '0001'


call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.02 0.03 0 0 0 0
Execute 1 0.00 0.01 0 0 0 0
Fetch 2 0.00 0.07 3 4 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 4 0.02 0.11 3 4 0 1

Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 61

Rows Row Source Operation
------- ---------------------------------------------------
1 SORT AGGREGATE
200 INDEX RANGE SCAN IOT_STOCK_PK (object id 30393)

看看Tom怎么说:
So, we did 203 physical IO's to process the HEAP table. What that tells me is
that our data for stock symbol 0001 is spread out on 200 blocks (200 days, 200
blocks). In order to cache the results for this query, we need 200 block
buffers. We needed to do that IO to get the answer initially.

Now, looking at the IOT we did 3 physical IO's -- we cached 3 blocks -- and got
the same answer! Not only that but by using index key compression I was able to
remove he redudant 0001's from the data -- we can cache this much more
efficiently and getting it the first time takes seriously less IO. Very nice.


3 删除数据
SQL> set autotrace off
SQL> delete from heap_stocks;

已删除200000行。

已用时间: 00: 00: 26.02
SQL> delete from iot_stocks;

已删除200000行。

已用时间: 00: 00: 08.08

可以看到,删除数据时,普通表用了26秒,而IOT表用了8秒。差别显著!也许是普通表占的空间大的缘故吧!


asword 发表于:2008.11.24 19:49 ::分类: ( oracle开发 ) ::阅读:(37次) :: 评论 (0)
===========================================================
常见的用IOT表的几种情况
===========================================================

1.表的全部列或大多数列为索引

2只会通过主键来访问一个表

3希望数据以特定的顺序物理存储

4希望某些数据物理地存储在同一处

5 经常在一个主键或唯一键上使用between查询,用IOT比较提高性能。

 查看全文
asword 发表于:2008.11.24 19:49 ::分类: ( oracle开发 ) ::阅读:(37次) :: 评论 (0)
===========================================================
《Oracle 高效设计》 读书思考--标量子查询查询性能讨论
===========================================================
ZT 查看全文
asword 发表于:2008.11.23 21:02 ::分类: ( oracle开发 ) ::阅读:(49次) :: 评论 (0)
===========================================================
内嵌视图或视图什么情况下不能被优化程序合并?
===========================================================

内嵌视图或视图包含下列东西:

union、union all、intersect、minus

connect by

rownum

avg、count、max

 查看全文
asword 发表于:2008.11.23 19:11 ::分类: ( oracle开发 ) ::阅读:(40次) :: 评论 (0)
===========================================================
Oracle 9i与MS SQL Server 2000之比较
===========================================================

重要概念的对比

MS SQL Server 相当于 Oracle

服务器 数据库

数据库 方案(用户)

文件组 表空间

区(固定64K 区(不固定)

页(固定8K 块(不固定)

服务器角色 角色

语句权限 系统权限

对象权限 对象权限

MS SQL 的数据库相当于OracleSchemaSchema翻译为中文为方案,意思是一个用户所拥有所有对象的集合。这里的对象包括表、视图、实例化视图、序列、过程、函数、程序包、同义词。要建立一个在Oracle中的类似于MS SQL 的数据库的大致过程如下:

1 建立数据表空间(相当于MS SQL 的数据库的数据文件)

2 建立临时表空间(相当于MS SQL 的数据库的事务日志文件)

3 建立用户,它的缺省表空间和临时表空间是刚建立的两个表空间

4 给用户授权,最起码的角色权限是Connect 的角色

5 以该用户登陆,创建自己的表、视图、实例化视图、序列、过程、函数、程序包、同义词等

2. 关于Oracle Manager Server与MS SQL 的Enetrprise manager

Oracle Manager Server提供了与MS SQLEnetrprise manager同样的功用,但是两者有很大的差别。Oracle Manager Server的特点如下:

它是Oracle管理分布式数据库的服务

它缺省并不安装

它需要有自己管理所需要的资料档案库,在某个数据库(如:OEMREP)中需要建立相应的用户,如:OEM_CHINA_OEMREP

它的登录需要身份验证,这里的身分验证,与管理所需要的资料库的用户不是一个概念,也不是数据库中的Syssystem用户,它的缺省用户是SYSMAN,口令为: oem_temp

使用它,在管理端要启动Manager Server服务和智能代理服务Oracle Agent,被管理的数据服务器要启动智能代理服务Oracle Agent

3. 关于OracleSysSystem的用户

MS SQL master的比较

MS SQL master数据库存储了当前数据库服务的一些配置信息,如数据库设备、字符集、数据文件、登陆帐号、拥有的数据库、整个服务参数配制等信息。OracleSys存储了Oracle服务或者实例的信息及所有用户的数据字典信息,这一点不同于MS SQL MS SQL 每一个数据库拥有自己的对象的数据字典信息。System用户拥有数据字典是视图信息。缺省情况下,system用户拥有DBA系统角色权限,而sys不仅拥有DBA的权限还拥有SysDBA的权限。

 查看全文
asword 发表于:2008.11.23 15:24 ::分类: ( Oracle DBA ) ::阅读:(80次) :: 评论 (0)
===========================================================
第十二章 PL/SQL应用程序性能调优
===========================================================
一些小技巧 查看全文
asword 发表于:2008.11.23 15:13 ::分类: ( oracle开发 ) ::阅读:(37次) :: 评论 (0)
===========================================================
本地动态SQL(ZT)
===========================================================
使用EXECUTE IMMEDIATE语句

EXECUTE IMMEDIATE语句能分析要执行动态的SQL语句或是匿名PL/SQL块。语法如下:

EXECUTE IMMEDIATE dynamic_string
[INTO {define_variable[, define_variable]... | record}]
[USING [IN | OUT | IN OUT] bind_argument
[, [IN | OUT | IN OUT] bind_argument]...]
[{RETURNING | RETURN} INTO bind_argument[, bind_argument]...];
 查看全文
asword 发表于:2008.11.23 14:50 ::分类: ( oracle开发 ) ::阅读:(32次) :: 评论 (0)
===========================================================
TKPROF设定SQL_TRACE及运用实例 ZT
===========================================================
http://www.eygle.com/ 查看全文
asword 发表于:2008.11.16 01:40 ::分类: ( Oracle DBA ) ::阅读:(144次) :: 评论 (0)
===========================================================
Oracle Audit 读书笔记 (ZT)
===========================================================
http://www.itpub.net/viewthread.php?tid=901725 查看全文
asword 发表于:2008.11.15 17:54 ::分类: ( Oracle DBA ) ::阅读:(138次) :: 评论 (0)
===========================================================
单条SQL语句实现复杂逻辑几例~~
===========================================================

1、按指定规则生成指定商品2002年销售额,其中彩电项值为2001年的销售额加2000年的销售额,微波炉为2000年销售额, 然后汇总彩电+微波炉的2002年总销售额。

2、查询字段a的值连续三条以上相同的记录

3、查询员工ID:1000的实际工作月数,注意过滤兼职月份

4、将列值为0的列替换为距离它最近列的非0值

5、行列转换,将列中字符串以'/'分隔,转换成行

 查看全文
asword 发表于:2008.08.29 15:04 ::分类: ( oracle开发 ) ::阅读:(67次) :: 评论 (0)
===========================================================
一个树形聚集SQL问题(二) (物料BOM消耗量计算) zt
===========================================================
一个树形聚集SQL问题(二) (物料BOM消耗量计算)
===========================================================
 查看全文
asword 发表于:2008.08.27 15:55 ::分类: ( oracle开发 ) ::阅读:(56次) :: 评论 (0)
===========================================================
一个树形聚集SQL问题(物料BOM消耗计算) zt
===========================================================
一个树形聚集SQL问题(物料BOM消耗计算)
===========================================================
 查看全文
asword 发表于:2008.08.27 15:54 ::分类: ( oracle开发 ) ::阅读:(63次) :: 评论 (0)
===========================================================
一句SQL实现根据层次循环计算(Oracle 9i 实现 10G 的 CONNECT_BY_ISLEAF、CONNECT_BY_ROOT 等功能) ZT
===========================================================

譬如员工表要循环求出每个员工最上级的领导

http://blog.csdn.net/wzy0623/archive/2007/06/08/1644049.aspx

 查看全文
asword 发表于:2008.08.27 15:16 ::分类: ( oracle开发 ) ::阅读:(93次) :: 评论 (0)
===========================================================
自定义DataGridView颜色(含渐变) ZT
===========================================================
http://blog.csdn.net/awin/archive/2007/01/17/1486161.aspx 查看全文
asword 发表于:2007.08.03 10:23 ::分类: ( .NET开发 ) ::阅读:(1286次) :: 评论 (0)
切换风格
新闻聚合
博客日历
文章归档...
最新发表...
博客统计...
Blog信息
网站链接...