目录
1.什么是oracle数据库?
——存储在硬盘上的文件
-这些文件可以看作是物理存储结构
目录:/u01/app/oracle/oradata/orcl下,.ctl .dbf .log文件

2.什么是oracle实例?
——把数据库中的文件读入到内存中,把内存中的镜像叫实例(instance)
所以管理数据库,启动、关闭数据库这些说法不准确,应该叫管理数据库实例。因为数据库只是些文件,无法启动、关闭。
数据库:实例可以是1:N----->Oracle RAC(集群)
3.存储结构
-
物理存储结构:存储在硬盘上的文件
1)数据文件:*.dbf
必须存在的:
①system 系统的数据文件
②sysaux 系统的辅助文件(数据字典、AWR的信息,非常重要,自动工作量资料档案库,性能优化)
③undo 还原数据文件(历史数据),闪回(flashback)
举例:update某项数据,但没有commit,此时更新前的历史数据存在undo里面。输入rollback;可回滚。
④temp 临时数据文件(排序order by,排好序的结果、临时表)
可选的数据文件:
用户数据文件,user01.dbf、example01.dbf
2)日志文件:*.log----->记录的客户端的事务操作的DML
使用日志组的方式来管理日志文件,每组至少两个成员,写日志以日志组为单位
默认有三个日志组
如果日志都没有丢失(没有覆盖),那就可以做到数据库的完全恢复!
Oracle默认是非归档模式(会发生日志覆盖),一般来说,生产都是归档模式。
用管理员账号,archive log list查看Database log mode,值为No Archive Mode非归档模式
数据文件和日志文件的关系:
①.sqlplus客户端,执行DML,commit;
②.数据在实例(内存)中(检查点队列,脏数据);
③.将事务写入日志文件(如果日志写入成功,就算客户端的commit操作成功);
④.当发生了检查点时,会以最高优先级唤醒数据库的写进程,来写脏数据;(写好了日志就可以清了)
实例恢复:通过日志,恢复丢失数据
什么是检查点?checkpoint
①完全检查点
(1)正常关机
(2)切换日志组
(3)alter system checkpoint
②增量检查点(9i以后)
(1)每隔3s
(2)当日志达到1/3满的时候
3)控制文件:*.ctl------>当成是存储参数设置的文件
存储了数据文件和日志文件的位置
RMAN(recovery manager)备份的元信息
oracle推荐:采用多路复用的机制(多存几个),保证控制文件的可用
默认:2个(这两个路径位于两块不同的磁盘上)
4)其它文件。
4.进程结构
1)客户端进程
2)服务器进程(1:1客户端进程,专有服务器模式)
3)LGWR写日志进程
4)CKPT检查点进程
5)DBWn写进程(脏数据->数据库文件)
默认:只有一个写进程,DBW0
- ora_dbw0_oral写进程,默认只有一个
原则:写进程个数不超过cpu核数。
- ora_lgwr_orcl写日志进程(以日志组为单位,每组2个成员)
- ora_ckpt_orcl检查点进程(完全、增量)
- ora_smon_orcl系统的监视进程(system monitor),Oracle最核心的进程
关闭Oracle数据库最快的方式?kill -9 监视进程pid
- ora_pmon_orcl是Process monitor。当系统出现错误的时候,负责清理现场
- 其它进程。
5.内存结构
- SGA:System global area
大小:sga_target big integer 0
注:0表示大小由Oracle数据库自动分配
buffer cache缓存数据:数据的高速缓存,大小:db_cache_size 0
1.在buffer cache中查询数据
2.如果有数据,直接返回数据 一次命中,性能优化师考虑命中率,buffer cache理想命中率?100%,性能优化相关
3.如果没有数据,读取数据文件*.dbf
shard pool共享池:数据字典、SQL(这个用户执行的语句,也有可能被其他用户执行,所以放到共享池)、执行计划;大小:shard_pool_size 0
log buffer日志缓冲区:logger_buffer 10588160(就这一个有具体值)
java pool、large pool大池、streaming pool流池
因为SGA中只有log buffer的内存有固定大小,其它没有固定大小,因此从AMM又引入了:ASMM:automatic shared memory management
- PGA:Progress global area
大小:pga_aggregate_target big integer 0
注:11g以后提供一个新功能:AMM自动内存管理(automatic memory management):白天晚上内存用量不一样,需要管理:只需要设置一个内存的总大小(memory_target=SGA+n*PGA)即可。
(怎么查看数据库内存大小?)
show parameter memory_target
6.管理数据库实例
- 如何启动数据实例?
控制文件----->数据文件和日志文件----->打开数据库