UJP - 技術情報

Life is fun and easy!

不正IP報告数

Okan Sensor
 
メイン
ログイン
ブログ カテゴリ一覧

     

Oracle8iで手動データベース作成 〜for Linux〜

Oracle8iで手動データベース作成

〜for Linux〜


0.更新履歴

  • 2001.06.07 新規作成

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
  • もう1つ!
@$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.ネットワークの設定

  • TNS Listenerの設定を行う.
[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]$
  • SQL*Plusで接続してみる.
[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
)

参考文献



広告スペース
Google