|
Oracle8iで手動データベース作成 〜for Linux〜
Oracle8iで手動データベース作成
〜for Linux〜
0.更新履歴
1.はじめに
このドキュメントでは,RedHat Linux上にインストールした,Oracle8.1.5 for Linuxを用いて,手動でデータベースを作成する手順を示す.
この作業の前提として,Oracle8iデータベースをデフォルトのままインストールしてあり,デフォルトのインスタンスが稼動する状態とする.
環境は次のとおりである.
[oracle8i@db-svr /BillG]$ cat /etc/redhat-release
Red Hat Linux release 6.2 (Zoot)
[oracle8i@db-svr /BillG]$ uname -a
Linux db-svr 2.2.14-5.0smp #1 SMP Tue Mar 7 21:01:40 EST 2000 i686 unknown
[oracle8i@db-svr /BillG]$ df -k
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/sdb1 8815372 8193632 173932 98% /
/dev/sda1 521748 5896 489348 1% /boot
/dev/sda6 1011928 10540 949984 1% /var
/dev/sda7 6269716 20 5951212 0% /BillG
[oracle8i@db-svr /BillG]$
|
今回は,この/dev/sda7のパーティション上にデータベースを作成する.
また,このドキュメントでは,手順ログではなく,考慮点なども書き加えていく.
2.作業手順について
手動でデータベースを作成する場合,次のような手順が必要となる.
- 環境設定.
- 初期化パラメータファイルを作成.
- SYSDBAで,インスタンスに接続.
- NO MOUNTモードでインスタンスを起動.
- データベースを作成.
- ビュー・シノニム作成に必要なスクリプトの実行.
- データベースバックアップを作成.
3.準備
3.1.環境変数の設定
このドキュメントでは,インスタンス識別子を"BillG"として進める.
[oracle8i@db-svr /BillG]$ env | grep ORACLE_SID
[oracle8i@db-svr /BillG]$ ORACLE_SID=BillG
[oracle8i@db-svr /BillG]$ export ORACLE_SID
[oracle8i@db-svr /BillG]$ env | grep ORACLE_SID
ORACLE_SID=BillG
[oracle8i@db-svr /BillG]$
|
3.2.ディレクトリの作成
- 必要なディレクトリを作成する.
- 別になくても良いが,整理するために次のように作成した.
[oracle8i@db-svr /BillG]$ mkdir dbf
[oracle8i@db-svr /BillG]$ mkdir udump
[oracle8i@db-svr /BillG]$ mkdir bdump
[oracle8i@db-svr /BillG]$ mkdir pfile
[oracle8i@db-svr /BillG]$ mkdir control
[oracle8i@db-svr /BillG]$ mkdir redo
[oracle8i@db-svr /BillG]$ ls -la
total 52
drwxr-xr-x 9 oracle8i root 4096 Jun 7 15:26 .
drwxr-xr-x 21 root root 4096 Jun 7 15:02 ..
drwxr-xr-x 2 oracle8i oinstall 4096 Jun 7 15:25 bdump
drwxr-xr-x 2 oracle8i oinstall 4096 Jun 7 15:26 control
drwxr-xr-x 2 oracle8i oinstall 4096 Jun 7 15:25 dbf
drwxr-xr-x 2 oracle8i root 16384 Jun 7 14:57 lost+found
drwxr-xr-x 2 oracle8i oinstall 4096 Jun 7 15:25 pfile
drwxr-xr-x 2 oracle8i oinstall 4096 Jun 7 15:26 redo
drwxr-xr-x 2 oracle8i oinstall 4096 Jun 7 15:25 udump
[oracle8i@db-svr /BillG]$
|
4.初期化パラメータファイルの作成
- 初期化パラメータファイル(init.ora)は,今回はOracleをインストールした時点で用意されているサンプルをカスタマイズして使用する.
今回のこの手順では,すべて/BillGディレクトリ以下にファイルを保存する方式とするが,本来はI/O分散化を図る必要がある.
- init.oraの名前は,initBillG.oraとした.
- initBillG.oraの中身を,次のように編集した.
[oracle8i@db-svr pfile]$ cat /BillG/pfile/initBillG.ora
db_name = "BillG"
instance_name = BillG
service_names = BillG
db_files = 1024
control_files = (
'/BillG/control/control01.ctl',
'/BillG/control/control02.ctl',
'/BillG/control/control03.ctl')
open_cursors = 100
max_enabled_roles = 30
db_file_multiblock_read_count = 8
db_block_buffers = 2048
shared_pool_size = 52428800
large_pool_size = 614400
java_pool_size = 20971520
log_checkpoint_interval = 10000
log_checkpoint_timeout = 1800
processes = 115
parallel_max_servers = 5
log_buffer = 32768
max_dump_file_size = 10240 # limit trace file size to 5M each
#rollback_segments = (
# RBS0, RBS1, RBS2, RBS3, RBS4, RBS5, RBS6, RBS7, RBS8, RBS9,
# RBS10, RBS11, RBS12, RBS13, RBS14, RBS15, RBS16, RBS17, RBS18, RBS19,
# RBS20, RBS21, RBS22, RBS23, RBS24, RBS25, RBS26, RBS27, RBS28
# )
global_names = true
oracle_trace_collection_name = ""
background_dump_dest = /BillG/bdump
user_dump_dest = /BillG/udump
db_block_size = 8192
#remote_login_passwordfile = exclusive
os_authent_prefix = ""
#distributed_transactions = 10
compatible = 8.1.0
sort_area_size = 65536
sort_area_retained_size = 65536
[oracle8i@db-svr pfile]$
|
※この設定項目は,オリジナルのINITSMPL.ORAでコメントアウトしていなかった項目を抜き出したもので必要そうなところを取り出しただけである.
4.インスタンスの起動
- [コマンドプロンプト]を起動する.
- サーバマネージャ(svrmgrl)を起動し,sysユーザでSYSDBAとして接続する.
oracle8i@db-svr /BillG]$ svrmgrl
Oracle Server Manager Release 3.1.6.0.0 - Production
Copyright (c) 1997, 1999, Oracle Corporation. All Rights Reserved.
Oracle8i Release 8.1.6.1.0 - Production
JServer Release 8.1.6.0.0 - Production
SVRMGR> connect sys/oracle as sysdba
Connected.
SVRMGR> startup nomount pfile='/BillG/pfile/initBillG.ora'
ORACLE instance started.
Total System Global Area 93847536 bytes
Fixed Size 69616 bytes
Variable Size 76922880 bytes
Database Buffers 16777216 bytes
Redo Buffers 77824 bytes
SVRMGR>
|
- この状態で,インスタンスが起動した状態で,データベースファイルがマウントされていない.
- 今回は,次のようなSQL文でシステムデータベースを作成する.
Create Database文
CREATE DATABASE BillG
LOGFILE
GROUP 1 (
'/BillG/redo/redo01.log',
'/BillG/redo/redo02.log',
'/BillG/redo/redo03.log'
) SIZE 50M ,
GROUP 2 (
'/BillG/redo/redo11.log',
'/BillG/redo/redo12.log',
'/BillG/redo/redo13.log'
) SIZE 50M ,
GROUP 3 (
'/BillG/redo/redo21.log',
'/BillG/redo/redo22.log',
'/BillG/redo/redo23.log'
) SIZE 50M
MAXLOGFILES 3
MAXLOGMEMBERS 3
MAXLOGHISTORY 1
DATAFILE
'/BillG/dbf/system01.dbf'
SIZE 150M
AUTOEXTEND ON
NEXT 10M
MAXSIZE 200M
MAXDATAFILES 1000
MAXINSTANCES 1
CHARACTER SET
JA16SJIS
NATIONAL CHARACTER SET
JA16SJIS
|
- redoログファイルは,3つのグループを作成して,それぞれ3つのファイルを書き出している.
- これを上限とするために,MAXLOGFILES,MAXLOGMEMBERSを3に設定している.
- これだと,REDOを3箇所に書き出すので,Writeパフォーマンスは下がるが,信頼性はあがる.
- できればグループ毎に別のドライブの方が好ましい.
5.一時ロールバックセグメントの作成
- このあとの作業のテーブルスペース作成作業用の一時ロールバックセグメントを作成する.
- この領域,rb_tempは後で消す.
- 作成した一時ロールバックセグメントをオンラインにする.
SQL> CREATE ROLLBACK SEGMENT rb_temp
2 STORAGE(INITIAL 10M NEXT 5M);
Rollback segment created.
SQL> ALTER ROLLBACK SEGMENT rb_temp ONLINE;
Rollback segment altered.
SQL>
|
このロールバックセグメントは,システムテーブルスペース(system01.dbf)内に割り当てられている.
6.ロールバックセグメントの設定
- ロールバックセグメントを格納するためのテーブルスペースを作成する.
- この手順書では,ロールバックセグメントが格納されるテーブルスペース名を"rbs"としているが,なんでもよい.
- 次のようにスクリプトを実行する.
CREATE TABLESPACE rbs
DATAFILE
'/BillG/dbf/rbs01.dbf'
SIZE 300M
AUTOEXTEND ON
NEXT 10M MAXSIZE 200M
|
- 作成したテーブルスペースrbsに対して,ロールバックセグメントを割り当てる.
- optimalをつけることで,未使用部分は縮小されるが,パフォーマンスが悪くなることもある.
CREATE PUBLIC ROLLBACK SEGMENT RBS01 TABLESPACE RBS STORAGE ( OPTIMAL 8192K );
CREATE PUBLIC ROLLBACK SEGMENT RBS02 TABLESPACE RBS STORAGE ( OPTIMAL 8192K );
CREATE PUBLIC ROLLBACK SEGMENT RBS03 TABLESPACE RBS STORAGE ( OPTIMAL 8192K );
CREATE PUBLIC ROLLBACK SEGMENT RBS04 TABLESPACE RBS STORAGE ( OPTIMAL 8192K );
CREATE PUBLIC ROLLBACK SEGMENT RBS05 TABLESPACE RBS STORAGE ( OPTIMAL 8192K );
CREATE PUBLIC ROLLBACK SEGMENT RBS06 TABLESPACE RBS STORAGE ( OPTIMAL 8192K );
CREATE PUBLIC ROLLBACK SEGMENT RBS07 TABLESPACE RBS STORAGE ( OPTIMAL 8192K );
CREATE PUBLIC ROLLBACK SEGMENT RBS08 TABLESPACE RBS STORAGE ( OPTIMAL 8192K );
CREATE PUBLIC ROLLBACK SEGMENT RBS09 TABLESPACE RBS STORAGE ( OPTIMAL 8192K );
CREATE PUBLIC ROLLBACK SEGMENT RBS10 TABLESPACE RBS STORAGE ( OPTIMAL 8192K );
|
- 作成したロールバックセグメントを,オンラインにする.
ALTER ROLLBACK SEGMENT "RBS02" ONLINE;
ALTER ROLLBACK SEGMENT "RBS03" ONLINE;
ALTER ROLLBACK SEGMENT "RBS04" ONLINE;
ALTER ROLLBACK SEGMENT "RBS05" ONLINE;
ALTER ROLLBACK SEGMENT "RBS06" ONLINE;
ALTER ROLLBACK SEGMENT "RBS07" ONLINE;
ALTER ROLLBACK SEGMENT "RBS08" ONLINE;
ALTER ROLLBACK SEGMENT "RBS09" ONLINE;
ALTER ROLLBACK SEGMENT "RBS10" ONLINE;
|
7.テンポラリテーブルスペースの設定
- ソート等で使うことになる,作業領域としてのテーブルスペースを作成する.
CREATE TABLESPACE BillG_TEMP
DATAFILE
'/BillG/dbf/BillG_temp01.dbf'
SIZE 100M
AUTOEXTEND ON NEXT 5M
MINIMUM EXTENT 5M
DEFAULT
STORAGE (INITIAL 5M NEXT 5M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0)
TEMPORARY;
|
- ここでは,テンポラリテーブルスペース名を"BillG_TEMP"としているが何でもよい.
- 次の様に,systemユーザが作業領域として使う領域を指定する.
ALTER USER SYSTEM TEMPORARY TABLESPACE BillG_temp;
|
8.ユーザ用のテーブルスペースの作成
- ユーザデータが格納されるテーブルスペースを作成する.
CREATE TABLESPACE BillG_DATA
DATAFILE
'/BillG/dbf/BillG_data01.dbf'
SIZE 1000M
AUTOEXTEND ON NEXT 5M
MINIMUM EXTENT 5M
DEFAULT
STORAGE (INITIAL 5M NEXT 5M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0);
|
- ここでは,ユーザ用テーブルスペース名を"BillG_DATA"としているが何でもよい.
- インデックスを格納するためのテーブルスペースを作成する.
- インデックスようのテーブルスペースといっても,作業用テーブルスペースみたいに何かオプションを設定するわけではなく,作成するインデックスの格納先をこのテーブルスペースにするだけである.
CREATE TABLESPACE BillG_INDEX
DATAFILE
'/BillG/dbf/BillG_index01.dbf'
SIZE 1000M
AUTOEXTEND ON
NEXT 5M
MINIMUM EXTENT 128K
DEFAULT
STORAGE (INITIAL 1M NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0);
|
9.一時ロールバックセグメントの削除
- システムテーブルスペースに作成した,一時作業用ロールバックセグメントを削除する.
- 現在オンライン(利用)中なので,オフラインにしたあとで削除する.
SQL> ALTER ROLLBACK SEGMENT rb_temp OFFLINE;
Rollback segment altered.
SQL> DROP ROLLBACK SEGMENT rb_temp;
Rollback segment dropped.
SQL>
|
10.データディクショナリの作成
- システムデータベース内に,ディクショナリビューを作成する.
- 次のスクリプトを実行する.
@$ORACLE_HOME/rdbms/admin/catalog.sql;
|
- 実行ログは長いので割愛.
- ログをみると,エラーになってたりするが,これは初期処理として残っていたらまずいテーブルなどをdropしているためで,正常動作である.
- もう1つ,スクリプトを実行する.
@$ORACLE_HOME/rdbms/admin/catexp7.sql
|
@$ORACLE_HOME/rdbms/admin/catproc.sql
|
@$ORACLE_HOME/rdbms/admin/caths.sql
|
- 次は,systemユーザで接続しなおして実行する.
- このスクリプトは,SQL*Plusを利用するためのものである.
SQL> connect system/manager
Connected.
SQL> @/oracle/ora816/sqlplus/admin/pupbld.sql
|
11.ユーザを作成する
- 一般ユーザを作成する.
- ユーザ"BillG"を作成し,connect,resourceロール(権限)を与える.
create user BillG identified by BillG
default tablespace BillG_data
temporary tablespace BillG_temp
;
grant connect,resource to BillG
;
|
この設定により,BillGユーザがcreate table等を行うとそのオブジェクト(テーブル)はBillG_dataテーブルスペースに格納され,作業領域はBillG_tempテーブルスペースを利用するようになる.
12.ネットワークの設定
[oracle8i@db-svr1 admin]$ cat $ORACLE_HOME/network/admin/listener.ora
# LISTENER.ORA Configuration File:/oracle/ora816/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.200.187)(PORT = 1521))
)
)
(DESCRIPTION =
(PROTOCOL_STACK =
(PRESENTATION = GIOP)
(SESSION = RAW)
)
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.200.187)(PORT = 2481))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /oracle/ora816)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /oracle/ora816)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = BillG)
(ORACLE_HOME = /oracle/ora816)
(SID_NAME = BillG)
)
)
[oracle8i@db-svr1 admin]$
|
[oracle8i@db-svr1 admin]$ lsnrctl
LSNRCTL for Linux: Version 8.1.6.0.0 - Production on 05-JUN-2001 23:50:25
(c) Copyright 1998, 1999, Oracle Corporation. All rights reserved.
Welcome to LSNRCTL, type "help" for information.
LSNRCTL> start
Starting /oracle/ora816/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 8.1.6.0.0 - Production
System parameter file is /oracle/ora816/network/admin/listener.ora
Log messages written to /oracle/ora816/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.20.200.187)(POR
T=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.20.200.187)(POR
T=2481))(PROTOCOL_STACK=(PRESENTATION=GIOP)(SESSION=RAW)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 8.1.6.0.0 - Production
Start Date 06-JUN-2001 03:10:19
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security OFF
SNMP OFF
Listener Parameter File /oracle/ora816/network/admin/listener.ora
Listener Log File /oracle/ora816/network/log/listener.log
Services Summary...
PLSExtProc has 1 service handler(s)
BillG has 1 service handler(s)
orcl has 1 service handler(s)
The command completed successfully
LSNRCTL>
|
- クライアントとサーバのtnsnames.oraの設定を行う.
[oracle8i@db-svr1 ]$ cat $ORACLE_HOME/network/admin/tnsnames.ora
# TNSNAMES.ORA Configuration File:/oracle/ora816/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = i0-db1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
BillG =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.200.187)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = BillG)
(SID = BillG)
)
)
[oracle8i@db-svr1 /ezNedanData]$
|
[oracle8i@db-svr /BillG]$ sqlplus BillG/BillG@BillG
SQL*Plus: Release 8.1.6.0.0 - Production on フレ Jun 7 19:59:31 2001
(c) Copyright 1999 Oracle Corporation. All rights reserved.
Connected to:
Oracle8i Release 8.1.6.1.0 - Production
JServer Release 8.1.6.0.0 - Production
SQL>
|
ここまでで,とりあえずDBを設定した後に使えるようになった.
13.ロールバックセグメントをオンラインにしておく
- 初期パラメータファイルを開く.
- ロールバックセグメントの指定を追加する.
db_name = "BillG"
instance_name = BillG
service_names = BillG
db_files = 1024
control_files = (
'/BillG/control/control01.ctl',
'/BillG/control/control02.ctl',
'/BillG/control/control03.ctl')
open_cursors = 100
〜略〜
rollback_segments = (
RBS01, RBS02, RBS03, RBS04, RBS05,
RBS06, RBS07, RBS08, RBS09, RBS10
)
|
参考文献
|
|