Category Archives: Other

oracle 的高级复制出了点问题,记录下解决办法

早上来了同事就来找我,有两台同步的服务器数据库没有同步成功,查查咋回事。 一台A,从B处同步。蒙了一下,果然有个dba_jobs表,呵呵。 SELECT job,log_user,last_date,next_date,failures,broken,what FROM dba_jobs; 在A处执行上面的命令,好像repadmin的job都在正常执行。 在B处执行上面的命令,能查到类似下面的信息 JOB LOG_USER LAST_DATE ———- —————————— ——————- NEXT_DATE FAILURES B ——————- ———- – 47 repadmin 2006-05-16 19:37:29 4001-01-01 00:00:00 16 Y 显然是job挂了。查看了一下挂的时间,原来是联通机房机柜断电那天,A机器在联通机房,那天断电了6个小时。B机器上面的同步尝试了16次之后就挂起了。解决方法也不难,用repadmin用户登录,然后执行下面的语句,谁的job只能由谁来执行: EXECUTE DBMS_JOB.broken(47,FALSE,sysdate); 47是job id,sysdate表示当前时间。等会再看吧,执行成功之后会把 failures 重新计数,B变成N。

awk 数组的一个应用

sed和awk这本书看了好久了,sed部分将就看完了,awk部分基本没怎么看。上次有人问起一个比较文件的问题,发现awk来解决非常的简单。 比较两个文件A、B,打印出包含在A中的,但是不包含在B中的所有行。 根据题目要求,awk的解决方法如下: awk ‘NR==FNR {a[$0]=1} NR>FNR && !a[$0] {print $0}’ B A 里面NR表示行号,FNR表示当前文件中的行号。NR==FNR的时候,表示此时正在读取B文件,以B中的$0为索引,建立一个数组,并且都赋值为1。 当NR>FNR 的时候,表示此时在读取A文件,如果a[$0]为1,那么就表示这个$0是在B里面也存在的,是吧?所以,如果要B里面不存在的,那么就得是a[$0]不为1的,就是没做过赋值的。所以了,就是这个了。 进阶一下,比较两个文件A、B,打印包含在A中第一列,但是不包含在B中第二列的整行。 类似的: awk ‘NR==FNR {a[$2]=1} NR>FNR && !a[$1] {print}’ B A 比较文件内容还可以用comm命令,还有人提出了grep命令,例如第一个问题: grep -vwfB A

apache 的一个启动失败的问题的解决方法

这个问题网上好多方法,记录一下方便自己以后查看。 [Wed Apr 18 19:56:47 2007] [notice] Digest: generating secret for digest authentication … [Wed Apr 18 19:56:47 2007] [notice] Digest: done [Wed Apr 18 19:56:47 2007] [warn] pid file /usr/local/apache54/logs/httpd.pid overwritten — Unclean shutdown of previous Apache run? [Wed Apr 18 19:56:47 2007] [emerg] (28)No space left on device: Couldn’t create accept lock 解决方法就是 [...]

复习了一下 OSI 7层模型 和 tcp/ip 4层模型

老是记不住这些,每次被问道只能说知道,但是说不出来名字。刚从irc里面得到一个好记得方法。 All people seemes to need data processed. 这句话的字头刚好就是7层模型的字头。 A->Application 应用层 \ P->Presentation 表示层 — 应用层(HTTP、TFTP、FTP、NFS、SMTP、Telnet、SNMP、DNS) S->Session 会话层 / T->Transport 传输层 —– 传输层(TCP/UDP) N->Network 网络层 —– Internet 层(IP、ICMP、ARP、RARP) D->Data Link 数据链路层 \ P->Physical 物理层 / 网络访问层 这样似乎好记一点。。

今天又理解了nagios的两个配置

