用Solaris 10中的SMF(Service Management Facility)管理Oracle数据库的运行

Oracle数据库在*nix平台下一般认为要比NT下稳定的多,因此基本上所有的生产环境都倾向于是用*nix平台,Solaris作为纯正血统的开放源代码Unix实现,比Linux更是多了很多特性,例如Zones,DTrace,ZFS和本文要使用的SMF,都是相当不错的特性。

SMF(Service Management Facility)是作为传统的init.d的替代技术而开发的,但是SMF不仅仅代替init.d负责Solaris上的各项服务程序(daemon)的自动启动和关闭,最重要的新功能是能够自动监控并修复(实际上就是尝试按照服务的依存次序重新启动)发生问题的各项系统服务。Oracle数据库当然也属于这样一种系统服务,实际上运行Oracle数据库很可能是企业最重要的购买一台Unix服务器的理由,因此,将Oracle数据库纳入SMF系统服务管理架构中就很有意义了,因为这样不仅可以实现传统上的Oracle启动和关闭脚本的功能,而且可以在Oracle异常中止运行时,立即启动Oracle,大大提高Oracle数据库的可用性。

Padraig博客上第一次(据我所知^_^)发布了如何将Oracle数据库纳入SMF的配置过程,很遗憾blogspot.com站点国内被和谐了,所以这里还是复述一下Oracle在SMF下的配置过程,也方便一些更喜欢读中文的读者:

1. 下载Joost Mudlers提供的ora-smf-1.5.pkg安装包,并安装(最重要的一步,感谢Joost Mudler,奇怪的是网上找不到他的blog和文档):
# cd /var/svc/manifest/application
# mkdir database
# cd ~
# pkgadd –d orasmf-
1.5.pkg
这一步骤不能在Solaris提供的虚拟服务器中做,必须安装在物理服务器,或者说必须安装在global zone下,因为只有global zone才能允许写/lib/svc/目录下的文件,虚拟服务器(container)对于这个目录是只读的,在global zone下安装完orasmf-1.5后,所有的虚拟服务器都已经有了通过SMF管理oracle数据库的能力,但是真正管理Oracle还需要配置几个*.xml文件和安装Oracle软件,配置xml和安装Oracle必须在你打算运行的服务器上进行(如果你已经使用Zone功能的话,就是在虚拟服务器上)。

2. 配置相关xml文件:
cvpdbviq02 oracle mesodst $ cd /var/svc/manifest/application/database
cvpdbviq02 oracle mesodst $ ls -l
total 
34
-r--r--r--   
1 root     root        2123 Sep 29 15:39 oracle-database-instance.xml
-r--r--r--   
1 root     bin         5722 Dec 28  2005 oracle-database-service.xml
-r--r--r--   
1 root     root        2088 Sep 29 15:39 oracle-listener-instance.xml
-r--r--r--   
1 root     bin         4295 Dec 28  2005 oracle-listener-service.xml
cvpdbviq02 oracle mesodst $ 
只需要配置*-instance.xml两个文件即可,例如像这样:
我的oracle-database-instance.xml实例
上边的配置文件是oracle数据库实例,下面这个则是oracle侦听服务的:
我的oracle-listener-instance.xml实例
在上面的配置文件中,必须更改的项目有
  • ORACLE_HOME
  • ORACLE_SID
  • User(一般就是oracle)
  • Group(一般就是dba组)
  • Project(项目是Solaris的另一种资源管理方式,如果没有创建oracle的project,要通过运行projadd -U oracle -G dba oracle添加)
  • Working Directory (Oracle的工作目录,即oarcle用户的工作目录)
  • Instance name (实例名要和ORACLE_SID名称相同或者相应的LISTENER侦听器名称相同)
3. 将修改后的*.xml重新倒入到SMF控制中,每次修改xml后都要重复这一步骤:
# svccfg import /var/svc/manifest/application/database/oracle-database-instance.xml
# svccfg import /var/svc/manifest/application/database/oracle-listener-instance.xml
4. 通过svcadm启用oracle数据库服务和Oracle侦听服务:
# svcadm enable svc:/application/oracle/database:mesodst
# svcadm enable svc:/application/oracle/listener:MESODST_LISTENER
命令启用了实例名称为mesdost的oracle数据库和侦听器名称为MESODST_LISTENER的服务了。这些服务的日志文件可以到/var/svc/log目录中找到,例如:
cvpdbviq02 oracle mesodst $ pwd
/var/svc/log
cvpdbviq02 oracle mesodst $ ls -l *oracle*
-rw-r--r--   
1 root     root        1390 Sep 29 16:11 application-oracle-database:mesodst.log
-rw-r--r--   
1 root     root        2647 Sep 29 16:10 application-oracle-listener:MESODST_LISTENER.log
cvpdbviq02 oracle mesodst $ cat application-oracle-database:mesodst.log
[ Sep 29 16:08:14 Leaving maintenance because disable requested. ]
[ Sep 29 16:08:14 Disabled. ]
[ Sep 29 16:08:25 Rereading configuration. ]
[ Sep 29 16:08:43 Enabled. ]
[ Sep 29 16:08:43 Executing start method ("/lib/svc/method/ora-smf start database mesodst") ]
Connected to an idle instance.
ORACLE instance started.
Total System Global Area  
841974576 bytes
Fixed Size                   
729904 bytes
Variable Size             
419430400 bytes
Database Buffers          
419430400 bytes
Redo Buffers                
2383872 bytes
Database mounted.
Database opened.
database mesodst is OPEN.
[ Sep 29 16:08:52 Method "start" exited with status 0 ]
[ Sep 29 16:09:48 Stopping because service disabled. ]
[ Sep 29 16:09:49 Executing stop method ("/lib/svc/method/ora-smf stop database mesodst") ]
Database closed.
Database dismounted.
ORACLE instance shut down.
[ Sep 29 16:09:57 Method "stop" exited with status 0 ]
[ Sep 29 16:10:40 Enabled. ]
[ Sep 29 16:10:46 Rereading configuration. ]
[ Sep 29 16:10:55 Executing start method ("/lib/svc/method/ora-smf start database mesodst") ]
Connected to an idle instance.
ORACLE instance started.
Total System Global Area  
841974576 bytes
Fixed Size                   
729904 bytes
Variable Size             
419430400 bytes
Database Buffers          
419430400 bytes
Redo Buffers                
2383872 bytes
Database mounted.
Database opened.
database mesodst is OPEN.
[ Sep 29 16:11:07 Method "start" exited with status 0 ]
cvpdbviq02 oracle mesodst $ 
从日志文件可见Oracle数据库已经成功运行了,还可以看到,启动Oracle数据库的是/lib/svc/method/ora-smf start database mesodst命令,如果从log中看到启动错误,可以先运行这条命令确认oracle可以顺利启动,再排查其他问题。
posted @ 2007-09-30 13:50  丁丁  阅读(1758)  评论(1)    收藏  举报