12c Database App Development VMを使ってみた

このエントリは JPOUG Advent Calendar 2014 4日目のエントリです。
昨日のエントリは charade_oo4oさんの 「[JPOUG Advent Calendar] Oracle on Hyper-V 2014」でした。

Oracle Database導入済みのVirtualBox VMイメージを使って、簡単にOracle Databaseを使い始めてみましょう! という方向のエントリを書こうと思っていたのですが・・・・

オラクル社が公開しているVMイメージが、どれも初心者には不適切なものばかりだったので、当初の狙いから変え、Database App Development VM についていくつか導入方法といくつか注意点をまとめる内容にします・・・。残念。

オラクル社が公開している製品導入済みVirtualBox VMイメージ

にて、Oracle Databaseをはじめとする、様々な製品がインストールされたVMイメージが公開されています。

2014/12/03 時点で、XEでないOracle DatabaseがインストールされたVMイメージは
以下の通りです。


  • MySQL and Oracle Enterprise Manager Developer VM
  • Oracle Data Integrator 12c VM
  • Oracle Big Data Lite VM
  • Database App Development VM

残念ながら、どのVMも、Oracle Databaseを気軽に試す・・ という目的には一長一短です。
(よいVMがあればこれをもとにエントリを書こうと、1つ1つ確認したのですが・・・残念)

MySQL and Oracle Enterprise Manager Developer VM

Contentsに Oracle Database 11g (for Linux x86-64) が記載されていますが、
これは、OEMのリポジトリDBとしてOracle Databaseを使用しているということでした。

Oracle Databaseの学習用には不適切ですし、VMイメージのサイズが 17GBときわめて大きいため
取り回しにくいです。

Oracle Data Integrator 12c VM

Oracle Data Integrator と Oracle GoldenGate を使用することを想定したVMです。
Oracle Databaseの学習用には不適切です。

Oracle Big Data Lite VM

Oracle Big Data Appliance に含まれるソフトウェア群で構成した
Oracle Big Data Appliance を模したVMイメージです。
Oracle Databaseの学習用には不適切です。

Database App Development VM


後述

Database App Development VMについて

Oracle Database を用いたアプリケーション開発を想定したVMであり、
これらの中では最もOracle Databaseの学習用には適切・・・なはずですが、
Oracle Databaseを気軽に試す・・ という目的に対しては、いろいろと課題があります。


  • OSがなぜかOracle Linux 7
  • データベースがマルチテナント
  • いにしえの環境変数の罠

課題のレベル感はさまざまですが、使用するまでの手順に説明しながら、課題への対処策と併せてみてゆきたいと思います。

Database App Development VMをダウンロードする

