前準備も終わったのでインストールを行う。ソフトウェアはOracle Installerで適当にインストール。データベースは、Oracle Database Configuration Assistantを使わず、手作業で構築してみる。
初期パラメータファイル作成
まずは、初期パラメータファイルを作成する。$ORACLE_HOME/dbs/init.oraがテンプレートなので、それを、$ORACLE_BASE/admin/SID/pfile/initSID.oraにコピーし、編集する。また、そのファイルのシンボリックリンクを$ORACLE_HOME/dbs/ に作成しておく。
私の初期パラメータはこんな感じ。SIDはLUPUS。configLUPUS.oraという静的パラメータファイルを別に作り、initLUPUS.oraからインクルードしている。初期パラメータについては、テストのためにめちゃめちゃな値の場合もあるので要注意!
# initLUPUS.ora
# -------------
# Database Buffer and Disk I/O
# ----------------------------
db_block_buffers = 32768 # 32K * 8K = 256M
buffer_pool_keep = (buffers:500, lru_latches:1)
buffer_pool_recycle = (buffers:1000, lru_latches:2)
db_file_multiblock_read_count = 16
db_writer_processes = 1
dbwr_io_slaves = 10
disk_asynch_io = TRUE
db_files = 200
# Shared Pool
# -----------
shared_pool_size = 134217728
shared_pool_reserved_size = 10485760
java_pool_size = 20971520
large_pool_size = 10485780
#lock_sga = TRUE
#mlock_sga = TRUE
dml_locks = 300
# Hash Joins
# ----------
hash_area_size = 10485760
hash_multiblock_io_count = 16
hash_join_enabled = TRUE
# Redo
# ----
log_archive_start = FALSE
# Latch
# -----
db_block_lru_latches = 8
# Chackpoint
# ----------
log_checkpoint_interval = 0
log_checkpoint_timeout = 1800
log_checkpoints_to_alert = TRUE
# Cursor and Library Cache
# ------------------------
cursor_space_for_time = FALSE
session_cached_cursors = 64
open_cursors = 256
# Optimizer
# ---------
optimizer_mode = CHOOSE
optimizer_max_permutations = 79000
optimizer_index_cost_adj = 1
optimizer_index_caching = 99
partition_view_enabled = TRUE
always_anti_join = HASH
# Parallel Query
# --------------
parallel_max_servers = 16
parallel_min_servers = 4
parallel_min_percent = 50
parallel_automatic_tuning = FALSE
# Sort
# ----
sort_area_size = 1048576
sort_area_retained_size = 1048576
sort_multiblock_read_count = 2
# include configuration file
ifile = /oracle/u01/app/oracle/admin/LUPUS/pfile/configLUPUS.ora
# configLUPUS.ora
# ----------------
# This file is to be included in init.ora.
# Parameters in this file are static. Do not change.
db_block_size = 8192
processes = 100
timed_statistics = TRUE
# Make trace files public
_trace_files_public = TRUE
global_names = TRUE
compatible = 8.1.7
control_files = (/oracle/u03/oradata/LUPUS/cntrl1.ctl,\
/oracle/u04/oradata/LUPUS/cntrl2.ctl)
user_dump_dest = /oracle/u01/app/oracle/admin/LUPUS/udump
core_dump_dest = /oracle/u01/app/oracle/admin/LUPUS/cdump
background_dump_dest = /oracle/u01/app/oracle/admin/LUPUS/bdump
db_name = LUPUS
db_domain = ROBIOS.ORG
instance_name = LUPUS
service_names = LUPUS.ROBIOS.ORG
とりあえずの作成ならここまで作りこむ必要はない。静的パラメータだけでよいはず。
データベース作成
インスタンスを立ち上げ、データベースを作成する。
$ ORACLE_SID=LUPUS svrmgrl
Oracle Server Manager Release 3.1.7.0.0 - Production
Copyright (c) 1997, 1999, Oracle Corporation. All Rights Reserved.
Oracle8i Enterprise Edition Release 8.1.7.0.0 - 64bit Production
With the Partitioning option
JServer Release 8.1.7.0.0 - 64bit Production
SVRMGR> connect internal
Connected.
SVRMGR> startup nomount pfile = "/oracle/u01/app/oracle/admin/
LUPUS/pfile/initLUPUS.ora" <--表示上改行してます
ORACLE instance started.
Total System Global Area 445083324 bytes
Fixed Size 102076 bytes
Variable Size 176005120 bytes
Database Buffers 268435456 bytes
Redo Buffers 540672 bytes
SVRMGR> create database LUPUS
2> maxdatafiles 128
3> maxinstances 1
4> maxlogfiles 8
5> character set JA16EUC
6> national character set JA16EUC
7> datafile '/oracle/u02/oradata/LUPUS/system01.dbf' size 260M
8> autoextend on next 10240K
9> logfile '/oracle/u03/oradata/LUPUS/redo01.log' size 500K,
10> '/oracle/u03/oradata/LUPUS/redo02.log' size 500K;
Statement processed.
SVRMGR> disconnect
SVRMGR> quit
パラメータについて
- maxdatafiles
- 最大データファイル数。コントロールファイルに初期設定される。init.oraのDB_FILESで設定した数まで動的に拡張される。
- maxinstances
- このデータベースをマウントできるインスタンスの最大数。クラスタ作るわけじゃないので1でいいかなと。
- maxlogfiles
- REDOログファイルグループの最大数。今回は2グループ(とはいうもののメンバーは1つ)だが、とりあえず8に設定。
- character sets
- 通常の項目のキャラクタセット。EUCへ設定。
- national character sets
- NCHARなどのNational Character項目のキャラクタセット。同じくEUCへ設定。
- datafile
- システム表領域領域のデータファイルを定義。ディクショナリ類で結構大きくなるので最初から大きめに確保。
- logfile
- REDOログファイルの定義。テスト用データベースなので、グループ設定はしない。本番用であれば、グループ設定を行い、複数のメディアにミラーを作ることで用心。
データディクショナリ作成
$ORACLE_HOME/rdbms/admin/catalog.sqlを実行して、データディクショナリ、動的ビューなどを作成する。
$ ORACLE_SID=LUPUS svrmgrl
Oracle Server Manager Release 3.1.7.0.0 - Production
Copyright (c) 1997, 1999, Oracle Corporation. All Rights Reserved.
Oracle8i Enterprise Edition Release 8.1.7.0.0 - 64bit Production
With the Partitioning option
JServer Release 8.1.7.0.0 - 64bit Production
SVRMGR> connect internal
Connected.
SVRMGR> @/oracle/u01/app/oracle/product/8.1.7/rdbms/admin/catalog.sql
Statement processed.
Statement processed.
- 途中省略 -
Statement processed.
Statement processed.
SVRMGR>
途中、ORA-01342等が幾度も出るが気にしないでよい。全く新規のデータベースなのだから。
システム表領域設定変更
SYSTEM表領域にSTORAGE句を適用する。
上記の続きより
SVRMGR> alter tablespace SYSTEM
2> default storage ( initial 64k next 64k minextents 1
3> maxextents unlimited pctincrease 0);
Statement processed.
SVRMGR> alter tablespace SYSTEM minimum extent 64k;
Statement processed.
ロールバックセグメントの作成
まず表領域を作成する。ここでは表領域をそれぞれ違うマウントポイントに3つ作成し、それぞれに1つ計3つの、ロールバックセグメントを作成してみる。初期サイズは25Mに設定。(3つでは通常は少ないかもしれない。)
上記の続きより
SVRMGR> create tablespace RBS01
2> datafile '/oracle/u02/oradata/LUPUS/rbs01.dbf'
3> size 26279936 reuse
4> autoextend on
5> maxsize 100m
6> extent management local uniform size 1m;
Statement processed.
SVRMGR> create tablespace RBS02
2> datafile '/oracle/u03/oradata/LUPUS/rbs02.dbf'
3> size 26279936 reuse
4> autoextend on
5> maxsize 100m
6> extent management local uniform size 1m;
Statement processed.
SVRMGR> create tablespace RBS03
2> datafile '/oracle/u04/oradata/LUPUS/rbs03.dbf'
3> size 26279936 reuse
4> autoextend on
5> maxsize 100m
6> extent management local uniform size 1m;
Statement processed.
SVRMGR>
表領域はパフォーマンスを考えUNIFORM拡張LMT (Locally Management Tablespaces) にする(最後の行)。LMTの場合、ファイルサイズに64Kのオーバーヘッドを加えておくと余分にExtendしない。25Mアロケートしたいので、サイズは、1024 * 1024 * 25 + 1024 * 64 = 26279936 とする。
ロールバックセグメントを作成し、ONLINEとする。ORA-01552が出る可能性があるので、先にSYSTEM表領域に一時RBSを作成し、ONLINEとしておく。一時RBSは後ほどDROPする。
上記の続きより
SVRMGR> create public rollback segment rbstemp
2> tablespace system;
Statement processed.
SVRMGR> alter rollback segment rbstemp online;
Statement processed.
SVRMGR> create public rollback segment rbs1
2> storage ( initial 1024k next 1024k minextents 25 )
3> tablespace rbs01;
Statement processed.
SVRMGR> create public rollback segment rbs2
2> storage ( initial 1024k next 1024k minextents 25 )
3> tablespace rbs02;
Statement processed.
SVRMGR> create public rollback segment rbs3
2> storage ( initial 1024k next 1024k minextents 25 )
3> tablespace rbs03;
Statement processed.
SVRMGR> alter rollback segment rbs1 online;
Statement processed.
SVRMGR> alter rollback segment rbs2 online;
Statement processed.
SVRMGR> alter rollback segment rbs3 online;
Statement processed.
SVRMGR> alter rollback segment rbstemp offline;
Statement processed.
SVRMGR> drop public rollback segment rbstemp;
Statement processed.
一時表領域の作成
TEMP表領域を作成する。エクステント管理についてはRBSと同様、UNIFORM拡張LMTとする。また、初期エクステントサイズはSORT_AREA_SIZEと同じ値にする。なぜなら、SORTの際ページングが発生すると一時表領域を使用するからである。同じ値であればページングが効率よく行われる。
上記の続きより
SVRMGR> create temporary tablespace TEMP
2> tempfile '/oracle/u02/oradata/LUPUS/temp01.dbf'
3> size 64m reuse
4> autoextend on next 64m maxsize unlimited
5> extent management local uniform size 1m;
Statement processed.
SYSとSYSTEMユーザーの一時表領域を、作成したTEMPに設定する。
上記の続きより
SVRMGR> alter user SYS temporary tablespace TEMP;
Statement processed.
SVRMGR> alter user SYSTEM temporary tablespace TEMP;
Statement processed.
各種スクリプト実行
STANDARDプロシージャ等の作成を行うスクリプトを実行する。実行するスクリプトは、$ORACLE_HOME/rdbms/admin内のcatproc.sql、caths.sql、otrcsvr.sqlと、$ORACLE_HOME/sqlplus/admin内のpupbld.sql。pupbld.sqlはSYSTEMユーザーで実行する。
上記の続きより
SVRMGR> @/oracle/u01/app/oracle/product/8.1.7/rdbms/admin/catproc.sql
Statement processed.
...
SVRMGR> @/oracle/u01/app/oracle/product/8.1.7/rdbms/admin/caths.sql
Statement processed.
...
SVRMGR> @/oracle/u01/app/oracle/product/8.1.7/rdbms/admin/otrcsvr.sql
Statement processed.
...
SVRMGR> connect system/manager
SVRMGR> @/oracle/u01/app/oracle/product/8.1.7/sqlplus/admin/pupbld.sql
Statement processed.
...
TNS名とリスナーの設定
外部から接続できるようにTNS名とリスナーの設定を行う。まずは、$ORACLE_HOME/network/admin/tnsnames.oraから。下記を追加する。
LUPUS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = darkstar)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = LUPUS.ROBIOS.ORG)
)
)
tnsping LUPUSで確認を行う。
$ tnsping LUPUS
TNS Ping Utility for Solaris: Version 8.1.7.0.0 - Production on 14-SEP-2004 19:2
6:33
(c) Copyright 1997 Oracle Corporation. All rights reserved.
Attempting to contact (ADDRESS=(PROTOCOL=TCP)(HOST=darkstar)(PORT=1521))
OK (10 msec)
次はリスナーの設定。$ORACLE_HOME/network/admin/listener.oraに下記を追加する。
LISTENERLUPUS =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = darkstar)(PORT = 1521))
)
)
)
リスナーを起動してみる。
$ lsnrctl start LISTENERLUPUS
LSNRCTL for Solaris: Version 8.1.7.0.0 - Production on 14-SEP-2004 20:21:11
(c) Copyright 1998 Oracle Corporation. All rights reserved.
Starting /oracle/u01/app/oracle/product/8.1.7/bin/tnslsnr: please wait...
TNSLSNR for Solaris: Version 8.1.7.0.0 - Production
System parameter file is /oracle/u01/app/oracle/product/8.1.7/network/admin/list
ener.ora
Log messages written to /oracle/u01/app/oracle/product/8.1.7/network/log/listene
rlupus.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=darkstar)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=darkstar)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENERLUPUS
Version TNSLSNR for Solaris: Version 8.1.7.0.0 - Production
Start Date 14-SEP-2004 20:21:12
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security OFF
SNMP OFF
Listener Parameter File /oracle/u01/app/oracle/product/8.1.7/network/admin/lis
tener.ora
Listener Log File /oracle/u01/app/oracle/product/8.1.7/network/log/liste
nerlupus.log
The listener supports no services
The command completed successfully
うまく起動した。
最後の仕上げ
/var/opt/oracle/oratabに今回構築したデータベースをリストする。こうすることで、oraenvコマンドでこのデータベースが選択できるようになる。また、自動起動、自動シャットダウンの設定も行える。とりあえず自動起動はなしで設定してみる。oratabファイルに下記を追加する。
LUPUS:/oracle/u01/app/oracle/product/8.1.7:N
以上で完成である。一般ユーザー用の表領域などは別途要作成。