連載
» 2001年04月28日 00時00分 公開

Oracleマイスター養成講座(5):失敗しないデータベース作成方法

[さかいひろあき,@IT]

 データベースの構成要素についてはひととおり理解できたと思う。今回は、いよいよデータベースの作成に取りかかろう。実務に堪えるデータベースとするためには、さまざまな要素に目配りする必要がある。

 前回まで、データベースシステムを支える構成要素について紹介してきました。今回はデータベースの作成についてお話しします。実際に新しいデータベースインスタンスを作成しながら、それぞれの役割について確認していきたいと思います。

 インストール時に生成されるデフォルトデータベースとは違う、自分で設計したデータベースが作成できるようになれば、あなたはもう立派な「Oracleマイスター」です。

データベース作成前の検討と設定

■作成の検討事項

 自分で新たにデータベースを作るわけですから、名前や配置を決めなければいけません。まず以下の事項を決定しましょう。

  • データベースの名前(インスタンスの名前)
  • データベースを作成するディレクトリとサイズ

 ここでは、例としてデータベース名をNRT、作成するディレクトリを/db/NRTとします。データベースを作成するディレクトリ名などに制限はありませんが、あまりディレクトリ階層を深くしない方がよいでしょう。また、Oracleをインストールしたディレクトリ($ORACLE_HOME)とは別にしましょう。

■環境変数の設定

 まず、下準備として環境変数を設定します。

ORACLE_HOME Oracleをインストールしたディレクトリ
ORACLE_SID 検討事項で決めたデータベースの名前
PATH $ORACLE_HOME/binを追加
LD_LIBRARY_PATH $ORACLE_HOME/libを追加

 以下に例を挙げます。シェルによって若干異なりますが、基本は同じです。なお、以後の作業はOracleをインストールしたユーザーでログインして行う必要があります。ここでは、oracleというユーザーを使用します。

$ su - oracle
passwd: *******

 では、環境変数の設定です。

$ export ORACLE_HOME=/oracle/app/oracle/product/8.0.5
$ export ORACLE_SID=NRT
$ export PATH=$ORACLE_HOME/bin:$PATH
$ export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
リスト1 bashなどの場合
$ setenv ORACLE_HOME 
/oracle/app/oracle/product/8.0.5
$ setenv ORACLE_SID NRT
$ setenv PATH $ORACLE_HOME/bin:$PATH
$ setenv LD_LIBRARY_PATH $ORACLE_HOME/lib:$LD_LIBRARY_PATH
リスト2 cshなどの場合

■パラメータファイルの作成

 次にパラメータファイルを作成します(パラメータファイルについては第3回を参照)。これはOracleをインストールしたときに作成されたものをコピーして使用しましょう。通常はOracleをインストールしたディレクトリ($ORACLE_HOME)にあるdbsというディレクトリ内にinit.oraという名前で存在します。

 実際に使う際のファイル名はinit[データベース名].oraとし、通常は$ORACLE_HOME/dbsの下に置きます。

$ cp $ORACLE_HOME/dbs/init.ora 
$ORACLE_HOME/initNRT.ora

 コピーしてからパラメータファイルを編集します。パラメータファイルは最低でも2カ所編集しなければいけません。db_namecontrol_filesです。

db_name=NRT
control_files = (/control1/ora_control1, /control2/ora_control2, /db/NRT/ora_control3)

 db_nameは検討事項で決定したデータベース名(例では「NRT」)で、環境変数ORACLE_SIDと同一でなければなりません。

 control_filesは、フルパスで複数記述します。ディレクトリは実際に存在するものでなくてはなりません。また、コントロールファイルはできるだけ違うディレクトリにしましょう。

 そのほかのパラメータも必要に応じて変更します。慣れないうちは、デフォルト値でも特に問題はないでしょう。

データベースの作成

 パラメータファイルを編集したら、いよいよデータベースを作成します。データベースの作成は次の2ステップで行います。

  1. startup nomountにより、初期インスタンスを作成する
  2. create database文により、システムテーブルスペース、REDO LOGファイルを作成する。この際に、init*.oraに記述されたコントロールファイルも作成される

 実際の作成に際しては、ファイルにSQL文を記述しておき、これを実行する方がよいでしょう。ここでは、例として以下の内容のcreate_db.sqlというファイルを作成しました。

startup nomount
CREATE DATABASE "NRT"
   maxdatafiles 254
   maxinstances 8
   maxlogfiles 32
   character set JA16SJIS
   national character set JA16SJIS
DATAFILE '/db/NRT/system01.dbf' SIZE 100M
logfile '/redo/redo01.log' SIZE 50M,
    '/redo/redo02.log' SIZE 50M,
    '/redo/redo03.log' SIZE 50M;
リスト3 create_db.sql

 ここで特に気を付けないといけないのは、システムテーブルスペースとREDO LOGファイルのサイズです。大きければいいというわけではありませんが、小規模から中規模のデータベースを作成する場合でも、システムテーブルスペースは最低でも100Mbytes、REDO LOGファイルはそれぞれ最低50Mbytesは確保しましょう。もちろん、あとで追加、変更することもできます。これらは、小さすぎるとトラブルのもととなります。

 create_db.sqlの編集が終わったところで、svrmgrlを起動してconnect internalとしてから@create_db.sqlを実行します。