Host and Service Dependencies 当监控的host或者service之间有依赖关系的时候,可以通过定义dependence来让nagios知道应该通知什么。 比如我这里的服务器都在idc托管,而我的nagios却是运行在公司的一台服务器上面。这样,有时候可能就需要考虑依赖关系了。比如当公司的网络出问题的时候(事实上经常出现),比如断网,总不能让他也认为是idc托管的服务器出问题了而给你发通知吧。host dependence正好可以解决这个问题。 比如 A 是idc的,B 是公司的网关(或者某个应该一直在线的服务器,比如sina.com.cn)。当nagios检测到A连不上的时候,他会根据dependence来检测B,如果B也连不上了,那么就只通知你B连不上了。 大概的配置如下 define hostdependency{ host_name B dependent_host_name A notification_failure_criteria d,u } Notification Escalations escalations 的意思就是扩大。整个这个的意思应该就是扩大通知范围。之前一直没理解是什么意思,今天看了才明白。其实就是定义出问题的时候,什么时候扩大通知。 比如A服务器挂了,他对应的contactgroup就会立刻得到通知。但是,如果这个组里面的人在睡觉或者在做什么事情忽略了这个通知,怎么办呢?当然nagios会通知多次,但是如果这些都忽略掉了或者没有收到怎么办?这样这个escalations就有作用了,他可以定义几次通知contatgroup之后就开始通知别的人。还有一些别的功能,就不多说了。

unix 进程

看了 Speaking UNIX, Part 8: UNIX processes 之后做一点笔记。 A real multitasker 在unix、linux、freebsd、mac os x、windows等系统里面,计算任务都表现为进程。unix 看上去可以同时运行很多任务,因为每个进程都只占用一部分cpu时间。 进程就像一个容器,包括运行的程序,环境变量,程序的输入输出等。可以把进程想像为一个国家,有自己的边界,资源和产品。 每个进程也都有自己的owner(属组),owner通常是运行这个程序的人,有些系统服务的owner或许会是某个特殊的用户,或者是root。例如,为了安全,某个Apache server的owner可能是属于一个叫www的用户的,这个用户有权限来存取web服务需要的文件,这些文件别的用户是不能访问的。 一个进程的owner可能会改变,但是一个进程在同一个时间只能有一个owner。 setuid和setgid可以让一个进程获得比owner更高的权限。 一个setuid进程,例如top,运行的时候使用的是owner的权限。因此,当你运行top的时候,你的权限就被提升为root了。类似的,一个setgid进程,运行的时候具有的是group owner的权限。 例如,在Mac osx里面的wall命令(就是write all的缩写),因为他需要给每个物理或者虚拟的终端设备写信息,所以他被setgid tty。 Taking inventory 类似其他系统资源,unix系统里面的进程id总数虽然多,但是是有限的(实际上,一个系统几乎从来都不会出现进程id数不够的情况)。每一个新的进程,例如运行vi或者xclock,都会立刻分配一个进程id。在unix系统里面可以用ps命令查看进程。 ps -a -w -x 可以显示所有进程列表。-a显示所有在tty设备上面运行的进程,-x显示所有不是在tty设备上面运行的程序,-w使用“宽”模式显示,用来查看进程一些长的项目。 -o 还可以指定输出信息的列表。比如 -o pid,uname,command,state,stime,time 。 Daddy, where do processes come from? 在unix系统里面,有些进程会从系统启动到关闭整个过程中一直运行。大部分进程从任务开始到结束都很快。 每个新的unix进程都是从已经存在的进程产生的。另外,每个新的进程(子进程)都克隆自他的父进程。at least for an instant, until the child continues [...]

awstats 如何统计以前的日志?

突然想安装一个awstats了,参考 车东 的文章,安装了一个。可是发现一个问题,设置了logfile为 access_log.%YYYY-24%MM-24%DD-24.log 之后,发现只能把昨天的日志统计进来,可是我的log下面还有好多呢,想统计以前的,怎么弄呢?幸好,awstats已经考虑到这个问题了。 awstats.pl 脚本支持在命令行指定logfile,这样简单了,改变这个参数就可以了。不过要注意的是,如果你的data里面已经处理新的日志,那么指定logfile也没用了,以前的没办法更新进来了。只能是删掉data里面的内容,然后重新从最早的开始生成一遍。我写了一个脚本来做这个事情。 #!/bin/bash   awstats_dir=/opt/tt2/awstats/wwwroot/cgi-bin logfile_dir="/usr/local/apache/logs/"   cd $awstats_dir   for file in `find $logfile_dir -name "access_log.2*" | sort`;do #echo "$file" ./awstats.pl -update -config=wd -LogFile=$file done 保存为 awstats.sh ,然后执行就可以了。他会查找 logfile_dir 下面所有的 access_log.2 开头的文件,作为参数来更新记录。

