显示标签为“code”的博文。显示所有博文
显示标签为“code”的博文。显示所有博文

2009年11月7日星期六

V$PROCESS 参数过小导致tuxedo服务xa_open returned XAER_RMERR错误

问题现象:
tuxedo 启动多个服务,一部分服务启动成功,一部分启动失败。

关键词:
tpopen TPERMERR xa_open returned XAER_RMERR
ORA-12520: TNS:listener could not find available handler for requested
type of server

调查发现
tuxlog中 FOO_SOMSERICE01 启动成功, FOO_SOMESERVICE02 启动失败, 日志如下

161610.foobar!FOO_SOMESERVICE01.16772.1.0: 11-07-2009: Tuxedo Version
9.1, 64-bit
161610.foobar!FOO_SOMESERVICE01.16772.1.0: LIBTUX_CAT:262: INFO:
Standard main starting
161610.foobar!FOO_SOMESERVICE02.16775.1.0: 11-07-2009: Tuxedo Version
9.1, 64-bit
161610.foobar!FOO_SOMESERVICE02.16775.1.0: LIBTUX_CAT:262: INFO:
Standard main starting
161610.foobar!FOO_SOMESERVICE02.16778.1.0: 11-07-2009: Tuxedo Version
9.1, 64-bit
161610.foobar!FOO_SOMESERVICE02.16778.1.0: LIBTUX_CAT:262: INFO:
Standard main starting
161610.foobar!FOO_SOMESERVICE02.16778.1.0: LIBTUX_CAT:466: ERROR:
tpopen TPERMERR xa_open returned XAER_RMERR
161610.foobar!FOO_SOMESERVICE02.16778.1.0: tpopen failed
161610.foobar!FOO_SOMESERVICE02.16778.1.0: LIBTUX_CAT:250: ERROR:
tpsvrinit() failed
161610.foobar!tmboot.16684.1.-2: 11-07-2009: Tuxedo Version 9.1, 64-bit
161610.foobar!tmboot.16684.1.-2: CMDTUX_CAT:825: ERROR: Process
FOO_SOMESERVICE02 at TUXNODENAME failed with /T tperrno (TPERMERR -
resource manager error)

调查 ~/bin下面的xa_NULLmmddyyyy.trc 格式的当期文件发现:

161610.16778.0:
ORA-12520: TNS:listener could not find available handler for requested
type of server

161610.16778.0:
xaolgn_help: XAER_RMERR; OCIServerAttach failed. ORA-12520.

ORACLE XA: Version 10.2.0.1.0. RM name = 'Oracle_XA'.

由此确定,应该是oracle 用户设置的 V$PROCESS参数过小的原因导致 无法连接更多。

select count(1) from V$PROCESS;

结论:

用以下语句修改数据库的processes值
alter system set processes=500 scope=spfile

(由于processes是静态参数,scope只能为spfile,在v$sgastate条件为'procesees'中可以看到会每个process会点4个字节),
重新启动数据库使新改的processes生效

2009年11月5日星期四

Sun Studio C++ - -lCrun -lCstd option with cc and ld issues

Question: sun studio, tuxedo 的server编译 和c++有关库时出现如下引用的错误
经查和两个编译器标志有关,根据sun c++ user guide 可以得到如下结论:

1. Never use "ld" to make shared library.
2. Have the shared library dependet on run time lib and standard lib.

CC -G -o libmylib.so -Kpic mysource.cpp -lCrun -lCstd
cc -o myprg source.c -L. -lmylib

