ドキュメントOracle Database Installation Guide 12c Release 1 for Linux (E41491-10)
に従って、開発作業のためにOracle Linux 7に12cをインストールしました。以前のOracleデータベースの管理経験は、Novell Netwareではバージョン8、Windows x64では10gR2でした。私はLinuxをあまり使いませんでした。Ubuntuのいくつかの単純なサービスを除いては。
今回はインストール時にデータベースを作成しないことを選択したため、デフォルトのデータベースにはないいくつかのオプションが必要だったため、Oracle Database Configuration Assistantを実行する必要がありました。私は本ですべてを行いましたが、私は遭遇しました問題1:Oracle_HOMEまたはOracle_BASE環境変数が作成後に設定されていませんでした。これらを設定するために.bash_profileを編集する必要がありました。
データベースはデフォルトの場所である_/home/Oracle/app/Oracle/oradata/<SID>
_に作成されました。リスナーを使用して起動および構成されました。データベースの作成が完了すると、問題2:sqlplus/AS SYSDBAを使用してOracleインスタンスに接続できないに気付きました。 _ORA-12162: TNS:net service name is incorrectly specified
_が表示されます。ドキュメントOracle Database Error Messages 12c Release 1 (E49325-06)
に示されているように、TNSNAMES.ORAの接続記述子にエラーが含まれていないかどうかを確認しましたが、含まれていません。このファイルの完全な内容は次のとおりです(KITETは私のインスタンス名です):
_KITET =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = ORALINUX7VM)(PORT = 1521))
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME = Kitet)
)
)
_
_sqlplus <user>/<password>@<service_name>
_を指定するだけで接続しました。
仮想マシンを再起動した後、問題3:リスナーとOracleが自動的に起動しないに気付きました。 _lsnrctl start
_を使用してリスナーを起動できますが、データベースを起動できません(_/ AS SYSDBA
_を使用して接続できません)。 service_nameで接続文字列を指定して接続できると思っていましたが、_ORA-12505: TNS:listener does not currently know of SID given in connect descriptor
_で迎えられました。
インターネットのあちこちを調べたところ、Oracle_SIDをエクスポートすることで「起動できない」という問題を軽減できることがわかりました。そのため、_~/.bash_profile
_を(もう一度)編集することでそれを実現しました。
私がまだやらなければならないこと
Oracle Linux 7では、起動時に自動的にリスナーとデータベースの起動が必要です。もちろん、ドキュメントOracle Linux Administrator's Guide for Release 7 (E54669)
を所持していますが、Oracleデータベースとリスナーの起動スクリプトを作成する方法に関する情報はありません。既存のサービスの開始と停止に関する情報があります。もちろん、電源を入れるたびにVMボックスとスタートアップサービスにログインできません。
手伝ってください。
私自身の調査、Googleの結果、Ansibleの回答に基づいて、Oracle Linux 7の完全なソリューションを思いつくことができました。あなたがKitet
を読むたびに-これは私のOracleインスタンスSIDです。
データベースを起動または停止するには、dbstart
およびdbshut
スクリプトをそれぞれ使用します。それらは$Oracle_HOME/bin
にあります。どちらも$Oracle_HOME
というパラメーターが必要です。 $Oracle_HOME
環境変数がない場合は、最初に次のコマンドを実行して設定する必要があります(さらにいくつか)
. /usr/local/bin/oraenv
(前のピリオドに注意してください。それは$Oracle_HOME/bin/oraenv
ではありません)。 Oraenvスクリプトは、正しい$ Oracle_BASEを設定するために必要なSIDを要求します。これで、簡単に
dbstart $Oracle_HOME
または
dbshut $Oracle_HOME
リスナーとデータベースを起動および停止します。
lsnrctl
を使用してリスナーを開始したり、sqlplus / as sysdba
を使用してSQL * Plusを開始したりするには、ユーザーが環境変数を手動で設定したくない場合を除き、事前に. oraenv
を実行する必要があります。 Linuxボックスにインスタンスが1つしかない場合は、ユーザーのbashプロファイルを編集して. oraenv
の実行を自動化する可能性があります。入る
nano ~/.bash_profile
次の行を入力します(おそらく、このファイルにはumask 022
のように、すでにOracle Database Installation Guide 12c Release 1 for Linux E41491-10
エントリがあります)。
export Oracle_SID=Kitet
export ORAENV_ASK=NO
. /usr/local/bin/oraenv
export NLS_LANG=POLISH_POLAND.AL32UTF8
unicode_start
1行目と3行目は自明です。 2行目はoraenv
にデータベースSIDを要求せず、エクスポートされた変数を使用します。 4行目はオプションであり、クライアント接続の言語設定を設定します(たとえば、SQL * Plusまたはlsnrctlは、可能な場合は母国語で話します)。 5行目は、コンソールがアクセント付き文字を表示するために必要であり、オプションでもあります。
リスナーとデータベースの起動とシャットダウンの自動化
1)インスタンスが作成されたら、/etc/oratab
ファイルを編集して、各インスタンスの再起動フラグを「Y」に設定します。私の行は次のとおりです:
Kitet:/home/Oracle/app/Oracle/product/12.1.0/dbhome_1:Y
2)次に、/etc/init.d/dbora
という名前のファイルをrootユーザーとして作成し、次の内容を含めます。
#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_HOME to be equivalent to the $Oracle_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the
# Oracle database in ORA_HOME.
# path to Oracle home (needed only to check if dbstart exists)
ORA_HOME=/home/Oracle/app/Oracle/product/12.1.0/dbhome_1
# this is the user who installed Oracle
ORA_OWNER=Oracle
if [ ! -f $ORA_HOME/bin/dbstart ]
then
echo "Oracle startup: cannot start"
exit
fi
case "$1" in
'start')
# Start the Oracle database and listener:
# Remove "&" if you don't want startup as a background process.
export Oracle_SID=Kitet
export ORAENV_ASK=NO
. /usr/local/bin/oraenv
# at this point we have $Oracle_HOME env variable set
su $ORA_OWNER -c "dbstart $Oracle_HOME" &
touch /var/lock/subsys/dbora
;;
'stop')
# Stop the Oracle database and listener:
export Oracle_SID=Kitet
export ORAENV_ASK=NO
. /usr/local/bin/oraenv
su $ORA_OWNER -c "dbshut $Oracle_HOME"
rm -f /var/lock/subsys/dbora
;;
esac
3)chmodコマンドを使用して、特権を750に設定します。
chmod 750 /etc/init.d/dbora
4)dboraサービスを適切な実行レベルに関連付け、次のコマンドを使用して自動起動するように設定します。
chkconfig --add dbora
それで全部です。 dbstart
およびdbshut
は、$Oracle_HOME/startup.log
および$Oracle_HOME/shutdown.log
のそれぞれのログに書き込む必要があります。 $Oracle_HOME/listener.log
もあります。そこで、インスタンスとリスナーが開始および停止したかどうか、またその方法を確認できます。 ps -ax | grep ora
またはps -ax | grep lsnr
を使用して、リスナー/ Oracleが実行されているかどうかを確認することもできます。
デモンストレーションと開発のためにOracleデータベースの自動起動を有効にする方法
Oracle Linux 5および6の起動時にOracle Database Enterprise Edition 10g、11gまたは12cの自動起動を有効にするために使用していた手順は次のとおりです。これらの手順はOracle Linux 7でも使用します。これらの手順は、この種のデモに役立ちますそして私が通常必要とする開発設定。
Oracle XEのインストールでは、DBを自動起動するかどうかを確認し、システムを自動的に構成するため、これらの手順は必要ありません。
新しいサービススクリプトを作成しますコンテンツ付きのdboraを使用してファイル/etc/init.d/dboraを作成します
#!/bin/sh -x # #chkconfig:2345 80 05 #説明:Oracle Linux 5および6でのOracle Database Enterprise Editionの起動と停止 # #/ etc/oratabで、自動起動するすべてのデータベースの自動起動フィールドをNからYに変更します。 #データベース。 # #このファイルを/etc/init.d/dboraとして作成して実行します: #chmod 750 /etc/init.d/dbora # chkconfig --add dbora #chkconfig dbora on #注:Oracle_HOMEの値を変更して、インストールに適切なOracleホーム #ディレクトリを指定します。 #Oracle_HOME =/u01/app/Oracle/product/11.1.0/db_1 Oracle_HOME =/u01/app/Oracle/product/12.1.0/dbhome_1 # #注:変更Oracleの値からOracle所有者のログイン名へ Oracle = oracle PATH = $ {PATH}:$ Oracle_HOME/bin Host = `hostname ` PLATFORM =` uname` export Oracle_HOME PATH case $ 1 in 'start') echo -n $ "Starting Oracle:" su $ Oracle -c "$ Oracle_HOME/bin/dbstart $ Oracle_HOME"& ;; 'stop') echo -n $ "Oracleのシャットダウン:" su $ Oracle -c "$ Oracle_HOME/bin/dbshut $ Oracle_HOME"& ;; 'restart') echo -n $ "Oracleのシャットダウン:" su $ Oracle -c "$ Oracle_HOME/bin/dbshut $ Oracle_HOME"& sleep 5 echo -n $ " Oracleの起動: " su $ Oracle -c" $ Oracle_HOME/bin/dbstart $ Oracle_HOME "& ;; *) echo" usage:$ 0 { start | stop | restart} " exit ;; esac exit
スクリプトに権限を設定する
# chmod 750 /etc/init.d/dbora
Linuxにサービスを自動開始/停止するように指示するOracle Linux 5および6では、次のコマンドを実行します。
# chkconfig --add dbora
# chkconfig dbora on
Oracle Linux 7の場合:
# systemctl enable dbora
/ etc/oratabの編集/ etc/oratabで、自動起動するデータベースのautostartフィールドをNからYに変更します。
DBの起動/停止DBは、マシンの起動およびシャットダウン時に起動および停止します。
または、次のように手動で制御できます。
-Oracle Linux 5および6の場合:
# service dbora start
そして
# service dbora stop
-Oracle Linux 7では、次を使用します。
# systemctl start dbora
そして
# systemctl stop dbora
Oracle Database 12cマルチテナントPDBの起動コンテナデータベースの起動時にすべてのプラガブルデータベースも起動するには、SQL * PlusでSYSDBAとしてこれを実行します。
データベースの起動後にトリガーsys.after_startup を作成または置換します begin すぐに実行します。 /
まず、_$Oracle_HOME/bin/oraenv
_コマンドを使用していますか?これは、通常、Oracleデータベースを使用するLinuxシステムでOracle_BASE、Oracle_HOME、およびOracle_SID環境変数を設定するものです。 LinuxのコマンドラインからOracleデータベースに接続する場合、接続するデータベースのSIDの入力を求められ、Oracle_ [SID | HOME | BASE]を設定するため、通常はoraenv
を実行することが最初のステップです。 oratabファイル内のそのSIDのエントリに基づく変数(デフォルトの場所は通常_/etc/oratab
_です)。スクリプトによって設定された変数が現在のシェルでアクティブのままになるように、_. oraenv
_構文を使用してスクリプトをソースする必要があります。「Oracle」ユーザーは、_$Oracle_HOME/bin
_を_$PATH
_変数。コマンドラインから_. oraenv
_を実行し、データベースのSIDを指定して、_sqlplus / as sysdba
_を発行するだけでログインできます。 「Oracle」ユーザー以外の他のユーザーの場合-ソフトウェアのインストール中にOUIの指示に従って_root.sh
_スクリプトを実行すると、oraenv
スクリプトが_/usr/local/bin/
_にコピーされるため、他のユーザーはoraenv
にアクセスして設定できます。 Oracle環境変数も同様です。
oratab
ファイルを正しく構成し、_. oraenv
_を呼び出すと、(リスナーに関係なく)データベースにログインして起動できるという問題が解決されます。
次に、_$Oracle_HOME/bin/dbstart
_(およびそのコンパニオン、dbshut
)というスクリプトもあり、TNSリスナーと、oratab
ファイル内のデータベースSIDの値が "Y"のデータベースを自動的に起動します。これら2つのスクリプトを使用して、Oracleデータベースを自動的に起動およびシャットダウンできます。 VMまたはサーバーをオフ/シャットダウン/再起動する前に、開いているデータベースを完全にシャットダウンすることが特に重要です。
システムの起動時にTNSリスナーとOracleデータベースを自動的に起動するには、dbstart
を呼び出す簡単なbashスクリプトを記述できます。これには通常、スクリプトを_/etc/init.d/
_フォルダーに配置する必要があります。起動時に実行されるさまざまなLinuxディストリビューション用のスクリプトを作成する方法の詳細については、SEの他の場所で詳しく回答されています( https://unix.stackexchange.com/questions/7793/bash-script-on-startup -linux )。 TLDPには、Oracleデータベースへの直接参照(dbstart
およびdbshut
を使用)の良い例もあります- http://www.tldp.org/HOWTO/Oracle-7-HOWTO-6.html 。これは、RHEL 5.0を使用する古いバージョンのOracleデータベースを参照していますが、システムに関連しているはずです。