天道酬勤

RDBMS and My Life

Archive for November, 2009

CRS、CSS、clusterware的概念

leave a comment

使用Oracle Cluster也有几年了,一直都没有完全弄明白CRS、CSS、clusterware的概念。昨天在一台P550上安装完,还一口气升级到10.2.0.4.0,后来dbca创建库选择ASM存储的时候问题就来了,提示了下面这一段:

css

根据提示,我执行了这个脚本后又得到了下面这一段:

Successfully accumulated necessary OCR keys.

Creating OCR keys for user ‘root’, privgrp ‘system’..

Operation successful.

Configuration for local CSS has been initialized

Adding to inittab

Startup will be queued to init within 30 seconds.

Checking the status of new Oracle init process…

Expecting the CRS daemons to be up within 600 seconds.

Giving up: Oracle CSS stack appears NOT to be running.

Oracle CSS service would not start as installed

Automatic Storage Management(ASM) cannot be used until Oracle CSS service is started

正在此时,rickyzhu在MSN上线了,请教。当时可能没有表达清楚,错误的让他理解成了我要做SIHA,而实际上我仅仅是想:在一台AIX P550上安装10g,选用ASM存储

太多的困惑让我一定要搞定它们,以下内容参考互联网前辈文章之后的总结:

1. Clusterware与CRS再与CSS的关系

从10.1的RAC开始,Oracle 开始捆绑其自身的集群软件,不再需要像HP的Service Guard、IBM的HACMP等这些第三方的集群软件,被称为 Oracle Cluster Ready Services,简称CRS

从10gR2到现在的11g,Oracle将其更名为Clusterware(集群件),通常意义上我们认为CRS = Clusterware = Oracle Cluster Ready Services = Oracle Cluster Software。确切的说CRS是Oracle cluster software中的一个组件,Oracle Cluster software还有其它组件,如Cluster Synchronization Services (CSS)、Event Management (EVM)。

CSS 可管理 Oracle 群集成员并将其自身的组成员服务提供给 RAC 实例。当RAC 群集上安装了 CSS 时,CSS 就可以利用RAC 提供的组成员服务。CRS 根据配置管理 Oracle 的群集资源,包括资源的启动、停止、监视和故障切换。

EVM 发布由 CRS 生成的事件,并且当特定事件发生时,可运行脚本。

Oracle 10g RAC 将下列两个子网用于群集通信目的:

•    CSS 心跳线网络 (CSS-HB):运行在不同群集节点上的 Oracle Clusterware 利用该网络进行相互通信。

•     RAC 群集互连网络 (RAC-IC):数据库的各个实例利用该网络进行相互通信。

与RAC和CRS相关的知识点还可以参考:

EYGLE:

1. Oracle10g New Feature:CRS(Cluster Ready Services)

2. Oracle 10g RAC的相关概念

小荷

1. 用crs实现single instance的HA

2. RAC ONE NODE

文章开始部分说到的问题,请参考后续文章Configure the CSS on Non-RAC & Trace It (Linux/Unix)

-The End-

Written by ochef

November 11th, 2009 at 7:10 pm

Posted in Database

Tagged with , ,

RAC常用开启关闭命令 – SRVCTL用法

one comment

上周又做了一次ASM+RAC的实验,这次体验了srvctl这个强大的工具来管理RAC,对srvctl命令使用总结了一下:

SRVCTL是ORACLE RAC集群配置管理的工具

SRVM   server management:

1. SRVCTL  Add命令

添加数据库或实例的配置信息。在增加实例中,与-i一起指定的名字应该与INSTANCE_NAME 和 ORACLE_SID参数匹配。

srvctl add database -d <database name> [-m domain_name] -o <ORACLE_HOME path> -p <spfile location and name>

srvctl add instance -d <database name> -i <instance 1 name> -n <node 1 name >

srvctl add instance -d <database name> -i <instance 2 name> -n <node 2 name >

命令参数:

-m   数据库域名 格式如”us.oracle.com”

指定的数据库域名必须匹配数据库INIT.ORA或者SPFILE中DB_DOMAIN 和DB_NAME参数。在增加数据库时,-d指定的数据库名必须与DB_NAME参数匹配

-n   实例节点名

