1、checkpoint理解
数据库DML操作提交以后,dbwr进程并不会立即将脏数据回写到磁盘,而是等待SCN号到来,才调用dbwr进程将数据写回到磁盘
checkpoint发生过程:
2、chenckpoint发生条件
a.alter system switch logfile
b.alter system checkpoint
c.对数据文件进行热备份 alter tablespace tablespace_name begin backup
d.shutdown immediate
3、checkpoint发生过程
a.checkpoint进程开始一个checkpoint事件,并记录下checkpoint RBA,这个通常是当前的RBA
b.checkpoint进程通知DBWn进程将所有checkpoint RBA之前的buffer cache里面的脏块写入磁盘
c.checkpoint进程将checkpoint信息(SCN)写入/更新数据文件和控制文件中
4、checkpoint相关参数及视图
log_checkpoint_interval:设定两次checkpoint之间重做日志块(重做日志块和系统数据块是一样的)数,当重做日志块数量达到设定值的时候将触发checkpoint
log_checkpoint_timeout:设定两次checkpoint之间的间隔时间,当超时值达到时增量checkpoint将被触发。Oracle建议不用这个参数来控制,因为事务(transaction)大小不是按时间等量分布的。将此值设置成0时将禁用此项设置。
fast_start_io_target:因为log_checkpoint_interval主要看的时候重做日志块的数量,并不能反应buffer cache中脏数据块的修改,因此Oracle又引入了这个参数来实现当脏数据块达到一定数量的时候触发checkpoint,不过此参数实际上控制的是恢复时所需IO的数量
fast_start_mttr_target:fast_start_mttr_target可以设定的最大值是3600,即一个小时;设置此参数的时候要综合考虑系统的IO,容量以及CPU等信息;将此参数设置成0时将禁用 fast-start checkpointing;fast_start_io_target or log_checkpoint_interval被指定,他们会自动覆盖由fast_start_mttr_target参数计算出来的值
log_checkpoint_to_alert:设置以后系统的checkpoint将会被记录alert_$SID.log文件中
5、cache fusion理解
Cache Fusion就是通过互联网络在集群内各节点的SGA之间进行块传递,以避免首先将块推送到磁盘,然后再重新读入其他实例的缓存中这样一种低效的实现方式(OPS的实现)。当一个块被读入RAC环境中某个实例的缓存时,该块会被赋予一个锁资源(与行级锁不同),以确保其他实例知道该块正在被使用。之后,如果另一个实例请求该块的一个副本,而该块已经处于前一个实例的缓存内,那么该块会通过互联网络直接被传递到另一个实例的SGA。如果内存中的块已经被改变,但改变尚未提交,那么将会传递一个CR副本。这就意味着只要可能,数据块无需写回磁盘即可在各实例的缓存之间移动,从而避免了同步多实例的缓存所花费的额外I/O。很明显,不同的实例缓存的数据可以是不同的,也就是在一个实例要访问特定块之前,而它又从未访问过这个块,那么它要么从其他实例cache fusion过来,或者从磁盘中读入。
6、GCS、GES、GRD
GCS(global cache server):记录资源的模式、资源的角色、block在实例中的状态、在各个活动的节点发布资源的master、在必要的时候重新发布master
GES(global enqueue server):主要负责维护字典缓存和库缓存内的一致性
GRD(global resource directory):记录几点间资源请求的变化的记录
7、OCR(oracle cluster register)
Oracle Clusterware把整个集群的配置信息放在共享存储上,这些信息包括了集群节点的列表、集群数据库实例到节点的映射以及CRS应用程序资源信息。存放的位置就在OCR Disk上. 在整个集群中,只有一个节点能对OCR Disk 进行读写操作,这个节点叫作Master Node,所有节点都会在内存中保留一份OCR的拷贝,同时有一个OCR Process 从这个内存中读取内容。 OCR 内容发生改变时,由Master Node的OCR Process负责同步到其他节点的OCR Process。
因为OCR的内容如此重要,所以Oracle 每4个小时对其做一次备份,并且保留最后的3个备份,以及前一天,前一周的最后一个备份。 这个备份由Master Node CRSD进程完成,备份的默认位置是$CRS_HOME/crs/cdata/<cluster_name>目录下,可以通过ocrconfig -backuploc <directory_name> 命令修改到新的目录。每次备份后,备份文件名自动更改,以反应备份时间顺序,最近一次的备份叫作backup00.ocr。这些备份文件除了保存在本地,DBA还应该在其他存储设备上保留一份,以防止意外的存储故障。
一般都还原的OCR要验证
ocrcheck
cluvfy comp ocr -n all -verbose
8、负载均衡
GOBO4 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))
(LOAD_BALANCE = yes) --实现负载均衡
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = GOBO4)
)
)
9、服务目标 --对应CLB_GOAL
srvctl modify service -s service_name -d database_name -j short/long
3、DTP(distributed transaction processing)分布式事务 --对应上图 DTP
srvctl modify service -s service_name -d database_name -x true
4、TAF透明程序故障转移 --对应GOAL
srvctl modify service -s service_name -d database_name -P preconnect/none/base
none:没有任何TAF策略
base:将发生故障的实例上运行的sql转移到新实例上,并重新建立连接
preconnect:与base相同,只是preconnect可提前预知故障,提前开始转移,缩短故障转移时间
5、查看及用包修改上面参数
srvctl config service -s service_name -d database_name
dbms_serive.modify_service() --不建议使用,已经不会更新OCR注册表信息
6、创建服务
srvctl add service -s service_name -d database_name -r prod1,prod2,prod3 -a prod4,prod5 -y automatic -p base
7、启动服务
srvctl start service -d database_name -s service_name
8、服务门限
dbms_server_alert
9、dbms_application_info
set_module
set_client_info
10、启动和停止CRS cluster ready service
crsctl start crs
crsclt stop crs
crsctl enable crs
crsctl disable crs
crsctl check crs
crsctl start cluster -all --启动所有节点的CRS
crsctl stop cluster -all --停止所有节点的CRS
crsctl enable cluster -all --启用所有节点的CRS
crsctl disable cluster -all --禁用所有节点的CRS
crsctl check cluster --检查整个集群的状态