存档

作者存档

AIX下fsck大文件系统时间很长

2014年4月21日 没有评论

我们一台IBM主机,正常重启后一4TB文件系统无法mount,提示需要fsck。这个文件系统有7000万个inode,IBM工程师说他们在中国移动刚fsck一400万inode的文件系统,用了2个小时,按这个估计一下我们需要34个小时,可业务急需恢复。。
先建了一个新的文件系统让应用部分做业务恢复,另一路径以各种渠道看IBM是不是有方法可以跳过fsck把文件系统mount上,把最新的程序及参数配置取出来。IBM二线、三线工程师均给出的答案是没有办法,只能死等
山东同事说他们出过几次这样的问题,当文件系统超过2TB,这样问题发生的概率会很高,IBM二线工程师说中国移动也发生过N次这样的问题。

fsck要做5步,90%之上的时间消耗在前两步。
阅读全文…

分类: Unix 标签: ,

Oracle DRM

2014年4月16日 没有评论

1 前言
谈及DRM,好些人很陌生,又有一些人很兴奋。陌生的比较幸运,没遭遇过DRM BUG,。兴奋的人可能是被DRM折磨过,或是喜欢钻研Oracle技术。这是Oracle的一个新特性,Oracle 9i中提出,到10g时堂而皇之出现,到11g不断的优化完善.DRM被很多人评价为”臭名昭著”,所以在安装完Oracle RAC后不分青红皂白立即把DRM功能给关了,心想着从此高枕无忧了,我属于这一类,吃苹果打皮,虽然很多人说果皮很有营养,我坚持宁可不吸收这营养也不吸收毒素。
可换一种思维想一想,存在即合理,从Oracle 10g DRM被Oracle使用,虽然各色满屏的BUG这一特性也没被Oracle废弃掉,Oracle还不断的绞尽脑汁的完善这样一功能,说明这样的功能对于特定的情形是会获得很大性能收益的,这里不戴有色眼睛,客观的描述DRM的相关知识,使得我们在实践工作中更好的利用它。

2 DRM为何”臭名昭著”
自Oracle 10g正式引入DRM以来,这个新特性引发了很多故障,主要表现为DRM sync timeout,即同步超时,同时DRM需要LCK、LMD、LMS等进程的协作,某一环节由于BUG会引起DRM失败。一些严重的情况会使LMON及PMON等关键进程遇到481错误,进而导致实例被逐出,实例崩溃。在LMON的trace文件中,会看到类似如下信息:
阅读全文…

分类: Oracle 标签: ,

VNC Viewer远程linux简明配置步骤

2014年4月10日 没有评论

现在linux用的越来越多,用惯了windows远程桌面,也希望以这样的方式管理linux机器。VNC Viewer就是满足这样需求解决方案中最常用的一个,简单方便。我这里也不做过多的论述,以step by step的方式简明描述一下配置步骤。

1 VNC Viewer软件的下载链接如下:
http://www.realvnc.com/download/viewer/
依自己的平台下载合适的版本。

2 在终端shell中运行命令“vncpasswd ”,添加客户端访问时使用的密码。

3  在终端shell中运行命令 “vncserver”,此时会在$HOME/生成一个隐藏文件夹“.vnc”。

4 进入cd 进入.vnc目录,编辑“ xstartup”文件。
将“unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc”这两行的注释符号“#”去掉。
同样,注释掉“# twm &”
在最后一行添加“gnome-session &”

5 编辑/etc/sysconfig/vncservers,添加下面的行:

VNCSERVERS=”3:root”
VNCSERVERARGS[3]=”-geometry 1440×900 -depth 16″

3代表5903端口,即VNCServer 监听的端口(其默认的是5900),客户端需要带这个端口号访问服务器端。
1440×900 客户端使用VNCViewer访问时的分辨率。

 6 配置vncserver开机自动启动

chkconfig vncserver on

在运行级别3和5上面将vncserver服务设置为开机自动运行。

7 使用vnc viewer连接服务器端。
注意这个客户端访问服务器端时候需要带端口访问,比如说vnc server端的IP地址是10.10.10.10,根据上面的配置,客户端使用vnc viewer 时应该输入的地址是 “10.10.10.10:5903”.

分类: Unix 标签: ,

hp-ux UDP 优化

2014年4月10日 没有评论

官方文档未有这方面设置,本设置取自于最佳实践

1 永久生效
请将如下几行添加到/etc/rc.config.d/nddconf文件中

TRANSPORT_NAME[0]=sockets
NDD_NAME[0]=socket_udp_rcvbuf_default
NDD_VALUE[0]=1048576

TRANSPORT_NAME[1]=sockets
NDD_NAME[1]=socket_udp_sndbuf_default
NDD_VALUE[1]=65535

TRANSPORT_NAME[2]=sockets
NDD_NAME[2]=socket_buf_max
NDD_VALUE[2]=1048576

2 临时生效

ndd -set /dev/sockets socket_udp_rcvbuf_default 1048576
ndd -set /dev/sockets socket_udp_sndbuf_default 65535
ndd -set /dev/sockets socket_buf_max 1048576

分类: Unix 标签: ,

sql profile

2014年4月1日 没有评论

做为DBA很想让每一个SQL的执行计划都是优的,且不变化。在实际工作中有一类应用,用到的一些表是按月分区的,每次帐期切换一下,下一个帐期在使用时这些表的当月分区数据量会由0条记录变为数万条。因ORACLE自动收集统计信息的滞后性,不准确的统计信息引发了执行计划的改变,因此会引发性能的问题。

