什么是OPS OPS(Oracle Parallel Server)可以让位于不同系统的多个实例同时访问同一个数据库并行服务器可以有效地提高系统的可用性和对多系统的访问性能但是如果你的数据没有做很好的分割性能可能还会下降 安装OPS时多个实例mount同一数据库文件实例间的通讯由分布式锁管理器(DLM)来管理需要注意的是分布式锁管理器与你所使用的硬件和操作系统有着密切的关系为了确定多个企图同时修改同一数据的实例Oracle使用了十个后台进程LCKLCK来锁定某一实例所使用的资源 OPS主要用于UNIX/LINUX集群环境中 OPS的优点 )高可用性 )加快事务响应时间 可用于决策支持系统 )增大交易连接数 可用于联机事务处理系统 所有的应用都是适合OPS吗? 可以根据功能或数据进行分割的应用最适合OPS那些有热数据(经常被多实例同时访问的数据)的应用并不适合使用OPS OPS需要特殊的硬件吗? OPS要求服务器之间互连并共享磁盘子系统所有可以做成集群的系统都可以常用的有UNIX/LINUX和NT等 如何设置OPS? )关闭数据库 )启用OPS选项在UNIX中通过重新连接Oracle软件的方式来完成 )使Oracle软件在所有节点上都有效可以通过复制软件到其他节点或共享磁盘的方式来完成 )每个实例要有自己的Redo log file所以要增加必要的log文件 ALTER DATABASE ADD LOGFILE THREAD GROUP G (RAW_FILE) SIZE k GROUP G (RAW_FILE) SIZE k GROUP G (RAW_FILE) SIZE k; ALTER DATABASE ENABLE PUBLIC THREAD ; )每个实例要有自己的回滚段所以要增加必要的回滚段 CREATE ROLLBACK SEGMENT RB TABLESPACE RBS; )编辑初始化参数文件initSIDora文件添加如下几项 PARALLEL_SERVER = TRUE INSTANCE_NUMBER = THREAD = ROLLBACK_SEGMENTS = (r r r r) )创建OPS所需的数据字典即运行CATPARRSQL )在所有的节点上启动实例 如何确定一个数据库是运行在并行状态? show parameter parallel_server 如何跟蹤活动的实例? SELECT * FROM SYSV_$ACTIVE_INSTANCES; SELECT * FROM SYSV_$THREAD; 如何确定每个实例使用了多少个PCM锁? select count(*) Number of hashed PCM locks from v$lock_element where bitand(flags ) != / select count(*) Number of fine grain PCM locks from v$lock_element where bitand(flags ) = / 如何查看每个数据文件分配了多少个PCM锁以及ping率? col file_name format a col tablespace format a col blocking format col nlocks format col start_lk format select lfile_id || || lfile_name file_name lts_name TABLESPACE start_lk nlocks blocking frequency PING COUNT from sysfile_ping p sysfile_lock l where lfile_id = pfile_id order by lfile_id / 什么是pinging? Pinging是进程用于协调多实例对同一数据块的读写操作OPS性能优化的一个挑战就是要最小化pinging 如何监控PCM锁的活动情况? 查看当前实例活动PCM锁的总数select * from sysv$lock_activity; 查看每个数据库对象的PCM锁活动状况 col table format a select file# kind|| ||username||||name TABLE sum(xnc) pings from sysv$false_ping p sysdba_users u where uuser_id = powner# group by file# kind|| ||username||||name xnc order by xnc desc / 如何设置一个对所有OPS实例通用的SQL*Net连接串? )首先要求所有节点上的SID相同如果不相同可以按如下操作进行更改 关闭数据库的所有实例 将ORACLE_SID环境变量设成一致 复制原来的初始化文件initOLDSIDora为initCOMMONora 重起所有实例 )编辑本地TNSNAMESora如下例 PHOENIX = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = )) (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = )) ) (CONNECT_DATA = (SERVICE_NAME = ora) ) ) |