Welcome to Rolland Town which Record fire's life.
标签类目:Solaris
2009年10月28日代码生活

评论关闭

双机问题一则

双机的连接方式就不详说了,就是心跳线连接,A和B机都是两个网卡bge0和bge1。两个网卡配置的相同地址。A和B跑不同的应用,互为主备。

问题:A机或者B机莫名其妙无法远程连入,查看双机状况,发现A机或B机下线。
解决:从A机背板或者远程管理端口连入,机器运行正常,查看/var/adm/messages有些异常,但是感觉没问题,只是一台机器两个网卡间切换而已。

继续阅读 »

Solaris关机用户—sudo实现(090623更新)

  需求:服务器归一个部门管理,但是由于数据的敏感性,所以root帐号不能交给这个部门。所以出现了这样一个需求。关机、重启等特殊命令给一个用户来执行。但是考虑到服务器上脚本的安全性,这个用户又不能去查看这些脚本。

  首先,我想到的是Solaris的RABC来实现。通过SMC建立相应的角色,用户,并授权。可能由于我操作的问题,始终都没弄对。

  然后一翻google。将能搜索到的办法都基本尝试了一下,居然没有一个可行,继续怀疑自己的问题。其实网上的办法是另外一种,就是通过shell来做文章,登陆后立刻执行一个shell关机,比如(如下办法我没成功):

要关机,必须有关机权限。什么人有关机权限?root。但不能把root口令告诉普通用户,怎么办?创建一个特殊的超级用户,他的登录shell是一个定制的文件:一条关机命令。具体做法如下:

# vi /etc/passwd

shutdown:x:0:1:shutdown user:/:/bin/shutdown 添加一个用户

# vi /etc/shadow

shutdown::::::::

# vi /bin/shutdown

/usr/sbin/shutdown -y -g0 -i5

把别的用户logout,试着用shutdown用户登录。输入完用户名和口令后,系统就开始关机。

  最后大鱼儿和一个同事建议我使用sudo。尝试下总归是好的,去sunfreeware.com下载相关的包,上传到服务器。

# gunzip libgcc-3.4.6-sol10-sparc-local.gz
# gunzip libiconv-1.11-sol10-sparc-local.gz
# gunzip libintl-3.4.0-sol10-sparc-local.gz
# gunzip sudo-1.7.1-sol10-sparc-local.gz
# pkgadd -d /export/home/soft/libintl-3.4.0-sol10-sparc-local
# pkgadd -d /export/home/soft/libiconv-1.11-sol10-sparc-local
# pkgadd -d /export/home/soft/libgcc-3.4.6-sol10-sparc-local
# pkgadd -d /export/home/soft/sudo-1.7.1-sol10-sparc-local
# useradd -u 600 -m -d /export/home/shdUser -s /usr/bin/bash shdUser
# vi /usr/local/etc/sudoers
增加:shdUser ALL=(root) NOPASSWD: /usr/sbin/shutdown,/usr/sbin/showmount,/usr/ccs/bin/dump
//设置相关shell的权限
# chmod 700 /export/home/yourshell.sh

  一切准备就绪。然后用shdUser登陆。

$ vi .profile
//增加:export PATH=/usr/bin:/usr/ucb:/etc:/usr/local/bin:/usr/ccs/bin:.
//保存后退出重新登陆
$ sudo -l
User shdUser may run the following commands on this host:
    (root) NOPASSWD: /usr/sbin/shutdown, (root) /usr/sbin/showmount, (root) /usr/ccs/bin/dump
$ sudo shutdown -y -g0 -i5
We trust you have received the usual lecture from the local System Administrator.
It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type
#3) With great power comes great responsibility
//输入shdUser密码
Sorry, user shdUser is not allowed to execute ‘/usr/ucb/shutdown -y -g0 -i5′ as root on yourhostname.
//看来不能简单些shutdown
//090623更新,感谢大鱼儿:由于profile中的目录优先级问题,所以没法直接使用shutdown。可以改一下profile中/usr/ucb/和/usr/local/bin的顺序即可。大鱼儿提到写个sh脚本让用户执行,这样应该更好一些。
$ sudo /usr/sbin/shutdown -y -g0 -i5
//顺利关机!

  更多sudo信息可以参考Sudo Main Page

