1ORACLE数据库简介一、概论ORACLE 是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地讲它是用方便逻辑管理的语言操纵大量有规律数据的集合。
是目前最流行的客户/服务器(CLIENT/SERVER)体系结构的数据库之一。
二、特点1、ORACLE7.X以来引入了共享SQL和多线索服务器体系结构。
这减少了ORACLE 的资源占用,并增强了ORACLE的能力,使之在低档软硬件平台上用较少的资源就可以支持更多的用户,而在高档平台上可以支持成百上千个用户。
2、提供了基于角色(ROLE)分工的安全保密管理。
在数据库管理功能、完整性检查、安全性、一致性方面都有良好的表现。
3、支持大量多媒体数据,如二进制图形、声音、动画以及多维数据结构等。
4、提供了与第三代高级语言的接口软件PRO*系列,能在C,C++等主语言中嵌入SQL语句及过程化(PL/SQL)语句,对数据库中的数据进行操纵。
加上它有许多优秀的前台开发工具如 POWER BUILD、SQL*FORMS、VISIA BASIC 等,可以快速开发生成基于客户端PC 平台的应用程序,并具有良好的移植性。
5、提供了新的分布式数据库能力。
可通过网络较方便地读写远端数据库里的数据,并有对称复制的技术。
三、存储结构1、物理结构ORACLE数据库在物理上是存储于硬盘的各种文件。
它是活动的,可扩充的,随着数据的添加和应用程序的增大而变化。
下图为ORACLE数据库扩充前后在硬盘上存储结构的示意图:2、逻辑结构ORACLE数据库在逻辑上是由许多表空间构成。
主要分为系统表空间和非系统表空间。
非系统表空间内存储着各项应用的数据、索引、程序等相关信息。
我们准备上马一个较大的ORACLE应用系统时,应该创建它所独占的表空间,同时定义物理文件的存放路径和所占硬盘的大小。
下图为ORACLE数据库逻辑结构与物理结构的对照关系:四、分布式数据库管理介绍1、原理物理上存放于网络的多个ORACLE数据库,逻辑上可以看成一个单个的大数据库。
用户可以通过网络对异地数据库中的数据同时进行存取,而服务器之间的协同处理对于工作站用户及应用程序而言是完全透明的:开发人员无需关心网络的连接细节、无需关心数据在网络接点中的具体分布情况、也无需关心服务器之间的协调工作过程。
下图为ORACLE分布式数据库原理示意图:2、过程由网络相连的两个ORACLE数据库之间通过数据库链接(DB-LINKS)建立访问机制,相当于一方以另一方的某用户远程登录所做的操作。
但ORACLE采用的一些高级管理方法,如同义词(SYNONME)等使我们觉察不到这个过程,似乎远端的数据就在本地。
数据库复制技术包括:实时复制、定时复制、储存转发复制。
对复制的力度而言,有整个数据库表的复制,表中部分行的复制。
在复制的过程中,有自动冲突检测和解决的手段。
2.ORACLE的日志管理2002-10ORACLE数据库的日志文件$ORACLE_BASE/admin/orasid/bdump/alert_orasid.log记录了重作日志的转换,数据库启动和关闭,数据库结构的改变,回退段的修改,死锁,内部错误等信息.数据库管理员需要检查这个文件有无ORA-错误并定期地对这个日志文件进行存档整理。
在UNIX下可以用grep命令把alert_orasid.log里出现的错误保存到另一个文件。
然后去找原因。
$grep ORA- alert_orasid.log > error.log大家都知道,文件越大,其打开和读写的开销越大。
如果日志文件太大了(超过5M), 需要对它截断处理。
直接删除它,让ORACLE重新生成不是好的方法。
因为ORACLE是通过一个指向文件的指针进行写操作。
在数据库运行时删除了这个文件, ORACLE仍然用原来的文件指针进行写操作,有可能写一个不存在的文件导致硬盘空间占用。
我们要采用以下的方法:$tail -100 $ORACLE_BASE/admin/orasid/bdump/alert_orasid.log > /tmp/oracle_temp.log$cp /tmp/oracle_temp.log$ORACLE_BASE/admin/orasid/bdump/alert_orasid.log$rm /tmp/oracle_temp.log对日志文件进行截断处理。
listener的日志文件$ORACLE_HOME/network/log/listener.log记录了通过listener处理的网络请求信息,它包含客户端请求的时间,连接方式(专用或共享),连接程序,网络协议,主机名,网络端口号等信息。
我们也需要周期地截断它,方法是先停止listener记日志的工作:$lsnrctl set log_status off然后进行文件处理( 把原来的日志保存到备份文件夹, 使原来的listener.log置空 )$cp $ORACLE_HOME/network/log/listener.log$ORACLE_BACKUP/network/log/listener_1.log$cp /dev/null $ORACLE_HOME/network/log/listener.log文件操作完成后,打开listener记日志的工作:$lsnrctl set log_status on如果你会写简单的shell程序,可以把上面的步骤固化成一个脚本,定一个时间表, 让操作系统去做。
下面是我写的一个按天分割保存listener.log的文件auto_listener.sh-------------------------------------------------------------------------------------rq=` date +"%d" `cp $ORACLE_HOME/network/log/listener.log$ORACLE_BACKUP/network/log/listener_$rq.logsu - oracle -c "lsnrctl set log_status off"cp /dev/null $ORACLE_HOME/network/log/listener.logsu - oracle -c "lsnrctl set log_status on"-------------------------------------------------------------------------------------你可以根据自己的情况定义环境变量ORACLE_HOME,ORACLE_BACKUP或者直接改成实际的目录就可以让操作系统root用户23:59分运行这个shell脚本完成日志文件的分割处理。
3ORACLE SGA 的分配2002-05 余枫ORACLE 8.0.X 版本SGA=((db_block_buffers * blocksize)+(shared_pool_size+large_pool_size+log_buffers)+1MBORACLE 8.1.X 版本SGA=((db_block_buffers * blocksize)+(shared_pool_size+large_pool_size+java_pool_size+log_buffers)+1 MB理论上SGA可占OS系统物理内存的1/2——1/3,我们可以根据需求调整我推荐SGA=0.45*(OS RAM)假设服务器运行ORACLE 8.1.X 版本, OS系统内存为2G MEM, db_block_size 是8192 bytes,除了运行ORACLE数据库外, 没有其它的应用程序或服务器软件.这样SGA合计约为921M ( 0.45*2048M ),设shared_pool_size 250M (250*1024*1024 bytes)设database buffer cache 620M (79360*8192 bytes)initorasid.ora文件里具体各参数如下:shared_pool_size = 262144000# 250 M(说明:如果程序没有采用绑定变量的方法,繁忙的系统可以把shared_pool_size设到350M--400MTom Kyte 说所有未绑定变量的SQL都是坏的SQL, 他拒绝这样的SQL运行在他管理的数据库中。
)db_block_buffers = 79360# 620 Mlog_buffer = 524288# 512k (128K*CPU个数)large_pool_size = 31457280# 30 Mjava_pool_size = 20971520# 20 Msort_area_size = 524288# 512k (65k--2M)sort_area_retained_size = 524288# MTS 时 sort_area_retained_size = sort_area_sizeSUN Solaris 里/etc/system 文件里的几个参数同样跟内存分配有关ORACLE 安装时缺省的设置: 建议修改的设置:set shmsys:shminfo_shmmax=4294967295 set shmsys:shminfo_shmmin=1 set shmsys:shminfo_shmmni=100 set shmsys:shminfo_shmseg=15 set semsys:seminfo_semmns=200 set semsys:seminfo_semmni=70 set ulimit=3000000set semsys:seminfo_semmni=315 set semsys:seminfo_semmsl=300 set semsys:seminfo_semmns=630 set semsys:seminfo_semopm=315 set semsys:seminfo_semvmx=32767 set shmsys:shminfo_shmmax=4294967295 set shmsys:shminfo_shmmni=315 set shmsys:shminfo_shmseg=10set shmsys:shminfo_shmmin=1其中这些参数的含义shmmax - 共享内存段的最大字节数,建议设大点,甚至可以大过物理内存的字节数shmmin - 共享内存段的最小尺寸.shmmni - 共享内存段的最大数目.shmseg - 每个进程可分配的最大共享内存段数目.shmall - 最大的并发共享内存段数目,比SGA 还要大.semmns - 信号灯的最大数量,跟ORACLE 的PROCESS 数有关.semmsl - 每个信号灯集合中最多的信号灯数目.4 简析REDO LOGFILE2001-11我们知道Oracle 里联机日志文件(Online redo logfile)循环记录了数据库所有的事务(transaction)。