caiwolf 回复于:2004-10-17 00:47:46 |
顶一个.:)
|
wwashington 回复于:2004-10-17 11:32:42 |
刚才的文件是 /etc/rc.d/init.d/dbora,现在补充一个 dbstat,
bash-2.05a# cat $ORACLE_HOME/bin/dbstat
GREP_UNIX=`uname | awk '{if($1 ~ /(^SunOS|^HP-UX)/) print $1}'`
if ! [ "$GREP_UNIX" = "" ]
then
GREP_FILE=/usr/xpg4/bin/grep
GREP_FLAG=ef else
GREP_FILE=/bin/grep
GREP_FLAG=efw fi echo
echo "# ps -$GREP_FLAG | $GREP_FILE -e ora_ -e lsnr| grep -v grep"
echo
ps -$GREP_FLAG | $GREP_FILE -e ora_ -e lsnr| grep -v grep
echo
bash-2.05a# cat $ORACLE_BASE/.bashrc
# User specific environment and startup programs
ORA_FLAG=`echo $PATH | grep -e ^$ORACLE_BASE`
if [ "$ORA_FLAG" = "" ]; then
PATH=$ORACLE_HOME/bin:$PATH
export PATH fi
JAVA_HOME=/usr/java/1.18 LD_ASSUME_KERNEL=2.2.5
export JAVA_HOME LD_ASSUME_KERNEL
. /usr/i386-glibc21-linux/bin/i386-glibc21-linux-env.sh
补充:最近有朋友提出疑问为什么 lsnrctl 用 su 而不是 su -,其实这只是个人习惯的问题,我把Oracle的变量放在 /etc/profile 了。如果所有Oracle的变量都放到oracle用户的 .bash_profile,必须是 login 或 su - 成为oracle才有效,如果放在oracle用户的 .bashrc,则 login 或 su - 或 su 成为oracle都可以,而且脚本里的一些路径也可以简化。在 /etc/profile 的变量对所有用户都有效。两种方案各有好处吧,看大家喜欢用哪个。
|
零二年的夏天 回复于:2004-10-17 11:53:07 |
不错。 感谢!:D
|
酷乐吧 回复于:2004-10-20 16:29:29 |
好是好啊!就是看不懂.我菜嘛!没关系.我在努力之中.
|
zlg88 回复于:2004-10-22 20:03:26 |
使用Oracle安装后自带的dbstart和dbshut两个命令不是很好吗!!!
|
wwashington 回复于:2004-10-23 11:19:06 |
[quote:43647d4cf2="zlg88"]使用Oracle安装后自带的dbstart和dbshut两个命令不是很好吗!!![/quote:43647d4cf2]
看来你还处于初学阶段。如果机器作为业务机托管,那么管理员当然希望开机的时候能自动启动数据库,关机的时候自动关闭数据库。类似的脚本已经有很多,我至少看了十个以上的版本。 :em02:
但是,那些脚本只是利用了 rc*.d 的原理而已,并不是真正的系统服务。关于系统服务的定义我在楼顶已经写了,请你仔细读一下。如果看不懂,可以问你的老师或者你的同事。 :em17:
BTW:PostgreSQL 也是有数据库自带的 pg_ctl 和 postmaster 这两种启动方式,为什么在系统服务里(/etc/rc.d/init.d/postgresql)还要定义一次呢?我的答案是:一个是应用程序级的,一个是系统级的。你的答案是什么?
|
ecloud 回复于:2004-10-23 11:28:29 |
脚本不错 不过我不认为rc启动的东西跟init启动的东西有什么本质上的不同
实际上两者就是派别的差别,一个BSD系一个SYSV系
对于Linux或者BSD之类的传统内核来说,除非做成kernel module,其余的都是应用程序级别的
|
zlg88 回复于:2004-10-23 13:34:57 |
[quote:a193b5d2e5="wwashington"]
看来你还处于初学阶段。如果机器作为业务机托管,那么管理员当然希望开机的时候能自动启动数据库,关机的时候自动关闭数据库。类似的脚本已经有很多,我至少看了十个以上的版本。 :em02:
但是,那些脚本只是利?.........[/quote:a193b5d2e5]
Oracle数据库本来就是应用级的东西呀!在你的脚本非要将Oracle的启停整合到Linux系统中,到头来还是要用到$Oracle_home/bin/orastart,orashut,orastate这些命令的??
除非你是用到了Oracle提供的内部API函数来做这件事,这样才是无缝整合呀!!
|
Redhatbug 回复于:2004-10-23 13:51:38 |
感谢楼主的努力了~~ 我菜故我在~~~以后希望你有更好的贴,学习学习呢。
|
wwashington 回复于:2004-10-24 12:01:07 |
[quote:726307791a="zlg88"]
Oracle数据库本来就是应用级的东西呀!在你的脚本非要将Oracle的启停整合到Linux系统中,到头来还是要用到$Oracle_home/bin/orastart,orashut,orastate这些命令的??
除非你是用到了Oracle提供的内部API函数来做这件?.........[/quote:726307791a]
呵呵,我实在是怀疑zlg88网友是否有Unix技术基础。看他的所有疑问,我有充分的理由怀疑他是做HR或行政、猎头工作的,懂一些皮毛,但从来没有读过任何init.d的脚本。什么叫Oracle提供的内部API函数?做系统管理要用这些吗?这种感觉,就好象是脱裤子打屁--多此一举。
建议你装一个 Redhat 7.3 或者 9.0,然后认真阅读 /etc/rc.d/init.d 目录下的 atd 和 postgresql,学习一下什么叫做 service script。反正我读过那么多脚本,包括我自己写的Linux下的Informix系统服务脚本,从来没看到它们调用了什么内部API函数,或许你可以指导我一下。
另外,你也可以去Google搜索“oracle unix 自动启动”,文章很多,推荐你看下面这个。看完了并且看懂了再对比我的文章,然后你可以评论我说水平差,我绝对没意见。真的,我不是赌气或骄傲,我是发自内心的希望有人指导我,让我在技术上继续进步。
http://www.chinalinuxpub.com/doc/howto/Oracle-HOWTO-6.html
|
Vogel 回复于:2004-10-24 14:28:09 |
楼主说话好吊!佩服你的技术,因为你比我强太多了!但是不喜欢你的人品!太自负!
跑题了,见谅!
好贴,还是顶!!!
|
wwashington 回复于:2004-10-24 15:22:09 |
呵呵,楼上的言重了。其实我绝对欢迎技术讨论的,但是很讨厌无理取闹。你再仔细看一下zlg88网友的发言,这象是技术论坛的人说的话吗?
为什么我上网十年来一直泡水木清华?想必现在大家很清楚原因了。我追求的是技术的进步,可以互相批评指正,但绝对不是盲流般的瞎吵闹。
来ChinaUnix除了因为这里有很多专门讨论Unix技术的版块外,还有IT职业生涯,可以了解技术职位的供求信息。我就是因为这两个原因来的。
|
ecloud 回复于:2004-10-24 18:20:27 |
zlg88说的意思大概是把Oracle实例作为一个kernel module来启动,呵呵这个其实也不太难,只要Oracle提供相应的调用
其实写个kernel module并不比shell脚本难多少,关键是你的编程风格要好,避免漏洞
比如IBM的HACMP,其实就是个应用程序,同时支持手工和kernel module两种方式启动,我觉得这种是比较好的
说句题外话
这种脚本在非bash系统环境中或者某些BSD风格的发行版(比如slackware)是行不通的,所以别吹得太厉害了
|
Vogel 回复于:2004-10-24 21:29:52 |
呵呵,再顶一把!
|
wwashington 回复于:2004-10-24 23:54:24 |
[quote:2e2541c563="ecloud"]zlg88说的意思大概是把Oracle实例作为一个kernel module来启动,呵呵这个其实也不太难,只要Oracle提供相应的调用
其实写个kernel module并不比shell脚本难多少,关键是你的编程风格要好,避免漏洞
比如IBM的HACMP..........[/quote:2e2541c563]
早说了这是基于Redhat的啦,如果你把chkconfig移植到其他平台也可以。据我所知Suse是有的,因为我刚装完,Solaris上也有,网上有移植版。Slackware不知道,很多年前在学校读书的时候装过。况且,把Oracle写成kernel module是多此一举吧?目前在Linux上内置的数据库如mysql、postgresql,哪个不是用init.d启动而用kernel module来启动的?
insmod我也会用啊,在很早系统默认不支持vfat的时候、在系统不支持某声卡的时候、在内核不支持ppp_mppe要手工加载的时候。从来没听说把数据库做成kernel module来调用的。我真的开了眼界了,佩服zlg88和ecloud的创意。但是你们有实践吗?系统管理员欣赏这种启动和关闭数据库的方式吗?天啊,用insmod和rmmod来启动和关闭Oracle简直是天方夜谭,太伟大了。
BTW:刚才关于ecloud所说kernel module,我没理解错吧?可能是我想错了也不一定。不过即使真的写成了系统模块,那也不能叫做以系统服务方式启动呀,应该叫做以系统内核模块方式启动。莫非大家对英文单词的理解不同?
http://www.netadmintools.com/art94.html
Using chkconfig & /sbin/service to manage run start up scripts in RedHat
文章是说利用 chkconfig 和 service 来管理启动脚本,其中的service是系统服务的意思,我从来没听说过应用程序服务,那可能是个新名词。
bash-2.05a# service --status-all
bash-2.05a# man insmod
INSMOD(8) Linux Module Support INSMOD(8)
NAME
insmod - install loadable kernel module
SYNOPSIS
insmod [-fhkLmnpqrsSvVxXyYN] [-e persist_name] [-o module_name]
[-O blob_name] [-P prefix] module [ symbol=value ... ]
DESCRIPTION
insmod installs a loadable module in the running kernel.
insmod tries to link a module into the running kernel by resolving all
symbols from the kernel's exported symbol table.
If the module file name is given without directories or extension, insmod
will search for the module in some common default directories. The
environment variable MODPATH can be used to override this default. If a
module configuration file such as /etc/modules.conf exists, it will
override the paths defined in MODPATH.
|
wwashington 回复于:2004-10-25 00:05:58 |
[quote:3c9ba420be="ecloud"] 说句题外话
这种脚本在非bash系统环境中或者某些BSD风格的发行版(比如slackware)是行不通的,所以别吹得太厉害了
[/quote:3c9ba420be]
大家好好的讨论技术问题,怎么叫吹得厉害呢?我大二开始上网,工作七年了,上网十年是事实,来ChinaUnix之前只去水木清华一个技术BBS也是事实。
相反,zlg88的话让我不知所云,ecloud讲的看着很高深,谈到kernel module的编程了,令人钦佩,可惜只能想想,实用价值不高。我真是这样认为的。
|
ffaatt 回复于:2004-10-26 15:13:09 |
上网十年,应该经历过无数次BBS上的论战了,怎么火气还是这么大呢?
|
wwashington 回复于:2004-10-26 15:41:46 |
[quote:c892e8cc9e="ffaatt"]上网十年,应该经历过无数次BBS上的论战了,怎么火气还是这么大呢?[/quote:c892e8cc9e]
刚才我看了你的原创精华,别人看懂了你的ping用法并且认为多余,你也辩解了呀。
问题在于,我写的东西某些人根本没看懂(或者完全没能力看懂,或者大致看懂了却想做出非常高深的设想),就枉加评论。在这种情况下,我丝毫没有攻击对方的人品,只说对方没有Unix基础(这是事实),或者过于高深、实用价值不高(这也是事实)。
如果连摆事实、讲道理也算错的话,那么我们是否要学习基督的精神,打了你的左脸把右脸送上去?辩论不是打架,不是攻击。大家要对自己说的话负责,任何论点必须有证据支持。
我认为写系统服务脚本用Oracle API是多余的,或者说用kernel module来启动、关闭数据库是不切实际的,有mysql、postgresql、atd等做证据。很遗憾,我不接受你认为我火气大的说法,证据不足。
|
hrcxf 回复于:2004-10-27 20:49:44 |
的确多看一下/etc/rc.d/init.d下面的脚本,收获会很大的!
|
chaoping 回复于:2004-10-27 21:33:57 |
看起来人气很汪啊. 我也谈谈我的看法.
说实话,我不觉的这个脚本和oracle 自己带的dbstart/dbstop有什么本质区别.
而且,你常常启动数据库么?你常常关闭数据库么?
你估计没有大型数据库的管理的经验.
很多时候,关闭繁忙的大型数据库,不会使用你的自动启动,关闭的脚本的.
而且很多时候出现shutdown 共享内存断不释放的情形,你需要ipcrm删除,这个时候,需要正确辨别该Instance对应的shared memory,删除之.
|
wwashington 回复于:2004-10-28 13:45:51 |
[quote:1b82d84b9e="chaoping"] ......
说实话,我不觉的这个脚本和oracle 自己带的dbstart/dbstop有什么本质区别.
而且,你常常启动数据库么?你常常关闭数据库么? ......
而且很多时候出现shutdown 共享内存断不释放的情形,你需要ipcrm删除,这个时候,需要正确辨别该Instance对应的shared memory,删除之.
[/quote:1b82d84b9e] 可能你有丰富的开发经验,管理单机经验,很明显你没管理多台业务机的经验。
正规的的电信设备商、运营商,都有专门机房放服务器,里面冷得半死,除非
特殊需要一般人是不进去的。由于高可用性的要求,晚上、节假日也必须保证 无故障,通常机房旁边有小房间值班。
有时大家远程值班,万一半夜或放假停电怎么办?UPS 只能支持 4 小时怎么
办?放心,UPS 会自动 shutdown 系统的。但是,如果数据库和业务系统没有
按服务方式安装,在系统关机前没有关闭数据库,就很可能带来灾难。由此
可见,服务脚本是很重要的(不论是否支持 chkconfig)。
你这种情况就是,开发和运营脱钩,没见过公司要对公众承担百万、千万级
用户不间断运营的责任,所以无法理解运营的需求。没办法,业务小,当然 责任小,理解和接受“高可靠性”方案的机会也小。
其实,ipcs 也没什么神秘的,在配置低的机器上安装 Informix 时经常出现
share memory 问题,但是一旦设置好了就非常稳定。这在我写 dbids 脚本
之前就已经发现并解决了,只要耐心调整 onconfig.online 的一些参数就行,
不算什么难题。
这种问题本质上是资源冲突,应该通过升级硬件设备或调整数据库配置来解决,
用 ipcrm 释放资源只是治标不治本,是下策。至于 Oracle 的资源释放,我
写个简单的脚本给你看就知道了,如果你觉得有必要可以加到 service 脚本
里面。脚本很明显是可以随需应变,不断完善的,你何必那么痛恨它?
ipcs -m | grep oracle | awk '{ print $2 }' | xargs -i echo ipcrm shm {}
ipcs -s | grep oracle | awk '{ print $2 }' | xargs -i echo ipcrm sem {}
真正使用的时候,把最后一段的 echo 删掉,或者在最后加上 | sh,都可以
删除资源。如果一次删不掉,你可以做个循环,把 ipcs -m | grep oracle
为空作为退出条件,sleep 两秒再杀一次。
|
zbyue 回复于:2004-10-28 14:57:31 |
帮我写一个启动Mysql 4.0的脚本
我自己装的,还没有研究,我用了两年Linux,天天写程序,没有研究shell.
|
wwashington 回复于:2004-10-30 12:56:30 |
[quote:f0a0b04a5f="zbyue"]天天写程序,没有研究shell.[/quote:f0a0b04a5f]
这就是你的不对了。如果要运营,系统服务是必需的,你们公司早该有
专人去完成这件事了。如果只是开发,那就是可有可无。既然可有可无, 那何必找我写呢?我只是跟大家分享经验,并不提供服务。
你抽空看一下我推荐的样板(/etc/rc.d/init.d里的atd和postgresql),
就可以自己写啦。shell 编程跟学 C 语言没太大差别,掌握了几个基本
语法组合一下就可以啦,重点是学习正则表达式,很复杂。
|
llzqq 回复于:2004-10-30 17:11:27 |
火药味很浓!
|
chaoping 回复于:2004-11-01 17:07:56 |
[quote:4108b79b0e="wwashington"]
可能你有丰富的开发经验,管理单机经验,很明显你没管理多台业务机的经验。
正规的的电信设备商、运营商,都有专门机房放服务器,里面冷得半死,除非
特殊需要一般人是不进去的。由于高可用性的要求,晚上、节假?.........[/quote:4108b79b0e]
We just talk about pure technical problems, no fire:)
If you have real important database, it is impossible that the on-call dba will shutdown his cell phone. If database down and cell phone power off, he will be fired.
But one fact, few high end database system will enable database automatic startup when server boot.
We are running one of the most active database systems in the world, and we don't use db autostart script.
Though, we do have a lot of in-house developed scripts.
And one final comment, running oracle in unix, sometimes we have tens of instances running in one box(usually in QA/DEV), and using your script will make all instance down in the host:)
You not only need to know shell/unix, but only oracle to remove *ONLY THOSE CRASHED INSTANCE* 's ipcs resource.
|
wwashington 回复于:2004-11-02 00:28:14 |
I don't think no shell can kill CRASHED INSTANCE. The key is that you already know what to do, then shell helps you to do it automatically. People call it system service. Actually we are not talking about oracle itself, but the way to make service.
According to your opinion, no service is needed, most linux like readhat/suse/mandrake and Microsoft win2k/winxp/win2k3 are bullshit cauz they recommend people to run service. Are you Bill Gates No.2?
|
chaoping 回复于:2004-11-02 08:14:31 |
:)
|
wwashington 回复于:2004-11-18 19:45:18 |
:em02:
|
江南大米 回复于:2004-11-19 10:49:43 |
[quote:15f3cf2d84="chaoping"]
We just talk about pure technical problems, no fire:)
If you have real important database, it is impossible that the on-call dba will shutdown his cell phone. If database down and cell phone pow..........[/quote:15f3cf2d84]
:em17:
|
outol 回复于:2004-11-19 11:23:03 |
好强啊,厉害!
|
Feraligatr 回复于:2004-11-19 12:05:05 |
楼主耐心地详细解释了很多,这对不了解Redhat系统服务的人是非常有帮助的
如果不明白系统服务的好处在哪,那就仔细地读一读楼主的解说,这不是个值得争辩的问题
这东西已经存在了五年以上了,确实是管理人员必须掌握的
|