做oracle实验怎么做 oracle实验五

Oracle建立实验用数据库store,并建立监听及本地命名,使用sys用户登陆 。1、 建立名为school的表空间,指2.create tablespace schooldatafile '物理路径' 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表空间中有多个数据文件时,extent分配实验Oracle表空间中有多个数据文件时,extent分配实验. 实验分为两部分,
第一部分是在设置了uniform size的表空间上做实验,查看extent的分配规律 。
第二部分是使用系统分配(Oracle自动分配)的方式做实验,查看extent的分配规律 。
如何学习Oracle这是一位大师的讲oracle时的第一节课的课件,专门讲如何学习oracle
一、目前学习Oracle的两派人--------1.只是操作,2.学习理论深入了解
二、Oracle的重要性
三、学习前提
学习Oracle的前提是:熟悉Linux操作系统、Unix操作系统、存储、带库 。主要是管理和操作系统原理
四、学习方法
1、sql、pl/sql(网上有很多的视频 , 可以做一个简单的入手,然后看几本书,多做实验)
作为oracle的基本功,需要大家对sql和plsql非常的熟悉 。特别是sql里面的多表连接、子查询、各种新版本的函数,以及plsql里面的所有语法 。建议大家拿出足够的时间来研究这两块 。不要认为这是开发人员的工作,他也是DBA的重要工作,而且对DBA的要求更高,你不但能看懂,还要能够找出问题 。学些这方面知识的要点就是:多练、多思考 , 多测试 。
2、Oracle管理(体系结构)(这一块一定要听课,而且是要听“大师”的课、多讨论)
这是Oracle的难点,Orcle技术博大精深,主要的难点就集中在这里面 。包括Oracle的存储管理、对象管理、内存和进程、undo管理、初始化参数、数据字典视图、安全、latch和lock、权限和角色、资源调度、闪回、日志原理等 。
学习这一块知识的时候,一个重点是:要知道原理和“根”,知道表面的东西没有任何意义 。
知道原理以后 , 通过实验去证明,将原理总结出来 。
这一块学习的好还是不好,直接决定了以后的一个备份恢复、优化、排错 。
这一块虽然是研究管理,但是更加注重原理和体系结构的分析和解剖 。
应该叫做“深入剖析Oracle体系结构”,多深都需要 。
在这一部分的学习中 , 已经学习了很多优化的内容,在学习任何一个知识点的时候,我们都离不开对性能的分析 。
3、备份恢复(听听课、看几本书,多做做实验、多讨论)
有了第二部分的铺垫 , 这一章的学习相对有意思,前提是我们对Oracle的日志原理研究得较深,对oracle的内存和进程研究得较深 。策划一个完美和正确的备份计划和实施方案(具体要分析出原理),实施备份;对各种损坏进行恢复(还是要能够够分析出原理);另外可以做一些高难度的恢复实验(还是老话、要能够分析出原理) 。
4、优化(单实例优化)(还是要听课,最好听一些专题性的,深入讲解的专家课,还是要看一些经典的书籍,特别是英文书)
这一块完全是第一部分和第二部分的一个结合 。这一块的学习没有最深,只有更深,学习方法和第二部分类似 。
首先需要大家掌握一些Oracle的优化方面的基础知识,例如深入分析索引原理、分区、等待事件、时间统计模型、动态性能视图、操作系统的一些性能优化和查看命令,例如:top、iostat、vmstat、sar、pmap、prstat、filemon、nmon、svmon等 。
最关键的还是要做三件事情:Oracle的动态性能视图、Oracle的报告(trace、statspack、awr、addm、ash)、执行计划;对这三块要熟悉和分析出来 。这个部分的分析和动手实验很重要 。
5、RAC(可以听听课,有了前面的基础以后,基本上自己就能看懂书了 , 因此 , 可以看书,也可以听一些专题课)
现在RAC的使用越来越多,学习RAC的重点还是:基础原理 RAC优化 。
RAC系统的优化分为两个步骤:RAC系统优化和单实例优化;根据RAC的基础原理 , 能够设计高性能的RAC系统,能够分析RAC性能问题 。对RAC的动态性能视图、等待事件、报告,能够看懂和分析 。
6、GC、DG、Stream、Gold Gate等
对于这些工具和组件,我们熟悉其体系结构,原理,一些监控性能的工具等 。
学习这些部分的几个点:熟悉体系结构、原理;搭建;监控(包括故障和性能);排错和优化 。
7、SQL优化(看一本经典的英文书籍、多做实验、多实践、多分析)
为什么单独的拿出来呢?因为这部分需要持之以恒的进行研究和实验,而且工作中几乎是每天都要做的事情 。
目前这方面,有一些比较经典的中文书,值得大家去看看 。
8、PL/SQL深度学习
在这部分学习的时候,就要时时刻刻注意性能,主要是注意测试 。
9、综合性项目实战:
模拟环境:
规划、搭建、测试、管理、排错、优化、分析
实战环境:
同上
如何分析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
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE
10TABLE ACCESS (BY INDEX ROWID) OF 'TEST'
21INDEX (RANGE SCAN) OF 'IDX_TEST_NICK' (NON-UNIQUE)
select * from test where nick ='def';
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE
10TABLE ACCESS (BY INDEX ROWID) OF 'TEST'
21INDEX (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
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE
10TABLE ACCESS (BY INDEX ROWID) OF 'TEST'
21INDEX (RANGE SCAN) OF 'IDX_TEST_NICK' (NON-UNIQUE)
--根据上面的执行计划,还是按照规则来执行的
--分析表
analyze table test compute statistics for table;
select * from test where nick ='abc';
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=49 Card=99998 Bytes=
1499970)
10TABLE 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
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=49 Card=99998 Bytes=
1499970)
10TABLE ACCESS (FULL) OF 'TEST' (Cost=49 Card=99998 Bytes=14
99970)
--
select * from test where nick ='def';
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=2 Bytes=30)
10TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=2 Byt
es=30)
21INDEX (RANGE SCAN) OF 'IDX_TEST_NICK' (NON-UNIQUE) (Cost
=1 Card=2)
--创建TEST表ID列上的索引,但不对索引进行分析
create index idx_test_id on test(id);
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1000 Bytes=15
000)
10TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=1000
Bytes=15000)
21INDEX (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
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1000 Bytes=15
000)
10TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=1000
Bytes=15000)
21INDEX (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
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=15)
10TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=1 Byt
es=15)
21INDEX (RANGE SCAN) OF 'IDX_TEST_NICK' (NON-UNIQUE) (Cost
=1 Card=2)
select * from test where nick='def'and id=5;
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=15)
10TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=1 Byt
es=15)
21INDEX (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
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=7)
10TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=1 Byt
es=7)
21INDEX (RANGE SCAN) OF 'IDX_TEST_ID' (NON-UNIQUE) (Cost=1
Card=1)
/*
下面来看另外一种情况,我们删除所有的统计数据,然后在ID列上创建唯一索引,在此条件下,
只分析表与分析列nick,我们看到ORACLE走了正确的执行计划,
走了UK_TEST_ID,其实从这里也给我们带来很多的启示:
在主键与唯一键约束的列上是否需要直方图的问题?
如果在这些列上有像这样的查询where id100 and id1000,
我们还是需要有直方图的,但除此之外,好像真的没有直方图的必要了!
*/
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
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=15)
10TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=1 Byt
es=15)
21INDEX (UNIQUE SCAN) OF 'UK_TEST_ID' (UNIQUE) (Cost=1 Car
d=100000)
从以上一系列的实验可以看出 , 对ORACLE的优化器CBO来说,表的分析与列的分析才是最重要的,索引的分析次之 。还有我们可以考虑我们的哪些列上需要直方图 , 对于bucket的个数问题,oracle的默认值是75个,所以根据你的应用规则,选择合适的桶数对性能也是有帮助的 。因为不必要的桶的个数的大量增加,必然会带来SQL语句硬解析时产生执行计划的复杂度问题 。
【做oracle实验怎么做 oracle实验五】关于做oracle实验怎么做和oracle实验五的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读