Oracle双机互为主备简单备份sh

  Oracle本身的备份策略很多,这里只说说简单的exp命令备份在双机互为主备的方案中shell怎么做。

  由于互为主备,平时AB机各自运行自己的实例,当然发生故障后有双机软件去实现自动切换。这样就导致了存储上挂接的同一个lum并不会同时出现两台主机上。那么传统的exp备份脚本就无法正常运行。比如常用的exp的shell脚本如下:

ORACLE_BASE=/export/home/oracle
export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_HOME
ORACLE_SID=test
export ORACLE_SID
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/openwin/lib
export LD_LIBRARY_PATH
NLS_LANG="simplified chinese"_china.zhs16gbk
export NLS_LANG
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export ORA_NLS33
PATH=$PATH:/opt/SUNWspro/bin:/usr/sbin:/opt/bin:$ORACLE_HOME/bin:/usr/ccs/bin
export PATH

DATE=`date +%Y%m%d`

cd /databak
exp userid=’test/test’@test compress=n  file=test${DATE}.dmp log=test${DATE}.log

gzip test${DATE}.dmp

  如果套用到互为备份的双机中,就有问题,这个shell到底放在A机还是B机呢?还是两台都放?

  如果放在其中一台服务器上,假设放在A机上。A机出问题(网络故障或者系统故障),数据库B机自动接管了(这时存储上的lum都会挂接到B机)。A机脚本就无法工作。

  如果A、B机都放,依然是问题。存储上的lum是无法同时挂接到两台服务器的。

  因此,那就应该考虑,从判断监听是否启动或者判断数据库是否启动入手,通过shell生成一个flag文件,然后去判断这个flag文件大小。修改后的shell如下:

ORACLE_BASE=/export/home/oracle
export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_HOME
ORACLE_SID=test
export ORACLE_SID
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/openwin/lib
export LD_LIBRARY_PATH
NLS_LANG="simplified chinese"_china.zhs16gbk
export NLS_LANG
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export ORA_NLS33
PATH=$PATH:/opt/SUNWspro/bin:/usr/sbin:/opt/bin:$ORACLE_HOME/bin:/usr/ccs/bin
export PATH

DATE=`date +%Y%m%d`
#这里是AB机种本地磁盘的目录
cd /test/test_sh/
rm -f  lsnr.test
ps -ef | grep "/export/home/oracle/product/10.2.0/db_1/bin/tnslsnr LISTENER_test" | grep -v grep > lsnr.test
if [ -s lsnr.test ]
then
#这里是存储上的目录
cd /test/Backup
exp userid=’test/test’@test compress=n  file=test${DATE}.dmp log=test${DATE}.log
gzip test${DATE}.dmp
else
echo(当然这里还可以和邮件结合起来,让每次备份什么的dba心中有数)
fi

  最后,在AB机都放上这个脚本。在crontab中写好执行时间,也不会因为其中一台服务器down掉导致备份无法正常执行。
 

Oracle RAC问题一则(未解决)

1、solaris10 + oracle10.2.0.4 rac

2、连接时出现ORA-12545:增加两个节点的LOCAL_LISTENER设置。用sys帐号登录后分别在两个节点执行:
ALTER SYSTEM SET LOCAL_LISTENER = ‘(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.7)(PORT = 1521))’   SID = ‘testdb1′;
ALTER SYSTEM SET LOCAL_LISTENER = ‘(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.8)(PORT = 1521))’   SID = ‘testdb2′;

3、客户端tnsname.ora
testDB =
 (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.7)(PORT = 1521))
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.8)(PORT = 1521))
  (LOAD_BALANCE = yes)
  (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = swpudb)
    (FAILOVER_MODE =
      (TYPE = SELECT)
      (METHOD = BASIC)
      (RETRIES = 180)
      (DELAY = 5)
    )
  )
 )