$ svrmgrl
Oracle Server Manager Release 3.0.5.0.0 - Production 
(c) Copyright 1997, Oracle Corporation.  All 
Rights Reserved. Oracle8 Release 8.0.5.0.0 - Production
PL/SQL Release 8.0.5.0.0 - Production SVRMGR> connect internal
Connected.
SVRMGR> @create_db
ORACLE instance started.
Total System Global Area                          4554000 
bytes
Fixed Size                                          48400 
bytes
Variable Size                                     4227072 
bytes
Database Buffers                                   204800 
bytes
Redo Buffers                                        73728 
bytes
Statement processed.

 Statement processed.と表示されれば成功です。環境変数によっては日本語で表示されることもあります。

 もしcreate database文が失敗し、エラーメッセージが表示されたら、エラーの個所を確認して上記のcreate_db.sqlファイルを修正・再実行しましょう。その場合は、ちょっと面倒ですが途中まで作成されてしまったコントロールファイルとREDO

LOGファイル、システムテーブルスペースのデータファイルを削除し、1度インスタンスをダウンする必要があります。以下に例を挙げます。成功するまでがんばってください。

$ svrmgrl
SVRMGR> connect internal
Connected.
SVRMGR> shutdown abort
SVRMGR> quit $ rm /db/NRT/system01.dbf
$ rm /redo/redo01.log /redo/redo02.log /redo/redo03.log
$ rm /control1/ora_control1 /control2/ora_control2 /db/NRT/ora_control3

データベース作成後の諸作業

 データベースの作成だけでは十分ではありません。実際に運用を開始するには、これから紹介する作業も行う必要があります。

■データディクショナリの作成

 データディクショナリとは、データベースシステムが用意しているVIEWなどのことです。特に難しいことは考えずに、データベース作成後のおまじないと思って実行すればよいでしょう。実行するファイルは、Oracleをインストールしたときに$ORACLE_HOME/rdbms/adminに作成されています。

$ cd $ORACLE_HOME/rdbms/admin
$ svrmgrl SVRMGR> connect internal
Connected.
SVRMGR> @catalog.sql

■テーブルスペースの作成

 前回も書きましたが、実運用に使用するデータベースは少なくとも4つのテーブルスペースを持つ必要があります。システム領域はすでに上のCREATE DATABASEによって作成されていますので、あとの3つをここで作成します。

  • ロールバックセグメント用テーブルスペース
  • テンポラリ作業用テーブルスペース
  • ユーザーテーブルスペース

 なお、CREATE TABLESPACEについては、第4回を参照してください。

■ロールバックセグメントの作成

 最後の難関がロールバックセグメントの作成です。ロールバックの大きさをどうするか、自動拡張にするのかどうか、長年データベースを扱ってきた人でも毎回迷うものです。近年はディスクもずいぶん安く手に入るようになってきましたので、なるべく大きく、かつ多くのロールバックを作っておく方が一般的には安心できます。あくまでも経験則ですが、50Mbytes程度のロールバックセグメントを10本作っておけば、小中規模のデータベースなら十分対応できると思います。

 ロールバックセグメントの作り方自体はそれほど難しくなく、以下のような内容のファイルを作成して、同じくsvrmgrlでconnect internalしてから実行します。

CREATE PUBLIC ROLLBACK 
SEGMENT RBS0 TABLESPACE RBS STORAGE ( OPTIMAL 50M );
CREATE PUBLIC ROLLBACK SEGMENT RBS1 TABLESPACE RBS STORAGE ( OPTIMAL 
50M );
CREATE PUBLIC ROLLBACK SEGMENT RBS2 TABLESPACE RBS STORAGE ( OPTIMAL 
50M );
ALTER ROLLBACK SEGMENT "RBS0" ONLINE;
ALTER ROLLBACK SEGMENT "RBS1" ONLINE;
ALTER ROLLBACK SEGMENT "RBS2" ONLINE;

 最後にオンラインにしておくのを忘れないでください。

最終ステップ

 もうデータベースとしては完成していますが、最後のツメをやっておきましょう。

 システムテーブルスペースの設定変更(svrmgrlで)。

ALTER TABLESPACE 
SYSTEM
DEFAULT STORAGE ( INITIAL 64K NEXT 640K MINEXTENTS 1 MAXEXTENTS UNLIMITED 
PCTINCREASE 0);

 次に、各種スクリプトを実行します(これもおまじないです)。

 catprocの実行(svrmgrlで)。

$ cd $ORACLE_HOME/dbms/admin
$ svrmgrl
SVRMGR> connect internal
SVRMGR> @catproc.sql

 pupbldの実行(sqlplusで)。

$ cd $ORACLE_HOME/sqlplus/admin
sqlplus system/*********
SQL> @pupbld.sql

 システムユーザーsyssystemのパスワードと設定変更(svrmgrlで)。

alter user sys temporary 
tablespace TEMP;
alter user system temporary tablespace TEMP;
alter user sys identified by ************;
alter user system identified by ************;

 sysとsystemは、OSでいうところのrootに当たる大事な管理ユーザーです。この2ユーザーのパスワードを変更しておくのもOracleマイスターの常道です。


Copyright © ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。