Ubuntu 11.10にOracle 11gをインストールしました。
OTNのフォーラムにインストール手順がありました。
必要なパッケージのインストール
Oracle 11gは、RPMパッケージで提供されています。Debian/Ubuntuで使うには、ailenコマンドでdebパッケージに変換擦る必要があります。
起動時の自動起動を設定するためにchkconfigコマンドが必要です。
libaio1とunixodbcは、Oracle 11gで必要となるライブラリです。
$ sudo apt-get install alien libaio1 unixodbc
スワップのサイズ確認
Oracle 11gは、2GBのスワップが必要になります。
スワップを確認するとデフォルトでスワップは1GBでした。
$ grep -i swap /proc/meminfo SwapCached: 0 kB SwapTotal: 1048572 kB SwapFree: 1048572 kB $
1GBスワップを追加します。
$ sudo dd if=/dev/zero of=/home/swapfile bs=1024 count=1048576 1048576+0 記録始め 1048576+0 記録終わり 1073741824 バイト (1.1 GB) コピー終了, 5.83088 s, 184 MB/s $ sudo mkswap /home/swapfile スワップ空間バージョン1を設定します、サイズ = 1048572 KiB ラベルはありません, UUID= $ sudo swapon /home/swapfile $ sudo swapon -a $ grep -i swap /proc/meminfo SwapCached: 0 kB SwapTotal: 2097144 kB SwapFree: 2097144 kB $ sudo bash -c "echo '/home/swapfile swap swap defaults 0 0' >> /etc/fstab" $
カーネルパラメータの設定
Oracle 11gに必要なカーネルパラメータを設定します。
$ sudo bash -c "cat > /etc/sysctl.d/60-oracle.conf <<-EOF > # Oracle 11g XE kernel parameters > fs.file-max=6815744 > net.ipv4.ip_local_port_range=9000 65500 > kernel.sem=250 32000 100 128 > # kernel.shmmax=429496729 > kernel.shmmax=1073741823 > EOF" $
設定したカーネルパラメータを反映して確認します。
$ sudo service procps start procps stop/waiting $ sudo sysctl -q fs.file-max fs.file-max = 6815744 $ sudo sysctl -q kernel.shmmax kernel.shmmax = 1073741823 $ sudo sysctl -q net.ipv4.ip_local_port_range net.ipv4.ip_local_port_range = 9000 65500 $ sudo sysctl -q kernel.sem kernel.sem = 250 32000 100 128 $
ext3パーティションの準備
インストール手順によるとUbuntu 11.10のデフォルトファイルシステムのext4では、パフォーマンス問題が発生するそうです。
Oracleがインストールされる/u01に20GB程度のext3パーティションを作成してマウントすることで回避できるようです。
$ sudo fdisk /dev/sdb デバイスは正常な DOS パーティションテーブルも、Sun, SGI や OSF ディスクラベルも 含んでいません 新たに DOS ディスクラベルをディスク識別子 0x0344c41a で作成します。 あなたが書き込みを決定するまで、変更はメモリ内だけに残します。 その後はもちろん以前の内容は修復不可能になります。 コマンド (m でヘルプ): n コマンドアクション e 拡張 p 基本パーティション (1-4) p パーティション番号 (1-4, 初期値 1): 1 最初 セクタ (2048-41943039, 初期値 2048): 初期値 2048 を使います Last セクタ, +セクタ数 or +size{K,M,G} (2048-41943039, 初期値 41943039): 初期値 41943039 を使います コマンド (m でヘルプ): w パーティションテーブルは変更されました! ioctl() を呼び出してパーティションテーブルを再読込みします。 ディスクを同期しています。 コマンド (m でヘルプ): q $
ext3でフォーマットしマウントします。
$ sudo mkfs -t ext3 /dev/sdb1 mke2fs 1.41.14 (22-Dec-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 1310720 inodes, 5242624 blocks 262131 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 160 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 26 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. $ uuid=`sudo blkid | grep sdb1 | awk '{print$2}' | tr -d '\042'` $ echo $uuid UUID=9f4a0d24-7fbf-4514-99a0-c8ceb03a6c74 $ sudo bash -c "echo $uuid /u01 ext3 errors=remount-ro 0 1 >> /etc/fstab" $
再起動後にext3がマウントされたことを確認します。
$ df -h /u01 Filesystem Size Used Avail Use% マウント位置 /dev/sdb1 20G 173M 19G 1% /u01 $
共有メモリの設定
Ubuntu 11.10でOracle 11gを動かすとORA-00845: MEMORY_TARGETが発生しデータベースが起動しません。
Oracle 11gは/dev/shmを必要としますが、Ubuntu 11.10は/run/shmとなっているのが原因らしいです。
回避するために、以下の設定が必要です。
$ sudo bash -c 'cat > /etc/init.d/oracle-shm <<-EOF > #! /bin/sh > # /etc/init.d/oracle-shm > # > # > case "\$1" in > start) > echo "Starting script /etc/init.d/oracle-shm" > # Run only once at system startup > if [ -e /dev/shm/.oracle-shm ]; then > echo "/dev/shm is already mounted, nothing to do" > else > rm -f /dev/shm > mkdir /dev/shm > mount -B /run/shm /dev/shm > touch /dev/shm/.oracle-shm > fi > ;; > stop) > echo "Stopping script /etc/init.d/oracle-shm" > echo "Nothing to do" > ;; > *) > echo "Usage: /etc/init.d/oracle-shm {start|stop}" > exit 1 > ;; > esac > # > ### BEGIN INIT INFO > # Provides: oracle-shm > # Required-Start: $remote_fs $syslog > # Required-Stop: $remote_fs $syslog > # Default-Start: 2 3 4 5 > # Default-Stop: 0 1 6 > # Short-Description: Bind /run/shm to /dev/shm at system startup. > # Description: Fix to allow Oracle 11g use AMM. > ### END INIT INFO > EOF' $ sudo chmod 755 /etc/init.d/oracle-shm $ sudo update-rc.d oracle-shm defaults 01 99 Adding system startup for /etc/init.d/oracle-shm ... /etc/rc0.d/K99oracle-shm -> ../init.d/oracle-shm /etc/rc1.d/K99oracle-shm -> ../init.d/oracle-shm /etc/rc6.d/K99oracle-shm -> ../init.d/oracle-shm /etc/rc2.d/S01oracle-shm -> ../init.d/oracle-shm /etc/rc3.d/S01oracle-shm -> ../init.d/oracle-shm /etc/rc4.d/S01oracle-shm -> ../init.d/oracle-shm /etc/rc5.d/S01oracle-shm -> ../init.d/oracle-shm $
再起動後に/dev/shmがあるとこを確認します。
$ sudo cat /etc/mtab | grep shm none /run/shm tmpfs rw,nosuid,nodev 0 0 /run/shm /dev/shm none rw,bind 0 0 $ sudo df -h /run/shm Filesystem Size Used Avail Use% マウント位置 none 499M 0 499M 0% /run/shm $
/run/shmは、デフォルトで物理メモリの50%のサイズになります。
Oracle 11gのRPMパッケージをdebパッケージに変換する
alienコマンドを使ってdebパッケージに変換します。
$ ls oracle-xe-11.2.0-1.0.x86_64.rpm.zip $ unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip Archive: oracle-xe-11.2.0-1.0.x86_64.rpm.zip creating: Disk1/ creating: Disk1/upgrade/ inflating: Disk1/upgrade/gen_inst.sql creating: Disk1/response/ inflating: Disk1/response/xe.rsp inflating: Disk1/oracle-xe-11.2.0-1.0.x86_64.rpm $ ls Disk1 oracle-xe-11.2.0-1.0.x86_64.rpm.zip $ cd Disk1 $ ls oracle-xe-11.2.0-1.0.x86_64.rpm response upgrade $ fakeroot alien --to-deb --scripts oracle-xe-11.2.0-1.0.x86_64.rpm oracle-xe_11.2.0-2_amd64.deb generated $
インストール
RPMパッケージで前提となっているパスが違うため以下が必要です。
debパッケージに対応して欲しいものです。
$ sudo ln -s /usr/bin/awk /bin/awk $ sudo mkdir /var/lock/subsys $
パッケージをインストールします。
$ sudo dpkg -i oracle-xe_11.2.0-2_amd64.deb ... 中略 nsserv: Default-Start undefined, assuming empty start runlevel(s) for script `apport' insserv: Default-Stop undefined, assuming empty stop runlevel(s) for script `apport' oracle-xe 0:off 1:off 2:on 3:on 4:on 5:on 6:off You must run '/etc/init.d/oracle-xe configure' as the root user to configure the database. ureadahead のトリガを処理しています ... ureadahead will be reprofiled on next reboot libc-bin のトリガを処理しています ... ldconfig deferred processing now taking place $
設定
Oracleの設定をします。
といってもポートとsystemアカウントのパスワード設定だけです。
$ sudo /etc/init.d/oracle-xe configure Oracle Database 11g Express Edition Configuration ------------------------------------------------- This will configure on-boot properties of Oracle Database 11g Express Edition. The following questions will determine whether the database should be starting upon system boot, the ports it will use, and the passwords that will be used for database accounts. Press <Enter> to accept the defaults. Ctrl-C will abort. Specify the HTTP port that will be used for Oracle Application Express [8080]: Specify a port that will be used for the database listener [1521]: Specify a password to be used for database accounts. Note that the same password will be used for SYS and SYSTEM. Oracle recommends the use of different passwords for each database account. This can be done after initial configuration: Confirm the password: Do you want Oracle Database 11g Express Edition to be started on boot (y/n) [y]: Starting Oracle Net Listener...Done Configuring database...Done Starting Oracle Database 11g Express Edition instance...Done Installation completed successfully. $
oracleユーザにOracleの環境変数を設定して後処理をしたらインストール完了です。
$ sudo su - oracle $ id oracle uid=1001(oracle) gid=1001(dba) 所属グループ=1001(dba) $ pwd /u01/app/oracle $ cp /etc/skel/.bash_logout . $ cp /etc/skel/.bashrc . $ cp /etc/skel/.profile . $ echo "" >> .profile $ echo '. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh' >> .profile $ ログアウト $ sudo su - oracle $
ユーザの設定
Oracle 11gを使うユーザは、以下の設定をします。
$ echo '. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh' >> ~/.profile
一度ログアウトして接続を確認します。
$ sqlplus system/***@xe SQL*Plus: Release 11.2.0.2.0 Production on 日 12月 4 15:12:25 2011 Copyright (c) 1982, 2011, Oracle. All rights reserved. Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production に接続されました。 SQL> show sga Total System Global Area 417546240 bytes Fixed Size 2227080 bytes Variable Size 285213816 bytes Database Buffers 125829120 bytes Redo Buffers 4276224 bytes SQL>
$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.2.0 Production on 日 12月 4 14:59:45 2011 Copyright (c) 1982, 2011, Oracle. All rights reserved. Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Productionに接続されました。 SQL> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE); PL/SQLプロシージャが正常に完了しました。 SQL> exit Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Productionとの接続が切断されました。 $