web-dev-qa-db-ja.com

Oracle Linux 7上のOracle Database 12c-自動起動、sysdbaとしての接続を可能にします

ドキュメント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ボックスとスタートアップサービスにログインできません。

手伝ってください。

3
Kitet

私自身の調査、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が実行されているかどうかを確認することもできます。

2
Kitet

デモンストレーションと開発のために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データベースの自動起動を有効にする方法

1
DuongLx-Jack

まず、_$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データベースを参照していますが、システムに関連しているはずです。

0
ansible