OOW2009美国行:大会第三天
美国太平洋时间10月13日,中国北京时间10月14日,OOW2009时间第三日,雨。壬辰水箕破日,日值月破,大事不宜。
今天不再受东西部时差困扰,一觉睡到早上八点。拉开窗帘一看,旧金山笼罩在阴云细雨中,于是早上八点半开始的keynote就没有去听。熬到十点多,雨还是不停,只好冒雨跑到旁边不远的Moscone west的展厅,嗯,先到那里解决早餐的问题。昨天在展厅走马观花,没有细看,原来GoldenGate也有展台。

在昨天的session中,了解到Sun Oracle Database Machine备份数据到磁带可以达到7.8TB/小时,刚好今天上午有个session讲关于database machine备份和恢复的,就去听了听。原来昨天的数据就是今天讲的一个测试环境测试出来的。

听完还特意跑到keynote会场旁边放的五台Database Machine旁边给它们拍了一张特写。

今天中午比较好运,找到一份有鸡肉的快餐,做为一个无肉不欢的DBA,这是一件值得庆幸的事情。昨天在Salesforce.com展台领了件T-shirt,结果收到邮件说今天下午一点他们有个session,前500位参加的送一台Flip HD camera。吃完饭看还差三十分钟就想去排队,结果队伍已经排到了外面大街上,雨还在稀里哗啦的下,我又没带雨伞,只好作罢。回头随便找了个session,《managing statistcs for optimal query performance》,实际上在这样的大会上听这种比较深入的技术课程是比较难听进去的。这个session的讲师是一位女士,非常风趣的利用扑克牌将课程讲得更加浅显易懂,这个ppt回去以后应当去找找,用来给新人做培训非常不错。

