oracle
NinGoo's blog

OOW2009美国行:大会第三天

美国太平洋时间10月13日,中国北京时间10月14日,OOW2009时间第三日,雨。壬辰水箕破日,日值月破,大事不宜。

今天不再受东西部时差困扰,一觉睡到早上八点。拉开窗帘一看,旧金山笼罩在阴云细雨中,于是早上八点半开始的keynote就没有去听。熬到十点多,雨还是不停,只好冒雨跑到旁边不远的Moscone west的展厅,嗯,先到那里解决早餐的问题。昨天在展厅走马观花,没有细看,原来GoldenGate也有展台。
oow2009_18

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

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

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

接下来走了几个会场都没找到想听的,外面雨越来越大,就想打道回酒店休息。顺道去会场里的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.