S-JIS[2003-06-18/2008-01-14] 変更履歴

RedHat7.1にOracle9iをインストール

スペックの足りないマシン(泣)にRedHat7.1とOracle9iをインストールした時のメモ。


RedHat7.1のインストール

  1. Oracleのインストールには、ディレクトリにどれくらいの容量が必要か決まっているので、最低限それに合わせる必要がある。
    容量の例 場所 備考
    516MB / /tmpはここに存在するので、512MB以上
    50MB /boot  
    7000MB /home インストールする場所。
    1919MB /usr  
    512MB swap swapは512MB以上
    250MB /var  

    X-Window,GNomeも使えるようにした。DBサーバーとしては不要だろうけど、素人なので(恥)

  2. ネットワークの設定(hosts等)を行う。
  3. xinetd(telnet,ftp)の設定を行う。
  4. カーネル(共有メモリの最大値)の設定を行う。(shmmax=2147483648)
  5. DBサーバーとして使う場合は、邪魔な起動デーモンを削除(SnnSendmail等)する。
  6. Oracle用に使用するグループを作成してから ユーザーを作成する。
      グループ名の例 ユーザー名の例 ユーザー作成時のオプション
    インストール用 oinstall oracle -g oinstall -G dba
    DB管理者 dba dba -g dba
    DBユーザー oper   -g oper
  7. Java(JDK1.3.1以上)をインストールする。
  8. 環境変数を設定する。
    環境変数名 内容の例 備考
    ORACLE_BASE /home/oracle インストール用ユーザーのディレクトリ
    ORACLE_HOME /home/oracle/OraHome1 インストール先のディレクトリ
    ORACLE_OWNER oracle インストール用ユーザー
    TEMP、TMPDIR   インストール時の作業ディレクトリを指定。400MB以上必要
  9. 再起動する。
  10. rootユーザーからセマフォの設定を行う。
    $ cat /proc/sys/kernel/sem
    250 100 100 128
    $ echo 250 32000 100 128 > /proc/sys/kernel/sem

    2番目の数値が32000以上になるようにする。 なお、このやり方では マシンの再起動の度に必要。


Oracle9iのインストール

  1. インストール用ユーザーでログインする。
  2. インストール用CDを入れて、runInstallerを実行する。GNomeだとCDを入れただけでWindowsの様にディレクトリが開くが、そこから実行してはいけない。
    $ mount /mnt/cdrom		←GNomeの場合は不要。CDを入れるだけでマウントされるから
    $ /mnt/cdrom/runInstaller
  3. rootからコマンドを実行するよう指示されたら、別のtermから入ってrootになって実行する。
  4. CDを入れ替える時は、マウントを解除してから取り出す。GNomeの場合は、CD-ROMのアイコンを右クリックして「マウント解除」を選ぶことでも行える。
  5. ins_plsql.mkのターゲットinstall起動中にエラーが発生した場合、こちらを参考にして復旧させる。ポイントは以下の通り。
    $ su -
    $ cd $ORACLE_HOME/bin
    $ vi genclntsh
            LD_SELF_CONTAINED="-z defs"""
    $ ./genclntsh

    $ORACLE_HOME/lib/libclntst9.aが出来ればOK。中断していたインストーラーのダイアログから「再試行」。

  6. ここからが、スペック足りないマシンの面目躍如。「リスナー起動 リスナー制御の実行 lsnrctl start LISTENER」で止まったので、以下のようにしたらとりあえず出来た。 ちなみに、lsnrctl は環境変数ORACLE_HOMEが無いと動かないようだ。
    1. まず「中止」を選択してインストールを終了する。
    2. インストール用ユーザーでnetca(Net Configuration Assist)を実行する。
      1番目のリスナー作成は出来ているようだったので、無視。2番目と3番目だけ実行した。
    3. インストール用ユーザーでdbca(Database Configuration Assist)を実行する。
      手順8/8で「データベースの作成」「スクリプトの作成」を両方とも選択。
      スクリプトの作成が終わった時点で「admin/$ORACLE_SID/script/init.ora」を修正。
      そして手順を続行すると、数時間後に終了。
  7. ユーザーsys・systemのパスワードは変えておく。

起動

動作 コマンド 説明
DB起動 dbstart /etc/oratabで「SID:ディレクトリ:Y」になっているものが対象
sqlplus /nolog
SQL> connect / as sysdba
SQL> startup
SQL> exit
dbstartが効かない場合の方法
リスナー起動 lsnrctl start LISTENER リスナーとは、DBクライアントの要求をOracleDBに伝えるものらしい
リスナー終了 lsnrctl stop LISTENER
DB終了 dbshut 対象はdbstartと同じ
sqlplus /nolog
SQL> connect / as sysdba
SQL> shutdown immediate
(又はshutdown abort)
SQL> exit
dbshutが効かない場合の方法

