[转贴]oracle 体系结构。
时间:2003-7-5 15:32:49 **:花落无声作者:杂霸书生
前言 很多人大楷都是从sql server转过来的,可能是受ms的影响太深,老想着用sql server的方法来解决oracle的问题,这就是一个极大的失误,比如有人就老喜欢用那个oem,那个我一直认为是oracle的糟粕的一个代表,oracle的精髓是**的管理,任何管理、备份、恢复都可以通过**或脚本实现。比如还有的人就喜欢sql server过程中能直接写select语句,认为oracle必须要能做,有人认为sql server的过程能执行ddl语句,那oracle也必须要这样……诚然,我不是承认不可以,但是很多的很多的这一切,就是你实现了,却是oracle强烈反对的,因为它们对oracle的性能可能有很大的影响。
我想,要学好oracle,就必须脚踏实地,一步一步来,你可以拿两个数据库来比较,但是不要想着关系型数据库都是一样的,它们是有差别的,或多或少,一个简单的例子,在sql server中,一个表的修改是以页面级来锁定的,对表的修改是阻塞读操作的(如select),所以sql server的锁是非常昂贵的,如果不是特别指定,一个语句就是一个事务。在oracle中,这一切都变了,oracle可以提供最小的行级锁,所有对表的锁定不影响select查询,在oracle中,锁的资源占用是非常小的,所以oracle默认开启事务,直到你提交或回滚。
我学oracle也就两年时间,到现在专职做oracle管理和oracle数据仓库,也是自己慢慢走过来的,我其实也没有得到高人指点,就是自己慢慢啃书,慢慢查资料。论坛可以用来交流,但是想让它让你有很大进步,可能性不大,毕竟,论坛上面系统性的东西太少。要想做一个好的dba,是不容易的,有人总结了dba 10点该做的和不该做的。
#1 - do maintain your expertise
#2 - do use the dbms_stats package to collect statistics
#3 - do use bind variables
#4 - do put your production database in archivelog mode
#5 - do use locally managed tablespaces
#6 - do monitor your database
#7 - do practice recoveries
#8 - do get involved with user groups and other resources
#9 - do establish standards and change control processes
#10 - do think ahead
oracle database top 10 don"ts
#1 - don"t waste time re-organizing your databases
#2 - don"t use .log or other common extensions for your database file names
#3 - don"t le**e your database open to attack
#4 - don"t decide against hot backups
#5 - don"t use assm
#6 - don"t forget the 80/20 rule
#7 - don"t stack views
#8 - don"t be a normalization bigot
#9 - don"t forget to document everything
#10 - do not use products you are not licensed for.
csdn上的专职从事数据库管理的可能很少,也就导致了这里很多人的问题都是在开发上面,当然,我不是要求大家学管理,就是开发,也需要对数据库理解,半懂不懂的搞开发,最可能的后果,可能就是项目的失败,而这是一个程序员的耻辱。
正因为csdn的这种特殊情况,很多高手都不愿意来这里,我问其原因,回答很简单,csdn只能让我退步,我去干什么,大家也都清楚,现在是一个信息化的时代,不是不进则退了,是进步慢也是退步的时代了。
今天就写这么多,下面开始转入正文,因为时间仓促,多少可能有些笔误或错误,也就希望大家指正,在以后的时间里,我会定期的写这么一些文章,希望大家有所收获,我的下一篇文章计划是“oracle的备份策应”。
此文不经许可,不可**,如有必要,也需要注明出处!
概要 在本章里你可以了解以下内容
1、 oracle 实例——包括内存结构与后台进程
2、 oracle 数据库——物理操作系统文件的集合
3、 了解内存结构的组成
4、 了解后台进程的作用
5、 了解数据库的物理文件
6、 解释各种逻辑结构
一、oracle事例
1、oracle 实例
system global area(sga) 和 background process 被成为数据库的实例。
2、oracle 数据库
一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等)
3、系统全局共享区system global area(sga)
system global area 是一块巨大的共享内存区域,他被看做是oracle 数据库的一个大缓冲池,这里的数据可以被oracle的各个进程共用。其大小可以通过如下语句查看:
sql> select * from v$sga;
name value
fixed size 39816
variable size 259812784
database buffers 1.049e+09
redo buffers 327680
更详细的信息可以参考v$sgastat、v$buffer_pool
主要包括以下几个部分:
a、 共享池(shared pool)
共享池是sga中最关键的内存片段,特别是在性能和可伸缩性上。一个太小的共享池会扼杀性能,使系统停止,太大的共享池也会有同样的效果,将会消耗大量的cpu来管理这个共享池。不正确的使用共享池只会带来灾难。
共享池主要又可以分为以下两个部分:
sql语句缓冲(library cache)
当一个用户提交一个sql语句,oracle会将这句sql进行分析(parse),这个过程类似于编译,会耗费相对较多的时间。在分析完这个sql,oracle会把他的分析结果给保存在shared pool的library cache中,当数据库第二次执行该sql时,oracle自动跳过这个分析过程,从而减少了系统运行的时间。这也是为什么第一次运行的sql 比第二次运行的sql要慢一点的原因。
下面举例说明parse的时间
sql> select count(*)fromscpass ;
count(*)
elapsed: 00:00:00.08
这是在share_pool 和data buffer 都没有数据缓冲区的情况下所用的时间
sql> alter system flush shared_pool;
system altered.
清空share_pool,保留data buffer
sql> select count(*)from scpass ;
count(*)
elapsed: 00:00:00.02
sql> select count(*)from scpass ;
count(*)
elapsed: 00:00:00.00
从两句sql 的时间差上可以看出该sql 的parse 时间约为00:00:00.02
对于保存在共享池中的sql语句,可以从v$sqltext、v$sqlarea中查询到,对于编程者来说,要尽量提高语句的重用率,减少语句的分析时间。一个设计的差的应用程序可以毁掉整个数据库的share pool,提高sql语句的重用率必须先养成良好的变成习惯,尽量使用bind变量。
数据字典缓冲区(data dictionary cache)
显而易见,数据字典缓冲区是oracle特地为数据字典准备的一块缓冲池,供oracle内部使用,没有什么可以说的。
b、块缓冲区高速缓存(database buffer cache)
这些缓冲是对应所有数据文件中的一些被使用到的数据块。让他们能够在内存中进行操作。在这个级别里没有系统文件,,户数据文件,临时数据文件,回滚段文件之分。
也就是任何文件的数据块都有可能被缓冲。数据库的任何修改都在该缓冲里完成,并由dbwr进程将修改后的数据写入磁盘。
Oracle体系结构
课后测试。单选题。1.哪个不是数据库的物理组件 a表空间 b物理文件 c控制文件 d日志文件 正确答案 a 2.最小的数据库逻辑结构是什么?a操作系统块 b数据库块 c表空间 d表 e区 正确答案 b 3.在数据库启动的mount阶段,可以进行什么操作 a查询用户scott下的表 b建立表空间 c创...
Oracle体系结构
簇 cluster 经常被频繁引用的表可以在物理位置上被存储在一起,簇就是用来管理这种集中存储的。集中存储可以减少i o次数,以达到性能的改善和提高。散列簇 hash cluster 簇的另一种形式,这种簇中的数据要通过散列函数计算得出物理位置,它可以极大程度的提高等值查询的效率。视图 view 可...
oracle体系结构
meta data 描述 说明 数据的数据。ctl 文件描述了 记录了 dbf 文件和log文件的位置,大小,一致性,checkpoint等信息。参数文件 oracle instance启动时,实例的参数由参数文件决定。d oracle product 10.2.0 db 1 dbs 密码文件 d ...