データベースの構成要素についてはひととおり理解できたと思う。今回は、いよいよデータベースの作成に取りかかろう。実務に堪えるデータベースとするためには、さまざまな要素に目配りする必要がある。
前回まで、データベースシステムを支える構成要素について紹介してきました。今回はデータベースの作成についてお話しします。実際に新しいデータベースインスタンスを作成しながら、それぞれの役割について確認していきたいと思います。
インストール時に生成されるデフォルトデータベースとは違う、自分で設計したデータベースが作成できるようになれば、あなたはもう立派な「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ステップで行います。
実際の作成に際しては、ファイルに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.