データベースの構成要素についてはひととおり理解できたと思う。今回は、いよいよデータベースの作成に取りかかろう。実務に堪えるデータベースとするためには、さまざまな要素に目配りする必要がある。
前回まで、データベースシステムを支える構成要素について紹介してきました。今回はデータベースの作成についてお話しします。実際に新しいデータベースインスタンスを作成しながら、それぞれの役割について確認していきたいと思います。
インストール時に生成されるデフォルトデータベースとは違う、自分で設計したデータベースが作成できるようになれば、あなたはもう立派な「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
$ 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
■パラメータファイルの作成
次にパラメータファイルを作成します(パラメータファイルについては第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_nameとcontrol_filesです。
db_name=NRT control_files = (/control1/ora_control1, /control2/ora_control2, /db/NRT/ora_control3)
db_nameは検討事項で決定したデータベース名(例では「NRT」)で、環境変数ORACLE_SIDと同一でなければなりません。
control_filesは、フルパスで複数記述します。ディレクトリは実際に存在するものでなくてはなりません。また、コントロールファイルはできるだけ違うディレクトリにしましょう。
そのほかのパラメータも必要に応じて変更します。慣れないうちは、デフォルト値でも特に問題はないでしょう。
データベースの作成
パラメータファイルを編集したら、いよいよデータベースを作成します。データベースの作成は次の2ステップで行います。
- startup nomountにより、初期インスタンスを作成する
- 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;
ここで特に気を付けないといけないのは、システムテーブルスペースと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
システムユーザーsys、systemのパスワードと設定変更(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.
関連記事
- 連載:快速MySQLでデータベースアプリ!(全11回)
軽快な動作で知られるRDBMS、MySQLでDBアプリの構築を行う。MySQLのインストールに始まり、PerlやRubyなどのスクリプトでデータベースを操作する方法までを完全解説 - 連載:今から始める MySQL入門(連載中)
定番のLAMP(Linux+Apache+MySQL+PHP)構成でWebアプリケーション開発に挑戦! サンプルアプリの構築を進めながら、基礎知識や操作方法について詳しく解説する - 連載:Oracleマイスター養成講座(全6回)
本連載では、Oracleの管理・チューニング方法を紹介していく。これからOracleを始める人、そしてOracleをより深く理解したい人のための、一歩踏み込んだ実用講座 - 連載:DB2マイスター養成講座(全7回)
本連載では、DB2 UDBの実践的な運用・管理方法を紹介していく。DB2を利用するうえで必要な知識を、実運用を前提にDB2のプロが解説 - 特集:エンタープライズ市場に向かうMySQL 5.0[前編]
1月に公開された5.0アルファ版は大幅に拡張されており、エンタープライズ市場への進出を予感させる - 特集:Linuxで動くリレーショナルデータベース・カタログ
データベースサーバのOSとしてLinuxを採用するケースが増えている。Linuxで動作する7つの主なリレーショナルデータベースを紹介する。製品導入の際の参考にしてほしい