ORACLE 实验探究
robinson1988
本人精通SQL,精通所有关系型数据库SQL调优,精通所有关系型数据库性能优化,精通所有关系型数据库架构,精通分库分表,熟悉大数据Hadoop,Hive,Spark,Flume,Kafka,Flink,熟悉各种ETL工具,熟悉Python,Java,C
展开
-
还原ORACLE DUMP 的值
还原DUMP出来的数字SQL> select dump(2000,16) from dual;DUMP(2000,16)------------------Typ=2 Len=2: c2,15SQL> declare n number; 2 begin 3 dbms_stats.convert_raw_value(c215,n); 4 dbms_output.put_li原创 2009-10-13 17:53:00 · 3737 阅读 · 0 评论 -
Hash Join 一定是选择小表作为驱动表吗
今天下午,群里面有人讨论HASH JOIN,选择驱动表的问题,我回答是 选择返回结果集小的表作为驱动表,而有些同志不同意,他们认为Oracle一定会选择小表作为驱动表,为了弄明白我以前是否理解错误,现在实验一把:SQL> create table t1(id number,name varchar2(100));表已创建。SQL> create table t2(id number,job v原创 2010-03-18 21:54:00 · 6844 阅读 · 3 评论 -
创建bitmap index 时对表的加锁方式
前一篇博客研究了 创建B*tree索引时 对表的加锁方式,现在来研究一下创建bitmap时对表的加锁方式。本文基于10gR2测试表基于上一篇博客的test表。文档上面说9i不能以online方式创建bitmap index.SQL> create table lock_obj (username varchar2(100),sid number,lock_type varchar2(100原创 2010-03-17 16:02:00 · 2351 阅读 · 1 评论 -
创建索引(B*tree)时对表的加锁方式
创建一个测试表SQL> create table test as select * from dba_objects;Table created由于test表很小,创建索引时间很短暂,所以我创建一个系统触发器来记录创建索引时在基表上的LOCK,这里我不想对session进行跟踪。创建一个记录表,用来记录创建索引时产生的LOCKSQL> create table lock_obj原创 2010-03-15 14:40:00 · 3608 阅读 · 0 评论 -
测量一次I/0最多能读多少块
db_file_multiblock_read_count指定了一次最多能够读取的block数,当然这个值也是和操作系统相关的,ORACLE文档说,大多数的平台,一次I/O一般读1M的数据(This value is platform-dependent and is 1MB for most platforms),如果你的数据库的block size 为8,那么你一次就可以读128个块。现在我来原创 2009-12-22 15:39:00 · 3576 阅读 · 2 评论 -
模拟direct path read 等待事件
引起direct path read这个等待事件 主要有两个原因,一个是磁盘排序,另外一个是并行查询。这里先做一个磁盘排序引起的direct path read.另外磁盘排序也会记录direct path write 等待事件。下面是实验步骤:SQL> select * from v$version;BANNER----------------------------------原创 2009-11-26 22:54:00 · 4323 阅读 · 3 评论 -
使用并行查询模拟direct path read等待事件
上次做了一个磁盘排序引起的direct path read等待事件,这次做个并行查询引起的等待事件SQL> select * from v$version;BANNER----------------------------------------------------------------Oracle Database 10g Enterprise Edition Release原创 2009-11-27 14:51:00 · 3782 阅读 · 0 评论 -
模拟buffer busy waits等待事件
SQL> create table buffer_busy(id number,name varchar2(20));表已创建。SQL> insert into buffer_busy values(1,robinson);已创建 1 行。SQL> insert into buffer_busy values(2,robinson);已创建 1 行。SQL> comm原创 2009-11-24 14:54:00 · 5209 阅读 · 0 评论 -
如何找出应用程序未使用绑定变量
SQL开发的过程中,如果不使用绑定变量,会对数据库性能造成非常严重的影响请看如下示例代码: begin for i in 1..1000 loop execute immediate insert into test values(||i||); end loop; commit; end; /该过程执行1000次,会解析1000次,我们知道每次SQL解析大概原创 2009-11-10 14:37:00 · 4110 阅读 · 0 评论 -
向一个table 插入数据的时候,为什么会从该table所分配的第四个block开始,预留的3个block是干什么用的?
SQL> create table ttt(x number);表已创建。SQL> insert into ttt values(1);已创建 1 行。SQL> commit;提交完成。SQL> select file_id,block_id,bytes,blocks from dba_extents where segment_name=TTT; FILE_ID BLOCK_ID原创 2009-10-16 16:44:00 · 2254 阅读 · 4 评论 -
模拟ORA-01555快照过旧 错误
SQL> create undo tablespace undo2 datafile C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/UNDO2.DBF SIZE 2M autoextend off;表空间已创建。SQL> alter system set undo_tablespace=undo2;SQL> alter sys原创 2009-10-16 15:52:00 · 3453 阅读 · 0 评论 -
Dead lock
死锁是由于两个或多个session互相等待而造成的,死锁不需要DBA干预,ORACLE会舍弃第一个SESSION中等待的SQL。当用户接收到ORA-00060 死锁警告的时候,用户要么选择rollback,要么选择commit。如果选择rollback,会回滚所有的事物,如果选择commit,这个时候不会commit整个事物,而只会commit被ORACLE舍弃的SQL语句之前的SQL.测试表原创 2009-10-15 15:51:00 · 2473 阅读 · 0 评论 -
通过命令方式得到awr报表,ADDM报表
执行exec dbms_workload_repository.create_snapshot();执行以下命令:drop table t purge;drop sequence s;create table t(c number,d varchar2(20));create index it on t(c);create sequence s start with 1in原创 2009-10-16 16:01:00 · 3189 阅读 · 0 评论 -
ORACLE 中的lock 机制
为了进行LOCK的探究,我建立了一个测试表 test ,结构和测试数据如下:SQL> select * from test; ID NAME---------- ---------- 6 yoxi 2 robinson 2 tttt 3 david 4 jason 5 lucy原创 2009-10-15 14:00:00 · 13271 阅读 · 0 评论