Panther de Oracle10g R1 (PowerPC)で使っていた起動用のshellとStartupParameters.plistをベースに環境変数等を書き換えただけでは動作しない。
Oracle10g R1 10.1.0.3.0までは、リスナーの起動及び停止は$ORACLE_HOME/bin/dbstart又は、dbshut内で行われていなかったが、Oracle10g R2以降のdbstart/dbshutでは、lsnrctlにより起動/停止されるようになっている。
また、$ORACLE_HOMEをパラメータして渡すよう変更されている。
Oracle10g R2向けのスクリプトへ変更を加えないまま流用したらどうなるか?、、とりあえずPanther de Oracle10g R1(PowerPC)で試した際に動作していた起動用shellとStartupParameters.plistを環境変数だけを書き換えて実行した場合、どのような状況になるか確認しておく。(結果からお伝えしておくと、does not workなのは明白なのですが、どのようなエラーになるか知っておくとためになるでしょうから。)
以下に、Panther de Oracle10g R1で使ったStartupItems用のshellスクリプトとStartupParameters.plistを”単純に”パス等を書き換え、dbstart/dbshut内で実行されるリスナー起動部分を削除、onsctl(今回は起動しておかなくてもリスナーがハングしなくなった。というかonsはちゃんと動作しない。詳細は後日)、oem及び、isqlplusの起動部分を削除した。(エラーになるのでマネしないでね。どんなエラーになるか知りたいだけなので)
guppy:˜ discus$ cat /Library/StartupItems/Oracle/Oracle #!/bin/bash # define globally used paths/variables PATH=/bin:/sbin:/usr/bin:/usr/sbin
TEMP=/tmp TMPDIR=/tmp
ORACLE_BASE=/Users/shared/u01/app/oracle ORACLE_HOME=$ORACLE_BASE/oracle/product/10.2.0/db_1 ORACLE_SID= leopard1 NLS_LANG=Japanese_Japan.AL32UTF8 DYLD_LIBRARY_PATH=/usr/X11R/lib:$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:$DYLD_LIBRARY_PATH PATH=$ORACLE_HOME/bin:/usr/X11R/bin:$PATH ORACLE_OWNER_PATH=/Users/oracle ORACLE_OWNER=oracle TERM=vt100
export PATH ORACLE_BASE ORACLE_HOME ORACLE_OWNER ORACLE_OWNER_PATH ORACLE_SID DYLD_LIBRARY_PATH export TERM NLS_LANG
# debug echo '****************************' echo ' env for Oracle' echo '****************************' env
echo '' echo '*************************************' echo ' hard and soft shell resource limits' echo '*************************************' echo 'Hard / Soft limit:' launchctl limit
# get common system config setting . /etc/rc.common
if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ] then echo 'Oracle startup : cannot start' echo ' (cannot find one or both of dbstart or $ORACLE_HOME)' exit fi
StartService () { ConsoleMessage 'Starting Oracle database...' su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbstart" ConsoleMessage 'Started Oracle database' }
StopService () { ConsoleMessage 'Stopping Oracle Database...' su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbshut" ConsoleMessage 'Stopped Oracle Database.'
ConsoleMessage 'Stopping TNS Listener...' su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl stop" ConsoleMessage 'Stopped TNS Listener.' }
RestartService () { ConsoleMessage 'Stopping Oracle Database...' su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbshut" ConsoleMessage 'Stopped Oracle Database.'
ConsoleMessage 'Stopping TNS Listener...' su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl stop" ConsoleMessage 'Stopped TNS Listener.'
ConsoleMessage 'Starting TNS Listener...' su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl start" ConsoleMessage 'Started TNS Listener.'
ConsoleMessage 'Starting Oracle database...' su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbstart" ConsoleMessage 'Started Oracle database' }
RunService "$1"
guppy:˜ discus$ guppy:˜ discus$ cat /Library/StartupItems/Oracle/StartupParameters.plist <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Description</key> <string>Oracle10g 10.2.0.4.0 Database Server</string> <key>OrderPreference</key> <string>Late</string> <key>Provides</key> <array> <string>Oracle10g 10.2.0.4.0 Database</string> </array> <key>Requires</key> <array> <string>Disks</string> </array> <key>Uses</key> <array> <string>Disksv/string> <string>Network</string> <string>NFS</string> </array> </dict> </plist> guppy:˜ discus$ guppy:˜ discus$
|
上記をテスト実行してみると・・・・
以下のようなerrorになり動作しない。
errorの原因は複数あるようで、1つはConsoleMessageがshでしか認識されていないこと、dbstart及びdbshutの実行時$ORACLE_HOMEを引数として渡さないといけないこと、それとdbstart及びdbshut自体がバグっていることが原因。
特にOracle10g R1のdbstart/dbshutとOracle10g R2のdbstart/dbshutが異なっているのでOracle10g R1の頃のスクリプトはそのままでは使えない。
そのような状態でLeopardのSystemStarterで実行しようとすると以下のようなエラーでまくりでとなる訳です。(><)
この場合、特徴的なエラーメッセージがあるので、そのポイントを赤太字で強調しておいたので注意深くご覧ください。
guppy::˜ discus$ sudo /sbin/SystemStarter -nd start "Oracle10g 10.2.0.4.0 Database" SystemStarter[2256]: Found item: HP IO SystemStarter[2256]: Found item: HP Trap Monitor SystemStarter[2256]: Uses: Evaluating HP IO SystemStarter[2256]: Uses: Keeping HP IO SystemStarter[2256]: Found item: IntegoCommon ・・・・中略・・・・ SystemStarter[2256]: Running command (2257): /Library/StartupItems/Oracle/Oracle start ・・・・中略・・・・ ************************************* hard and soft shell resource limits ************************************* Soft / Hard limit: cpu unlimited unlimited filesize unlimited unlimited data 6291456 unlimited stack 8388608 67104768 core 0 unlimited rss unlimited unlimited memlock unlimited unlimited maxproc 2068 2068 maxfiles 65536 65536 /Library/StartupItems/Oracle/Oracle: line 46: ConsoleMessage: command not found dyld: Library not loaded: /b/227/network/lib/libnnz10.dylib Referenced from: /Users/shared/u01/app/oracle/oracle/product/10.2.0/db_1/bin/lsnrctl Reason: image not found /Library/StartupItems/Oracle/Oracle: line 48: ConsoleMessage: command not found /Library/StartupItems/Oracle/Oracle: line 50: ConsoleMessage: command not found ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener Usage: /Users/shared/u01/app/oracle/oracle/product/10.2.0/db_1/bin/dbstart ORACLE_HOME Processing Database instance "leopard1": log file /Users/shared/u01/app/oracle/oracle/product/10.2.0/db_1/startup.log /Library/StartupItems/Oracle/Oracle: line 52: ConsoleMessage: command not found SystemStarter[2256]: Oracle10g 10.2.0.4.0 Database Server (2257) did not complete successfully SystemStarter[2256]: none left SystemStarter[2256]: The following StartupItems failed to properly start: SystemStarter[2256]: /Library/StartupItems/Oracle SystemStarter[2256]: - execution of Startup script failed guppy:˜ discus$
|
上記のConsoleMessage: command not foundについてはスクリプトをbashではなくshで実行するようにすれば解決できる。
ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listenerについては、dbstart及び、dbshutの実行時に$ORACLE_HOME環境変数を引数として渡してやれば解決できる。
最後に一番問題なのは
dyld: Library not loaded: /b/227/network/lib/libnnz10.dylib部分。この問題の解決方法はオラクルが提供しているdbstart/dbshutの問題部分(後述)を修正するか、
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbstart"をsu $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbstart"のように-lオプションなしのsuコマンドで起動(USの方で-lオプション無しのsuコマンドで回避した方がいる模様。)するしか手っ取り早く解決する方法はなさそう。
他にあるというツッコミ大歓迎です。m(_ _)m
ということで前述の問題点を変更した自動起動/停止スクリプトを以下に示します。
尚、dbstartとdbshutはdiffによる差分のみ示しておきますね。(そのほうが分かり易いでしょうから。)
・まずStartupItemsに配置するOracle起動/停止/再起動スクリプト
以前のスクリプトを変更した部分は赤字太文字にしてあります。(削除部分除く)
guppy:˜ discus$ cat /Library/StartupItems/oracle/oracle #!/bin/sh # define globally used paths/variables PATH=/bin:/sbin:/usr/bin:/usr/sbin
TEMP=/tmp TMPDIR=/tmp
ORACLE_BASE=/Users/shared/u01/app/oracle ORACLE_HOME=$ORACLE_BASE/oracle/product/10.2.0/db_1 ORACLE_OWNER=oracle export PATH ORACLE_BASE ORACLE_HOME ORACLE_OWNER
# debug echo '****************************' echo ' env for Oracle' echo '****************************' env
echo '' echo '*************************************' echo ' hard and soft shell resource limits' echo '*************************************' echo 'Soft / Hard limit:' launchctl limit
# get common system config setting . /etc/rc.common
if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ] then echo 'Oracle startup : cannot start' echo ' (cannot find one or both of dbstart or $ORACLE_HOME)' exit fi
StartService () { ConsoleMessage "Starting Oracle database..." su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME" ConsoleMessage "Started Oracle database." }
StopService () { ConsoleMessage "Stopping Oracle Database..." su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME" ConsoleMessage "Stopped Oracle Database." }
RestartService () { ConsoleMessage "Stopping Oracle Database..." su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME" ConsoleMessage "Stopped Oracle Database."
ConsoleMessage "Starting Oracle database..." su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME" ConsoleMessage "Started Oracle database" }
RunService "$1" guppy:˜ discus$
|
・StartupItemsに配置するStartupParameters.plistは前のままで変更なし。
guppy:˜ discus$ cat /Library/StartupItems/Oracle/StartupParameters.plist <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Description</key> <string>Oracle10g 10.2.0.4.0 Database Server</string> <key>OrderPreference</key> <string>Late</string> <key>Provides</key> <array> <string>Oracle10g 10.2.0.4.0 Database</string> </array> <key>Requires</key> <array> <string>Disks</string> </array> <key>Uses</key> <array> <string>Disksv/string> <string>Network</string> <string>NFS</string> </array> </dict> </plist> guppy:˜ discus$
|
そして最後に一番重要なdbstartとdbshutの変更というか修正と...
MacOSXではLD_LIBRARY_PATHではなくDYLD_LIBRARY_PATH環境変数なので(Oracleさん修正宜しくね。;)
それも合わせて修正してあります。LD_LIBRARY_PATHを使っているのはバグでしょう。:)
以下、変更前のdbstartと変更後のdbstartと変更前のdbshutと変更後のdbshutのdiffです。
Oracle10g R2向け環境変数一覧(全プラットフォーム分)のマニュアルはこちら。
尚、Oracle10g release2 10.2.0.4.0 for MacOSX Server(Intelx86-64)のdbstart及びdbshutは$ORACLE_HOME/bin以下にあります。(書く必要はないと思いますが・・)
guppy:˜ oracle$ diff $ORACLE_HOME/bin/dbstart.org $ORACLE_HOME/bin/dbstart
86c86 < SAVE_LLP=$LD_LIBRARY_PATH --- > #SAVE_LLP=$LD_LIBRARY_PATH 89a90 > DYLD_LIBRARY_PATH=$ORACLE_HOME_LISTNER/lib; export DYLD_LIBRARY_PATH 147c148 < LD_LIBRARY_PATH=${SAVE_LLP}:${ORACLE_HOME}/lib ; export LD_LIBRARY_PATH --- > #LD_LIBRARY_PATH=${SAVE_LLP}:${ORACLE_HOME}/lib ; export LD_LIBRARY_PATH guppy:˜ oracle$ guppy:˜ oracle$ guppy:˜ oracle$ guppy:˜ oracle$ diff $ORACLE_HOME/bin/dbshut.org $ORACLE_HOME/bin/dbshut 75c75 < SAVE_LLP=$LD_LIBRARY_PATH --- > #SAVE_LLP=$LD_LIBRARY_PATH 78a79 > DYLD_LIBRARY_PATH=$ORACLE_HOME_LISTNER/lib; export DYLD_LIBRARY_PATH 117c118 < LD_LIBRARY_PATH=${SAVE_LLP}:${ORACLE_HOME}/lib ; export LD_LIBRARY_PATH --- > # LD_LIBRARY_PATH=${SAVE_LLP}/:${ORACLE_HOME}/lib ; export LD_LIBRARY_PATH guppy:˜ oracle$
|
さて、お待たせしました。上記変更したスクリプトとplistで起動/停止の動作確認です。以下のように問題なく起動するようになります。ニッコリ :)
まずは起動から。
guppy:˜ discus$ guppy:˜ discus$ sudo /sbin/SystemStarter -nd start "Oracle10g 10.2.0.4.0 Database" SystemStarter[11715]: Found item: HP IO SystemStarter[11715]: Found item: HP Trap Monitor SystemStarter[11715]: Uses: Evaluating HP IO SystemStarter[11715]: Uses: Keeping HP IO ・・・・中略・・・・ SystemStarter[11715]: Running command (11716): /Library/StartupItems/Oracle/Oracle start **************************** env for Oracle **************************** SHELL=/bin/bash TERM=xterm-color ORACLE_OWNER=oracle USER=root ・・・・中略・・・・ ORACLE_HOME=/Users/shared/u01/app/oracle/oracle/product/10.2.0/db_1 ・・・・中略・・・・ ************************************* hard and soft shell resource limits ************************************* Soft / Hard limit: cpu unlimited unlimited filesize unlimited unlimited data 6291456 unlimited stack 8388608 67104768 core 0 unlimited rss unlimited unlimited memlock unlimited unlimited maxproc 2068 2068 maxfiles 65536 65536 Starting Oracle database... Processing Database instance "leopard1": log file /Users/shared/u01/app/oracle/oracle/product/10.2.0/db_1/startup.log SystemStarter[11715]: Waiting for Oracle10g 10.2.0.4.0 Database Server SystemStarter[11715]: Waiting for Oracle10g 10.2.0.4.0 Database Server SystemStarter[11715]: Waiting for Oracle10g 10.2.0.4.0 Database Server Started Oracle database. SystemStarter[11715]: Finished Oracle10g 10.2.0.4.0 Database Server (11716) SystemStarter[11715]: none left guppy:˜ discus$ guppy:˜ discus$ ps -axc | grep tnslsnr 11728 ?? 0:00.03 tnslsnr guppy:˜ discus$ ps -ax | grep ora_ 11820 ?? 0:00.05 ora_pmon_leopard1 11822 ?? 0:00.04 ora_psp0_leopard1 11824 ?? 0:00.13 ora_mman_leopard1 11826 ?? 0:00.05 ora_dbw0_leopard1 11828 ?? 0:00.07 ora_lgwr_leopard1 11830 ?? 0:00.10 ora_ckpt_leopard1 11832 ?? 0:00.40 ora_smon_leopard1 11834 ?? 0:00.06 ora_reco_leopard1 11836 ?? 0:01.33 ora_cjq0_leopard1 11838 ?? 0:00.92 ora_mmon_leopard1 11840 ?? 0:00.07 ora_mmnl_leopard1 11842 ?? 0:00.02 ora_d000_leopard1 11844 ?? 0:00.02 ora_s000_leopard1 11848 ?? 0:00.03 ora_qmnc_leopard1 11918 ?? 0:00.03 ora_q000_leopard1 11924 ?? 0:00.03 ora_q001_leopard1 11931 ttys000 0:00.00 grep ora_ guppy:˜ discus$
|
次は停止。ところでLeopardのSystemStarterコマンドって-nオプション付けてもスクリプト実行しちゃうのね。今気付いた。www (^^;;;
guppy:˜ discus$ sudo /sbin/SystemStarter -nd stop "Oracle10g 10.2.0.4.0 Database" ・・・・中略・・・・ SystemStarter[11933]: Found item: Oracle SystemStarter[11933]: Requires: Evaluating Disks SystemStarter[11933]: Uses: Evaluating Disks SystemStarter[11933]: Uses: Evaluating Network SystemStarter[11933]: Checking Oracle10g 10.2.0.4.0 Database Server ・・・・中略・・・・ SystemStarter[11933]: Running command (11934): /Library/StartupItems/Oracle/Oracle stop ・・・・中略・・・・ Stopping Oracle Database... Processing Database instance "leopard1": log file /Users/shared/u01/app/oracle/oracle/product/10.2.0/db_1/shutdown.log SystemStarter[11933]: Waiting for Oracle10g 10.2.0.4.0 Database Server SystemStarter[11933]: Waiting for Oracle10g 10.2.0.4.0 Database Server Stopped Oracle Database. SystemStarter[11933]: Finished Oracle10g 10.2.0.4.0 Database Server (11934) SystemStarter[11933]: none left guppy:˜ discus$ ps -axc | grep tnslsnr guppy:˜ discus$ ps -ax | grep ora_ 12057 ttys000 0:00.00 grep ora_ guppy:˜ discus$
|
最後に、Pantherの頃だったか自動起動はするものの自動停止時にスクリプトが実行されていないという問題があったが、LeopardのSystemStarterでは解決しているようでOSの停止時にしっかり自動停止されていることが確認できた。以下、コンソールログとshutdown.log(自動停止時に記録するようになっているログファイル)

コンソールログ
4/18/09 1:20:03 AM com.apple.SystemStarter[25] env for Oracle 4/18/09 1:20:03 AM com.apple.SystemStarter[25] ORACLE_OWNER=oracle 4/18/09 1:20:03 AM com.apple.SystemStarter[25] ORACLE_BASE=/Users/shared/u01/app/oracle 4/18/09 1:20:03 AM com.apple.SystemStarter[25] ORACLE_HOME=/Users/shared/u01/app/oracle/oracle/product/10.2.0/db_1 4/18/09 1:20:03 AM com.apple.SystemStarter[25] Stopping Oracle Database... 4/18/09 1:20:03 AM com.apple.SystemStarter[25] Processing Database instance "leopard1": log file /Users/shared/u01/app/oracle/oracle/product/10.2.0/db_1/shutdown.log 4/18/09 1:20:12 AM com.apple.SystemStarter[25] Stopped Oracle Database.
|
shutdown.logファイルの内容
SQL*Plus: Release 10.2.0.4.0 - Production on Sat Apr 18 01:20:03 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
> Connected. SYS> Database closed. Database dismounted. ORACLE instance shut down. SYS> Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options Database instance "leopard1" shut down.
|
今日はこれまで。次回は、え〜〜〜〜!!! onsがバグってる?! というお話
バックナンバー
・Oracle10g R2 for MacOSX (Intel x86-64) released !!!
・Leopard de Oracle10g release 2 (Intel x86-64)
・Leopard de Oracle10g R2 (Intel x86-64) #1
・Leopard de Oracle10g R2 (Intel x86-64) #2
・Leopard de Oracle10g R2 (Intel x86-64) #3 (ちょいと寄り道)
・Leopard de Oracle10g R2 (Intel x86-64) #4 (Companion CD installation)
最近のコメント