接下来走了几个会场都没找到想听的,外面雨越来越大,就想打道回酒店休息。顺道去会场里的Oracle Book Store里转了一下,买了件印有Oracle Logo的抓绒外套,加税82刀多,还不打折,NND,肉痛。
使用Oracle正则表达式监控应用到数据库的连接情况
Oracle从10g开始支持正则表达式,在一些特殊的应用场景下,可以发挥超乎想象的便利。
通过v$session,可以监控应用服务器到数据库的连接的情况。假设应用服务器的名字都是有规律的,典型的如字母+数字+.+后缀的格式,例如app123.idc1表示位于idc1机房的app应用的123机器。当然,机器名的规则要根据具体的场景来分析得出,本文以上述规则来演示如何利用正则表达式来得到每组不同的应用服务器到数据库的连接情况。
对于数据库来说,可能有多组不同的应用服务器需要连接。典型的监控指标可以包括:每组应用服务器的机器数,每组应用服务器当前总的连接数,每组应用服务器中单台最大的连接数,每组应用服务器中单台最少的连接数。通过如下的sql语句,使用正则表达式,可以轻松获取上述四个指标:
select b.machine,
count(*) machine_nums,
b.cnt total_sessions,
max(a.cnt) max_sessions,
min(a.cnt) min_sessions
from
(select machine,count(*) cnt
from v$session
group by machine) a,
(select regexp_replace(regexp_replace(machine,'[0-9]','#'),'#+','#') machine,
count(*) cnt
from v$session
group by regexp_replace(regexp_replace(machine,'[0-9]','#'),'#+','#')
) b
where regexp_replace(regexp_replace(a.machine,'[0-9]','#'),'#+','#')=b.machine
group by b.machine,b.cnt
MACHINE MACHINE_NUMS TOTAL_SESSIONS MAX_SESSIONS MIN_SESSIONS --------------- ----------- -------------- ------------ ------------ db#.idc# 1 22 22 22 test#.idc# 2 10 5 5 appa#.idc# 30 166 10 5 appb#.idc# 17 18 2 1
上面的sql中,使用了正则表达式函数REGEXP_REPLACE将数字替换成#,以方便对同组应用的机器进行分组统计。只要根据相应的规则进行修改,就可以适用到不同的场景。然后利用该sql固定时间如五分钟来采集数据,就可以得到趋势展示,绘成图形,直观的分析应用服务器到数据库的连接情况。
搭建Oracle11gR2 DataGuard
安装好两台Oracle11gR2后,简单的建了个测试库,然后搭建了一套物理备库。整个过程非常简单,和以前的版本也没多大区别。不过因为11g密码以及密码文件名大小写的问题折腾了一下。
按照以前9i和10g的文档,使用如下语句创建了passwordfile:
orapwd file=$ORACLE_HOME/dbs/orapwTEST password=pass entries=30
结果发现主库的归档一直无法传递到备库,报:
ORA-16191: Primary log shipping client not logged on standby
根据以前的经验,重新创建了住备库的password file,根据metalink,修改了sec_case_sensitive_logon参数为false,都不行。最后才发现,必须将passwordfile中的sid改成小写才行。
orapwd file=$ORACLE_HOME/dbs/orapwtest password=pass entries=30
Oracle11g,最吸引人的特性是Active Data Guard,也就是物理备库在open read only的同时,可以apply log。启用该特性非常简单,首先要确保compatible=11.0.0.0以上,然后在open read only的状态下执行recover managed standby database disconnect即可。开启该特性最好能同时开启实时日志应用,以减少主备库之间数据的延迟,所以在备库添加好standby logfile:
recover managed standby database cancel;
alter database open;
alter database add standby logfile group 10 ('/u01/oracle/oradata/test/stbredo01.dbf') size 100m reuse;
alter database add standby logfile group 11 ('/u01/oracle/oradata/test/stbredo02.dbf') size 100m reuse;
alter database add standby logfile group 12 ('/u01/oracle/oradata/test/stbredo03.dbf') size 100m reuse;
alter database add standby logfile group 13 ('/u01/oracle/oradata/test/stbredo04.dbf') size 100m reuse;
然后将备库置于实时日志应用模式:
SQL> select open_mode from v$database; OPEN_MODE -------------------- READ ONLY SQL> alter database recover managed standby database using current logfile disconnect; Database altered. SQL> select open_mode from v$database; OPEN_MODE -------------------- READ ONLY WITH APPLY
在主库创建测试表并插入数据:
SQL> create table ningoo.test_table(i int); Table created. SQL> insert into ningoo.test_table values(1); 1 row created. SQL> commit; Commit complete. SQL> alter system archive log current; System altered.
在备库查询:
SQL> select * from ningoo.test_table;
I
----------
1
Oracle11gR2初体验
从Oracle11gR2 for linux正式提供下载,转眼一个星期过去了,粗略的翻了一下New feature,一直没有找到时间来安装。
今天在两台x86_64的Redhat AS 4U5上安装,建库,一切顺利。Oracle11gR2的安装过程已经基本傻瓜化到只需要next了。以前安装很重要的一步,就是要记得修改系统的一些内核参数,11gR2也把这一步直接纳入到安装界面中了,如果检查到系统还是使用的默认参数,会提示修改,并且给出了修改的shell脚本,只要root去跑一下就ok,当然,对于不同的产品环境,还是按照相应的规范去手工修改比较靠谱点。Redhat AS 4U5的os版本有点低,所以会检测出glibc/libaio等几个包的版本不符,因为是试验环境,我直接选择了忽略,安装还是很顺利的进行下去了,没有发现问题。
还没来得及去体验什么,中午吃了个饭回来,发现之前10.2.0.4上曾经碰到过的多个监听进程的问题,又出现了,faint:
test:/home/oracle>$ps -ef | grep tns oracle 5180 2043 0 14:56 pts/4 00:00:00 grep tns oracle 29488 1 0 11:27 ? 00:00:00 /u01/oracle/product/11.2/bin/tnslsnr LISTENER -inherit oracle 29489 29488 0 11:27 ? 00:00:00 /u01/oracle/product/11.2/bin/tnslsnr LISTENER -inherit oracle 29490 29489 0 11:27 ? 00:00:00 /u01/oracle/product/11.2/bin/tnslsnr LISTENER -inherit oracle 29491 29489 0 11:27 ? 00:00:00 /u01/oracle/product/11.2/bin/tnslsnr LISTENER -inherit
SQL> select * from v$version; Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production PL/SQL Release 11.2.0.1.0 - Production CORE 11.2.0.1.0 Production TNS for Linux: Version 11.2.0.1.0 - Production NLSRTL Version 11.2.0.1.0 - Production SQL> select * from v$option order by parameter; Active Data Guard TRUE Advanced Compression TRUE Advanced replication TRUE Application Role TRUE Automatic Storage Management FALSE Backup Encryption TRUE Basic Compression TRUE Bit-mapped indexes TRUE Block Change Tracking TRUE Block Media Recovery TRUE Change Data Capture TRUE Coalesce Index TRUE Connection multiplexing TRUE Connection pooling TRUE DICOM TRUE Data Mining TRUE Database queuing TRUE Database resource manager TRUE Deferred Segment Creation TRUE Duplexed backups TRUE Enterprise User Security TRUE Export transportable tablespaces TRUE Fast-Start Fault Recovery TRUE File Mapping TRUE Fine-grained Auditing TRUE Fine-grained access control TRUE Flashback Data Archive TRUE Flashback Database TRUE Flashback Table TRUE Incremental backup and recovery TRUE Instead-of triggers TRUE Java TRUE Join index TRUE Managed Standby TRUE Materialized view rewrite TRUE Materialized view warehouse refresh TRUE OLAP TRUE OLAP Window Functions TRUE Objects TRUE Online Index Build TRUE Online Redefinition TRUE Oracle Data Guard TRUE Oracle Database Vault FALSE Oracle Label Security FALSE Parallel backup and recovery TRUE Parallel execution TRUE Parallel load TRUE Partitioning TRUE Plan Stability TRUE Point-in-time tablespace recovery TRUE Proxy authentication/authorization TRUE Real Application Clusters FALSE Real Application Testing TRUE Result Cache TRUE SQL Plan Management TRUE Sample Scan TRUE SecureFiles Encryption TRUE Server Flash Cache TRUE Spatial TRUE Streams Capture TRUE Transparent Application Failover TRUE Transparent Data Encryption TRUE Trial Recovery TRUE Unused Block Compression TRUE XStream TRUE 65 rows selected.