まず、

  • Oracle Technology Network Developer Day

    から、Database App Development VMのovaファイル Oracle_DB_Developer_VM_new.ova をダウンロードします。ovaファイルはVMイメージの標準フォーマットです。
    また、ダウンロードには、ライセンス規約を受け入れること、オラクルのアカウントでログインすることが必要です。

    ova形式のVMイメージをVirtualBoxにインポートする

    上記の作業で得られた Oracle_DB_Developer_VM_new.ova をVirtualBoxにインポートします。




    インポートが完了すると Oracle DB Developer VM という名称のVMが構成されます。

    起動前にいくつかVMの設定を修正しておくことをお勧めします。

    まず、マシンのメモリサイズに併せて、VMに割り当てるメモリサイズを調整しておきましょう。

    また、VMのネットワーク構成を調整してもよいかもしれません。
    VMのネットワーク構成は各自の好みや制約の部分もありますので、一概にどうすべきということは
    言えませんが、NAT+ホストオンリーネットワークの構成が一般にお勧めです。
    デフォルトの状態でNAT用のNICが構成されているので、ホストオンリーネットワーク用のNICを1つ追加しておきましょう。NAT用のNICをインターネットへのアクセスに使用し、ホストオンリーネットワーク用のNICをマシンとの通信に使用します。

    VMを起動し、設定を修正する

    Database App Development VM の OS は、Oracle Linux 7です。
    以前のDatabase App Development VM の OS はOracle Linux 6だったと思うのですが、なぜか現行はOracle Linux 7になってしまいました。

    Oracle Linux 7は、Red Hat Enterprise Linux 7と同様にリリースされて半年ほどしか経過していません。Oracle Linux 7のスキルを持ち合わせている人は少ないのではないでしょうか。
    また、現在 企業システムで使われるLinuxの大部分は、Red Hat Enterprise Linux 6 (≒ Oracle Linux 6)または Red Hat Enterprise Linux 5 ( ≒ Oracle Linux 5)ですので、今のタイミングでOracle Linux 7 のスキルを習得するのに躊躇されるかたもいらっしゃるのではないでしょうか。(率直にいって、私もその一人です)

    VMを起動すると、(このVMでは)oracleユーザーでGNONEのデスクトップにログインした状態になります。早速、Oracle Databaseを使用して・・・と行きたいところですが、いくつか設定の修正をしておきましょう。

    まず、デフォルトではキーボードレイアウトが英語配列になっており、一般的な日本語キーボードでは記号類が適切に入力できませんので、修正します。

    Applications → System Tools → Settings
    から
    Keyboard を選択し、Input Souces で日本語入力を追加して、デフォルトの英語入力を削除します。









    次に、追加したホストオンリーネットワーク用のNICを有効にし、
    固定IPアドレスを割り当てましょう。
    ここで指定したIPアドレスを用いて、ホストマシンからVMへアクセスします。

    NICの設定は
    Applications → System Tools → Settings
    からNetwork を選択し、追加したNICを有効にしてプロファイルを追加してIPアドレスを設定します。





    VirtualBoxは、デフォルトでホストオンリーネットワーク用に192.168.56.0/24のセグメントを割り当て、192.168.56.101以降の帯域をDHCPを用いた動的IPアドレス割り当てに使用します。
    したがって、ホストオンリーネットワーク用のNICに割り当てる固定IPアドレスは、
    192.168.56.2-100の範囲から選んでください。
    ここでは、192.168.56.2を指定しています。

    これで、ホストマシンからsshでVMに接続できるようになります。

    データベースに接続する・・・しかしなんか変だ

    初期状態でデータベース、リスナーが構成済みで、OS起動時に自動起動するようになっています。

    また、データベースの名前は cdb1 で、Oracle Database 12cから導入されたマルチテナント構成です。
    12c の目玉がマルチテナントなのはわかりますが、初めてさわるデータベースがマルチテナント構成というのはちょっと厳しい・・・

    しかも、こんな罠に引っかかってしまいました。


    [oracle@localhost ~]$ sqlplus / as sysdba
     
    SQL\*Plus: Release 12.1.0.2.0 Production on 水 12月 3 21:49:44 2014
     
    Copyright (c) 1982, 2014, Oracle. All rights reserved.
     
    ERROR:
    ORA-01017: invalid username/password; logon denied

    お馴染みの sqlplus / as sysdba で接続しようとするとORA-01017で接続に失敗します。

    試しにユーザー名とパスワードを明示的に指定すると接続に成功します。


    [oracle@localhost ~]$ sqlplus sys/oracle as sysdba
     
    SQL\*Plus: Release 12.1.0.2.0 Production on 水 12月 3 21:51:36 2014
     
    Copyright (c) 1982, 2014, Oracle. All rights reserved.
     
     
    Connected to:
    Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 – 64bit Production
    With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
     
    SQL>

    なぜだかわかりますかね? また、どこら辺が怪しいと思われますか?

    自分はユーザー名を指定すると成功することから、OS認証が適切に機能していないことを疑い、OS認証関連の箇所を調査しました。でも、どこも怪しくないんですねぇ・・・・


    [oracle@localhost ~]$ id
    uid=1000(oracle) gid=1000(oracle) groups=1000(oracle),10(wheel),990(vboxsf) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

    oracleユーザーはoracleグループのメンバで、


    [oracle@localhost ~]$ grep DBA $ORACLE_HOME/rdbms/lib/config.c
    /* SS_DBA_GRP defines the UNIX group ID for sqldba adminstrative access. */
    \#define SS_DBA_GRP “oracle”
    {SS_DBA_GRP, SS_OPER_GRP, SS_ASM_GRP,

    Oracle Database側でも DBAグループはちゃんと”oracle”になっている・・・

    なんとか糸口を見つけようとシステムコールトレースを習得しても、Netトレースを取得してもわからない・・・が、いろいろやっているうちにヒントにつながる奇妙な動作を見つけました。


    [oracle@localhost lib]$ sqlplus sys/oracle as sysdba
     
    SQL\*Plus: Release 12.1.0.2.0 Production on Wed Dec 3 20:08:22 2014
     
    Copyright (c) 1982, 2014, Oracle. All rights reserved.
     
     
    Connected to:
    Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 – 64bit Production
    With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
     
    SQL> shutdown immediate
    Pluggable Database closed.
    SQL> exit
    Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 – 64bit Production
    With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
    [oracle@localhost lib]$ lsnrctl stop
     
    LSNRCTL for Linux: Version 12.1.0.2.0 – Production on 03-DEC-2014 20:08:38
     
    Copyright (c) 1991, 2014, Oracle. All rights reserved.
     
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.0.0.0)(PORT=1521)))
    The command completed successfully

    インスタンスとリスナーを停止して、プロセスを確認・・・


    [oracle@localhost lib]$ ps -ef
    UID PID PPID C STIME TTY TIME CMD
    root 1 0 0 19:32 ? 00:00:02 /usr/lib/systemd/systemd –switched-root –system –deserialize 23
    :
    oracle 1749 1 0 19:33 ? 00:00:00 ora_pmon_cdb1
    oracle 1753 1 0 19:33 ? 00:00:03 ora_psp0_cdb1
    oracle 1798 1 0 19:33 ? 00:00:03 ora_vktm_cdb1
    oracle 1802 1 0 19:33 ? 00:00:00 ora_gen0_cdb1
    oracle 1817 1 0 19:33 ? 00:00:00 ora_mman_cdb1
    oracle 1824 1 0 19:33 ? 00:00:00 ora_diag_cdb1
    oracle 1829 1 0 19:33 ? 00:00:01 ora_dbrm_cdb1
    oracle 1832 1 0 19:33 ? 00:00:00 ora_vkrm_cdb1
    oracle 1835 1 0 19:33 ? 00:00:02 ora_dia0_cdb1
    oracle 1839 1 0 19:33 ? 00:00:00 ora_dbw0_cdb1
    oracle 1853 1 0 19:33 ? 00:00:00 ora_lgwr_cdb1
    oracle 1868 1 0 19:33 ? 00:00:01 ora_ckpt_cdb1
    oracle 1871 1 0 19:33 ? 00:00:00 ora_lg00_cdb1
    oracle 1882 1 0 19:33 ? 00:00:00 ora_smon_cdb1
    oracle 1890 1 0 19:33 ? 00:00:00 ora_lg01_cdb1
    oracle 1895 1 0 19:33 ? 00:00:00 ora_reco_cdb1
    oracle 1899 1 0 19:33 ? 00:00:00 ora_lreg_cdb1
    oracle 1901 1 0 19:33 ? 00:00:00 ora_pxmn_cdb1
    oracle 1906 1 0 19:33 ? 00:00:04 ora_mmon_cdb1
    oracle 1914 1 0 19:33 ? 00:00:02 ora_mmnl_cdb1
    oracle 1917 1 0 19:33 ? 00:00:00 ora_d000_cdb1
    oracle 1928 1 0 19:33 ? 00:00:00 ora_s000_cdb1
    oracle 1934 1 0 19:33 ? 00:00:00 ora_s001_cdb1
    :
    oracle 4329 3094 0 20:08 pts/1 00:00:00 ps -ef

    あれ? shutdownしたのに バックグラウンドプロセスがまだ残っている・・・
    なにかおかしい・・・ もう一度接続すると・・・


    [oracle@localhost lib]$ sqlplus sys/oracle as sysdba
     
    SQL\*Plus: Release 12.1.0.2.0 Production on Wed Dec 3 20:08:47 2014
     
    Copyright (c) 1982, 2014, Oracle. All rights reserved.
     
    ERROR:
    ORA-12541: TNS:no listener
     
     
    Enter user-name:
    ERROR:
    ORA-12541: TNS:no listener
     
     
    Enter user-name:
    ERROR:
    ORA-12541: TNS:no listener
     
     
    SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL\*Plus

    なぜインスタンスに接続しようとしているのに、リスナーに接続を試みたようなエラーメッセージがでるのだろうか? マルチテナント・・・ リスナー経由の接続・・・・

    もしやPDBに接続をしている?

    しかし、SQL\*Plusではローカル接続を指定しているので、接続先はCDBに限定されるはず・・・
    ローカル接続で接続先を変更するようなものってあったっけ?
















































    お分かりになりましたでしょうか。ただ、ほとんど使用されない環境変数なのでご存じないかもしれません。~/.bash_profileに記載されたTWO_TASK=orclが犯人でした。


    [oracle@localhost ~]$ cat ~/.bash_profile
    \# .bash_profile
     
    \# Get the aliases and functions
    if [ -f ~/.bashrc ]; then
    . ~/.bashrc
    fi
     
    \# User specific environment and startup programs
    \#cat /home/oracle/Desktop/readme.txt
     
    export ANT_HOME=/usr/local/apache-ant-1.9.3
    export ORACLE_HOME=/home/oracle/app/oracle/product/12.1.0/dbhome_1
    export ORACLE_SID=cdb1
    export TWO_TASK=orcl <=== export XDB_HOL=Desktop/Database_Track/XMLDB/   PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin:$ANT_HOME/bin     export PATH cd ~     \#gsettings set org.gnome.Vino require-encryption false

    環境変数TWO_TASKってなんだっけ?


    TWO_TASKはほとんど使用されることがない環境変数です。
    マニュアルでも、TWO_TASKについて説明している個所は本当に少ない・・・

    環境変数TWO_TASK(UNIXの場合)またはLOCAL(Windowsの場合)には接続識別子を設定できます。これによって、SQL\*PlusまたはSQL\*Plus Instant Clientで接続が行われるたびに接続識別子を明示的に入力する必要がなくなります。このUNIXの例では、MYDB4という名前のデータベースに接続します。

     

    TNS_ADMIN=/home/user1

    export TNS_ADMIN

    TWO_TASK=MYDB4

    export TWO_TASK

    sqlplus hr

    TWO_TASKが原因だと分かってから、Googleで調べると、悔しいことに事例がたくさん見つかります (><)

Leave a Reply

  

  

  

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>