-o   $ORACLE_HOME(用来确定lsnrctl和Oracle等命令路径)

-p   SPFILE 文件名

Eg:

$srvctl  add database -d RAC -o /u01/oracle/product/10.2.0/db_1 -p +RAC_DISK/rac/spfilerac.ora

$srvctl  add  instance  -d RAC  -i rac1  -n node1

$srvctl  add  instance  -d RAC  -i rac2  -n node2

2.SRVCTL Config命令

显示保存在SRVM配置文件中的配置信息

srvctl config database

显示数据库配置列表

srvctl config database -d database_name

数据库配置信息显示的格式:

nodename1 instancename1 oraclehome

nodename2 instancename2 oraclehome

Eg:

$ srvctl config database

RAC

$srvctl config database -d rac

node1 rac1 /u01/oracle/product/10.2.0/db_1

node2 rac2 /u01/oracle/product/10.2.0/db_1

3.SRVCTL Modify命令

修改实例的节点配置信息,这些修改会在程序下次重新启动后生效,修改后的信息将永久保存。

srvctl modify instance -d database_name -i instance_name -n node_name

Eg:

$srvctl modify instance -d rac -n new_node

4.SRVCTL Remove命令

这是用来删除SRVM库中配置信息的命令,对象相关的环境设置也同样删除,如果你未使用强制标志(-f),ORACLE将提示你确认是否删除。

使用强制选项(-f),删除操作将不进行提示

srvctl remove database -d database_name [-f]

srvctl remove instance -d database_name -i instance_name [-f]

命令参数:

-f 强制删除应用时不进行确认提示

Eg:

$srvctl remove database -d rac

$srvctl remove instance -d rac -i rac1

$srvctl remove instance -d rac -i rac2

5.SRVCTL Start命令

启动数据库,所有实例或指定的实例,及启动所有相关未启动的监听。

注:对于start命令和其它一些可以使用连接字符串的操作,如果你不提供连接字符串,那么ORACLE会使用”/ as sysdba”在实例上执行相关的操作。另外,要执行类似的操作,你必须是OSDBA组的成员。

srvctl start database -d database_name [-o start_options] [-c connect_string]

srvctl start instance -d database_name -i instance_name [,instance_name-list] [-o start_options][-c connect_string]

命令参数:

-o   在SQL*Plus直接传递的startup命令选项,可以包括PFILE

-c   使用SQL*Plus连接数据库实例的连接字符串

Eg:

$srvctl start database -d rac

$ srvctl stop database -d rac -c “SYS/SYS_password as SYSDBA”

$srvctl start instance -d rac -i rac1,rac2

##############################################################

$srvctl start listener -n node1

$srvctl stop listener -n node2

$ srvctl stop listener -n node [-l listenername]