稳定执行计划大体有三种方法:
1)锁定统计信息,这比较适合参数类的表。
2)使用HINT方式,这需要开发程序变更程序,这样的方式对开发人员要求较高,而且死板,索引重建改个名就麻烦了。
3)使用类似sql profile这样的方式。9i的时侯用outline,10时推荐用sql profile,11g时推荐用SQL Plan Baselines。
阅读全文…

分类: Oracle 标签: ,

killcpu.sh,can make all cpu used percent to 100%

2014年3月26日 没有评论

起初我们想测一下一台主机CPU空载与满负载(100%)时用电是不是相差很大。实测发现HP小机有差别,而IBM小机无变化。
用的是如下一段脚本,想让CPU利用率为多少就能到多少,脚本很简单,只有短短15行。

#! /bin/sh
# filename killcpu.sh
for i in `seq $1`
do
echo -ne ”
i=0;
while true
do
i=i+1;
done” | /bin/sh &
pid_array[$i]=$! ;
done
for i in “${pid_array[@]}”; do
echo ‘kill ‘ $i ‘;’;
done

阅读全文…

分类: Unix 标签:

oracle死事务处理

2014年3月26日 没有评论

曾遇到两次死事务的问题,都是同事对一张大表清理时,PC机异常掉电,系统自动回滚造成的。smon会对死事务清理,会产生大量enq:TX锁等待,业务基本处理HANG的状态
一般说来DBA没有什么办法,只能乖乖的等着smon清理完,可业务等不急,如此下来一堆人围着你心情非常不爽。[@more@]1、如何查看是否有死事务?还有多少个块需要恢复?

用sys用户执行如下SQL:

SELECT KTUXEUSN ROLLBACK_SEGS_NUM,
KTUXESIZ UNDO_BLOCKS,
KTUXESLT,
KTUXESQN, /* Transaction ID */
KTUXESTA STATUS,
KTUXECFL FLAGS
FROM SYS.X$KTUXE
WHERE KTUXECFL = ‘DEAD’;

2、如何算一下需要多少时间恢复完?
可以看一下eygle的文章:http://www.eygle.com/archives/2007/09/smon_rollback_dead_transaction.html
阅读全文…

分类: Oracle 标签: ,

solaris 9 top工具安装

2014年3月26日 没有评论

最近在折腾solaris,发现自己的系统里缺少了top工具,网上相关的文章真是少的可怜,为给遇到同样问题的朋友提供些帮助,我简单的整理了一下。[@more@]
做技术就是会了不难,难了不会,这个小小的问题我折腾了两个小时。top这个软件是不在sun给的那堆光盘中的,它是一个free software,可以到http://www.sunfreeware.com这里进行下载。我以solaris 9为例,其top package的下载链接为:ftp://ftp.sunfreeware.com/pub/freeware/sparc/9/top-3.6-sol9-sparc-local.gz,如下以1234的方式简单的说说:

1、按之上的连接把top-3.6-sol9-sparc-local.gz存在你的机器上,并上传到服务器.我把它传到了/tmp/yang这个目录。

sun480-1#[/tmp/yang]ls -l
总数 432
-rw-r–r– 1 root other 215455 6月 21 15:08 top-3.6-sol9-sparc-local.gz

2、用gzip解压缩

sun480-1#[/tmp/yang]gzip -d top-3.6-sol9-sparc-local.gz
sun480-1#[/tmp/yang]ls -l
总数 1216
-rw-r–r– 1 root other 617984 6月 21 15:08 top-3.6-sol9-sparc-local

阅读全文…

分类: Unix 标签: ,

How to know one object’s dependence?

2014年3月26日 没有评论

在我们的日常的维护中,有时我们会调整一张表的表结构或是修改某一个底层一些的procedure等对象,而对其有依赖性的一些对象就会更得无效。事实上我们常需要看一下有哪些Object对于要修改的这个Object有依赖性以确实影响的范围,从而确定修改的时间。[@more@]

1 以HR用户下的Table A进行测试,建一Procedure参照它。

SQL> select * from tab where tname=’A’;
TNAME TABTYPE CLUSTERID
—————————— ——- ———-
A TABLE

CREATE PROCEDURE “HR”.”TEST” as
v1 number;
begin
select count(*) into v1 from a;
end;

2 发现dependence的方法。
阅读全文…

分类: Oracle 标签: ,

ORA-01438诊断

2014年3月26日 没有评论

ORA-014380, “value larger than specified precision allows for this column”这种报错很常见,大部时侯我们知道自己用的是什么语句,操作的是哪张表,但是哪个value引起的问题就很难判断了。
产生ora-01438的原因也不少,比如表上的trigger的级联DML操作引起的,bug的原因,但最主要的原因还是插入的列值过来引起的。
按习惯上讲,我们可以做一个1438的errorstack的trace,不过一般这个trace很大且用处也不大,因为只能从中看到哪个表、哪个列、哪条语句引起的问题,但是不清楚哪个值引起的问题。

如下以一个测试来粗略说明一个发现原因的方法。

1、准备测试条件:
1)表T1

SQL> desc t1
Name Null? Type
——————————- ——– ————
COL1 NUMBER(2)

阅读全文…

分类: Oracle 标签: ,