おまけ:リスナーが起ち上がっていない状態でJDBC(ネットワーク経由)で繋ごうとすると
Java.sql.SQLException The Network Adapter could not establish the connection
の例外が発生する。


ユーザーの作り方

Oracleでは、DBアクセスはユーザー毎に行う。ユーザーを作るには、DBの実エリアである「表領域」が必要。表領域には、データを保持し続けるための「表領域」と、一時作業用の「一時表領域」がある。

  1. OracleDBにシステム管理者としてログインする。
    sys 管理者用ユーザー
    manager sysのパスワード
    SID 接続対象のSID
    $ sqlplus "sys/manager@SID as sysdba"
  2. 表領域を作成する。↓この例の数値はテキトーです。
    CREATE TABLESPACE 表領域名A
    DATAFILE 'ディレクトリ/ァイル.dbf' SIZE 50M	←表領域のファイル名 及び ファイルサイズ
    DEFAULT STORAGE (INITIAL 3M
                     NEXT    3M
                     MINEXTENTS 1
                     MAXEXTENTS 121      ←あるいは、「MAXEXTENTS unlimited」で無制限
                     PCTINCREASE 50)
    ONLINE;	←表領域の指定
    CREATE TABLESPACE 表領域名B
    DATAFILE 'ディレクトリ/ァイル.dbf' SIZE 50M	←一時表領域のファイル名 及び ファイルサイズ
    DEFAULT STORAGE (INITIAL 3M
                     NEXT    3M
                     MINEXTENTS 1
                     MAXEXTENTS 121
                     PCTINCREASE 50)
    TEMPORARY; ←一時表領域の指定

    Oracle9.0だとこれで一時表領域が作れたんだけど、Oracle9.2にバージョンを上げたら「ORA-12913: ディクショナリ管理表領域を作成できません」 が出て、一時表領域が作れなくなってしまった。DBの容量の問題ではないみたいだし、よく分からない…。

    と思っていたら、どうやらOracle9.2では一時表領域を作るためのSQLが変わったみたい。[2004-11-12]

    CREATE TEMPORARY TABLESPACE 表領域名B
    TEMPFILE 'ディレクトリ/ァイル.dbf' SIZE 50M	←一時表領域のファイル名 及び ファイルサイズ
    AUTOEXTEND OFF;
  3. ユーザーを作成する。
    CREATE USER ユーザー名	←ハイフン「-」等を含む時には、ユーザー名ダブルクォーテーションで囲む
    IDENTIFIED BY パスワード
    DEFAULT TABLESPACE 表領域名A	←表領域の指定
    TEMPORARY TABLESPACE 表領域名B	←一時表領域の指定。普通は一時表領域「TEMP」を使うのかな?
    QUOTA unlimited ON 表領域名A;	←「DEFAULT TABLESPACE」で指定した表領域

    変更は、「CREATE」の代わりに「ALTER」を使うことで行える。
     

  4. ユーザーに権限を与える。ユーザーを作っただけでは、そのユーザーはログインすることすら出来ない。
    GRANT connect TO ユーザー名;		←connect:ログインする(SESSIONを繋ぐ)ことが出来るような権限を含んだロール
    GRANT resource TO ユーザー名;		←resource:テーブル作成権限等がある、開発者用に用意されているロール

表領域の削除

テーブルを作りすぎたりデータを入れすぎたりすると、表領域が足りなくなることがある。
単純なのは削除して再作成すること。というわけで

表領域を削除するには、以下のSQLを実行する。[2004-05-28]

DROP TABLESPACE 表領域名 INCLUDING CONTENTS;

「INCLUDING CONTENTS」を付けることで、表領域が空でなくても削除できる。
というより、空にする方法の方が分からないぞー。

これだけだと、表領域の実体であるdbfファイルは無くならないので、UNIXコマンドで削除する必要がある。

なお、表領域を削除してもユーザーが削除されるわけではないようだ。
create tablespaceは必要でも、create userは不要ということ。

ちなみに、どんな表領域が在るかは、以下のSQLで分かる。[2004-06-12]

SELECT TABLESPACE_NAME, CONTENTS FROM DBA_TABLESPACES;

表領域のサイズ変更

テーブルスペースのサイズを変更するには、以下のようなSQLを実行すればいいらしい。[2008-01-14]

ALTER DATABASE DATAFILE 'ファイル名' RESIZE 〜;

SQLメモへ行く / Oracle目次へ戻る / 新機能へ戻る / 技術メモへ戻る
メールの送信先:ひしだま