スペックの足りないマシン(泣)にRedHat7.1とOracle9iをインストールした時のメモ。
|
容量の例 | 場所 | 備考 |
---|---|---|
516MB | / | /tmpはここに存在するので、512MB以上 |
50MB | /boot | |
7000MB | /home | インストールする場所。 |
1919MB | /usr | |
512MB | swap | swapは512MB以上 |
250MB | /var |
X-Window,GNomeも使えるようにした。DBサーバーとしては不要だろうけど、素人なので(恥)
グループ名の例 | ユーザー名の例 | ユーザー作成時のオプション | |
---|---|---|---|
インストール用 | oinstall | oracle | -g oinstall -G dba |
DB管理者 | dba | dba | -g dba |
DBユーザー | oper | -g oper |
環境変数名 | 内容の例 | 備考 |
---|---|---|
ORACLE_BASE | /home/oracle | インストール用ユーザーのディレクトリ |
ORACLE_HOME | /home/oracle/OraHome1 | インストール先のディレクトリ |
ORACLE_OWNER | oracle | インストール用ユーザー |
TEMP、TMPDIR | インストール時の作業ディレクトリを指定。400MB以上必要 |
$ cat /proc/sys/kernel/sem
250 100 100 128
$ echo 250 32000 100 128 > /proc/sys/kernel/sem
2番目の数値が32000以上になるようにする。 なお、このやり方では マシンの再起動の度に必要。
$ mount /mnt/cdrom ←GNomeの場合は不要。CDを入れるだけでマウントされるから $ /mnt/cdrom/runInstaller
$ su - $ cd $ORACLE_HOME/bin $ vi genclntsh LD_SELF_CONTAINED="-z defs" → "" $ ./genclntsh
$ORACLE_HOME/lib/libclntst9.aが出来ればOK。中断していたインストーラーのダイアログから「再試行」。
動作 | コマンド | 説明 |
---|---|---|
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の実エリアである「表領域」が必要。表領域には、データを保持し続けるための「表領域」と、一時作業用の「一時表領域」がある。
sys | 管理者用ユーザー |
manager | sysのパスワード |
SID | 接続対象のSID |
$ sqlplus "sys/manager@SID as sysdba"
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;
CREATE USER ユーザー名 ←ハイフン「-」等を含む時には、ユーザー名をダブルクォーテーションで囲む IDENTIFIED BY パスワード DEFAULT TABLESPACE 表領域名A ←表領域の指定 TEMPORARY TABLESPACE 表領域名B ←一時表領域の指定。普通は一時表領域「TEMP」を使うのかな? QUOTA unlimited ON 表領域名A; ←「DEFAULT TABLESPACE」で指定した表領域
変更は、「CREATE」の代わりに「ALTER」を使うことで行える。
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 〜;