ocm的课程,结束了4天的GC课程 ,进入了RMAN 这章.
rman 是oracle的恢复管理器.,用来管理 数据库备份的工具.
要想搞明白rman 是怎么一回事,还必须从oracle的 备份和恢复机制说起.
而要理解oracle的备份和恢复机制,要把oracle体系架构中,
进程结构需要了解:
ckpt 检查点进程,
lgwr 日志书写进程。
dbwr 数据读写进程。
arch0 归档进程。
ctwr 更改跟踪进程。
内存结构:
data buff pool 数据缓冲池
redo log buffer 在线事务日志缓冲池
large pool 大池
数据库文件:
在线重做日志文件。online Redo Log files
归档文件。 Archive log file
那我们现在来描述一下做DML操作的时候数据库是怎么工作的:
用户打开客户端,连接到数据库服务器。连接数据库服务器的时候,需要提供
用户名,密码,目标IP,端口,服务名或实例名。
服务器端的监听程序接受到客户端的连接请求以后,根据客户端提交的相关信息,
找到服务器中相关服务,用fork,使客户进程和数据库服务器进程进行通信。
(数据库服务器进程类似银行的大堂经理在你沟通后,她会领你到一个银行营业员那里处理具体的事务。)
数据库服务器进程 PGA会存放 用户会话数据,游标状态,堆栈空间
(数据库服务器进程类似银行的营业员,你提交的任何业务操作,都会由营业员来帮你完成)
用户提交的查询语句给服务器进程以后,数据库会做一下的操作:
1。判断是否有权限访问相应的表 share pool 的 Data Dictionary Cache 里面有
user 的 privileges
2。判断相应的表和字段是否存在 share pool 的 data Dictionary cache
3。判断sql语句是否以前执行过 share pool 的 libaray cache 中的 shared sql
area
这个判断的原理就是把sql语句 通过算法生成一个hash值,然后在一个内
存列表中搜索这个hash,找到了,就取出相应的执行计划,然后执行。这就是软解析。
如果hash 值 在内存列表中没有,那么要新生成执行计划。硬解析。
如果pga的uga 里面 保留了原来执行的sql语句,不解析,直接执行。
所以说,用户在提交select 语句到数据库中查询数据的时候,在真正查数据之前,有
很多的工作要做。速度最快的是不解析,其次是软解析,最后是硬解析。
4。经过以上的判断以后,数据库服务器根据执行计划,到data buff cache 里面找
相关的数据, 如果找不到,就把数据文件中的相应的表,索引等,调入内存。查询结果,返回给用户。
以上是用户提交一条select 语句时,数据库的一些操作。我写出来还是比较粗,不够精细,如果不理解,就想想 你去银行怎么查帐的,有很多的相似之处。再一次证明了,oracle是人写出来的,不是外星人搞出来的。
以上是用户提交的select语句。当用户提交的是 DML 语句 update,delete,insert ,merge.的时候,都会被当做事务来处理。事务遵循ACID原则,
原子:事务中的所有操作要么全部完成,要么全部不完成。
一致:内存外存一致,多用户更新同一张表,A用户修改了数据,但没有提交,B用户看到的还是原来的数据,这就是传说中的一致性读。
隔离:锁,A用户更新一行记录,B用户更新另外一行,相互不干扰,被隔离,就是用锁来实现的
永久:用户提交事务的时候,所有的操作,会先写入磁盘。 被更改在内存中的脏数据库,会被dbwr 写入磁盘。但具体什么时候写入磁盘,会有很多的参考
因素。随时写磁盘,数据库的性能消耗在IO上,性能会降低。长时间不写磁盘,内存中的脏数据越积越多。数据的安全性就无法保障,如果这个时候
系统宕机,丢数据,就很严重了。所以脏数据写入磁盘的频率,是一个哲学的辩证,是中庸,走两头的极端,缺陷就会暴露的非常明显。
有了以上的体系架构,那么备份和还原恢复,才具有实现的可能性。
备份backup :控制文件,spfile,数据文件,表空间,数据库,都是可以备份的对象。
要注意各备份的匹配问题。控制文件和数据库要匹配起来,备份才有意义。
所以要设置自动备份控制文件。
有的备份脚本里面,分两条命令,先备份数据库,再备份控制文件,其实这两个备份里面的scn已经不统一了,会有点小麻烦。
全量备份,增量备份的选择也很重要,存储太多的备份,意义也不大。
保留策略分为时间窗口和冗余度。
还原restore:把数据库还原到以前的某一个时间点。
选择适当的控制文件和备份集,对还原的效果和后面的恢复有积极的作用。
恢复:recovery
从还出来的数据库的时间点开始,应用归档日志,或 在线事务日志,到某一 个指定的时间点,或until cancel。 归档,在线事务日志里面的内容是一样的,都是 记录了数据库的变更操作。从还原的那个时间点开始,把前面作过的事情,再重新做一遍。 至于做到什么时间停止,可以设定。
被备份的数据库 叫 目标库。管理目标库的元数据,备份信息的数据库,叫恢复目录库。
恢复目录库类似于GC的OMR。
在目录数据库上需要做什么操作:
建立表空间 :
create tablespace rmancatalog datafile 'c:/rman/rmancatalog.dbf' size 15.5M
恢复目录库的表空间最小15M,如果要管理多个目标库,那么空间还需要更大。
建立用户:
create user rman identified by rman;
赋予角色和权限:
连接数据库和目录恢复拥有者
grant connect ,recovery_datalog_owner to rman
在rmancatalog表空间上 有无限的使用限额
alter user rman quota unlimited on rmancatalog
改变用户的缺省表空间
alter user rman default tablespace rmancatalog;
连接目标数据和连接恢复目录数据库
rman catalog rman/rman @ rman
建立恢复目录
create catalog tablespace rmancatalog
也可以不指定表空间,使用用户缺省的表空间。
连接目标库,目录库
rman target / catalog rman/rman @ rman
注册目标数据库 至 恢复目录库
register database;
rman 的一些常用命令 :
配置命令:
show all
configure
备份目录管理:
report need backup;
report schema
备份操作
backup database
backup tablespace
backup schema
还原操作
restore database
restore tablespace
restore schema
脚本操作
分配通道