oracle在rh里面的安装流程

第1部分 安装操作系统 首先需要安装系统….Red Hat Enterprise Linux 2.1,Red Hat Enterprise Linux 3,Novell SUSE Linux Enterprise Server 8 是通过 oracle 10g认证的三个linux发行套件,不知道oracle 10.3有没有对这个修改。默认情况下,oracle 10g只能在rh的这两个版本安装,如果不是上面两个,运行安装程序会直接打印错误。不过也有方法在别的版本安装的,后面有说明。 按照上一篇文章,安装linux的时候可以不选择图形界面,这样还可以节省不少空间。按照oracle的文档,说需要安装下面的这些软件包。 rpm -q gcc make binutils openmotif setarch compat-db compat-gcc \ compat-gcc-c++ compat-libstdc++ compat-libstdc++-devel 我实际安装过程中,compat-gcc compat-gcc-c++ compat-libstdc++ compat-libstdc++-devel 这几个包我没有安装也可以安装oracle。

oracle 文本界面的安装

oracle 的手册里面讲的通常都是图形界面下面的安装,就是用oracle登录桌面,然后运行安装程序的方法。可实际上维护服务器的时候,大多用的还是远程文本界面。这样很有必要看看如何通过文本界面来安装oracle。 oracle本身的安装程序也提供了这个方法,就是使用 responseFile 。这个 responseFile 其实就是在图形界面安装的时候的一些选择,保存到文件之后,直接告诉安装程序从这里读取设置就好了。将oracle的安装文件 ship.db.lnx32.cpio.gz 解压: gunzip ship.db.lnx32.cpio.gz cpio -idmv < ship.db.cpio 这样可以看到有个Disk1的文件夹,里面有个response目录,里面好多response文件,不过我还不知道这些有什么区别,里面设置项也很多,还没弄明白。我使用的不是这里的response文件。是通过下面的方法获取的rsp文件。 可以通过在记录模式中运行软件或通过手动编辑示例响应文件来创建响应文件。以下是一个基本演示: 1. 用此命令启动 OUI 来创建响应文件: ./runInstaller -record -destinationFile /tmp/recorded.rsp 2. 选择您需要的所有部分(源目标目录、主目录、主目录名、产品)。 3. 当您看到 Summary 屏幕时,不要单击 Install,而是单击 Cancel。 4. 仔细查看在 tmp/recorded.rsp 中创建的结果响应文件。如果需要,可以手动编辑该文件,只要您遵守使用规定的格式即可(请参见文档)。 5. 现在如下执行静默安装: ./runInstaller -silent -responseFile /tmp/recorded.rsp 在运行脚本时将会报告安装的进度。 如果您由于响应文件中的条目不正确而遇到安装故障,安装将失败并显示一条诊断消息。详细信息可在 oraInventory/logs 目录中找到。在每次使用响应文件运行 OUI 时,会创建具有 installActions-.log 和 silentInstall.log 格式名称的日志。 这样,只需要找台机器在图形界面下面运行一下安装程序,生成一个rsp文件,然后放到真正需要安装的服务器上面,修改一下安装路径,设置一下sys密码,就可以开始安装了。

升级了一下cacti

cacti几个月前就提示我Architecture插件有升级了,一直懒得弄。今天发现cacti也升级了,就去看了看,顺便升级了一下。记录一下升级需要注意点的东西。 debian 里面的cacti设置的比较好,log、rra、resource目录都是分开放的,不在cacti目录下面,做了一个链接过去。其他系统升级的时候注意要先备份这三个目录先。建议使用debian的这种方法,这样下次升级省事了。 然后就是很简单的,下载cacti,覆盖,修改config文件,浏览器连接,提示升级,按照步骤来就行了。然后再打上Architecture补丁,再修改config文件就行了。