今天发现一个SRVCTL命令的小bug。(http://yangtingkun.itpub.net/post/468/275571

如果用srvctl关闭监听后,再用lsnrctl start打开监听。这时srvctl仍然认为监听已经关闭。因此,再次使用srvctl关闭监听,似乎srvctl根本没有去执行。如果希望srvctl可以关闭监听,那么需要先用srvctl启动监听,然后再关闭。搜索了一下metalink,没有发现关于这个问题的说明。而且,这个问题只在关闭监听时出现,启动监听则没有问题。svrctl显然只记录它自己的操作,而不去检查listener真正的状态。

##############################################################

6.SRVCTL Status命令

显示指定数据库的当前状态

srvctl status database -d database_name

srvctl status instance -d database_name -i instance_name [,instance_name-list]

Eg:

$srvctl status database -d rac

$srvctl status instance -d rac -i rac1,rac2

7.SRVCTL Stop命令

停止数据库所有实例可者指定实例

srvctl stop database -d database_name [-o stop_options] [-c connect_string]

srvctl stop instance -d database_name -i instance_name [,instance_name_list] [-o stop_options][-c connect_string]

命令参数:

-c   使用SQL*Plus连接数据库实例的连接字符串

-o   在SQL*Plus直接传递的shutdown命令选项

Eg:

$srvctl stop database -d rac

$srvctl stop instance -d rac -i rac2

$ srvctl stop service -d db_name [-s service_name_list [-i inst_name]]

$ srvctl stop asm -n node

8.使用SRVCONFIG导入和导出RAW设备配置信息

你可使用SRVCONFIG导入和导出RAW设备配置信息,不管配置文件是在集群文件系统上还是在RAW设备上。你可以使用这种方法来备份与恢复SRVM配置信息。

Eg:

下面的命令用来导出配置信息的内容到你指定文件名的文本文件中。

$srvconfig -exp file_name

下面的命令用来从指定文本文件中导入配置信息到到你运行命令的RAC环境配置信息库。

$srvconfig -imp file_name

9.SRVCTL Getenv命令

getenv操作用来从SRVM配置文件中获取与显示环境变量

srvctl getenv database -d database_name [-t name[,name,……]]

srvctl getenv instance -d database_name -i instance_name [-t name[,name,……]]

Eg:

$srvctl getenv database -d rac

10.SRVCTL Setenv命令

设置SRVM配置文件中的环境变量值。

srvctl setenv database -d database_name -t [,name=value,……]

srvctl setenv instance -d database_name [-i instance_name] -t [,name=value,……]

Eg:

$srvctl setenv database -d rac -t LANG=en

11.SRVCTL Unsetenv命令

取消SRVM配置文件中环境变量定义值

srvctl unsetenv database -d database_name-t name[,name,……]

srvctl unsetenv instance -d database_name[-i instance_name] -t name[,name,……]

Eg:

$srvctl unsetenv database -d rac -t CLASSPATH

Updated @ 11-12-09 11:43

Example:In windows, the correct startup/shutdown steps is:

STARTUP:

node1$srvctl start nodeapps -n rac1

node1$srvctl start nodeapps -n rac2

node1$srvctl start asm -n rac1

node1$srvctl start asm -n rac2

node1$srvctl start database -d rac

node1$srvctl start service -d rac

node1$crs_stat -t

SHUTDOWN:

node1$srvctl stop service -d rac

node1$srvctl stop database -d rac

node1$srvctl stop asm -n rac2

node1$srvctl stop asm -n rac1

node1$srvctl stop nodeapps -n rac2

node1$srvctl stop nodeapps -n rac1

node1$crs_stat -t

-The End-

Written by ochef

November 9th, 2009 at 2:25 pm

Posted in Database

Tagged with

Install and configure DB2 V9.7 client for linux

leave a comment

DB2 V9.7 client安装在RedHat Linux平台上最低要求为5.2以上,kernel最低为2.6.16,否则在安装时会遇到如下的错误提示信息:

WARNING:

The required minimum kernel level is 2.6.16

Required minimum level of glibc is 2.4.0

检查系统包

#rpm -qa|grep  compat-libstdc++

compat-libstdc++**.rpm

配置 Linux 内核参数

#vi /etc/sysctl.conf文件,添加内核参数

kernel.msgmni =1024

kernel.sem = 250  256000  32  1024

#sysctl  -p  使其修改立即生效

下载db2 V9.7的客户机安装包下载并安装

#tar  -xzvf client_linuxia32_v97.tar.gz

#cd client

#sh db2_install

创建用户

#groupadd db2iadm1

#useradd -m -g db2iadm1 -d /home/db2inst1 db2inst1

# /opt/ibm/db2/V9.7/instance/db2icrt -a server db2inst1

#passwd db2inst1

添加DB2端口

#su -

#vi /etc/services 加入下面一行

db2inst1   50000/tcp

修改/etc/hosts文件,添加服务器的IP和客户机的IP

#vi /etc/hosts

设置实例的环境变量

运行脚本  /home/db2inst1/sqllib/db2profile

在服务器端配置TCP/IP通信

[db2inst1@ochef ~]$ db2 update database manager configuration using svcename db2inst1

[db2inst1@ochef ~]$ db2 get dbm cfg |grep -i “svcename”

设置DB2服务器的通信协议

[db2inst1@ochef ~]$ db2set DB2COMM=tcpip

[db2inst1@ochef ~]$ db2stop

[db2inst1@ochef ~]$ db2start

从客户端编目TCP/IP节点

[db2inst1@ochef ~]$ db2 catalog tcpip node ochefdb2 remote 192.168.0.97 server 50000

[db2inst1@ochef ~]$ db2 terminate

编目TCP/IP节点是要在client端节点目录中添加一个描述远程节点的条目,client端访问server端时告诉它远程主机所选择的别名(node_name)、hostname(ip_address)和svcename(或port_number)。

在客户端编目TCP/IP节点时遇到如下错误:

SQL10007N Message “-1390″ could not be retrieved.  Reason code: “3″.

这个问题困扰了我一下午,百思不得其解,后来无意使用db2ilist查看实例信息,返回的结果是空的,是不是因为没有创建instance造成的呢?这点跟ORACLE完全不一样,客户端要创建什么实例?死马当活马医吧,回到root用户,运行db2icrt命令去创建instance,再回db2inst用户下编目TCP/IP一切ok。

#/opt/ibm/db2/V9.5/instance/db2icrt -a AuthType -u FencedID InstName

-a AuthType (Linux 或 UNIX)

表示实例的认证类型。AuthType 可为 SERVER、CLIENT 或 SERVER_ENCRYPT 其中之一。 SERVER 是缺省值。此参数是可选的。

-u FencedID

指定创建的受防护用户的名称。表示将用来运行受防护用户定义的函数(UDF)和受防护存储过程的用户的名称。如果在客户机上创建实例,那么此选项不是必需的。但是在server上创建时必须要指定这个FencedID的。

InstName

表示实例的名称。实例的名称必须与拥有实例的用户的名称相同。指定创建的拥有实例的用户的名称,将在拥有实例的用户的主目录中创建该实例。

解决该问题后,catalog编目:

[db2inst1@ochef ~]$ db2 catalog database sample at node ochefdb2

[db2inst1@ochef ~]$ db2 terminate

必须先在客户端上编目数据库,客户端应用程序才能访问远程数据库。在编目远程数据库时需要数据库名称、数据库别名、节点名、认证类型、注释等信息。只有在client端要连接到server端时才需要编目,因为节点目录用于存储远程数据库的所有连通性信息,这一过程类似ORACLE中sqlnet.ora和tnsnames.ora二个文件的作用。

使用CLP测试客户端到服务器的连接:

[db2inst1@ochef bin]$db2  connect to sample user db2inst1 using db2inst1

如果连接成功,会收到一条显示已经连接到的数据库名称,如下所示:

Database Connection Information

Database server      = DB2/LINUX 9.7.0

SQL authorization ID  = DB2INST1

Local database alias   = SAMPLE

通过客户端查询系统目录表中列示的所有表名的列表:

[db2inst1@ochef ~]$db2 select tabname from syscat.tables

……

HMON_ATM_INFO

HMON_COLLECTION

POLICY

433 record(s) selected.

要中断连接时,使用db2 connect reset 命令将中断该连接。

附:Configure db2 client to server connection checklist:

1 DB2SYSTEM注册变量是否为主机的hostname,db2安装时已经默认设置,如中间更改过hostname,需要重设:

$db2set DB2SYSTEM=HOSTNAME

2 在serverh 验证实例使用的通讯协议,查看DB2COMM变量

$db2set -all  若不是需修改

$db2set DB2COMM=tcpip

3 查看/etc/services中,有无与上面对应SVCENAME的端口,例如:

db2inst1 50000/tcp

要确认服务器是否在监听,可以用netstat -an 来查看端口是否处于LISTEN状态

tcp   0   0 0.0.0.0:50000     0.0.0.0:*      LISTEN

4 更新实例配置文件

$db2 update dbm cfg using svcename db2inst1

5 是否在client端catalog节点

$ db2 catalog tcpip node ochefdb2 remote 192.168.0.97 server 50000

验证远程服务器实例配置

$db2 list node directory

Node Directory

Number of entries in the directory = 1

Node 1 entry:

Node name                      = OCHEFDB2

Comment                        =

Directory entry type           = LOCAL

Protocol                       = TCPIP

Hostname                       = 192.168.0.97

Service name                   = 50000

查看更详细的信息使用:

$db2 list node directory show detail

6 ping hostname来验证通讯

使用telnet hostname port来验证是否能连到实例。

-The End-

Written by ochef

November 1st, 2009 at 9:49 am

Posted in Database

Tagged with , ,