4、导入两个应用的数据做测试后,

5、问题:就是在node1使用ssh连接时,键入命令有时停顿很严重,但是服务器负载很低。而且应用程序连接是也非常缓慢,这种情况一天内不间断发生。尝试修改应用连接的VIP地址,将两个node的VIP互换,发现应用程序可正常连接,响应速度正常。说明node1有问题,但是至今无法确认到底是什么问题。无比头疼。

6、在node1中查看alter日志:
-bash-3.00$ tail -200 /export/home/oracle/admin/swpudb/bdump/alert_testdb1.log | grep ORA
Starting ORACLE instance (normal)
Starting up ORACLE RDBMS Version: 10.2.0.4.0.
WARNING: inbound connection timed out (ORA-3136)
WARNING: inbound connection timed out (ORA-3136)
在node2中查看alter日志:
-bash-3.00$ tail -200 /export/home/oracle/admin/swpudb/bdump/alert_testdb2.log | grep ORA
Starting ORACLE instance (normal)
Starting up ORACLE RDBMS Version: 10.2.0.4.0.
google出的一个文档:http://www.dbasky.net/archives/2009/05/oracle10gora-3136.html,按照文档所说在两个节点上都增加响应配置。
$ lsnrctl
LSNRCTL> show inbound_connect_timeout
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hpcmdb2.transgd)(PORT=1521)))
LISTENER parameter "inbound_connect_timeout" set to 60
The command completed successfully
LSNRCTL> set inbound_connect_timeout 0
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hpcmdb2.transgd)(PORT=1521)))
LISTENER parameter "inbound_connect_timeout" set to 0
The command completed successfully
LSNRCTL> show inbound_connect_timeout
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hpcmdb2.transgd)(PORT=1521)))
LISTENER parameter "inbound_connect_timeout" set to 0
The command completed successfully
LSNRCTL> exit

7、节点1依然不正常……

2009年04月8日代码生活

评论关闭

sun4v下安装Nginx

  清明期间看到大鱼儿写的Nginx并发逼近1万大关,想想学校的教务系统的web端,应该也可以用到Nginx。因为之前用Apache加载resin来做的负载均衡,但是偶尔会出现登录后500的错误,百思不得其解,但是只要刷新一下就好了。所以后来放弃了用Apache加载resin做负载均衡。所以看了大鱼儿的blog就跃跃欲试。

  1、服务器是sun4v系列的,查看了官方的说明可以支持,直接下载了稳定版。

  2、由于自己只是做一个负载均衡,不需要其他一些模块,所以连PCRE我也放弃了。

  3、需要gcc或者其他来编译,操作系统没装,我就去down了个gcc回来。

  准备工作就绪,把包传到服务器上去。开工。

# gunzip gcc-3.4.6-sol10-sparc-local.gz
# pkgadd -d ./gcc-3.4.6-sol10-sparc-local
# gunzip libiconv-1.11-sol10-sparc-local.gz
# pkgadd -d ./libiconv-1.11-sol10-sparc-local
# PATH=$PATH:/opt/gnome/bin:/usr/local/bin:/opt/netscape:/usr/ccs/bin
# exprot PATH
# gzip -d nginx-0.6.36.tar.gz
# tar xvf nginx-0.6.36.tar
# ./configure –without-http_rewrite_module –user=webadmin –group=webadmin –with-http_stub_status_module
checking for OS
 + SunOS 5.10 sun4v
checking for C compiler … found
 + using GNU C compiler
 + gcc version: 3.4.6
