数据库分为关系型数据库和对象型数据库
关系型数据库:把存放的内容抽象化成关系
区分关系型:一定是表和行的方式
选择release2版本,相对release1要稳定的多
10g grid 分布计算加安全访问
oracle与mysql区别
数据库对象:
table,view,synonym,contrains,index,
存储过程,触发器,包,函数
数据库安全:
users,schema,privilege,role,配额quota
数据库文件与存储:
datafile,control file,redo log,pfile and spfile,tablespace
数据库网络访问:
db_name, instance_name, service_name, tsnname, listener, 连接字符串
=====================================================
oracle默认为专用服务器
oracle体系结构分为三类:进程结构,内存结构,存储结构。
进程结构:用户进程和服务进程
a.用户进程访问数据库的方式
---- 本机直接通过scok方式访问,即IPC
----通过TCP建立连接到oracle服务器
----sqlplus sys/oracle@ora10g as sysdba,本机需配置$ORACLE_HOME/network/admin/tnsnames.ora
----sqlplus sys/oracle@remote.example.com:1521/ora10g as sysdba , 服务器上需配置listener.ora
如果需要查看用户进程产生的信息:可以使用 show parameter user_ , 其下有一个user_dump_dest。 v$session v$sql v$sqltext v$process
b.服务进程
用户和服务进程建立连接后, 如会话信息存储在 PGA,便于维护和管理。
SGA共享
-----服务器进程传递给实例,放到实例共享池里进行判断,如果执行过进行软分析,否则进行硬分析。
表放在哪一个blcoc?数据字典可以告诉你表放在哪个表空间,行放在哪个块。data buffer cache中是否已有4号文件第5个block?如果有,则返回数据给用户。
如果没有,则从磁盘中读取数据到data buffer中,undo缓存块会对该块做镜象。然后读镜像中的数据给用户。
redo log buffer 记录block更改变化,修改前后的块镜像标记不同(是否commit)。
c. 后台进程
ckpt保证数据同步的进程。触发dbwr,dbwr再触发lgwr。这样就可以让lgwr写完后,再做dbwr。
dbwr,lgwr,smon,pmon,ckpt 5个进程必须正常,其中一个异常都会造成instance关闭。 ps -ef | grep ora 或者 v$bgprocess
smon:
实例恢复
pmon:
清除失败的进程
dbwr何时触发:
发生检查点、脏数据到达限制、没有free 缓存、超时发生、RAC ping请求、表空间离线、表删除或者截断、表空间只读、开始备份表空间。
32bit -- dbw0~dbw9 64bit--dbw0~dbw9 dbwa~dbwj
lgwr何时触发:
commit 、达到1/3满、日志的大小到1M、每隔3s、在DBWn进程写之前
考虑磁盘I/O性能好,RAID或raw device方案,保证写日志够块,避免出现库异常或宕库。
ckpt:
作用:发送信号给DBWn、更新数据文件头、更新控制文件
SCN 判断数据的一致性。一般通过回滚来修复一致性,高级一点的是直接修改SCN
archive: (可选后台进程)
开启该进程,设置为归档模式
select log_mode from v$database;
startup mount
alter database archivelog;
alter database open
show parameter db_recovery_file_dest //可查询归档日志文件目录
show parameter log_archive_max_processes //归档进程个数,最多只能设置30个 。
还有很多其他可选后台进程
内存结构:SGA,PGA
PGA: PROGRAM GLOBAL AREA
SHOW PARAMETER PGA //pga大小
SHOW PARAMETER WORK //如果此为auto,则sort ,hash不用考虑
SHOW PARAMETER SORT_
SHOW PARAMETER HASH
SGA:
内存结构和后台进程的组成实例(看图更象是sga和后台进程组成了实例)
SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。
SGA的分配和回收由实例的启动,关闭来决定。
固定sga, 不是所有的sga都是共享的。
show sga
sga抖动现象,没有为组件分配固定大小。
sga管理方法:
静态管理(8i),动态管理,自动动态管理(sga_target>0,否则为动态管理)。
在设置内存大小的时候,分配的基本单位是粒度granule
10g中的分配规则是:
sga<=1G granule 4M 否则16M
整个内存组建分配大小必须是granule的整倍数
整个sga最小不小于3个granule的大小。
查看granule大小
select name, bytes/1024/1024 m, resizeable from v$sgainfo;
show parameter sga_max_size //此大小决定了granule大小
alter system set sga_max_size=1025m scope=spfile;
-----shared buffer pool
library cache 语句执行的判断(软分析或硬分析)
data dictionary cache (定义表,比如查找表空间,行,索引,权限等等)
大小由shared_pool_size决定,可以动态分配
-----database buffer pool
有3种:
default pool不指定块存储的buffer时,使用默认的 DB_CACHE_SIZE
keep pool 避免被Lru算法给淘汰掉 DB_KEEP_CACHE_SIZE
recycle pool 避免内存的反复回收释放 DB_RECYCLE_CACHE_SIZE
只有 default pool可以被sga 管理。
-----redo log buffer
大小由log_buffer 决定(1-2M即可,不需要太大),不可以被动态管理
----large pool (可选内存区)
比如rman备份,数据库性能下降。
共享服务器模式下,这部分内容放在uga中,如果不是共享服务器模式,则这部分内容是放在pga中的。
并行进程执行的时候
一些大对象操作的时候
-----大小由large_pool_size决定,可以被动态管理。在自动管理时,也请设置初始大小值,避免sga抖动问题。
------java pool (可选)
用于java的解析和执行
大小由java_pool_size决定,可以动态调整
如果granule是4M,java pool size默认是24M,如果granule是16M,则java pool size 默认是32M.
-----stream pool
缓存高级队列,一般设置12M,记得设置初始大小,10gr2才可以自动管理
sga总结:sga_max_size=(80%mem) *2/3 还有设置sga_target
存储结构:database
show prameter db_name //数据库名
select name from v$database;
select instance_name from v$instance;
show parameter instance_name;
v$datafile 、v$controfile、v$logfile、v$archived_log 、v$parameter
初始化参数文件:SELECT VALUE FROM V$PARAMETER WHERE NAME='spfile';
密码文件: ls $ORACLE_HOME/dbs/orapw$ORACLE_SID
alert log : ls $ORACLE_BASE/admin/$ORACLE_SID/bdump/alter_$ORACLE_SID.log
上述都是基于10g的
11gr2里的alert log:$ORACLE_BASE/diag/rdbms/orcl/orcl/trace //不同的sid,路径也不一样。
其实用 find . -name 'alert_*.log' 这条命令更加方便查找
看oratab中的说明,即便设置成
$ORACLE_SID:ORACLE_HOME:Y ,oracle也不会随系统的启动而启动。从实验上来看<Y|N>选项只是能不能用
$ORACLE_HOME/bin/dbstart和$ORACLE_HOME/bin/dbshut来启动和关闭数据库的开关。
如果想让数据库随系统启动而启动,必须在系统启动的时候以oracle用户来运行$ORACLE_HOME/bin/dbstart脚本