Oracle实验怎么做,oracle实训

oracle实验创建insteadof不允许删除表中数据

允许。oracle实验创建insteadof允许删除表中数据,insteadof选项使oracle激活触发器,而不执行触发事件。只能对视图和对象视图建立insteadof触发器,而不能对表、模式和数据库建立insteadof触发器。

创新互联是专业的大余网站建设公司,大余接单;提供网站制作、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行大余网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

oracle做分页查询怎么做?

sql语句如下:

分页1

SELECT *

FROM (Select ROWNUM AS ROWNO, T.*

from 表名 T(别名)

where 表字段 between to_date('20060501', 'yyyymmdd') and  to_date('20060731', 'yyyymmdd')

AND ROWNUM = 20) TABLE_ALIAS

WHERE TABLE_ALIAS.ROWNO = 10;

经过测试,此方法成本最低,只嵌套一层,速度最快,即使查询的数据量再大,也几乎不受影响,速度依然.

分页2:

SELECT *

FROM (SELECT TT.*, ROWNUM AS ROWNO

FROM (Select t.*

    from 表名 T(别名)

    where flight_date between to_date('20060501', 'yyyymmdd') and

       to_date('20060531', 'yyyymmdd')

    ORDER BY FACT_UP_TIME, flight_no) TT(别名二)

WHERE ROWNUM = 20) TABLE_ALIAS

where TABLE_ALIAS.rowno = 10;

经过测试,此方法随着查询范围的扩大,速度也会越来越慢,

Oracle表空间中有多个数据文件时,extent分配实验

Oracle表空间中有多个数据文件时,extent分配实验. 实验分为两部分,

第一部分是在设置了uniform size的表空间上做实验,查看extent的分配规律。

第二部分是使用系统分配(Oracle自动分配)的方式做实验,查看extent的分配规律。

如何分析Oracle

以oracle表分析为例:

drop table test;

select count(*) from test;

--创建测试表

create table test

(

id number(9),

nick varchar2(30)

);

--插入测试数据

begin

for i in 1..100000 loop

insert into test(id) values(i);

end loop;

commit;

end;

select * from test;

--更新nick字段,使数据发生严重倾斜

update test set nick='abc' where rownum99999;

--创建索引

create index idx_test_nick on test(nick);

update test set nick='def' where nick is null;

--只对索引进行分析

analyze index idx_test_nick compute statistics;

select * from user_indexes;

--查看索引名,对应存储的数据块,不同的key数量,记录数(行数)的分析信息

select index_name, LEAF_BLOCKS, DISTINCT_KEYS, NUM_ROWS

from user_indexes

where index_name = 'IDX_TEST_NICK';

--dba_tab_col_statistics

--查看表的统计信息

select COLUMN_NAME, NUM_BUCKETS, num_distinct

from USER_tab_columns

where table_name = 'TEST';

select * from test where nick ='abc';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST'

2 1 INDEX (RANGE SCAN) OF 'IDX_TEST_NICK' (NON-UNIQUE)

select * from test where nick ='def';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST'

2 1 INDEX (RANGE SCAN) OF 'IDX_TEST_NICK' (NON-UNIQUE)

--由上可以看到,对索引分析之后,sql的执行路径都是基于规则的,索引的字段的偏移

--先根据索引找到rowid,然后再根据rowid读取记录,这个过程肯定比全表扫描读取记录要慢

--user_part_col_statistics 分区分析信息

--分析表的第二列nick

analyze table test compute statistics for columns size 2 nick;

select * from test where nick ='abc';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST'

2 1 INDEX (RANGE SCAN) OF 'IDX_TEST_NICK' (NON-UNIQUE)

--根据上面的执行计划,还是按照规则来执行的

--分析表

analyze table test compute statistics for table;

select * from test where nick ='abc';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=49 Card=99998 Bytes=

1499970)

1 0 TABLE ACCESS (FULL) OF 'TEST' (Cost=49 Card=99998 Bytes=14

99970)

--分析表之后,完全按照成本来执行

--删除所有的统计数据,并只对表与列进行分析,不分析索引,

--ORACLE使用CBO的优化器,并产生了正确的执行计划

analyze table test delete statistics;

--分析列nick

analyze table test compute statistics for table for columns size 2 nick;

select * from test where nick ='abc';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=49 Card=99998 Bytes=

1499970)

1 0 TABLE ACCESS (FULL) OF 'TEST' (Cost=49 Card=99998 Bytes=14

99970)

--

select * from test where nick ='def';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=2 Bytes=30)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=2 Byt

es=30)

2 1 INDEX (RANGE SCAN) OF 'IDX_TEST_NICK' (NON-UNIQUE) (Cost

=1 Card=2)