checking for gcc -pipe switch … found
checking for gcc variadic macros … found
checking for C99 variadic macros … found
checking for unistd.h … found
checking for inttypes.h … found
checking for limits.h … found
checking for sys/filio.h … found
checking for crypt.h … found
checking for SunOS specific features
checking for sendfilev() … found
checking for event ports … found
checking for poll() … found
checking for /dev/poll … found
checking for kqueue … not found
checking for crypt() … found
checking for zlib library … found
checking for int size … 4 bytes
checking for long size … 4 bytes
checking for long long size … 8 bytes
checking for void * size … 4 bytes
checking for uint64_t … found
checking for sig_atomic_t … found
checking for sig_atomic_t size … 4 bytes
checking for socklen_t … found
checking for in_addr_t … found
checking for in_port_t … found
checking for rlim_t … found
checking for uintptr_t … uintptr_t found
checking for system endianess … big endianess
checking for size_t size … 4 bytes
checking for off_t size … 8 bytes
checking for time_t size … 4 bytes
checking for setproctitle() … not found
checking for pread() … found
checking for pwrite() … found
checking for strerror_r() … found
checking for gnu style strerror_r() … found but is not working
checking for localtime_r() … found
checking for posix_memalign() … not found
checking for memalign() … found
checking for sched_yield() … found
checking for mmap(MAP_ANON|MAP_SHARED) … found
checking for mmap("/dev/zero", MAP_SHARED) … found
checking for System V shared memory … found
checking for struct msghdr.msg_control … not found
checking for ioctl(FIONBIO) … found
checking for struct tm.tm_gmtoff … not found

Configuration summary
  + PCRE library is not used
  + OpenSSL library is not used
  + md5 library is not used
  + sha1 library is not used
  + using system zlib library

  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "/usr/local/nginx/client_body_temp"
  nginx http proxy temporary files: "/usr/local/nginx/proxy_temp"
  nginx http fastcgi temporary files: "/usr/local/nginx/fastcgi_temp"
# make
make -f objs/Makefile
gcc -c -mcpu=v9 -O -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Wno-unused-function -Wunused-variable -Wunused-value -Werror -g -I src/core  -I src/event  -I src/event/modules  -I src/os/unix  -I objs \
………省略……….
# makeinstall

  要让人笑掉大牙的地方就在make那里,我几乎耗费了整整一天的时间来找原因。我make的时候看到有error字样就以为是错误,屏幕显示问题成了-W在上一行的最后部分,error在第二行开头。我就以为是错误,然后到邮件列表啊什么的里面去海找。

2009年03月19日代码生活

评论关闭

如何限制操作系统级用户影响Oracle数据

  这是最近两天我一直考虑的一个问题。简单描述下:SPARC版的Solaris和Oracle取消了Oracle的操作系统认证。可否有办法不允许root用户su到dba组的任何一个用户,然后更改oracle参数后,直接使用connect as sysdba登录后更改Oracle下实例的数据?或者说Oracle有没有什么安全策略给不同的实例。以阻止操作系统级别的用户对数据进行操作。

  首先,就问题来说,即便是我更改了Oracle参数,不允许dba组的用户直接使用connect as sysdba登录。但是root仍然可以将参数更改回去。所以传统一直认为是没有办法可以解决。我想到了另一个办法可以用人工干预的方式起一个监控作用。其实很简单。写一个shell监控参数文件的状况,写到crontab中,时刻执行。当然root可以更改crontab,或者伪造shell脚本生成的log。所以这也不是解决之道。

  其实这个和Solaris本身设计有很大的关系,因为系统本身的root权限是至高无上的,所以导致Oracle本身最开始设计时无法阻止。一直到10g第二版才有相关的组件Oracle DataBase Vault可以侧面解决。使用 Oracle Database Vault 限制特权用户访问专用应用程序数据:http://www.oracle.com/technology/global/cn/obe/10gr2_db_single/security/dv/datavault_otn.htm。还有一个Oracle Audit Vault,演示在这里:www.rayfile.com/files/8957dc0c-1463-11de-80a8-0014221b798a/

  Sql-Sever用户可能会笑,说Oracle连这个都做不到。但是Sql-Server也必须要通过域控制才能完满做到嘛。

  最后,我很纳闷儿,因为我问了好多朋友,或者朋友的朋友,都说无法解决这个问题。甚至银行系统用的Oracle数据库居然也没有考虑这个问题(只限国内),我无语!我们的钱就靠root帐号持有者的责任感?难怪我们的手机随时都有莫名电话、短信骚扰,银行如此,通信等行业我不敢想了。上面说的产品限制了DBA的权限,使DBA只需要维护Oracle本身,而不是干预应用。

