Rac环境:
- RAC版本异同:[10R2,11R1(和10类似)],11R2,12c:
- 目录:
- 10.2的ASM需要单独的目录(oracle home):rdbms home,asm home, crs home
- 11.2:rdbms,grid(crs+asm)
- IP:
- 10.2有私有IP(private IP)公有IP(public IP)和虚拟IP(VIP);Private IP是用来做内部连接;Public IP和VIP是外部连接,并且在同一个网段。
- 11.2在外部连接(公有IP和虚拟IP)之上加入SCAN IP,Scan Ip有3个。
- 磁盘:
- 11.2之前,OCR和voting disks在裸设备上,11.2之后放在asm,并且oracle不在支持裸设备。
- 具体配置举例:
- 3节点Rac,OS:sun solaris,version 11.2.3, ASM
- 常用的cmd:crsctl,srvctl,crs_stat, crsctl status resources
- 目录:
- 服务service:
- 使用service达到load balance的目的:每个节点跑特定的应用。
- ASM:
- 优缺点:
- 易于管理:加减磁盘,易于条带化和镜像。
- 文件名非常奇怪,非常难以复制,难以用ftp传输文件,有时候非常危险,有时候SA不懂ASM,会导致磁盘损坏。
- HA不能保护数据。
- RAC的性能问题:
- 主要的问题是Cache Fusion(RAC为了保持数据一致性的一种内存机制。),Cache Fusion增加了很多额外的开销,所以两个节点的性能不一定比一个好,所以说RAC并不提高性能。实际操作时候,用service对rac的每个节点要分配功能,比如一个节点专门负责DML,一个节点负责reporting。
- 关于补丁:In Rolling Patch mode:每个实例逐一关闭,patch crs和oracle rdbms home,使用local parameter in opatch。
- Load balance:
- 在客户端,SCAN作为主机名被使用在tnsnames.ora,这样oracle可以动态分配节点,scan相当于封装了真实的IP。
- 在服务器端,当scan listener处理从客户端连进来的call时,会将它放到least load(从cpu和连入进程的使用情况)的node上。
- 所以remote listener要恰当设置。一般rac的每个节点,我们有两种listener,本地和scan。从listener.ora可以看到。
- 关于init parameters:
- 在init.ora文件里,我们有两种参数文件:local 和global,global参数前带*号。
- Cluster_database 必须是TRUE。
- 其它:control_files,cluster_database_instances,Instance parameters(starting with instance name),thread,instance_number,undo_tablespace,
- 有些参数在每个节点上可以不一样,也可以都一样。如内存参数(SGA,PGA,memory target).
- Rac*享与非共享:
- 非共享:Binaries,alert log,redo,archive logs,undo tablespace
- 共享:control files, spfile, temporary files
- 案例:
- 性能案例1:在OEM我们观察到:Global Cache buffer busy,GC current block 2-way/3-way and cache buffer chains(hot blocks)
- 我们在数据库上有很多增删改的操作,导致buffer cache同步有问题。如果dml操作同时在不同节点运行,会马上要求global cache同步,导致很多系统等待。
- 解决:节点功能切分。一个节点用于增删改,另一个用于报告。
- 性能案例2:在OEM性能表上(log file sync),每小时有7分钟会出现commit high。
- 首先让应用组查代码,查看commit频率。
- 数据库,有任何bug相关?
- 存储组,看是否有任何问题,我们把redo logs放在快盘上,仍然解决不了问题。
- 使用BLUESTRIPE软件(可以在第二级别检测磁盘IO)。发现在那段时间,有一个root进程消耗大量IO,并且和数据库竞争。我们在crontab里面重新安排这个进程运行的时间段,问题解决。
- 回复案例:SA扫描asm磁盘,导致数据库崩溃。
- HA不能保证存储安全,在alert log里面有很多ora7445和ora600错误.块坏错误,数据库不能重启,或者数据库起来了,但是某些数据不可以获得。
- 我们需要incomplete RMAN recovery.(有个cutoff time,在那样以后的数据会丢失)
- recover script need two steps(restore datafiles and recover with incremental backups or archives)
- 关于ASM:在restore以后,如果recover失败,重新跑脚本的时候,在 linux文件系统下oracle不会restore数据文件,只会restore incremental backup pieces/archive logs.在ASM里面,oracle会重新restore 数据文件,会花更多的时间。所以需要在脚本里跳过restore datafile这一部分。直接recover。
- 关于备份恢复:增量备份真的很重要。