buildserver -o foobar_2BitImgLize -f "foobar_2BitImgLize.o
DealWithType0.o DealWithType2.o ADealWith.o TifMake.o ImageSave.o
ComFunction.o NotifyKumi.o
/export/home/tuxedo/version/server/lib/libserver.so
/export/home/tuxedo/version/server/lib/libdb.so
/export/home/foobar/lib/libjpeg.so /export/home/foobar/lib/libini.so
/export/home/foobar/lib/libtiftools.so
/export/home/foobar/lib/libColorConvert.so
/export/home/foobar/lib/libJbig.so /export/home/foobar/lib/libzlib.so
/export/home/foobar/lib/libImageBase.so
/export/home/foobar/lib/libImageApply.so
/export/home/foobar/lib/libEpsMake.so
/export/home/foobar/lib/libbarcode.so
/export/home/foobar/lib/libOMCommon.so
/export/home/foobar/lib/libimagemanage.so" -s "foobar_2BitImgLize" -r
Oracle_XA
Undefined first referenced
symbol in file
__1cG__CrunKpure_error6F_v_ /export/home/foobar/lib/libjpeg.so
__1cDstdMbasic_string4Ccn0ALchar_traits4Cc__n0AJallocator4Cc___2G6Mpkc_r1_
/export/home/foobar/lib/libEpsMake.so
__1cG__CrunIex_alloc6FL_pv_ /export/home/foobar/lib/libjpeg.so
__1cG__CrunIex_throw6Fpvpkn0AQstatic_type_info_pF1_v_v_
/export/home/foobar/lib/libjpeg.so
__1cDstdMbasic_string4Ccn0ALchar_traits4Cc__n0AJallocator4Cc___2G6Mrk1_r1_
/export/home/foobar/lib/libEpsMake.so
__1cDstdTallocator_interface4n0AJallocator4Cc__Cc_Jconstruct6Mpcrkc_v_
/export/home/foobar/lib/libjpeg.so
__1cH__rwstdK__rw_basis4CpcnDstdJallocator4Cc___Edata6kM_1_
/export/home/foobar/lib/libjpeg.so
__1cH__rwstdK__rw_basis4CpInDstdJallocator4Cb___Edata6kM_1_
/export/home/foobar/lib/libtiftools.so
__1cDstdTallocator_interface4n0AJallocator4Cc__Cc_2t6Mrkn0B__v_
/export/home/foobar/lib/libjpeg.so
__1cDstdMbasic_string4Ccn0ALchar_traits4Cc__n0AJallocator4Cc___Edata6kM_pkc_
/export/home/foobar/lib/libEpsMake.so
__1cDstdMbasic_string4Ccn0ALchar_traits4Cc__n0AJallocator4Cc___2T6M_v_
/export/home/foobar/lib/libEpsMake.so
__1cDstdGvector4Cbn0AJallocator4Cb___Ferase6Mn0CIiterator_2_2_
/export/home/foobar/lib/libtiftools.so
__1cDstdGvector4Cbn0AJallocator4Cb___2T6M_v_
/export/home/foobar/lib/libtiftools.so
__1cDstdZ__RTTI__1nDstdJbad_alloc__ /export/home/foobar/lib/libjpeg.so
__1cDstdLchar_traits4Cc_Deof6F_i_ /export/home/foobar/lib/libjpeg.so
__1cDstdGvector4Cbn0AJallocator4Cb___G__copy6Mn0COconst_iterator_2n0CIiterator__3_
/export/home/foobar/lib/libtiftools.so
__1cH__rwstdK__rw_basis4CpInDstdJallocator4Cb___2t6Mirkn0C__v_
/export/home/foobar/lib/libtiftools.so
__1cDstdJbad_alloc2t6M_v_ /export/home/foobar/lib/libjpeg.so
__1cDstdGvector4Cbn0AJallocator4Cb___Jreference2v6kM_b_
/export/home/foobar/lib/libtiftools.so
__1cG__CrunKvector_des6FpvLLpF1_v_v_ /export/home/foobar/lib/libImageApply.so
__1cDstdM__initialize4CL_6FrTA1_v_ /export/home/foobar/lib/libtiftools.so
__1cG__CrunKvector_con6FpvLLpF1_vp2_v_ /export/home/foobar/lib/libImageApply.so
__1cDstdGvector4Cbn0AJallocator4Cb___Iiterator2d6kM2_l_
/export/home/foobar/lib/libtiftools.so
__1cDstdGvector4Cbn0AJallocator4Cb___Iiterator2s6kMl_2_
/export/home/foobar/lib/libtiftools.so
__1cDstdGvector4Cbn0AJallocator4Cb___Dend6M_n0CIiterator__
/export/home/foobar/lib/libtiftools.so
__1cH__rwstdL__construct4CcCc_6FpTArkTB_v_ /export/home/foobar/lib/libjpeg.so
__1cDstdJallocator4Cc_2t6M_v_ /export/home/foobar/lib/libjpeg.so
__1cDstdJallocator4Cb_2t6M_v_ /export/home/foobar/lib/libtiftools.so
__1cDstdGvector4Cbn0AJallocator4Cb___Iiterator2t6M_v_
/export/home/foobar/lib/libtiftools.so
__1cDstdTallocator_interface4n0AJallocator4Cc__Cc_Iallocate6MLpc_2_
/export/home/foobar/lib/libjpeg.so
__1cDstdGvector4Cbn0AJallocator4Cb___Iiterator2e6kMrk2_b_
/export/home/foobar/lib/libtiftools.so
__1cG__CrunGex_get6F_pv_ /export/home/foobar/lib/libtiftools.so
__1cDstdGvector4Cbn0AJallocator4Cb___Iiterator2i6Mi_2_
/export/home/foobar/lib/libtiftools.so
__1cDstdGvector4Cbn0AJallocator4Cb___Iiterator2I6M_r2_
/export/home/foobar/lib/libtiftools.so
__1c2n6FLpv_0_ /export/home/foobar/lib/libjpeg.so
__1cDstdJexceptionG__vtbl_ /export/home/foobar/lib/libjpeg.so
__1cDstdJbad_allocG__vtbl_ /export/home/foobar/lib/libjpeg.so
__1cDstdTallocator_interface4n0AJallocator4Cc__Cc_Kdeallocate6MpcL_v_
/export/home/foobar/lib/libjpeg.so
__1cH__rwstdK__rw_basis4CpcnDstdJallocator4Cc___2G6Mrk1_3_
/export/home/foobar/lib/libjpeg.so
__1cG__CrunMex_rethrow_q6F_v_ /export/home/foobar/lib/libjpeg.so
__1cDstdGvector4Cbn0AJallocator4Cb___Jreference2G6Mb_r2_
/export/home/foobar/lib/libtiftools.so
__1cDstdGvector4Cbn0AJallocator4Cb___M__insert_aux6Mn0CIiterator_b_v_
/export/home/foobar/lib/libtiftools.so
__1cDstdGvector4Cbn0AJallocator4Cb___Iiterator2p6kM_n0CJreference__
/export/home/foobar/lib/libtiftools.so
__1cG__CrunSregister_exit_code6FpG_v_v_
/export/home/foobar/lib/libColorConvert.so
__1cG__CrunHex_skip6F_b_ /export/home/foobar/lib/libjpeg.so
__1cDstdMbasic_string4Ccn0ALchar_traits4Cc__n0AJallocator4Cc___2t6Mrkn0C__v_
/export/home/foobar/lib/libEpsMake.so
__1cDstdbArandfoobar_access_iterator_tag2t6M_v_
/export/home/foobar/lib/libtiftools.so
__1cG__CrunIex_clean6F_v_ /export/home/foobar/lib/libjpeg.so
__1cG__CrunKex_rethrow6F_v_ /export/home/foobar/lib/libjpeg.so
__1cDstdGvector4Cbn0AJallocator4Cb___Oconst_iterator2t6Mrkn0CIiterator__v_
/export/home/foobar/lib/libtiftools.so
__1cH__rwstdK__rw_basis4CpcnDstdJallocator4Cc___2t6Mirkn0C__v_
/export/home/foobar/lib/libjpeg.so
__1c2k6Fpv0_v_ /export/home/foobar/lib/libImageBase.so
__1cDstdDmax4CL_6FrkTA3_3_ /export/home/foobar/lib/libjpeg.so
__1c2N6FL_pv_ /export/home/foobar/lib/libjpeg.so
__1c2n6FL_pv_ /export/home/foobar/lib/libjpeg.so
__1cDstdGvector4Cbn0AJallocator4Cb___Fbegin6M_n0CIiterator__
/export/home/foobar/lib/libtiftools.so
__1c2K6Fpv_v_ /export/home/foobar/lib/libjpeg.so
__1c2k6Fpv_v_ /export/home/foobar/lib/libjpeg.so
ld: fatal: Symbol referencing errors. No output written to foobar_2BitImgLize
CMDTUX_CAT:1832: ERROR: can't execute cc -xarch=v9 -w -mt
-I$TUXDIR/include -o foobar_2BitImgLize BS-49ea.c -L${TUXDIR}/lib
foobar_2BitImgLize.o DealWithType0.o DealWithType2.o ADealWith.o
TifMake.o ImageSave.o ComFunction.o NotifyKumi.o
/export/home/tuxedo/version/server/lib/libserver.so
/export/home/tuxedo/version/server/lib/libdb.so
/export/home/foobar/lib/libjpeg.so /export/home/foobar/lib/libini.so
/export/home/foobar/lib/libtiftools.so
/export/home/foobar/lib/libColorConvert.so
/export/home/foobar/lib/libJbig.so /export/home/foobar/lib/libzlib.so
/export/home/foobar/lib/libImageBase.so
/export/home/foobar/lib/libImageApply.so
/export/home/foobar/lib/libEpsMake.so
/export/home/foobar/lib/libbarcode.so
/export/home/foobar/lib/libOMCommon.so
/export/home/foobar/lib/libimagemanage.so -ltux -lbuft
-L${ORACLE_HOME}/lib ${ORACLE_HOME}/precomp/lib/cobsqlintf.o -lclntsh
-lm -lnsl -lsocket -lgen -ldl -lfml -lfml32 -lengine -R/usr/lib/lwp
-lpthread -lposix4 -lsocket -lnsl -lm -lnsl -lsocket
*** Error code 1
make: Fatal error: Command failed for target `all'

2009年2月11日星期三

C语言可变长参数处理小结

提问:封装一个可变长参数函数func, 将函数的的可变长参数传递给另外一个可变长参数函数(例如printf)
回答:
(1) 例如在printf 这样的可变长参数函数外再次封装, 并无简单的方法可以直接传递可变长参数。
假设封装函数形式为 func(char* fmt, ...) // fmt只是一个例子,c语言要求可变长参数函数至少有一个固定参数。
则func的变长参数序列可以使用va_start取出 一个va_list 型的参数列,
需要将 传递给 printf的可变参数输出到一个buffer中,然后直接printf(buf)

范例程序如下

#include
#include
void myprint(const char *fmt,...)
{
va_list vs;
char buf[256];

va_start(vs,fmt);
vsprintf(buf,fmt,vs);
printf(buf);
va_end(vs);
}

(2)违反规定的使用其他能够接受 va_list 作为参数的函数来替代 printf
当然这个已经不是我们所想做的了。

2009年2月4日星期三

Solaris 10 和 Berkeley DB

Berkeley DB 似乎作为 Sun Studio 11的一个部分提供了
SunOS 5.10 Generic_120011-14 sun4v sparc SUNW,SPARC-Enterprise-T5220 Solaris

$pkginfo |grep -y Berkeley
application SUNWbdb BerkeleyDB-Base 4.2.52 (sun-private) Solaris Sparc 32-bit and 64-bit Architecture
application SUNWbdbj BerkeleyDB-Java(sun-private) 4.2.52 Solaris Sparc 32-bit and 64-bit Architecture

它被安装在
/usr/local/BerkeleyDB.4.2

2009年1月15日星期四

vim 删除空行 替换换行

1. 删除空行
vim的命令为:%s/^\n//g
意思是全局替换所有以回车开头的字符,替换为空。

顺便研究了一下
如果有多个连续的空行,想保留一个
vim的命令为:%s/^\n$//g

2. 替换 换行符号 或 匹配某些字符以转换为换行
sed 's/\\n/\^J/' file
转义符号 ^J:crtl+v crtl+m

2008年11月26日星期三

tuxedo 中使用进行文件锁定

用fcntl 会失败, 返回 EFAULT. 原因尚未调查明确

请转道使用 lockf
lockf可以实现劝告锁和强制锁, 依赖于chmod 的行动。
具体描述可以参考如下链接:

http://docs.sun.com/app/docs/doc/816-5168/lockf-3c?a=view

2008年10月22日星期三

关于任务系统设计

许多时候涉及到定时任务系统的设计,转载一个

在 Java 应用程序中计划重复执行的任务


http://www.ibm.com/developerworks/cn/java/j-schedule/

2008年7月18日星期五

陷阱 iconv on Sun OS5.8 and Solaris 10

EUCJP EUC-JP eucJP UTF-8 soalris


sun OS5.8 的iconv 是一个shit.

利用truss 跟踪 solaris 5.8 上 /usr/bin/iconv 所执行的系统调用的时候发现, iconv 只
试图在/usr/lib/iconv 寻找指定代码的 转换库,比如指示 EUCJP 的时候它不会试图去寻找
eucJP
而在soalris 10 on sparc上, iconv则试图匹配小写的转换库.

2006年11月2日星期四

日本语处理

[本文大概在两年前,曾在jack的weblog http://blog.ifthen.net/ 看到过中文译本,可是今天去看,BLOG已经挂了,为了免于该文从此挂掉,再次翻译如下]
关键词: shift-jis EUC 编码识别 编码转换 sjis2euc ecu2sjis ASCII 重叠

2005年1月20日星期四

const char*, char const* and char *const

const char*, char const*, char*const的问题几乎是C面试中每次都会有的题目。

Bjarne在他的The C++ Programming Language里面给出过一个助记的方法:
把一个声明从右向左读。 念作 pointer to的

char * const cp; ( * 读成 pointer to )
cp is a const pointer to char

const char * p;
p is a pointer to const char;

char const * p;
同上因为C++里面没有const*的运算符,所以const只能属于前面的类型。