2008年09月13日代码生活

评论关闭

Sun服务器也玩儿覆盖安装和硬盘对拷

  两台v880服务器,原来都安装的Solaris8和Oracle8。后来其中一台升级到Solaris9、Oracle9。另外一台本想保持旧貌,可惜老天不长眼,再一次停电前正常关机之后,再也启动不起来。简单说就是无法引导,然后和Sun的工程师一起找原因,未果(其中遇到各种各样的稀奇古怪的问题,使用了能想到的各种各样的办法都不行,最主要就是超级块有问题,而且无法修复)。最后只能放弃。

  由于该系统中数据没有做备份,又想保证数据。工程师提出类似Windows覆盖安装的概念,简单说来,就是装入Solaris8的光盘,从光盘启动安装系统,在进入安装后不久有个选择:Upgrade还是Install,选择Upgrade。我详细的询问了工程师,他说基本上只要不是损坏或者和源盘文件不同的,就会跳过,不会影响到整个系统,以及系统中的应用。这对我来说是一个全新的概念,从来没有想到Solaris也可以这么做。在整个Upgrade的过程中,所有的设置都和原设置相同,完成Upgrade之后系统可以引导了,不过问题又来了。提示输入用户名之后回车,继续让输入用户名,就没有提示输入密码,提示pam_authtok_get.so这个文件有问题(更多请参考PAM(Pluggable Authentication Modules ))。本来可以继续深入挖掘,但是由于时间关系,不得不停止继续修复的方案,而采用忍受丢失部分数据的方案,重装!

  在确定硬件没有故障的前提下,工程师又让我吃惊了,他说可以克隆。因为两台880的配置一模一样,一般这样的克隆只是针对备份数据而言,但是为了节约重装系统和数据库,以及打补丁的时间克隆是最快的。本想自己又开始漫长的装系统的过程,结果听他这么说,我愿意看看怎么做。两台880我分别用A和B表示,B表示有问题的,A表示正常的。

  • 首先卸载A某个数据盘,前提是该盘没有应用基本闲置的那种。输入:luxadm remove_device /dev/dsk/c*t*d*s2,*号表示目标磁盘号,最后的“2”是很重要的参数。
  • 卸载完成后,装载上B的某个空闲磁盘。输入:luxadm insert_device。
  • 输入:#dd if=/dev/dsk/c*t*d*s2 of=/dev/dsk/c*t*d*s2 bs=1024000。if后是源,of后是目标。这样先克隆A的系统,再克隆A的Oracle。当然如果系统和数据库都装在一个盘上,就只需要一步。整个克隆时间由两个因素决定,其一就是bs后跟的参数,建议不要超过10M;其二就是磁盘本身大小,36G的10万转SCSI硬盘大概克隆时间在20-25分钟。以此类推。
  • 完成克隆后,将A原来的那块盘插回去。输入:luxadm insert_device。将B的其他磁盘先拔下,就插入刚才克隆的两个盘启动,输入A的root密码即可登陆。//如果是光线磁盘请先跳到下面加粗部分的操作。
  • B服务器登陆后,输入:init 0
  • B服务器在ok状态下。输入:boot -s
  • B服务器,输入:# sys-unconfig
  • B服务器,输入:# touch /reconfigure
  • 然后重新提供系统参数,并进行配置。就是IP地址,主机名之类的。完成之后reboot。
  • 编辑vsftab中,加载其他磁盘。
  • Done!

        这里比如注意。如果服务器不是光纤磁盘,以上操作足够。如果是光线磁盘,必须在插入两个克隆的磁盘后,先要按照下面的操作。

  • 在ok状态下从光盘引导系统(用Solaris的安装盘):OK boot cdrom –s
  • 安装根文件系统到/mnt:#mount /dev/dsk/c1t0d0s0 /mnt
  • 使new disk /etc/path_to_inst中的设备名与实际/devices中的设备名一致:#drvconfig  -r /mnt -p /mnt/etc/path_to_inst ;#cd /devices;#find . -print |cpio -pduVm  /mnt/devices
  • 创建new disk从逻辑设备到物理设备的正确的连接:#disks -r /mnt
  • 设置new disk 的/dev/dsk/c1t0d0s0 为启动设备:#luxadm set_boot_dev /dev/dsk/c1t0d0s0
  • # reboot