--创建TEST表ID列上的索引,但不对索引进行分析

create index idx_test_id on test(id);

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1000 Bytes=15

000)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=1000

Bytes=15000)

2 1 INDEX (RANGE SCAN) OF 'IDX_TEST_ID' (NON-UNIQUE) (Cost=1

Card=400)

--当条件中即有id,又有nick时,因为nick上有直方图,ORACLE知道nick='abc'的值特别的多,所以不走IDX_TEST_NICK索引,走IDX_TEST_ID上的索引

select * from test where id=5 and nick='abc';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1000 Bytes=15

000)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=1000

Bytes=15000)

2 1 INDEX (RANGE SCAN) OF 'IDX_TEST_ID' (NON-UNIQUE) (Cost=1

Card=400)

--当条件中即有id,又有nick时,因为nick上有直方图,ORACLE知道nick='def'的值特别的少,所以走IDX_TEST_NICK上的索引,不走IDX_TEST_ID索引

select * from test where id=5 and nick='def';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=15)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=1 Byt

es=15)

2 1 INDEX (RANGE SCAN) OF 'IDX_TEST_NICK' (NON-UNIQUE) (Cost

=1 Card=2)

select * from test where nick='def' and id=5;

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=15)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=1 Byt

es=15)

2 1 INDEX (RANGE SCAN) OF 'IDX_TEST_NICK' (NON-UNIQUE) (Cost

=1 Card=2)

--在分析ID列后,ORACLE发现ID列的选择度更高,所以不再选择IDX_TEST_NICK索引,而是选择IDX_TEST_ID

analyze table test compute statistics for columns size 1 id;

select * from test where id=5 and nick='def';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=7)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=1 Byt

es=7)

2 1 INDEX (RANGE SCAN) OF 'IDX_TEST_ID' (NON-UNIQUE) (Cost=1

Card=1)

/*

下面来看另外一种情况,我们删除所有的统计数据,然后在ID列上创建唯一索引,在此条件下,

只分析表与分析列nick,我们看到ORACLE走了正确的执行计划,

走了UK_TEST_ID,其实从这里也给我们带来很多的启示:

在主键与唯一键约束的列上是否需要直方图的问题?

如果在这些列上有像这样的查询where id 100 and id 1000,

我们还是需要有直方图的,但除此之外,好像真的没有直方图的必要了!

*/

analyze table test delete statistics;

drop index idx_test_id;

create unique index uk_test_id on test(id);

--分析表的第二列nick

analyze table test compute statistics for table for columns size 2 nick;

select * from test where id=5 and nick='def';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=15)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=1 Byt

es=15)

2 1 INDEX (UNIQUE SCAN) OF 'UK_TEST_ID' (UNIQUE) (Cost=1 Car

d=100000)

从以上一系列的实验可以看出,对ORACLE的优化器CBO来说,表的分析与列的分析才是最重要的,索引的分析次之。还有我们可以考虑我们的哪些列上需要直方图,对于bucket的个数问题,oracle的默认值是75个,所以根据你的应用规则,选择合适的桶数对性能也是有帮助的。因为不必要的桶的个数的大量增加,必然会带来SQL语句硬解析时产生执行计划的复杂度问题。

Oracle建立实验用数据库store,并建立监听及本地命名,使用sys用户登陆。 1、 建立名为school的表空间,指

2.create tablespace school datafile '物理路径' size 容量大小;

alter database default tablespace school

3.create role student not identified;

grant create any table to student;

grant create any view to student;

grant create any sequence to student;

4.create user st_operator identified by test;

grant student,connect,resource to st_operator;

后面的表结构我不清楚

oracle数据库如何做自动化测试

我也是第一次听到这个词,不过可以猜一下。

个人认为所谓的数据库自动化,无非就是过程,包,触发器这些你编译的脚本能否自动运行。

debug是找过程错误的方式,然后就是假数据调试,最后就是联调。

这么说吧,和过程出错了,找出错的地方大体上类似。只不过可能多了连接测试(出现争用或者锁表的几率),相应时间测试(平均运行多上时间,是否符合规定等等),甚至可能包括压力测试(一次能满足多少个操作)。等等。

还有一种就是基于时间的,主要是计划任务和定时任务,这两个就是先执行,看看能不能执行,然后在修改时间,到几分钟后,看能不能执行。我认为主要可能就是这几个方面。

另外多句嘴,自动化测试应该有严格的测试用例,这个一般要测试部门编写,不然万一出了问题找谁啊?所以这个问题还真的没想过。


网站名称:Oracle实验怎么做,oracle实训
URL标题:http://scyanting.com/article/hoicgc.html