风哥oracle如何 oracle 风哥

如何学习oracle

有一定的数据库基础吗?没有的话,建议从SQL语句学起。比较好的教材是Oracle OCP认证的《SQL and PL/SQL》。学习SQL的时候,尽可能坚持使用Oracle自带的工具:SQLPLUS。 

成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站制作、成都网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的滨州网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

有了一定的SQL基础后,就要尽可能的了解Oracle的体系结构,这就涉及到了Oracle管理的内容了。《Oracle10g OCP认证手册》这本书不错。

如果是初学者的话,到后期,不建议自己去摸索,因为这样往往会如盲人摸象,不仅会事倍功半,而且会有一些错误的概念。你可以去CUUG报个DBA就业培训班进行学习,主要是培训能获得实践和项目经验,这两样对日后找工作很重要。

如何远程将oracle数据库导出本地?

在虚拟机中打开运行输入cmd

在弹出的命令行中输入:exp用户名/密码@远程oralce数据库的IP:端口号/实例file=存放位置:\文件名.dmpfull=y。

如果不是dba的话会有如下提示

root用户下首先切换到oracle用户命令: su-oracle

导出命令格式如下:expuser/pwd@SIDfile=path/sth.dmp其中:user/pwd是你要导出的表空间的oracle用户的用户名与密码;SID为oracle启动实例,一般为orcl。path是你导出的路径;请注意最后面的sth.dmp不能少。

导入dmp文件-在oracle用户下:两种方法[oracle@system~]impuser/passwdfileName=fielPathfull=y(full不能少)

导入导出在oracle用户下,文件file=路径+dmp的文件名,都不能少。

如何分析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

Oracle 11g 64位/32位官方版(附详细的安装图解教程)

Oracle 11g安装图解教程

安装以win7 64位系统为例

1、将win64_11gR2_database_1of2和win64_11gR2_database_2of2解压到同个文件夹下合并(可以直接左键框住右键点击一起解压),打开运行其中的setup开始安装,如图所示:

2、稍后进入Oracle 11g安装界面(如下图:)

3、【配置安全更新】邮箱以及口令可以不写,点击下一步,出现提醒,直接点是即可。

4、【安装选项】直接选择默认创建和配置一个数据库(安装完Oracle后,系统会自动创建一个数据库实例)。

5、【系统类】个人用户直接选择默认的桌面类就可以了,如图所示:

6、【典型安装】Oracle基目录,软件目录,和数据库文件目录,Oracle一般会自动帮你选择空间最大的盘和你解压文件的盘符,全部默认即可。管理口令需要输入(大写+小写+数字)的八位密码,也有网友指出此处可以随意设置简单好记的密码,无视软件提醒即可。

7、【先决条件检查】安装程序会检查软硬件系统是否满足此Oracle版本的最低要求,安装需要占用约2G的C盘空间,内存2G以上即可。如果还是通不过要求,选择全部忽略。

8、【概要】安装前的一些相关选择配置信息,点击完成。

9、安装正在进行中,请耐心等待。。。。如图所示:

10、Oracle实例创建启动完成后,会自动创建安装一个实例数据库名称orcl123,(小编用的是orcl123,默认为orcl名称的数据库)。

11、 安装完成,运行开始菜单Oracle - OraDb11g_home1Database Control - orcl123,以IE运行进入登录界面或打开ie直接输入即可 (此处如果出现证书错误的话,点击继续浏览此网站即可)。

12、登录界面,输入用户名"SYS",口令为之前注册设置的管理密码,将连接身份改为SYSDBA,点击登录,成功之后你就可以管理你的数据库实例了。


当前文章:风哥oracle如何 oracle 风哥
文章网址:http://cdiso.cn/article/hjgjgc.html

其他资讯