Solaris10问题?还是硬件问题?[20080720更新]

  下午,准备将一台SUN FIRE 880的服务器从Solaris8迁移到Solaris10。但是遇到了一个问题,让我百思不得其解。

  1、先将准备好的光盘(ISO从Sun的官方网站获得CD版的)。使用boot cdrom,提示无法打开设备;

  2、使用Sun服务器自带的Solaris9(光盘当然是从其他服务器上借来用的)可以正常从boot cdrom开始;

  3、以为是光盘刻录速度导致读取问题,重刻CD,4x、8x和16x都刻过,再试,还是不行;

  4、以为是下载文件问题。重新下载第一张CD,采用4x刻录,再试,还是不行。

  5、从Sun官方网站下载DVD版,采用8x刻录,还是不行;

  6、从另外一台迁移完成的SUNFIRE880的管理员手中获得他刻录时用的ISO,发现两个问题:第一,今天我们从官方网站下载的DVD大小是2.72G,他刻录时使用的这个ISO同样是Sun官方网站下的,大小是2.84G。莫非增加了新补丁在最新的这个ISO里面,大小还会变少?不管那么多,重新采用6x刻录,还是不行。

  这就不是我常识范围内的问题了(所下载的文件MD5检查没问题)。我能想到的都已经全部重新做了,还有什么问题呢?一、硬件问题,那为什么Solaris9就没有问题呢?二、刻录格式问题,一个ISO文件无法选择刻录时的格式吧?我用的Nero,确实没这个选项,这个我仔细看过。而且关键是即便是进入原有的系统,刻录的光盘都无法读出内容,当然没有尝试除了那张Solaris9以外的光盘。难不成Sun在ISO里面做了什么手脚?不可能,另外一个880都已经完成了迁移,同样是下载的,同样是Nero刻录的。至今无解!郁闷!

  现在怀疑是iso刻录的时候需要选引导,但是我这里的Nero刻录iso根本没得选。

 

20080720更新:

  1、这台v880,已经基本全天候24小时运行了5年多,没有更换过任何部件,没有出现过任何硬件问题;

  2、Sun工程师说可能是OBP问题,升级OBP有个小插曲。升级时发现版本是4.22,原版本是4.7。我当时以为Sun那边自己规范的问题,后来才知道只是简单的22>7而已,OBP升级会在下面一篇中说。

  3、用truss来分析整个光盘读取进程,还是没有结果。最后只能说返厂分析,可惜服务早就过保,作罢。

  4、这个光驱经过快一天的来回折腾,终于宣告——这是我的问题,您别折腾我了。罢工!归结起来就是这么古老的机器,没出问题就好,出了问题,那就是一个接一个。不过话说回来,一台机器常年运作,除停电意外,能这样不错了。

2008年05月14日代码生活

评论关闭

Solaris下一个或多个Resin的问题

  我现在的应用都是建立在一个SUNFIRE880的服务器上,也就是说该服务器既是数据库服务器,又是应用服务器。

  由于所有的应用都在Resin下跑,造成负载过大,在暂时不将数据库和应用分开的前提下,额外做作了一个Resin。问题就出来了——这台服务器只要重启一下(当然,基本都是由于停电关机,来电启动之后),就会导致另外一个resin下的应用无法正常获得数据。最后才发现是由于在服务器启动的过程中resin启动的要比数据库快,只需要按照如下操作就能恢复:
1、stop掉两个resin;
2、将数据库shutdown掉,然后重新startup;
3、重新启动resin。

  我想多个resin情况也应该差不多。补充下,我使用的resin是2.1.14。

793fb2fd

返回顶部